blob: cce34d528f6a46919904ae00622c226ce44a30bb [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 }
1692
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001695#ifdef WLAN_SOFTAP_VSTA_FEATURE
1696 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1700 != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1704 goto handle_failure;
1705 }
1706
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709#endif
1710
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001711 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1712 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715
1716 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1717 != eSIR_SUCCESS)
1718 {
1719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1720 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1721 goto handle_failure;
1722 }
1723
1724 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1725 + sizeof(tHalCfg) + tlvStruct->length) ;
1726
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301727/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1728 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1729 tlvStruct->length = sizeof(tANI_U32);
1730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1731 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1732 configDataValue ) != eSIR_SUCCESS)
1733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1735 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1736 goto handle_failure;
1737 }
1738
1739 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1740 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301741#ifdef FEATURE_WLAN_TDLS
1742 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1743 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1747 configDataValue ) != eSIR_SUCCESS)
1748 {
1749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1750 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1751 goto handle_failure;
1752 }
1753 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1754 + sizeof(tHalCfg) + tlvStruct->length) ;
1755
1756 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1757 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1770 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
1782 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1783 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1784 tlvStruct->length = sizeof(tANI_U32);
1785 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1786 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1787 configDataValue ) != eSIR_SUCCESS)
1788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1790 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1791 goto handle_failure;
1792 }
1793 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1794 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301795 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1796 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1800 configDataValue ) != eSIR_SUCCESS)
1801 {
1802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1803 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1804 goto handle_failure;
1805 }
1806 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1807 + sizeof(tHalCfg) + tlvStruct->length) ;
1808
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301809#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301810
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001811 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1812 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1813 tlvStruct->length = sizeof(tANI_U32);
1814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1815 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1816 configDataValue ) != eSIR_SUCCESS)
1817 {
1818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1819 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1820 goto handle_failure;
1821 }
1822
1823 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1824 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001825
1826 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1827 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1828 tlvStruct->length = sizeof(tANI_U32);
1829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1830 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1831 != eSIR_SUCCESS)
1832 {
1833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1834 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1835 goto handle_failure;
1836 }
1837 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1838 + sizeof(tHalCfg) + tlvStruct->length));
1839
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301840 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1841 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1842 tlvStruct->length = sizeof(tANI_U32);
1843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1844 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1845 configDataValue ) != eSIR_SUCCESS)
1846 {
1847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1848 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1849 goto handle_failure;
1850 }
1851
1852 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1853 + sizeof(tHalCfg) + tlvStruct->length) ;
1854
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301855 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1856 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1857 tlvStruct->length = sizeof(tANI_U32);
1858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1859 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1860 configDataValue ) != eSIR_SUCCESS)
1861 {
1862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1863 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1864 goto handle_failure;
1865 }
1866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1867 + sizeof(tHalCfg) + tlvStruct->length) ;
1868
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301869 /* QWLAN_HAL_CFG_ATH_DISABLE */
1870 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1871 tlvStruct->length = sizeof(tANI_U32);
1872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1873 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1874 configDataValue ) != eSIR_SUCCESS)
1875 {
1876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1877 "Failed to get value for WNI_CFG_ATH_DISABLE");
1878 goto handle_failure;
1879 }
1880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1881 + sizeof(tHalCfg) + tlvStruct->length) ;
1882
c_hpothu6d7dc922013-12-02 12:36:41 +05301883 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1884 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1885 tlvStruct->length = sizeof(tANI_U32);
1886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1887 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1888 configDataValue ) != eSIR_SUCCESS)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1892 goto handle_failure;
1893 }
1894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1895 + sizeof(tHalCfg) + tlvStruct->length) ;
1896
1897 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1898 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1899 tlvStruct->length = sizeof(tANI_U32);
1900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1901 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1902 configDataValue ) != eSIR_SUCCESS)
1903 {
1904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1905 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1906 goto handle_failure;
1907 }
1908 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1909 + sizeof(tHalCfg) + tlvStruct->length) ;
1910
1911 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1912 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1913 tlvStruct->length = sizeof(tANI_U32);
1914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1920 goto handle_failure;
1921 }
1922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
1925 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1926 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1930 configDataValue ) != eSIR_SUCCESS)
1931 {
1932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1933 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1934 goto handle_failure;
1935 }
1936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1937 + sizeof(tHalCfg) + tlvStruct->length) ;
1938
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301939 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1940 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1941 tlvStruct->length = sizeof(tANI_U32);
1942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1943 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1944 configDataValue ) != eSIR_SUCCESS)
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1947 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1948 goto handle_failure;
1949 }
1950 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1951 + sizeof(tHalCfg) + tlvStruct->length) ;
1952
1953 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1954 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1955 tlvStruct->length = sizeof(tANI_U32);
1956 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1957 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1958 configDataValue ) != eSIR_SUCCESS)
1959 {
1960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1961 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1962 goto handle_failure;
1963 }
1964 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1965 + sizeof(tHalCfg) + tlvStruct->length) ;
1966
1967 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1968 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1969 tlvStruct->length = sizeof(tANI_U32);
1970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1971 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1972 configDataValue ) != eSIR_SUCCESS)
1973 {
1974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1975 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1976 goto handle_failure;
1977 }
1978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1979 + sizeof(tHalCfg) + tlvStruct->length) ;
1980
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001981 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1982 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1983 tlvStruct->length = sizeof(tANI_U32);
1984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1985 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1986 configDataValue ) != eSIR_SUCCESS)
1987 {
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1989 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1990 goto handle_failure;
1991 }
1992 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1993 + sizeof(tHalCfg) + tlvStruct->length) ;
1994
c_hpothu5bd1ae42014-03-07 20:28:22 +05301995 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1996 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1997 tlvStruct->length = sizeof(tANI_U32);
1998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1999
2000 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2001 configDataValue ) != eSIR_SUCCESS)
2002 {
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2004 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2005 goto handle_failure;
2006 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2008 + sizeof(tHalCfg) + tlvStruct->length) ;
2009
2010 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2011 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2012 tlvStruct->length = sizeof(tANI_U32);
2013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2014
2015 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2016 configDataValue ) != eSIR_SUCCESS)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2019 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2020 goto handle_failure;
2021 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302022 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2023 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302024
c_hpothu2d0f1c42014-04-01 18:38:51 +05302025 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2026 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2027 tlvStruct->length = sizeof(tANI_U32);
2028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2029
2030 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2031 configDataValue ) != eSIR_SUCCESS)
2032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2034 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2035 goto handle_failure;
2036 }
2037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2038 + sizeof(tHalCfg) + tlvStruct->length) ;
2039
2040 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2041 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2042 tlvStruct->length = sizeof(tANI_U32);
2043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2044
2045 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2046 configDataValue ) != eSIR_SUCCESS)
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2050 goto handle_failure;
2051 }
2052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2053 + sizeof(tHalCfg) + tlvStruct->length) ;
2054
2055 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2056 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2057 tlvStruct->length = sizeof(tANI_U32);
2058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2059
2060 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2061 configDataValue ) != eSIR_SUCCESS)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2065 goto handle_failure;
2066 }
2067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2068 + sizeof(tHalCfg) + tlvStruct->length) ;
2069
2070 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2071 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2072 tlvStruct->length = sizeof(tANI_U32);
2073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2074
2075 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2076 configDataValue ) != eSIR_SUCCESS)
2077 {
2078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2079 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2080 goto handle_failure;
2081 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2083 + sizeof(tHalCfg) + tlvStruct->length) ;
2084
Mihir Shetec34258c2014-07-30 17:50:27 +05302085 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2086 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2087 tlvStruct->length = sizeof(tANI_U32);
2088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2089
2090 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2091 configDataValue ) != eSIR_SUCCESS)
2092 {
2093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2094 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2095 goto handle_failure;
2096 }
2097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2098 + sizeof(tHalCfg) + tlvStruct->length) ;
2099
2100 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2101 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2102 tlvStruct->length = sizeof(tANI_U32);
2103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2104
2105 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2106 configDataValue ) != eSIR_SUCCESS)
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2109 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2110 goto handle_failure;
2111 }
2112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2113 + sizeof(tHalCfg) + tlvStruct->length) ;
2114
2115 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2116 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2117 tlvStruct->length = sizeof(tANI_U32);
2118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2119
2120 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2121 configDataValue ) != eSIR_SUCCESS)
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2124 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2125 goto handle_failure;
2126 }
2127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2128 + sizeof(tHalCfg) + tlvStruct->length) ;
2129
2130 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2131 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2132 tlvStruct->length = sizeof(tANI_U32);
2133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2134
2135 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2136 configDataValue ) != eSIR_SUCCESS)
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2140 goto handle_failure;
2141 }
2142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2143 + sizeof(tHalCfg) + tlvStruct->length) ;
2144
2145 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2146 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2147 tlvStruct->length = sizeof(tANI_U32);
2148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2149
2150 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2151 configDataValue ) != eSIR_SUCCESS)
2152 {
2153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2154 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2155 goto handle_failure;
2156 }
2157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2158 + sizeof(tHalCfg) + tlvStruct->length) ;
2159
2160 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2161 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2162 tlvStruct->length = sizeof(tANI_U32);
2163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2164
2165 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2166 configDataValue ) != eSIR_SUCCESS)
2167 {
2168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2169 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2170 goto handle_failure;
2171 }
2172 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2173 + sizeof(tHalCfg) + tlvStruct->length) ;
2174
2175 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2176 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2177 tlvStruct->length = sizeof(tANI_U32);
2178 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2179
2180 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2181 configDataValue ) != eSIR_SUCCESS)
2182 {
2183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2184 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2185 goto handle_failure;
2186 }
2187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2188 + sizeof(tHalCfg) + tlvStruct->length) ;
2189
2190 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2191 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2192 tlvStruct->length = sizeof(tANI_U32);
2193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2194
2195 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2196 configDataValue ) != eSIR_SUCCESS)
2197 {
2198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2199 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2200 goto handle_failure;
2201 }
2202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2203 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302204
2205 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2206 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2207 tlvStruct->length = sizeof(tANI_U32);
2208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2209
2210 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2211 configDataValue ) != eSIR_SUCCESS)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2214 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2215 goto handle_failure;
2216 }
2217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2218 + sizeof(tHalCfg) + tlvStruct->length) ;
2219
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302220 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2221 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2222 tlvStruct->length = sizeof(tANI_U32);
2223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2224
2225 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2226 configDataValue ) != eSIR_SUCCESS)
2227 {
2228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2229 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2230 goto handle_failure;
2231 }
2232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2233 + sizeof(tHalCfg) + tlvStruct->length) ;
2234
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302235 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2236 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2237 tlvStruct->length = sizeof(tANI_U32);
2238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2239
2240 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2241 configDataValue ) != eSIR_SUCCESS)
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2244 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2245 goto handle_failure;
2246 }
2247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2248 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302249
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302250 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2251 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2252 tlvStruct->length = sizeof(tANI_U32);
2253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2254
2255 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2256 configDataValue ) != eSIR_SUCCESS)
2257 {
2258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2259 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2260 goto handle_failure;
2261 }
2262 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2263 + sizeof(tHalCfg) + tlvStruct->length) ;
2264
Sachin Ahuja41b61902015-06-18 18:32:15 +05302265
2266 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2268 tlvStruct->length = sizeof(tANI_U32);
2269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2270
2271 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2272 configDataValue ) != eSIR_SUCCESS)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2275 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2276 goto handle_failure;
2277 }
2278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2279 + sizeof(tHalCfg) + tlvStruct->length) ;
2280
2281 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2282 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2283 tlvStruct->length = sizeof(tANI_U32);
2284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2285
2286 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2287 configDataValue ) != eSIR_SUCCESS)
2288 {
2289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2290 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2291 goto handle_failure;
2292 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2294 + sizeof(tHalCfg) + tlvStruct->length) ;
2295
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302296 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2297 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2298 tlvStruct->length = sizeof(tANI_U32);
2299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2300
2301 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2302 configDataValue ) != eSIR_SUCCESS)
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2306 goto handle_failure;
2307 }
2308 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2309 + sizeof(tHalCfg) + tlvStruct->length) ;
2310
2311 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2312 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2313 tlvStruct->length = sizeof(tANI_U32);
2314 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2315
2316 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2317 configDataValue ) != eSIR_SUCCESS)
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2320 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2321 goto handle_failure;
2322 }
2323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2324 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302325
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302326 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2327 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2328 tlvStruct->length = sizeof(tANI_U32);
2329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2330
2331 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2332 configDataValue ) != eSIR_SUCCESS)
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2335 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2336 goto handle_failure;
2337 }
2338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2339 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302340 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2341 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2342 tlvStruct->length = sizeof(tANI_U32);
2343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2344 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2345 configDataValue ) != eSIR_SUCCESS)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2348 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2349 goto handle_failure;
2350 }
2351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2352 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302353
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302354 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2355 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2356 tlvStruct->length = sizeof(tANI_U32);
2357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2358
2359 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2360 configDataValue ) != eSIR_SUCCESS)
2361 {
2362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2363 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2364 goto handle_failure;
2365 }
2366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2367 + sizeof(tHalCfg) + tlvStruct->length) ;
2368
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302369 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2370 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2371 tlvStruct->length = sizeof(tANI_U32);
2372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2373
2374 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2375 configDataValue ) != eSIR_SUCCESS)
2376 {
2377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2378 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2379 goto handle_failure;
2380 }
2381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2382 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302383
2384 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2385 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2386 tlvStruct->length = sizeof(tANI_U32);
2387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2388
2389 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2390 configDataValue ) != eSIR_SUCCESS)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2393 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2394 goto handle_failure;
2395 }
2396 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2397 + sizeof(tHalCfg) + tlvStruct->length) ;
2398
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002400#ifdef WLAN_DEBUG
2401 {
2402 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2404 "****** Dumping CFG TLV ***** ");
2405 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2406 {
2407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2408 "%02x %02x %02x %02x %02x %02x %02x %02x",
2409 tlvStructStart[i],
2410 tlvStructStart[i+1],
2411 tlvStructStart[i+2],
2412 tlvStructStart[i+3],
2413 tlvStructStart[i+4],
2414 tlvStructStart[i+5],
2415 tlvStructStart[i+6],
2416 tlvStructStart[i+7]);
2417 }
2418 /* Dump the bytes in the last line*/
2419 for (; i < wdiStartParams->usConfigBufferLen; i++)
2420 {
2421 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2422 "%02x ",tlvStructStart[i]);
2423 }
2424 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2425 "**************************** ");
2426 }
2427#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429handle_failure:
2430 vos_mem_free(configParam);
2431 return VOS_STATUS_E_FAILURE;
2432}
Jeff Johnson295189b2012-06-20 16:38:30 -07002433/*
2434 * FUNCTION: WDA_wdiCompleteCB
2435 * call the voss call back function
2436 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002437void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002438{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2440 tWDA_CbContext *wdaContext;
2441
2442 if(NULL == pWdaParams)
2443 {
2444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002445 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002446 VOS_ASSERT(0) ;
2447 return ;
2448 }
2449
2450 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2451
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 if (NULL == wdaContext)
2453 {
2454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002455 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 return ;
2457 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002458
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002460 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002464 vos_mem_free(pWdaParams);
2465
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if(WDI_STATUS_SUCCESS != status)
2467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2469 "WDI stop callback returned failure" );
2470 VOS_ASSERT(0) ;
2471 }
2472 else
2473 {
2474 wdaContext->wdaState = WDA_STOP_STATE;
2475 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002476
Leo Chang9d76f622013-08-23 16:34:52 -07002477 /* FTM Driver stop procedure should be synced.
2478 * Stop and Close will happen on same context */
2479 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2480 {
2481 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2482 {
2483 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2484 "%s: FTM Stop Event Set Fail", __func__);
2485 VOS_ASSERT(0);
2486 }
2487 }
2488
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002490 vos_WDAComplete_cback(wdaContext->pVosContext);
2491
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return ;
2493}
Jeff Johnson295189b2012-06-20 16:38:30 -07002494/*
2495 * FUNCTION: WDA_stop
2496 * call WDI_stop
2497 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002498VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2499{
2500 WDI_Status wdiStatus;
2501 VOS_STATUS status = VOS_STATUS_SUCCESS;
2502 WDI_StopReqParamsType *wdiStopReq;
2503 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002504 tWDA_ReqParams *pWdaParams ;
2505
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 if (NULL == pWDA)
2507 {
2508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002509 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 VOS_ASSERT(0);
2511 return VOS_STATUS_E_FAILURE;
2512 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002513 if (pWDA->wdiFailed == true)
2514 {
2515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002516 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002517 return VOS_STATUS_E_ALREADY;
2518 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002519
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* FTM mode stay START_STATE */
2521 if( (WDA_READY_STATE != pWDA->wdaState) &&
2522 (WDA_INIT_STATE != pWDA->wdaState) &&
2523 (WDA_START_STATE != pWDA->wdaState) )
2524 {
2525 VOS_ASSERT(0);
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 wdiStopReq = (WDI_StopReqParamsType *)
2528 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2529 if(NULL == wdiStopReq)
2530 {
2531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 VOS_ASSERT(0);
2534 return VOS_STATUS_E_NOMEM;
2535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002536
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 wdiStopReq->wdiStopReason = reason;
2538 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302539
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2541 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 VOS_ASSERT(0);
2546 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002547 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002549
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002550 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2551 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 {
2553 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002554 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002556
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002557 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2558 pWdaParams->wdaMsgParam = NULL;
2559 pWdaParams->pWdaContext = pWDA;
2560
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 /* call WDI stop */
2562 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002563 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2564
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2568 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2570 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 status = VOS_STATUS_E_FAILURE;
2572 }
Leo Chang9d76f622013-08-23 16:34:52 -07002573
2574 /* FTM Driver stop procedure should be synced.
2575 * Stop and Close will happen on same context */
2576 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2577 {
2578 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2579 WDI_RESPONSE_TIMEOUT);
2580 if (status != VOS_STATUS_SUCCESS)
2581 {
2582 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2583 "%s: FTM Stop Timepoout", __func__);
2584 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002585 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302586 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 return status;
2589}
Jeff Johnson295189b2012-06-20 16:38:30 -07002590/*
2591 * FUNCTION: WDA_close
2592 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302593 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002594VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2595{
Jeff Johnson43971f52012-07-17 12:26:56 -07002596 VOS_STATUS status = VOS_STATUS_SUCCESS;
2597 WDI_Status wstatus;
2598 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 if (NULL == wdaContext)
2601 {
2602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002603 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 return VOS_STATUS_E_FAILURE;
2605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2607 (WDA_STOP_STATE != wdaContext->wdaState))
2608 {
2609 VOS_ASSERT(0);
2610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002612 wstatus = WDI_Close();
2613 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 {
2615 status = VOS_STATUS_E_FAILURE;
2616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002619 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2620 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 {
2622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002623 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 status = VOS_STATUS_E_FAILURE;
2625 }
2626
Jeff Johnson43971f52012-07-17 12:26:56 -07002627 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002628 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 {
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002631 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 status = VOS_STATUS_E_FAILURE;
2633 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002634 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002635 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002638 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 status = VOS_STATUS_E_FAILURE;
2640 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002641 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002642 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002645 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 status = VOS_STATUS_E_FAILURE;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002649 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002650 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 {
2652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2653 "error in WDA close " );
2654 status = VOS_STATUS_E_FAILURE;
2655 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +05302656 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 return status;
2658}
Jeff Johnson295189b2012-06-20 16:38:30 -07002659/*
2660 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2661 * returns 1 if the compiled version is greater than or equal to the input version
2662 */
2663
2664uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2665{
2666 VOS_STATUS status = VOS_STATUS_SUCCESS;
2667 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2668 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2671 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2672 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2673 (compiledVersion.revision >= revision)))
2674 return 1;
2675 else
2676 return 0;
2677}
Jeff Johnson295189b2012-06-20 16:38:30 -07002678/*
2679 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2680 * returns 1 if the compiled version is greater than or equal to the input version
2681 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002682uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2683{
2684 VOS_STATUS status = VOS_STATUS_SUCCESS;
2685 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2686 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2689 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2690 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2691 (reportedVersion.revision >= revision)))
2692 return 1;
2693 else
2694 return 0;
2695}
Jeff Johnson295189b2012-06-20 16:38:30 -07002696/*
2697 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2698 * Returns the version of the WCNSS WLAN API with which the HOST
2699 * device driver was compiled
2700 */
2701VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2702 tSirVersionType *pVersion)
2703{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302704 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 if ((NULL == pvosGCtx) || (NULL == pVersion))
2706 {
2707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 VOS_ASSERT(0);
2710 return VOS_STATUS_E_FAILURE;
2711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2713 if (NULL == pWDA )
2714 {
2715 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002716 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 VOS_ASSERT(0);
2718 return VOS_STATUS_E_FAILURE;
2719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 *pVersion = pWDA->wcnssWlanCompiledVersion;
2721 return VOS_STATUS_SUCCESS;
2722}
Jeff Johnson295189b2012-06-20 16:38:30 -07002723/*
2724 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2725 * Returns the version of the WCNSS WLAN API with which the WCNSS
2726 * device driver was compiled
2727 */
2728VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2729 tSirVersionType *pVersion)
2730{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302731 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 if ((NULL == pvosGCtx) || (NULL == pVersion))
2733 {
2734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002735 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 VOS_ASSERT(0);
2737 return VOS_STATUS_E_FAILURE;
2738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2740 if (NULL == pWDA )
2741 {
2742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002743 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 VOS_ASSERT(0);
2745 return VOS_STATUS_E_FAILURE;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 *pVersion = pWDA->wcnssWlanReportedVersion;
2748 return VOS_STATUS_SUCCESS;
2749}
Jeff Johnson295189b2012-06-20 16:38:30 -07002750/*
2751 * FUNCTION: WDA_GetWcnssSoftwareVersion
2752 * Returns the WCNSS Software version string
2753 */
2754VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2755 tANI_U8 *pVersion,
2756 tANI_U32 versionBufferSize)
2757{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302758 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if ((NULL == pvosGCtx) || (NULL == pVersion))
2762 {
2763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_FAILURE;
2767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2769 if (NULL == pWDA )
2770 {
2771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0);
2774 return VOS_STATUS_E_FAILURE;
2775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2777 return VOS_STATUS_SUCCESS;
2778}
Jeff Johnson295189b2012-06-20 16:38:30 -07002779/*
2780 * FUNCTION: WDA_GetWcnssHardwareVersion
2781 * Returns the WCNSS Hardware version string
2782 */
2783VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2784 tANI_U8 *pVersion,
2785 tANI_U32 versionBufferSize)
2786{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302787 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002789 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 if ((NULL == pvosGCtx) || (NULL == pVersion))
2791 {
2792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002793 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 VOS_ASSERT(0);
2795 return VOS_STATUS_E_FAILURE;
2796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2798 if (NULL == pWDA )
2799 {
2800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0);
2803 return VOS_STATUS_E_FAILURE;
2804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2806 return VOS_STATUS_SUCCESS;
2807}
Jeff Johnson295189b2012-06-20 16:38:30 -07002808/*
2809 * FUNCTION: WDA_WniCfgDnld
2810 * Trigger CFG Download
2811 */
2812VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2813{
2814 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302815 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002816
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 if (NULL == pMac )
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 return VOS_STATUS_E_FAILURE;
2823 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302824 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 return vosStatus;
2826}
Jeff Johnson295189b2012-06-20 16:38:30 -07002827/* -----------------------------------------------------------------
2828 * WDI interface
2829 * -----------------------------------------------------------------
2830 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002831/*
2832 * FUNCTION: WDA_suspendDataTxCallback
2833 * call back function called from TL after suspend Transmission
2834 */
2835VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2836 v_U8_t* ucSTAId,
2837 VOS_STATUS vosStatus)
2838{
2839 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002841 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 if (NULL == pWDA )
2843 {
2844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002845 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_ASSERT(0);
2847 return VOS_STATUS_E_FAILURE;
2848 }
2849 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2850 {
2851 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2852 }
2853 else
2854 {
2855 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* Trigger the event to bring the WDA TL suspend function to come
2858 * out of wait*/
2859 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2860 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2861 {
2862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002863 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 /* If TL suspended had timedout before this callback was called, resume back
2866 * TL.*/
2867 if (pWDA->txSuspendTimedOut)
2868 {
2869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002870 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 WDA_ResumeDataTx(pWDA);
2872 pWDA->txSuspendTimedOut = FALSE;
2873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 return VOS_STATUS_SUCCESS;
2875}
Jeff Johnson295189b2012-06-20 16:38:30 -07002876/*
2877 * FUNCTION: WDA_suspendDataTx
2878 * Update TL to suspend the data Transmission
2879 */
2880VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2881{
2882 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2883 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002884
2885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002886 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 if (pWDA->txSuspendTimedOut)
2889 {
2890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002891 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 return status;
2893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 /* Reset the event to be not signalled */
2895 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2896 if(!VOS_IS_STATUS_SUCCESS(status))
2897 {
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002899 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return VOS_STATUS_E_FAILURE;
2901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002903 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 WDA_SuspendDataTxCallback);
2905 if(status != VOS_STATUS_SUCCESS)
2906 {
2907 return status;
2908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 /* Wait for the event to be set by the TL, to get the response of
2910 * suspending the TX queues, this event should be set by the Callback
2911 * function called by TL*/
2912 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2913 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2914 if(!VOS_IS_STATUS_SUCCESS(status))
2915 {
2916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2917 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002918 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 /* Set this flag to true when TL suspend times out, so that when TL
2920 * suspend eventually happens and calls the callback, TL can be resumed
2921 * right away by looking at this flag when true.*/
2922 pWDA->txSuspendTimedOut = TRUE;
2923 }
2924 else
2925 {
2926 pWDA->txSuspendTimedOut = FALSE;
2927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2929 {
2930 status = VOS_STATUS_SUCCESS;
2931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return status;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_resumeDataTx
2936 * Update TL to resume the data Transmission
2937 */
2938VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2939{
2940 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941
2942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002943 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002944
2945 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 return status;
2947}
Jeff Johnson295189b2012-06-20 16:38:30 -07002948/*
2949 * FUNCTION: WDA_InitScanReqCallback
2950 * Trigger Init SCAN callback
2951 */
2952void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2953{
2954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2955 tWDA_CbContext *pWDA;
2956 tInitScanParams *pWDA_ScanParam ;
2957 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002959 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == pWdaParams)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 VOS_ASSERT(0) ;
2965 return ;
2966 }
2967 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2968 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 if(NULL == pWDA_ScanParam)
2970 {
2971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002972 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002973 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2975 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 return ;
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(WDI_STATUS_SUCCESS != wdiStatus)
2979 {
2980 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if(VOS_STATUS_SUCCESS != status)
2982 {
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 }
2986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 /* free WDI command buffer */
2988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302990
2991
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002993 /* without converting the Status to Failure or Success Just
2994 pass the same status to lim */
2995 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 /* send SCAN RSP message back to PE */
2997 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 return ;
2999}
3000
3001/*
3002 * FUNCTION: WDA_ProcessInitScanReq
3003 * Trigger Init SCAN in DAL
3004 */
3005VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3006 tInitScanParams *initScanParams)
3007{
3008 WDI_Status status = WDI_STATUS_SUCCESS ;
3009 WDI_InitScanReqParamsType *wdiInitScanParam =
3010 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3011 sizeof(WDI_InitScanReqParamsType)) ;
3012 tWDA_ReqParams *pWdaParams;
3013 tANI_U8 i = 0;
3014
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003016 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 if(NULL == wdiInitScanParam)
3018 {
3019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 VOS_ASSERT(0);
3022 return VOS_STATUS_E_NOMEM;
3023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3025 if(NULL == pWdaParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0);
3030 vos_mem_free(wdiInitScanParam);
3031 return VOS_STATUS_E_NOMEM;
3032 }
3033
3034 /* Copy init Scan params to WDI structure */
3035 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3036 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3037 sizeof(tSirMacAddr)) ;
3038 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3039 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3040 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3042 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3044 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3046 {
3047 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3048 initScanParams->scanEntry.bssIdx[i] ;
3049 }
3050
3051 /* if Frame length, copy macMgmtHdr or WDI structure */
3052 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3053 {
3054 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3055 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3056 }
3057 wdiInitScanParam->wdiReqStatusCB = NULL ;
3058
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 /* Store Init Req pointer, as this will be used for response */
3060 pWdaParams->pWdaContext = pWDA;
3061 pWdaParams->wdaMsgParam = initScanParams;
3062 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 /* first try to suspend TX */
3064 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(WDI_STATUS_SUCCESS != status)
3066 {
3067 goto handleWdiFailure;
3068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 /* call DAL API to pass init scan request to DAL */
3070 status = WDI_InitScanReq(wdiInitScanParam,
3071 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 if(IS_WDI_STATUS_FAILURE(status))
3073 {
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3075 "error in WDA Init Scan, Resume Tx " );
3076 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_ASSERT(0) ;
3078
3079 goto handleWdiFailure;
3080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082handleWdiFailure:
3083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3084 "Failure in WDI Api, free all the memory " );
3085 /* free WDI command buffer */
3086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3087 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 /* send Failure to PE */
3089 initScanParams->status = eSIR_FAILURE ;
3090 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 return CONVERT_WDI2VOS_STATUS(status) ;
3092}
3093
Jeff Johnson295189b2012-06-20 16:38:30 -07003094/*
3095 * FUNCTION: WDA_StartScanReqCallback
3096 * send Start SCAN RSP back to PE
3097 */
3098void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3099 void* pUserData)
3100{
3101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3102 tWDA_CbContext *pWDA;
3103 tStartScanParams *pWDA_ScanParam;
3104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003105 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 if(NULL == pWdaParams)
3107 {
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0) ;
3111 return ;
3112 }
3113 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3114 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 if(NULL == pWDA_ScanParam)
3116 {
3117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003118 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003120 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 return ;
3122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3124 {
3125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003126 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003128 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3132 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003133
Jeff Johnson295189b2012-06-20 16:38:30 -07003134
3135 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003136 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 /* send SCAN RSP message back to PE */
3138 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 return ;
3140}
3141
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_ProcessStartScanReq
3144 * Trigger start SCAN in WDI
3145 */
3146VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3147 tStartScanParams *startScanParams)
3148{
3149 WDI_Status status = WDI_STATUS_SUCCESS;
3150 WDI_StartScanReqParamsType *wdiStartScanParams =
3151 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3152 sizeof(WDI_StartScanReqParamsType)) ;
3153 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if(NULL == wdiStartScanParams)
3157 {
3158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_NOMEM;
3162 }
3163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3164 if(NULL == pWdaParams)
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 vos_mem_free(wdiStartScanParams);
3170 return VOS_STATUS_E_NOMEM;
3171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 /* Copy init Scan params to WDI structure */
3173 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3174 wdiStartScanParams->wdiReqStatusCB = NULL ;
3175
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 /* Store Init Req pointer, as this will be used for response */
3177 /* store Params pass it to WDI */
3178 pWdaParams->pWdaContext = pWDA;
3179 pWdaParams->wdaMsgParam = startScanParams;
3180 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 /* call DAL API to pass init scan request to DAL */
3182 status = WDI_StartScanReq(wdiStartScanParams,
3183 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 /* failure returned by WDI API */
3185 if(IS_WDI_STATUS_FAILURE(status))
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3188 "Failure in Start Scan WDI API, free all the memory "
3189 "It should be due to previous abort scan." );
3190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3191 vos_mem_free(pWdaParams) ;
3192 startScanParams->status = eSIR_FAILURE ;
3193 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return CONVERT_WDI2VOS_STATUS(status) ;
3196}
Jeff Johnson295189b2012-06-20 16:38:30 -07003197/*
3198 * FUNCTION: WDA_EndScanReqCallback
3199 * END SCAN callback
3200 */
3201void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3202{
3203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3204 tWDA_CbContext *pWDA;
3205 tEndScanParams *endScanParam;
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003207 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(NULL == pWdaParams)
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 VOS_ASSERT(0) ;
3213 return ;
3214 }
3215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3216 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 if(NULL == endScanParam)
3218 {
3219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3223 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 return ;
3225 }
3226
3227 /* Free WDI command buffer */
3228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3229 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003231 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 /* send response back to PE */
3233 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3234 return ;
3235}
3236
Jeff Johnson295189b2012-06-20 16:38:30 -07003237/*
3238 * FUNCTION: WDA_ProcessEndScanReq
3239 * Trigger END SCAN in WDI
3240 */
3241VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3242 tEndScanParams *endScanParams)
3243{
3244 WDI_Status status = WDI_STATUS_SUCCESS;
3245 WDI_EndScanReqParamsType *wdiEndScanParams =
3246 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3247 sizeof(WDI_EndScanReqParamsType)) ;
3248 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(NULL == wdiEndScanParams)
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 VOS_ASSERT(0);
3256 return VOS_STATUS_E_NOMEM;
3257 }
3258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3259 if(NULL == pWdaParams)
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0);
3264 vos_mem_free(wdiEndScanParams);
3265 return VOS_STATUS_E_NOMEM;
3266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* Copy init Scan params to WDI structure */
3268 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3269 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 /* Store Init Req pointer, as this will be used for response */
3271 /* store Params pass it to WDI */
3272 pWdaParams->pWdaContext = pWDA;
3273 pWdaParams->wdaMsgParam = endScanParams;
3274 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 /* call DAL API to pass init scan request to DAL */
3276 status = WDI_EndScanReq(wdiEndScanParams,
3277 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 if(IS_WDI_STATUS_FAILURE(status))
3279 {
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3281 "Failure in End Scan WDI API, free all the memory "
3282 "It should be due to previous abort scan." );
3283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3284 vos_mem_free(pWdaParams) ;
3285 endScanParams->status = eSIR_FAILURE ;
3286 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return CONVERT_WDI2VOS_STATUS(status) ;
3289}
Jeff Johnson295189b2012-06-20 16:38:30 -07003290/*
3291 * FUNCTION: WDA_FinishScanReqCallback
3292 * Trigger Finish SCAN callback
3293 */
3294void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3295{
3296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3297 tWDA_CbContext *pWDA;
3298 tFinishScanParams *finishScanParam;
3299 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == pWdaParams)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0) ;
3307 return ;
3308 }
3309
3310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3311 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 if(NULL == finishScanParam)
3313 {
3314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3318 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return ;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3322 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 /*
3324 * Now Resume TX, if we reached here means, TX is already suspended, we
3325 * have to resume it unconditionaly
3326 */
3327 status = WDA_ResumeDataTx(pWDA) ;
3328
3329 if(VOS_STATUS_SUCCESS != status)
3330 {
3331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003332 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003334 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3336 return ;
3337}
Jeff Johnson295189b2012-06-20 16:38:30 -07003338/*
3339 * FUNCTION: WDA_ProcessFinshScanReq
3340 * Trigger Finish SCAN in WDI
3341 */
3342VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3343 tFinishScanParams *finishScanParams)
3344{
3345 WDI_Status status = WDI_STATUS_SUCCESS;
3346 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3347 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3348 sizeof(WDI_FinishScanReqParamsType)) ;
3349 tWDA_ReqParams *pWdaParams ;
3350 tANI_U8 i = 0;
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 if(NULL == wdiFinishScanParams)
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_ASSERT(0);
3358 return VOS_STATUS_E_NOMEM;
3359 }
3360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3361 if(NULL == pWdaParams)
3362 {
3363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 VOS_ASSERT(0);
3366 vos_mem_free(wdiFinishScanParams);
3367 return VOS_STATUS_E_NOMEM;
3368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 /* Copy init Scan params to WDI structure */
3370 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3371 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3372 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3374 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3375 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3376 finishScanParams->frameLength ;
3377 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3378 finishScanParams->currentOperChannel ;
3379 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3380 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3381 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3383 {
3384 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3385 finishScanParams->scanEntry.bssIdx[i] ;
3386 }
3387
3388
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 /* if Frame length, copy macMgmtHdr ro WDI structure */
3390 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3391 {
3392 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3393 &finishScanParams->macMgmtHdr,
3394 sizeof(WDI_MacMgmtHdr)) ;
3395 }
3396 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 /* Store Init Req pointer, as this will be used for response */
3398 /* store Params pass it to WDI */
3399 pWdaParams->pWdaContext = pWDA;
3400 pWdaParams->wdaMsgParam = finishScanParams;
3401 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 /* call DAL API to pass init scan request to DAL */
3403 status = WDI_FinishScanReq(wdiFinishScanParams,
3404 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003405
Jeff Johnson295189b2012-06-20 16:38:30 -07003406
3407 /*
3408 * WDI API returns failure..
3409 */
3410 if(IS_WDI_STATUS_FAILURE( status))
3411 {
3412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3413 "Failure in Finish Scan WDI API, free all the memory " );
3414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3415 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 finishScanParams->status = eSIR_FAILURE ;
3417 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 return CONVERT_WDI2VOS_STATUS(status) ;
3420}
Jeff Johnson295189b2012-06-20 16:38:30 -07003421/*---------------------------------------------------------------------
3422 * ASSOC API's
3423 *---------------------------------------------------------------------
3424 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003425/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303426 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 * Trigger Init SCAN callback
3428 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303429void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003430{
3431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3432 tWDA_CbContext *pWDA;
3433 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 if(NULL == pWdaParams)
3437 {
3438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003439 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 VOS_ASSERT(0) ;
3441 return ;
3442 }
3443 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3444 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3446 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 /* reset macBSSID */
3448 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 /* reset macSTASelf */
3450 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003451 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 return ;
3454}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303455
3456/*
3457 * FUNCTION: WDA_JoinReqCallback
3458 * Free memory and send SWITCH CHANNEL RSP back to PE.
3459 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3460 */
3461void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3462{
3463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3464 tWDA_CbContext *pWDA;
3465 tSwitchChannelParams *joinReqParam;
3466
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3468 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3469
3470 if(NULL == pWdaParams)
3471 {
3472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3473 "%s: pWdaParams received NULL", __func__);
3474 VOS_ASSERT(0);
3475 return;
3476 }
3477
3478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3479 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3480 joinReqParam->status = wdiStatus;
3481
3482 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3483 {
3484 /* reset macBSSID */
3485 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3486 /* reset macSTASelf */
3487 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3488
3489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3490 vos_mem_free(pWdaParams);
3491 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3492 }
3493
3494 return;
3495}
3496
Jeff Johnson295189b2012-06-20 16:38:30 -07003497/*
3498 * FUNCTION: WDA_ProcessJoinReq
3499 * Trigger Join REQ in WDI
3500 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003501VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3502 tSwitchChannelParams* joinReqParam)
3503{
3504 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 WDI_JoinReqParamsType *wdiJoinReqParam =
3506 (WDI_JoinReqParamsType *)vos_mem_malloc(
3507 sizeof(WDI_JoinReqParamsType)) ;
3508 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 if(NULL == wdiJoinReqParam)
3512 {
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003516 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 return VOS_STATUS_E_NOMEM;
3518 }
3519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3520 if(NULL == pWdaParams)
3521 {
3522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 VOS_ASSERT(0);
3525 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003526 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 return VOS_STATUS_E_NOMEM;
3528 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003529
3530 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3531 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3532 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3533 {
3534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3535 "%s: received join request when BSSID or self-STA is NULL "
3536 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003538 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3539 VOS_ASSERT(0);
3540 vos_mem_free(wdiJoinReqParam);
3541 vos_mem_free(pWdaParams);
3542 joinReqParam->status = eSIR_FAILURE ;
3543 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3544 return VOS_STATUS_E_INVAL;
3545 }
3546
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 /* copy the BSSID for pWDA */
3548 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3549 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3551 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3553 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003554#ifdef WLAN_FEATURE_VOWIFI
3555 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3556 joinReqParam->maxTxPower ;
3557#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3559 joinReqParam->localPowerConstraint ;
3560#endif
3561 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3562 joinReqParam->secondaryChannelOffset ;
3563 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3564
Sachin Ahuja935eda782014-07-30 14:57:41 +05303565 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3566 wdiJoinReqParam->pUserData = pWdaParams;
3567
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 /* Store Init Req pointer, as this will be used for response */
3569 /* store Params pass it to WDI */
3570 pWdaParams->pWdaContext = pWDA;
3571 pWdaParams->wdaMsgParam = joinReqParam;
3572 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303574 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(IS_WDI_STATUS_FAILURE(status))
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3578 "Failure in Join WDI API, free all the memory " );
3579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3580 vos_mem_free(pWdaParams) ;
3581 joinReqParam->status = eSIR_FAILURE ;
3582 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 return CONVERT_WDI2VOS_STATUS(status) ;
3585}
Jeff Johnson295189b2012-06-20 16:38:30 -07003586/*
3587 * FUNCTION: WDA_SwitchChannelReqCallback
3588 * send Switch channel RSP back to PE
3589 */
3590void WDA_SwitchChannelReqCallback(
3591 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3592{
3593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3594 tWDA_CbContext *pWDA;
3595 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 if(NULL == pWdaParams)
3599 {
3600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 VOS_ASSERT(0) ;
3603 return ;
3604 }
3605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3606 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3607
3608#ifdef WLAN_FEATURE_VOWIFI
3609 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3610#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003614 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 return ;
3617}
Jeff Johnson295189b2012-06-20 16:38:30 -07003618/*
3619 * FUNCTION: WDA_ProcessChannelSwitchReq
3620 * Request to WDI to switch channel REQ params.
3621 */
3622VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3623 tSwitchChannelParams *pSwitchChanParams)
3624{
3625 WDI_Status status = WDI_STATUS_SUCCESS ;
3626 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3627 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3628 sizeof(WDI_SwitchChReqParamsType)) ;
3629 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 if(NULL == wdiSwitchChanParam)
3633 {
3634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 VOS_ASSERT(0);
3637 return VOS_STATUS_E_NOMEM;
3638 }
3639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3640 if(NULL == pWdaParams)
3641 {
3642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 VOS_ASSERT(0);
3645 vos_mem_free(wdiSwitchChanParam);
3646 return VOS_STATUS_E_NOMEM;
3647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3649#ifndef WLAN_FEATURE_VOWIFI
3650 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3651 pSwitchChanParams->localPowerConstraint;
3652#endif
3653 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3654 pSwitchChanParams->secondaryChannelOffset;
3655 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 /* Store req pointer, as this will be used for response */
3657 /* store Params pass it to WDI */
3658 pWdaParams->pWdaContext = pWDA;
3659 pWdaParams->wdaMsgParam = pSwitchChanParams;
3660 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661#ifdef WLAN_FEATURE_VOWIFI
3662 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3663 = pSwitchChanParams->maxTxPower;
3664 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3665 pSwitchChanParams ->selfStaMacAddr,
3666 sizeof(tSirMacAddr));
3667#endif
3668 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3669 pSwitchChanParams->bssId,
3670 sizeof(tSirMacAddr));
3671
3672 status = WDI_SwitchChReq(wdiSwitchChanParam,
3673 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 if(IS_WDI_STATUS_FAILURE(status))
3675 {
3676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3677 "Failure in process channel switch Req WDI API, free all the memory " );
3678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3679 vos_mem_free(pWdaParams) ;
3680 pSwitchChanParams->status = eSIR_FAILURE ;
3681 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 return CONVERT_WDI2VOS_STATUS(status) ;
3684}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003685
3686/*
3687 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3688 * send Switch channel RSP back to PE
3689 */
3690void WDA_SwitchChannelReqCallback_V1(
3691 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3692 void* pUserData)
3693{
3694 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3695 tWDA_CbContext *pWDA;
3696 tSwitchChannelParams *pSwitchChanParams;
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3698 "<------ %s " ,__func__);
3699
3700 if (NULL == pWdaParams)
3701 {
3702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3703 "%s: pWdaParams received NULL", __func__);
3704 VOS_ASSERT(0);
3705 return ;
3706 }
3707 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3708 pSwitchChanParams =
3709 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3710 pSwitchChanParams->channelSwitchSrc =
3711 wdiSwitchChanRsp->channelSwitchSrc;
3712#ifdef WLAN_FEATURE_VOWIFI
3713 pSwitchChanParams->txMgmtPower =
3714 wdiSwitchChanRsp->ucTxMgmtPower;
3715#endif
3716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3717 vos_mem_free(pWdaParams);
3718 pSwitchChanParams->status =
3719 wdiSwitchChanRsp->wdiStatus ;
3720 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3721 (void *)pSwitchChanParams , 0);
3722 return;
3723}
3724
3725/*
3726 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3727 * Request to WDI to switch channel REQ params.
3728 */
3729VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3730 tSwitchChannelParams *pSwitchChanParams)
3731{
3732 WDI_Status status = WDI_STATUS_SUCCESS ;
3733 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3734 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3735 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3736 tWDA_ReqParams *pWdaParams ;
3737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3738 "------> %s " ,__func__);
3739 if (NULL == wdiSwitchChanParam)
3740 {
3741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3742 "%s: VOS MEM Alloc Failure", __func__);
3743 VOS_ASSERT(0);
3744 return VOS_STATUS_E_NOMEM;
3745 }
3746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3747 if (NULL == pWdaParams)
3748 {
3749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3750 "%s: VOS MEM Alloc Failure", __func__);
3751 VOS_ASSERT(0);
3752 vos_mem_free(wdiSwitchChanParam);
3753 return VOS_STATUS_E_NOMEM;
3754 }
3755 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3756 pSwitchChanParams->channelSwitchSrc;
3757
3758 wdiSwitchChanParam->wdiChInfo.ucChannel =
3759 pSwitchChanParams->channelNumber;
3760#ifndef WLAN_FEATURE_VOWIFI
3761 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3762 pSwitchChanParams->localPowerConstraint;
3763#endif
3764 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3765 pSwitchChanParams->secondaryChannelOffset;
3766 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3767 /* Store req pointer, as this will be used for response */
3768 /* store Params pass it to WDI */
3769 pWdaParams->pWdaContext = pWDA;
3770 pWdaParams->wdaMsgParam = pSwitchChanParams;
3771 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3772#ifdef WLAN_FEATURE_VOWIFI
3773 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3774 pSwitchChanParams->maxTxPower;
3775 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3776 pSwitchChanParams ->selfStaMacAddr,
3777 sizeof(tSirMacAddr));
3778#endif
3779 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3780 pSwitchChanParams->bssId,
3781 sizeof(tSirMacAddr));
3782
3783 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3784 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3785 pWdaParams);
3786 if (IS_WDI_STATUS_FAILURE(status))
3787 {
3788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3789 "Failure in process channel switch Req WDI "
3790 "API, free all the memory " );
3791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3792 vos_mem_free(pWdaParams) ;
3793 pSwitchChanParams->status = eSIR_FAILURE ;
3794 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3795 (void *)pSwitchChanParams, 0) ;
3796 }
3797 return CONVERT_WDI2VOS_STATUS(status) ;
3798}
3799
Jeff Johnson295189b2012-06-20 16:38:30 -07003800/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303801 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 * config BSS Req Callback, called by WDI
3803 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303804void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 ,void* pUserData)
3806{
3807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3808 tWDA_CbContext *pWDA;
3809 tAddBssParams *configBssReqParam;
3810 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 if(NULL == pWdaParams)
3814 {
3815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 VOS_ASSERT(0) ;
3818 return ;
3819 }
3820 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3821 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3822 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003824 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3826 {
3827 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3828 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3830 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3831 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3832
3833 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3834 {
3835 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3836 {
3837 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3838 staConfigBssParam->staType = STA_ENTRY_BSSID;
3839 }
3840 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3841 (staConfigBssParam->staType == STA_ENTRY_SELF))
3842 {
3843 /* This is the 1st add BSS Req for the BTAMP STA */
3844 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3845 staConfigBssParam->staType = STA_ENTRY_BSSID;
3846 }
3847 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3848 (staConfigBssParam->staType == STA_ENTRY_PEER))
3849 {
3850 /* This is the 2nd ADD BSS Request that is sent
3851 * on the BTAMP STA side. The Sta type is
3852 * set to STA_ENTRY_PEER here.*/
3853 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3854 }
3855 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3856 (staConfigBssParam->staType == STA_ENTRY_SELF))
3857 {
3858 /* statype is already set by PE.
3859 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3860 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3861 staConfigBssParam->staType = STA_ENTRY_BSSID;
3862 }
3863 else
3864 {
3865 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3866 staConfigBssParam->staType = STA_ENTRY_PEER;
3867 }
3868 }
3869 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3870 {
3871 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3872 staConfigBssParam->staType = STA_ENTRY_SELF;
3873 }
3874 else
3875 {
3876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3877 "Invalid operation mode specified");
3878 VOS_ASSERT(0);
3879 }
3880
3881 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3886 sizeof(tSirMacAddr));
3887 staConfigBssParam->txChannelWidthSet =
3888 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3890 staConfigBssParam->htCapable)
3891 {
3892 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3893 wdiConfigBssRsp->ucBSSIdx;
3894 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3895 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303896 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3897 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3900 wdiConfigBssRsp->ucBSSIdx,
3901 wdiConfigBssRsp->ucSTAIdx))
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003904 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 VOS_ASSERT(0) ;
3906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3908 {
3909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 VOS_ASSERT(0) ;
3912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003913#ifdef WLAN_FEATURE_VOWIFI
3914 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3915#endif
3916 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303917 else
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3920 "%s: Failure with status %d", __func__,
3921 wdiConfigBssRsp->wdiStatus);
3922 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3923 WLAN_LOG_INDICATOR_HOST_DRIVER,
3924 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3925 FALSE, TRUE);
3926 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303927 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3928 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3930 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 return ;
3933}
Jeff Johnson295189b2012-06-20 16:38:30 -07003934/*
3935 * FUNCTION: WDA_UpdateEdcaParamsForAC
3936 * Update WDI EDCA params with PE edca params
3937 */
3938void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3939 WDI_EdcaParamRecord *wdiEdcaParam,
3940 tSirMacEdcaParamRecord *macEdcaParam)
3941{
3942 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3943 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3944 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3945 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3946 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3947 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3948}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303949void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3950 void* pUserData)
3951{
3952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3953 tWDA_CbContext *pWDA;
3954 tAddBssParams *addBssParams;
3955
3956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3957 "<------ %s, wdiStatus: %d",
3958 __func__, wdiStatus);
3959
3960 if (NULL == pWdaParams)
3961 {
3962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3963 "%s: Invalid pWdaParams pointer", __func__);
3964 VOS_ASSERT(0);
3965 return;
3966 }
3967
3968 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3969 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3970
3971 addBssParams->status = wdiStatus;
3972
3973 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3974 {
3975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3976 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303977 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3978 WLAN_LOG_INDICATOR_HOST_DRIVER,
3979 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3980 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303981 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3982 }
3983
3984 return ;
3985}
3986
Jeff Johnson295189b2012-06-20 16:38:30 -07003987/*
3988 * FUNCTION: WDA_ProcessConfigBssReq
3989 * Configure BSS before starting Assoc with AP
3990 */
3991VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3992 tAddBssParams* configBssReqParam)
3993{
3994 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303995 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303999 if (NULL == configBssReqParam)
4000 {
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4002 "%s: configBssReqParam is NULL", __func__);
4003 return VOS_STATUS_E_INVAL;
4004 }
4005
4006 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4007 sizeof(WDI_ConfigBSSReqParamsType)) ;
4008
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(NULL == wdiConfigBssReqParam)
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 VOS_ASSERT(0);
4014 return VOS_STATUS_E_NOMEM;
4015 }
4016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4017 if(NULL == pWdaParams)
4018 {
4019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004020 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 VOS_ASSERT(0);
4022 vos_mem_free(wdiConfigBssReqParam);
4023 return VOS_STATUS_E_NOMEM;
4024 }
Kiran4a17ebe2013-01-31 10:43:43 -08004025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4026 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4029 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304030 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4031 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 /* Store Init Req pointer, as this will be used for response */
4033 /* store Params pass it to WDI */
4034 pWdaParams->pWdaContext = pWDA;
4035 pWdaParams->wdaMsgParam = configBssReqParam;
4036 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304038 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(IS_WDI_STATUS_FAILURE(status))
4040 {
4041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4042 "Failure in Config BSS WDI API, free all the memory " );
4043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4044 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 return CONVERT_WDI2VOS_STATUS(status) ;
4049}
Jeff Johnson295189b2012-06-20 16:38:30 -07004050#ifdef ENABLE_HAL_COMBINED_MESSAGES
4051/*
4052 * FUNCTION: WDA_PostAssocReqCallback
4053 * Post ASSOC req callback, send RSP back to PE
4054 */
4055void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4056 void* pUserData)
4057{
4058 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4059 tPostAssocParams *postAssocReqParam =
4060 (tPostAssocParams *)pWDA->wdaMsgParam ;
4061 /*STA context within the BSS Params*/
4062 tAddStaParams *staPostAssocParam =
4063 &postAssocReqParam->addBssParams.staContext ;
4064 /*STA Params for self STA*/
4065 tAddStaParams *selfStaPostAssocParam =
4066 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004070 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4072 {
4073 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4074 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4075 sizeof(tSirMacAddr)) ;
4076 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4077 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4078 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4080 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304081 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4083 pWDA->wdaWdiApiMsgParam = NULL;
4084 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 return ;
4087}
Jeff Johnson295189b2012-06-20 16:38:30 -07004088/*
4089 * FUNCTION: WDA_ProcessPostAssocReq
4090 * Trigger POST ASSOC processing in WDI
4091 */
4092VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4093 tPostAssocParams *postAssocReqParam)
4094{
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 WDI_Status status = WDI_STATUS_SUCCESS ;
4096
4097 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4098 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4099 sizeof(WDI_PostAssocReqParamsType)) ;
4100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(NULL == wdiPostAssocReqParam)
4104 {
4105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 VOS_ASSERT(0);
4108 return VOS_STATUS_E_NOMEM;
4109 }
4110
4111 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4112 {
4113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004114 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_ASSERT(0);
4116 return VOS_STATUS_E_FAILURE;
4117 }
4118
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 /* update BSS params into WDI structure */
4120 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4121 &postAssocReqParam->addBssParams) ;
4122 /* update STA params into WDI structure */
4123 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4124 &postAssocReqParam->addStaParams) ;
4125
4126 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4127 postAssocReqParam->addBssParams.highPerformance;
4128 WDA_UpdateEdcaParamsForAC(pWDA,
4129 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4130 &postAssocReqParam->addBssParams.acbe);
4131 WDA_UpdateEdcaParamsForAC(pWDA,
4132 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4133 &postAssocReqParam->addBssParams.acbk);
4134 WDA_UpdateEdcaParamsForAC(pWDA,
4135 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4136 &postAssocReqParam->addBssParams.acvi);
4137 WDA_UpdateEdcaParamsForAC(pWDA,
4138 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4139 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 /* Store Init Req pointer, as this will be used for response */
4141 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 /* store Params pass it to WDI */
4143 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4145 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 if(IS_WDI_STATUS_FAILURE(status))
4147 {
4148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4149 "Failure in Post Assoc WDI API, free all the memory " );
4150 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4151 pWDA->wdaWdiApiMsgParam = NULL;
4152 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 return CONVERT_WDI2VOS_STATUS(status) ;
4157}
4158#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004159/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304160 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 * ADD STA req callback, send RSP back to PE
4162 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304163void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 void* pUserData)
4165{
4166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4167 tWDA_CbContext *pWDA;
4168 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004170 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 if(NULL == pWdaParams)
4172 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 VOS_ASSERT(0) ;
4175 return ;
4176 }
4177 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4178 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004180 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4182 {
4183 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4184 /*TODO: UMAC structure doesn't have these fields*/
4185 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4186 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4187 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4188 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4189 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4190 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004191#ifdef FEATURE_WLAN_TDLS
4192 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4193 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4194#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004196#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 {
4198 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4199 wdiConfigStaRsp->ucBssIdx;
4200 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4201 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304202 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4203 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 }
4205 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004208 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_ASSERT(0) ;
4210 return ;
4211 }
4212 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304213 else
4214 {
4215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4216 "%s: Failure with status %d", __func__,
4217 wdiConfigStaRsp->wdiStatus);
4218 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4219 WLAN_LOG_INDICATOR_HOST_DRIVER,
4220 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4221 FALSE, TRUE);
4222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4224 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 return ;
4227}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304228void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4229 void* pUserData)
4230{
4231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4232 tWDA_CbContext *pWDA;
4233 tAddStaParams *addStaParams;
4234
4235 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4236 "<------ %s, wdiStatus: %d",
4237 __func__, wdiStatus);
4238
4239 if (NULL == pWdaParams)
4240 {
4241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4242 "%s: Invalid pWdaParams pointer", __func__);
4243 VOS_ASSERT(0);
4244 return;
4245 }
4246
4247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4248 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4249
4250 addStaParams->status = wdiStatus;
4251
4252 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4253 {
4254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4255 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304256 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4257 WLAN_LOG_INDICATOR_HOST_DRIVER,
4258 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4259 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304260 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4261 }
4262
4263 return ;
4264}
4265
Jeff Johnson295189b2012-06-20 16:38:30 -07004266/*
4267 * FUNCTION: WDA_ConfigStaReq
4268 * Trigger Config STA processing in WDI
4269 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304270VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 tAddStaParams *addStaReqParam)
4272{
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4275 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4276 sizeof(WDI_ConfigSTAReqParamsType)) ;
4277 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 if(NULL == wdiConfigStaReqParam)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 return VOS_STATUS_E_NOMEM;
4286 }
4287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4288 if(NULL == pWdaParams)
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_ASSERT(0);
4293 vos_mem_free(wdiConfigStaReqParam);
4294 return VOS_STATUS_E_NOMEM;
4295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 /* update STA params into WDI structure */
4298 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4299 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304300 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4301 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 /* Store Init Req pointer, as this will be used for response */
4303 /* store Params pass it to WDI */
4304 pWdaParams->pWdaContext = pWDA;
4305 pWdaParams->wdaMsgParam = addStaReqParam;
4306 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304307
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304309 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 if(IS_WDI_STATUS_FAILURE(status))
4311 {
4312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4313 "Failure in Config STA WDI API, free all the memory " );
4314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4315 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 return CONVERT_WDI2VOS_STATUS(status) ;
4320}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304321
Jeff Johnson295189b2012-06-20 16:38:30 -07004322/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304323 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304325 */
4326void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 void* pUserData)
4328{
4329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4330 tWDA_CbContext *pWDA;
4331 tDeleteBssParams *delBssReqParam;
4332 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004334 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 if(NULL == pWdaParams)
4336 {
4337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004338 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 VOS_ASSERT(0) ;
4340 return ;
4341 }
4342 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4343 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004344 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4346 {
4347 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4348 sizeof(tSirMacAddr)) ;
4349 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304350 else
4351 {
4352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4353 "%s: Failure with status %d", __func__,
4354 wdiDelBssRsp->wdiStatus);
4355 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4356 WLAN_LOG_INDICATOR_HOST_DRIVER,
4357 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4358 FALSE, TRUE);
4359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4361 {
4362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004363 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 VOS_ASSERT(0) ;
4365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4367 {
4368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004369 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 VOS_ASSERT(0) ;
4371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4373 {
4374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004375 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 VOS_ASSERT(0) ;
4377 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304378
4379 WLANTL_StartForwarding(staIdx,0,0);
4380
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4382 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 /* reset the the system role*/
4384 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4385
4386 /* Reset the BA related information */
4387 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4388 {
4389 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4390 {
4391 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4392 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304393 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 /* Reset framesTxed counters here */
4395 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4396 {
4397 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4398 }
4399 }
4400 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 return ;
4404}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304405void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4406 void* pUserData)
4407{
4408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4409 tWDA_CbContext *pWDA;
4410 tDeleteBssParams *delbssParams;
4411
4412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4413 "<------ %s, wdiStatus: %d",
4414 __func__, wdiStatus);
4415
4416 if (NULL == pWdaParams)
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4419 "%s: Invalid pWdaParams pointer", __func__);
4420 VOS_ASSERT(0);
4421 return;
4422 }
4423
4424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4425 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4426
4427 delbssParams->status = wdiStatus ;
4428
4429 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4430 {
4431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4432 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304433 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4434 WLAN_LOG_INDICATOR_HOST_DRIVER,
4435 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4436 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304437 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4438 }
4439
4440 return ;
4441}
Jeff Johnson295189b2012-06-20 16:38:30 -07004442
Jeff Johnson295189b2012-06-20 16:38:30 -07004443/*
4444 * FUNCTION: WDA_ProcessDelBssReq
4445 * Init DEL BSS req with WDI
4446 */
4447VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4448 tDeleteBssParams *delBssParam)
4449{
4450 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4452 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4453 sizeof(WDI_DelBSSReqParamsType)) ;
4454 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 if(NULL == wdiDelBssReqParam)
4458 {
4459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 VOS_ASSERT(0);
4462 return VOS_STATUS_E_NOMEM;
4463 }
4464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4465 if(NULL == pWdaParams)
4466 {
4467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 VOS_ASSERT(0);
4470 vos_mem_free(wdiDelBssReqParam);
4471 return VOS_STATUS_E_NOMEM;
4472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304474 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4475 wdiDelBssReqParam->pUserData = pWdaParams;
4476
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 /* Store Init Req pointer, as this will be used for response */
4478 /* store Params pass it to WDI */
4479 pWdaParams->pWdaContext = pWDA;
4480 pWdaParams->wdaMsgParam = delBssParam;
4481 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304482
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304484 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 if(IS_WDI_STATUS_FAILURE(status))
4486 {
4487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4488 "Failure in Del BSS WDI API, free all the memory " );
4489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4490 vos_mem_free(pWdaParams) ;
4491 delBssParam->status = eSIR_FAILURE ;
4492 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 return CONVERT_WDI2VOS_STATUS(status) ;
4495}
Jeff Johnson295189b2012-06-20 16:38:30 -07004496/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304497 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304499 */
4500void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 void* pUserData)
4502{
4503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4504 tWDA_CbContext *pWDA;
4505 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 if(NULL == pWdaParams)
4509 {
4510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004511 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304512 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 return ;
4514 }
4515 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4516 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004517 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4519 {
4520 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004523 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 VOS_ASSERT(0) ;
4525 }
4526 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304527 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304529 else
4530 {
4531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4532 "%s: Failure with status %d", __func__,
4533 wdiDelStaRsp->wdiStatus);
4534 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4535 WLAN_LOG_INDICATOR_HOST_DRIVER,
4536 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4537 FALSE, TRUE);
4538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4540 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 /*Reset the BA information corresponding to this STAIdx */
4542 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4543 WDA_INVALID_STA_INDEX;
4544 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304545 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 return ;
4548}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304549void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4550 void* pUserData)
4551{
4552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4553 tWDA_CbContext *pWDA;
4554 tDeleteStaParams *delStaParams;
4555
4556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4557 "<------ %s, wdiStatus: %d",
4558 __func__, wdiStatus);
4559
4560 if (NULL == pWdaParams)
4561 {
4562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4563 "%s: Invalid pWdaParams pointer", __func__);
4564 VOS_ASSERT(0);
4565 return;
4566 }
4567
4568 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4569 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4570
4571 delStaParams->status = wdiStatus ;
4572
4573 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4574 {
4575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4576 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304577 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4578 WLAN_LOG_INDICATOR_HOST_DRIVER,
4579 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4580 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304581 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4582 }
4583
4584 return ;
4585}
4586
Jeff Johnson295189b2012-06-20 16:38:30 -07004587/*
4588 * FUNCTION: WDA_ProcessDelStaReq
4589 * Init DEL STA req with WDI
4590 */
4591VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4592 tDeleteStaParams *delStaParam)
4593{
4594 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4596 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4597 sizeof(WDI_DelSTAReqParamsType)) ;
4598 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004600 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 if(NULL == wdiDelStaReqParam)
4602 {
4603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 VOS_ASSERT(0);
4606 return VOS_STATUS_E_NOMEM;
4607 }
4608 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4609 if(NULL == pWdaParams)
4610 {
4611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 VOS_ASSERT(0);
4614 vos_mem_free(wdiDelStaReqParam);
4615 return VOS_STATUS_E_NOMEM;
4616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304618 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4619 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 /* Store Init Req pointer, as this will be used for response */
4621 /* store Params pass it to WDI */
4622 pWdaParams->pWdaContext = pWDA;
4623 pWdaParams->wdaMsgParam = delStaParam;
4624 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304625
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304627 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 if(IS_WDI_STATUS_FAILURE(status))
4629 {
4630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4631 "Failure in Del STA WDI API, free all the memory status = %d",
4632 status );
4633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4634 vos_mem_free(pWdaParams) ;
4635 delStaParam->status = eSIR_FAILURE ;
4636 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 return CONVERT_WDI2VOS_STATUS(status) ;
4639}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304640void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004641{
4642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4643 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304644 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004646 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 if(NULL == pWdaParams)
4648 {
4649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004650 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 VOS_ASSERT(0) ;
4652 return ;
4653 }
4654 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4655 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4657 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4659 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4660 pwdiAddSTASelfRsp->macSelfSta,
4661 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304662 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4663 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4664 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4665 {
4666 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4667 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4669 "%s: Failure with status %d failcnter %d", __func__,
4670 pwdiAddSTASelfRsp->wdiStatus,
4671 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4672 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4673 WLAN_LOG_INDICATOR_HOST_DRIVER,
4674 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4675 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 return ;
4679}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304680void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4681 void* pUserData)
4682{
4683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4684 tWDA_CbContext *pWDA;
4685 tAddStaSelfParams *addStaSelfParams;
4686
4687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4688 "<------ %s, wdiStatus: %d",
4689 __func__, wdiStatus);
4690
4691 if (NULL == pWdaParams)
4692 {
4693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4694 "%s: Invalid pWdaParams pointer", __func__);
4695 VOS_ASSERT(0);
4696 return;
4697 }
4698
4699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4700 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4701
4702 addStaSelfParams->status = wdiStatus ;
4703
4704 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4705 {
4706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4707 vos_mem_free(pWdaParams) ;
4708 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4709 = WDA_ADDSTA_REQ_WDI_FAIL;
4710 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4712 "%s: Failure with status %d failcnter %d", __func__,
4713 wdiStatus,
4714 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4715 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4716 WLAN_LOG_INDICATOR_HOST_DRIVER,
4717 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4718 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304719 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4720 }
4721
4722 return ;
4723}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304724
Jeff Johnson295189b2012-06-20 16:38:30 -07004725/*
4726 * FUNCTION: WDA_ProcessAddStaSelfReq
4727 *
4728 */
4729VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4730{
4731 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004732 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4734 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4735 sizeof(WDI_AddSTASelfReqParamsType)) ;
4736 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304739 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 if( NULL == wdiAddStaSelfReq )
4741 {
4742 VOS_ASSERT( 0 );
4743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004744 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304745 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4746 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 return( VOS_STATUS_E_NOMEM );
4748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 if( NULL == pWdaParams )
4751 {
4752 VOS_ASSERT( 0 );
4753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004754 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304755 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4756 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004757 vos_mem_free(wdiAddStaSelfReq) ;
4758 return( VOS_STATUS_E_NOMEM );
4759 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304760 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4761 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004763 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 /* Store Init Req pointer, as this will be used for response */
4765 /* store Params pass it to WDI */
4766 pWdaParams->pWdaContext = pWDA;
4767 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304768 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4769
4770 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4771 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772
Jeff Johnson43971f52012-07-17 12:26:56 -07004773 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4776 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004777 wstatus );
4778 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4780 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304781 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4782 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 pAddStaSelfReq->status = eSIR_FAILURE ;
4784 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4785 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004786 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787}
Jeff Johnson295189b2012-06-20 16:38:30 -07004788/*
4789 * FUNCTION: WDA_DelSTASelfRespCallback
4790 *
4791 */
4792void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4793 wdiDelStaSelfRspParams , void* pUserData)
4794{
4795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4796 tWDA_CbContext *pWDA;
4797 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 if (NULL == pWdaParams)
4801 {
4802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004803 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 VOS_ASSERT(0);
4805 return;
4806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4808 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004810 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811
4812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4813 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304814 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304815 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4817 "%s: Failure with status %d", __func__,
4818 wdiDelStaSelfRspParams->wdiStatus);
4819 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4820 WLAN_LOG_INDICATOR_HOST_DRIVER,
4821 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4822 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 return ;
4826}
Jeff Johnson295189b2012-06-20 16:38:30 -07004827/*
4828 * FUNCTION: WDA_DelSTASelfReqCallback
4829 *
4830 */
4831void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4832 void* pUserData)
4833{
4834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4835 tWDA_CbContext *pWDA;
4836 tDelStaSelfParams *delStaSelfParams;
4837
4838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304839 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004840 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004841
4842 if (NULL == pWdaParams)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0);
4847 return;
4848 }
4849
4850 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4851 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4852
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004853 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854
4855 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4856 {
4857 VOS_ASSERT(0);
4858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4859 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304860 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4861 WLAN_LOG_INDICATOR_HOST_DRIVER,
4862 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4863 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4865 }
4866
4867 return ;
4868}
4869
4870/*
4871 * FUNCTION: WDA_DelSTASelfReq
4872 * Trigger Config STA processing in WDI
4873 */
4874VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4875 tDelStaSelfParams* pDelStaSelfReqParam)
4876{
4877 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004878 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 tWDA_ReqParams *pWdaParams = NULL;
4880 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4881 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4882 sizeof(WDI_DelSTASelfReqParamsType)) ;
4883
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004885 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 if( NULL == wdiDelStaSelfReq )
4887 {
4888 VOS_ASSERT( 0 );
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004890 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return( VOS_STATUS_E_NOMEM );
4892 }
4893
4894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4895 if( NULL == pWdaParams )
4896 {
4897 VOS_ASSERT( 0 );
4898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004899 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 vos_mem_free(wdiDelStaSelfReq) ;
4901 return( VOS_STATUS_E_NOMEM );
4902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 pWdaParams->pWdaContext = pWDA;
4904 /* Store param pointer as passed in by caller */
4905 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4906 /* store Params pass it to WDI */
4907 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4909 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4910
4911 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4912 wdiDelStaSelfReq->pUserData = pWdaParams;
4913
Jeff Johnson43971f52012-07-17 12:26:56 -07004914 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4916
Jeff Johnson43971f52012-07-17 12:26:56 -07004917 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 {
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4920 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4921 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004922 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4924 vos_mem_free(pWdaParams) ;
4925 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4926 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4927 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004928 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929}
4930
Jeff Johnson295189b2012-06-20 16:38:30 -07004931/*
4932 * FUNCTION: WDA_SendMsg
4933 * Send Message back to PE
4934 */
4935void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4936 void *pBodyptr, tANI_U32 bodyVal)
4937{
4938 tSirMsgQ msg = {0} ;
4939 tANI_U32 status = VOS_STATUS_SUCCESS ;
4940 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 msg.type = msgType;
4942 msg.bodyval = bodyVal;
4943 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if (VOS_STATUS_SUCCESS != status)
4946 {
4947 if(NULL != pBodyptr)
4948 {
4949 vos_mem_free(pBodyptr);
4950 }
4951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004952 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 VOS_ASSERT(0) ;
4954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 return ;
4956}
Jeff Johnson295189b2012-06-20 16:38:30 -07004957/*
4958 * FUNCTION: WDA_UpdateBSSParams
4959 * Translated WDA/PE BSS info into WDI BSS info..
4960 */
4961void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4962 WDI_ConfigBSSReqInfoType *wdiBssParams,
4963 tAddBssParams *wdaBssParams)
4964{
4965 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304966 v_U8_t i = 0;
4967
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 /* copy bssReq Params to WDI structure */
4969 vos_mem_copy(wdiBssParams->macBSSID,
4970 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4971 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4972 sizeof(tSirMacAddr)) ;
4973 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4974 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4975 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 wdiBssParams->ucShortSlotTimeSupported =
4977 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4979 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4980 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4981 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4982 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4983
4984 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4985 wdiBssParams->ucTXOPProtectionFullSupport =
4986 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4988 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4991 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4992 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4993 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4994
Chet Lanctot186b5732013-03-18 10:26:30 -07004995 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4996
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 /* copy SSID into WDI structure */
4998 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4999 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5000 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5002 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005004#ifdef WLAN_FEATURE_VOWIFI
5005 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5006#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009#ifdef WLAN_FEATURE_VOWIFI_11R
5010 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 if(wdiBssParams->bExtSetStaKeyParamValid)
5012 {
5013 /* copy set STA key params to WDI structure */
5014 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5015 wdaBssParams->extSetStaKeyParam.staIdx;
5016 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5017 wdaBssParams->extSetStaKeyParam.encType;
5018 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5019 wdaBssParams->extSetStaKeyParam.wepType;
5020 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5021 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5023 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005024 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5026 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5027 {
5028 WDA_GetWepKeysFromCfg( pWDA,
5029 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5030 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5031 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5032 }
5033 else
5034 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5036 keyIndex++)
5037 {
5038 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5039 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5041 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5042 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5043 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305044
5045 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5046 {
5047 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5048 {
5049 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5050 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5051 }
5052
5053 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5054 {
5055 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5056 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5057 }
5058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5059 FL("%s: Negated Keys"), __func__);
5060 }
5061 else
5062 {
5063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5064 FL("%s: No change in Keys "), __func__);
5065 vos_mem_copy(
5066 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5067 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5068 WLAN_MAX_KEY_RSC_LEN);
5069 vos_mem_copy(
5070 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5071 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5072 SIR_MAC_MAX_KEY_LENGTH);
5073 }
5074
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5076 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5077 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5078 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305080 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 }
5083 }
5084 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5085 }
5086 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5087 {
5088 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5089 sizeof(wdaBssParams->extSetStaKeyParam) );
5090 }
5091#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005092#ifdef WLAN_FEATURE_11AC
5093 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5094 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5095#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005096
5097 return ;
5098}
Jeff Johnson295189b2012-06-20 16:38:30 -07005099/*
5100 * FUNCTION: WDA_UpdateSTAParams
5101 * Translated WDA/PE BSS info into WDI BSS info..
5102 */
5103void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5104 WDI_ConfigStaReqInfoType *wdiStaParams,
5105 tAddStaParams *wdaStaParams)
5106{
5107 tANI_U8 i = 0;
5108 /* Update STA params */
5109 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5110 sizeof(tSirMacAddr)) ;
5111 wdiStaParams->usAssocId = wdaStaParams->assocId;
5112 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005113 wdiStaParams->staIdx = wdaStaParams->staIdx;
5114
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 wdiStaParams->ucShortPreambleSupported =
5116 wdaStaParams->shortPreambleSupported;
5117 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5118 sizeof(tSirMacAddr)) ;
5119 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5120
5121 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5122
5123 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5124 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5125 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5126 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5127 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5128 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5129 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5130
5131 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5132 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 wdiStaParams->wdiSupportedRates.opRateMode =
5134 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5136 {
5137 wdiStaParams->wdiSupportedRates.llbRates[i] =
5138 wdaStaParams->supportedRates.llbRates[i];
5139 }
5140 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5141 {
5142 wdiStaParams->wdiSupportedRates.llaRates[i] =
5143 wdaStaParams->supportedRates.llaRates[i];
5144 }
5145 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5146 {
5147 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5148 wdaStaParams->supportedRates.aniLegacyRates[i];
5149 }
5150 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5151 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005152#ifdef WLAN_FEATURE_11AC
5153 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5154 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5155 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5156 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5157#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5159 {
5160 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5161 wdaStaParams->supportedRates.supportedMCSSet[i];
5162 }
5163 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5164 wdaStaParams->supportedRates.rxHighestDataRate;
5165
5166 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5167
5168 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5169
5170 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5171 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5172 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5173
5174 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5175 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5176 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5177 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005179#ifdef WLAN_FEATURE_11AC
5180 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5181 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005182 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305183 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5184 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5185 * must be set by default */
5186 if ( wdiStaParams->vhtTxMUBformeeCapable )
5187 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005188#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005189 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5190 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 return ;
5192}
Jeff Johnson295189b2012-06-20 16:38:30 -07005193/*
5194 * -------------------------------------------------------------------------
5195 * CFG update to WDI
5196 * -------------------------------------------------------------------------
5197 */
5198
5199 /*
5200 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5201 * Convert the WNI CFG ID to HAL CFG ID
5202 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005203static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005204{
5205 switch(wniCfgId)
5206 {
5207 case WNI_CFG_STA_ID:
5208 return QWLAN_HAL_CFG_STA_ID;
5209 case WNI_CFG_CURRENT_TX_ANTENNA:
5210 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5211 case WNI_CFG_CURRENT_RX_ANTENNA:
5212 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5213 case WNI_CFG_LOW_GAIN_OVERRIDE:
5214 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5215 case WNI_CFG_POWER_STATE_PER_CHAIN:
5216 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5217 case WNI_CFG_CAL_PERIOD:
5218 return QWLAN_HAL_CFG_CAL_PERIOD;
5219 case WNI_CFG_CAL_CONTROL:
5220 return QWLAN_HAL_CFG_CAL_CONTROL;
5221 case WNI_CFG_PROXIMITY:
5222 return QWLAN_HAL_CFG_PROXIMITY;
5223 case WNI_CFG_NETWORK_DENSITY:
5224 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5225 case WNI_CFG_MAX_MEDIUM_TIME:
5226 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5227 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5228 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5229 case WNI_CFG_RTS_THRESHOLD:
5230 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5231 case WNI_CFG_SHORT_RETRY_LIMIT:
5232 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5233 case WNI_CFG_LONG_RETRY_LIMIT:
5234 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5235 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5236 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5237 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5238 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5239 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5240 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5241 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5242 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5243 case WNI_CFG_FIXED_RATE:
5244 return QWLAN_HAL_CFG_FIXED_RATE;
5245 case WNI_CFG_RETRYRATE_POLICY:
5246 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5247 case WNI_CFG_RETRYRATE_SECONDARY:
5248 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5249 case WNI_CFG_RETRYRATE_TERTIARY:
5250 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5251 case WNI_CFG_FORCE_POLICY_PROTECTION:
5252 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5253 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5254 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5255 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5256 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5257 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5258 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5259 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5260 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5261 case WNI_CFG_MAX_BA_SESSIONS:
5262 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5263 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5264 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5265 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5266 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5267 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5268 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5269 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5270 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5271 case WNI_CFG_STATS_PERIOD:
5272 return QWLAN_HAL_CFG_STATS_PERIOD;
5273 case WNI_CFG_CFP_MAX_DURATION:
5274 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5275#if 0 /*This is not part of CFG*/
5276 case WNI_CFG_FRAME_TRANS_ENABLED:
5277 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5278#endif
5279 case WNI_CFG_DTIM_PERIOD:
5280 return QWLAN_HAL_CFG_DTIM_PERIOD;
5281 case WNI_CFG_EDCA_WME_ACBK:
5282 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5283 case WNI_CFG_EDCA_WME_ACBE:
5284 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5285 case WNI_CFG_EDCA_WME_ACVI:
5286 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5287 case WNI_CFG_EDCA_WME_ACVO:
5288 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5289#if 0
5290 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5291 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5292 case WNI_CFG_TELE_BCN_TRANS_LI:
5293 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5294 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5295 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5296 case WNI_CFG_TELE_BCN_MAX_LI:
5297 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5298 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5299 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5300#endif
5301 case WNI_CFG_ENABLE_CLOSE_LOOP:
5302 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005303 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5304 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305305 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5306 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 default:
5308 {
5309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005310 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 wniCfgId);
5312 return VOS_STATUS_E_INVAL;
5313 }
5314 }
5315}
Jeff Johnson295189b2012-06-20 16:38:30 -07005316/*
5317 * FUNCTION: WDA_UpdateCfgCallback
5318 *
5319 */
5320void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5321{
5322 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5323 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5324 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /*
5328 * currently there is no response message is expected between PE and
5329 * WDA, Failure return from WDI is a ASSERT condition
5330 */
5331 if(WDI_STATUS_SUCCESS != wdiStatus)
5332 {
5333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005334 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005335 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5336 }
5337
5338 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5339 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5340 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 return ;
5342}
Jeff Johnson295189b2012-06-20 16:38:30 -07005343/*
5344 * FUNCTION: WDA_UpdateCfg
5345 *
5346 */
5347VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5348{
5349
5350 WDI_Status status = WDI_STATUS_SUCCESS ;
5351 tANI_U32 val =0;
5352 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5353 tHalCfg *configData;
5354 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5355 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005357 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 if (NULL == pMac )
5359 {
5360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 return VOS_STATUS_E_FAILURE;
5363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005364 if(WDA_START_STATE != pWDA->wdaState)
5365 {
5366 return VOS_STATUS_E_FAILURE;
5367 }
5368
5369 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5370 {
5371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005372 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_ASSERT(0);
5374 return VOS_STATUS_E_FAILURE;
5375 }
5376
5377 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5378 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiCfgReqParam)
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_ASSERT(0);
5384 return VOS_STATUS_E_NOMEM;
5385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5387 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 if(NULL == wdiCfgReqParam->pConfigBuffer)
5389 {
5390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 vos_mem_free(wdiCfgReqParam);
5393 VOS_ASSERT(0);
5394 return VOS_STATUS_E_NOMEM;
5395 }
5396
5397 /*convert the WNI CFG Id to HAL CFG Id*/
5398 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5399 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5400
5401 /*TODO: revisit this for handling string parameters */
5402 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5403 &val) != eSIR_SUCCESS)
5404 {
5405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005406 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5408 vos_mem_free(wdiCfgReqParam);
5409 return eSIR_FAILURE;
5410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5412 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5413 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5414 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5415 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5416
5417 /* store Params pass it to WDI */
5418 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005419#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5420 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5421 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 if(IS_WDI_STATUS_FAILURE(status))
5423 {
5424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5425 "Failure in Update CFG WDI API, free all the memory " );
5426 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5427 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5428 pWDA->wdaWdiCfgApiMsgParam = NULL;
5429 /* Failure is not expected */
5430 VOS_ASSERT(0) ;
5431 }
5432#else
5433 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5434 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5435 pWDA->wdaWdiCfgApiMsgParam = NULL;
5436#endif
5437 return CONVERT_WDI2VOS_STATUS(status) ;
5438}
5439
Jeff Johnson295189b2012-06-20 16:38:30 -07005440VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5441 v_U8_t *pDefaultKeyId,
5442 v_U8_t *pNumKeys,
5443 WDI_KeysType *pWdiKeys )
5444{
5445 v_U32_t i, j, defKeyId = 0;
5446 v_U32_t val = SIR_MAC_KEY_LENGTH;
5447 VOS_STATUS status = WDI_STATUS_SUCCESS;
5448 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 if (NULL == pMac )
5450 {
5451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005452 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return VOS_STATUS_E_FAILURE;
5454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5456 &defKeyId ))
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5459 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5460 }
5461
5462 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 /* Need to extract ALL of the configured WEP Keys */
5464 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5465 {
5466 val = SIR_MAC_KEY_LENGTH;
5467 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5468 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5469 pWdiKeys[j].key,
5470 &val ))
5471 {
5472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005473 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 }
5475 else
5476 {
5477 pWdiKeys[j].keyId = (tANI_U8) i;
5478 /*
5479 * Actually, a DC (Don't Care) because
5480 * this is determined (and set) by PE/MLME
5481 */
5482 pWdiKeys[j].unicast = 0;
5483 /*
5484 * Another DC (Don't Care)
5485 */
5486 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5487 /* Another DC (Don't Care). Unused for WEP */
5488 pWdiKeys[j].paeRole = 0;
5489 /* Determined from wlan_cfgGetStr() above.*/
5490 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 j++;
5492 *pNumKeys = (tANI_U8) j;
5493 }
5494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 return status;
5496}
Jeff Johnson295189b2012-06-20 16:38:30 -07005497/*
5498 * FUNCTION: WDA_SetBssKeyReqCallback
5499 * send SET BSS key RSP back to PE
5500 */
5501void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5502{
5503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5504 tWDA_CbContext *pWDA;
5505 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005507 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 if(NULL == pWdaParams)
5509 {
5510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005511 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 VOS_ASSERT(0) ;
5513 return ;
5514 }
5515 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5516 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305517 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5518 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5520 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005521 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 return ;
5524}
Jeff Johnson295189b2012-06-20 16:38:30 -07005525/*
5526 * FUNCTION: WDA_ProcessSetBssKeyReq
5527 * Request to WDI for programming the BSS key( key for
5528 * broadcast/multicast frames Encryption)
5529 */
5530VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5531 tSetBssKeyParams *setBssKeyParams )
5532{
5533 WDI_Status status = WDI_STATUS_SUCCESS ;
5534 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5535 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5536 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5537 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 if(NULL == wdiSetBssKeyParam)
5542 {
5543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 VOS_ASSERT(0);
5546 return VOS_STATUS_E_NOMEM;
5547 }
5548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0);
5554 vos_mem_free(wdiSetBssKeyParam);
5555 return VOS_STATUS_E_NOMEM;
5556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 /* copy set BSS params to WDI structure */
5559 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5560 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5561 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 if(setBssKeyParams->encType != eSIR_ED_NONE)
5563 {
5564 if( setBssKeyParams->numKeys == 0 &&
5565 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5566 setBssKeyParams->encType == eSIR_ED_WEP104))
5567 {
5568 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5570 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5571 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5572 }
5573 else
5574 {
5575 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5576 {
5577 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5578 setBssKeyParams->key[keyIndex].keyId;
5579 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5580 setBssKeyParams->key[keyIndex].unicast;
5581 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5582 setBssKeyParams->key[keyIndex].keyDirection;
5583 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5584 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5585 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5586 setBssKeyParams->key[keyIndex].paeRole;
5587 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5588 setBssKeyParams->key[keyIndex].keyLength;
5589 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5590 setBssKeyParams->key[keyIndex].key,
5591 SIR_MAC_MAX_KEY_LENGTH);
5592 }
5593 }
5594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5596 setBssKeyParams->singleTidRc;
5597 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 /* Store set key pointer, as this will be used for response */
5599 /* store Params pass it to WDI */
5600 pWdaParams->pWdaContext = pWDA;
5601 pWdaParams->wdaMsgParam = setBssKeyParams;
5602 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5604 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5605
5606 if(IS_WDI_STATUS_FAILURE(status))
5607 {
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5609 "Failure in Set BSS Key Req WDI API, free all the memory " );
5610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5611 vos_mem_free(pWdaParams) ;
5612 setBssKeyParams->status = eSIR_FAILURE ;
5613 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 return CONVERT_WDI2VOS_STATUS(status) ;
5616}
Jeff Johnson295189b2012-06-20 16:38:30 -07005617/*
5618 * FUNCTION: WDA_RemoveBssKeyReqCallback
5619 * send SET BSS key RSP back to PE
5620 */
5621void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5622{
5623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5624 tWDA_CbContext *pWDA;
5625 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005627 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 if(NULL == pWdaParams)
5629 {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005631 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 VOS_ASSERT(0) ;
5633 return ;
5634 }
5635 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5636 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5638 vos_mem_free(pWdaParams) ;
5639
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005640 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 return ;
5643}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305644
5645/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305646 * FUNCTION: WDA_GetFrameLogRspCallback
5647 * recieves get frame log response from FW
5648 */
5649void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5650 void* pUserData)
5651{
5652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5653 tWDA_CbContext *pWDA = NULL;
5654 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5655
5656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5657 "<------ Entering: %s " ,__func__);
5658 if(NULL == pWdaParams)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5661 "%s: pWdaParams received NULL", __func__);
5662 VOS_ASSERT(0) ;
5663 return ;
5664 }
5665
5666 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5667 if (NULL == pWDA)
5668 {
5669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5670 "%s:pWDA is NULL", __func__);
5671 VOS_ASSERT(0);
5672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5673 vos_mem_free(pWdaParams);
5674 return ;
5675 }
5676
5677 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5678 if(NULL == pGetFrameLogReqParams)
5679 {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5681 "%s: pGetFrameLogReqParams received NULL", __func__);
5682 VOS_ASSERT(0);
5683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5684 vos_mem_free(pWdaParams);
5685 return;
5686 }
5687
Siddharth Bhal64246172015-02-27 01:04:37 +05305688 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305690 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5691 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305692 }
5693
5694 /* free WDI command buffer only */
5695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5696 vos_mem_free(pWdaParams->wdaMsgParam);
5697 vos_mem_free(pWdaParams);
5698
5699 return ;
5700
5701}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305702
5703/*
5704 * FUNCTION: WDA_RssiMonitorStopRspCallback
5705 * recieves Rssi Monitor stop response from FW
5706 */
5707void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5708 void* pUserData)
5709{
5710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5711 tSirRssiMonitorReq *pRssiMonitorReqParams;
5712
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5714 "<------ %s " ,__func__);
5715
5716 if(NULL == pWdaParams)
5717 {
5718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5719 "%s: pWdaParams received NULL", __func__);
5720 VOS_ASSERT(0);
5721 return ;
5722 }
5723
5724 if(NULL == pWdaParams->wdaMsgParam)
5725 {
5726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5727 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5728 VOS_ASSERT(0);
5729 vos_mem_free(pWdaParams);
5730 return ;
5731 }
5732
5733 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5734
5735 if(pRssiMonitorReqParams->rssiMonitorCallback)
5736 {
5737 pRssiMonitorReqParams->rssiMonitorCallback(
5738 pRssiMonitorReqParams->rssiMonitorCbContext,
5739 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5740 }
5741 else
5742 {
5743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5744 "%s: pFWLoggingInitParams callback is NULL", __func__);
5745 }
5746
5747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5748 vos_mem_free(pWdaParams->wdaMsgParam);
5749 vos_mem_free(pWdaParams);
5750
5751 return;
5752}
5753
5754/*
5755 * FUNCTION: WDA_RssiMonitorStartRspCallback
5756 * recieves Rssi Monitor start response from FW
5757 */
5758void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5759 void* pUserData)
5760{
5761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5762 tSirRssiMonitorReq *pRssiMonitorReqParams;
5763
5764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5765 "<------ %s " ,__func__);
5766
5767 if(NULL == pWdaParams)
5768 {
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5770 "%s: pWdaParams received NULL", __func__);
5771 VOS_ASSERT(0);
5772 return ;
5773 }
5774
5775 if(NULL == pWdaParams->wdaMsgParam)
5776 {
5777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5778 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5779 VOS_ASSERT(0);
5780 vos_mem_free(pWdaParams);
5781 return ;
5782 }
5783
5784 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5785
5786 if(pRssiMonitorReqParams->rssiMonitorCallback)
5787 {
5788 pRssiMonitorReqParams->rssiMonitorCallback(
5789 pRssiMonitorReqParams->rssiMonitorCbContext,
5790 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5791 }
5792 else
5793 {
5794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5795 "%s: pFWLoggingInitParams callback is NULL", __func__);
5796 }
5797
5798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5799 vos_mem_free(pWdaParams->wdaMsgParam);
5800 vos_mem_free(pWdaParams);
5801
5802 return;
5803}
5804
Siddharth Bhal64246172015-02-27 01:04:37 +05305805/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305806 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305807 * recieves Mgmt Logging init response from FW
5808 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305809void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305810 void* pUserData)
5811{
5812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305813 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305814 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305815
5816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5817 "<------ %s " ,__func__);
5818
5819 if(NULL == pWdaParams)
5820 {
5821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5822 "%s: pWdaParams received NULL", __func__);
5823 VOS_ASSERT(0);
5824 return ;
5825 }
5826
5827 if(NULL == pWdaParams->wdaMsgParam)
5828 {
5829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5830 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5831 VOS_ASSERT(0);
5832 vos_mem_free(pWdaParams);
5833 return ;
5834 }
5835
c_manjeecfd1efb2015-09-25 19:32:34 +05305836 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5837 if(NULL == pWdaParams)
5838 {
5839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5840 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5841 VOS_ASSERT(0);
5842 vos_mem_free(pWdaParams);
5843 return;
5844 }
5845
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305846 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305847 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305848
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305849 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305850 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305851 pFWLoggingInitParams->fwlogInitCallback(
5852 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305853 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305854 }
5855 else
5856 {
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305858 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305859 }
5860
c_manjeecfd1efb2015-09-25 19:32:34 +05305861 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5863 vos_mem_free(pWdaParams->wdaMsgParam);
5864 vos_mem_free(pWdaParams);
5865
5866 return;
5867}
5868
5869/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305870 * FUNCTION: WDA_SpoofMacAddrRspCallback
5871 * recieves spoof mac addr response from FW
5872 */
5873void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5874{
5875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5876 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305877
Siddharth Bhal171788a2014-09-29 21:02:40 +05305878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5879 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305880
Siddharth Bhal171788a2014-09-29 21:02:40 +05305881 if(NULL == pWdaParams)
5882 {
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5884 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305885 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305886 return ;
5887 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305889
Siddharth Bhal029d6732014-10-09 21:31:23 +05305890 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305892 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305893 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305894 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5895 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305896
Siddharth Bhal171788a2014-09-29 21:02:40 +05305897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305898 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305899 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305900
5901 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305902}
5903
Jeff Johnson295189b2012-06-20 16:38:30 -07005904/*
5905 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5906 * Request to WDI to remove the BSS key( key for broadcast/multicast
5907 * frames Encryption)
5908 */
5909VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5910 tRemoveBssKeyParams *removeBssKeyParams )
5911{
5912 WDI_Status status = WDI_STATUS_SUCCESS ;
5913 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5914 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5915 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(NULL == wdiRemoveBssKeyParam)
5920 {
5921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_ASSERT(0);
5924 return VOS_STATUS_E_NOMEM;
5925 }
5926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5927 if(NULL == pWdaParams)
5928 {
5929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 VOS_ASSERT(0);
5932 vos_mem_free(wdiRemoveBssKeyParam);
5933 return VOS_STATUS_E_NOMEM;
5934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 /* copy Remove BSS key params to WDI structure*/
5936 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5937 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5938 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5939 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5940 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 /* Store remove key pointer, as this will be used for response */
5942 /* store Params pass it to WDI */
5943 pWdaParams->pWdaContext = pWDA;
5944 pWdaParams->wdaMsgParam = removeBssKeyParams;
5945 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5947 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 if(IS_WDI_STATUS_FAILURE(status))
5949 {
5950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5951 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5953 vos_mem_free(pWdaParams) ;
5954 removeBssKeyParams->status = eSIR_FAILURE ;
5955 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 return CONVERT_WDI2VOS_STATUS(status) ;
5958}
Jeff Johnson295189b2012-06-20 16:38:30 -07005959/*
5960 * FUNCTION: WDA_SetBssKeyReqCallback
5961 * send SET BSS key RSP back to PE
5962 */
5963void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5964{
5965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5966 tWDA_CbContext *pWDA;
5967 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005969 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 if(NULL == pWdaParams)
5971 {
5972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005973 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 VOS_ASSERT(0) ;
5975 return ;
5976 }
5977 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5978 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305979 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5980 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5982 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005983 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 return ;
5986}
Jeff Johnson295189b2012-06-20 16:38:30 -07005987/*
5988 * FUNCTION: WDA_ProcessSetStaKeyReq
5989 * Request to WDI for programming the STA key( key for Unicast frames
5990 * Encryption)
5991 */
5992VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5993 tSetStaKeyParams *setStaKeyParams )
5994{
5995 WDI_Status status = WDI_STATUS_SUCCESS ;
5996 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5997 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5998 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5999 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006002 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 if(NULL == wdiSetStaKeyParam)
6004 {
6005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 VOS_ASSERT(0);
6008 return VOS_STATUS_E_NOMEM;
6009 }
6010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6011 if(NULL == pWdaParams)
6012 {
6013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 VOS_ASSERT(0);
6016 vos_mem_free(wdiSetStaKeyParam);
6017 return VOS_STATUS_E_NOMEM;
6018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 /* copy set STA key params to WDI structure */
6022 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6023 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6024 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6025 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 if(setStaKeyParams->encType != eSIR_ED_NONE)
6027 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006028 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6030 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6031 {
6032 WDA_GetWepKeysFromCfg( pWDA,
6033 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6034 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6035 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6036 }
6037 else
6038 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6040 keyIndex++)
6041 {
6042 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6043 setStaKeyParams->key[keyIndex].keyId;
6044 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6045 setStaKeyParams->key[keyIndex].unicast;
6046 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6047 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6049 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6050 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6051 setStaKeyParams->key[keyIndex].paeRole;
6052 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6053 setStaKeyParams->key[keyIndex].keyLength;
6054 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6055 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6056 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6057 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6058 {
6059 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6060 }
6061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6063 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 }
6065 }
6066 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6067 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 /* Store set key pointer, as this will be used for response */
6069 /* store Params pass it to WDI */
6070 pWdaParams->pWdaContext = pWDA;
6071 pWdaParams->wdaMsgParam = setStaKeyParams;
6072 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6074 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 if(IS_WDI_STATUS_FAILURE(status))
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6078 "Failure in set STA Key Req WDI API, free all the memory " );
6079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6080 vos_mem_free(pWdaParams) ;
6081 setStaKeyParams->status = eSIR_FAILURE ;
6082 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 return CONVERT_WDI2VOS_STATUS(status) ;
6085}
Jeff Johnson295189b2012-06-20 16:38:30 -07006086/*
6087 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6088 * send SET Bcast STA key RSP back to PE
6089 */
6090void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6091{
6092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6093 tWDA_CbContext *pWDA;
6094 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 if(NULL == pWdaParams)
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 VOS_ASSERT(0) ;
6102 return ;
6103 }
6104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6105 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6107 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006108 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 return ;
6111}
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113/*
6114 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6115 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6116 * Encryption)
6117 */
6118VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6119 tSetStaKeyParams *setStaKeyParams )
6120{
6121 WDI_Status status = WDI_STATUS_SUCCESS ;
6122 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6123 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6124 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6125 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 if(NULL == wdiSetStaKeyParam)
6130 {
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_ASSERT(0);
6134 return VOS_STATUS_E_NOMEM;
6135 }
6136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6137 if(NULL == pWdaParams)
6138 {
6139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006141 VOS_ASSERT(0);
6142 vos_mem_free(wdiSetStaKeyParam);
6143 return VOS_STATUS_E_NOMEM;
6144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 /* copy set STA key params to WDI structure */
6148 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6149 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6150 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6151 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 if(setStaKeyParams->encType != eSIR_ED_NONE)
6153 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6155 keyIndex++)
6156 {
6157 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6158 setStaKeyParams->key[keyIndex].keyId;
6159 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6160 setStaKeyParams->key[keyIndex].unicast;
6161 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6162 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6164 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6165 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6166 setStaKeyParams->key[keyIndex].paeRole;
6167 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6168 setStaKeyParams->key[keyIndex].keyLength;
6169 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6170 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6173 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 }
6175 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 /* Store set key pointer, as this will be used for response */
6177 /* store Params pass it to WDI */
6178 pWdaParams->pWdaContext = pWDA;
6179 pWdaParams->wdaMsgParam = setStaKeyParams;
6180 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6182 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 if(IS_WDI_STATUS_FAILURE(status))
6184 {
6185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6186 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6188 vos_mem_free(pWdaParams) ;
6189 setStaKeyParams->status = eSIR_FAILURE ;
6190 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 return CONVERT_WDI2VOS_STATUS(status) ;
6193}
Jeff Johnson295189b2012-06-20 16:38:30 -07006194/*
6195 * FUNCTION: WDA_RemoveStaKeyReqCallback
6196 * send SET BSS key RSP back to PE
6197 */
6198void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6199{
6200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6201 tWDA_CbContext *pWDA;
6202 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(NULL == pWdaParams)
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 VOS_ASSERT(0) ;
6210 return ;
6211 }
6212 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6213 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6215 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006216 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 return ;
6219}
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221/*
6222 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6223 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6224 */
6225VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6226 tRemoveStaKeyParams *removeStaKeyParams )
6227{
6228 WDI_Status status = WDI_STATUS_SUCCESS ;
6229 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6230 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6231 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6232 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 if(NULL == wdiRemoveStaKeyParam)
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_ASSERT(0);
6240 return VOS_STATUS_E_NOMEM;
6241 }
6242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6243 if(NULL == pWdaParams)
6244 {
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 VOS_ASSERT(0);
6248 vos_mem_free(wdiRemoveStaKeyParam);
6249 return VOS_STATUS_E_NOMEM;
6250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 /* copy remove STA key params to WDI structure*/
6252 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6253 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6254 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6255 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6256 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 /* Store remove key pointer, as this will be used for response */
6258 /* store Params pass it to WDI */
6259 pWdaParams->pWdaContext = pWDA;
6260 pWdaParams->wdaMsgParam = removeStaKeyParams;
6261 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6263 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 if(IS_WDI_STATUS_FAILURE(status))
6265 {
6266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6267 "Failure in remove STA Key Req WDI API, free all the memory " );
6268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6269 vos_mem_free(pWdaParams) ;
6270 removeStaKeyParams->status = eSIR_FAILURE ;
6271 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 return CONVERT_WDI2VOS_STATUS(status) ;
6274}
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_IsHandleSetLinkStateReq
6277 * Update the WDA state and return the status to handle this message or not
6278 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006279WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6280 tWDA_CbContext *pWDA,
6281 tLinkStateParams *linkStateParams)
6282{
6283 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 switch(linkStateParams->state)
6285 {
6286 case eSIR_LINK_PREASSOC_STATE:
6287 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6288 /*
6289 * set the WDA state to PRE ASSOC
6290 * copy the BSSID into pWDA to use it in join request and return,
6291 * No need to handle these messages.
6292 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006293 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6294 {
6295 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006297 }
6298 else
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006302 VOS_ASSERT(0);
6303 }
6304
6305 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6306 {
6307 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006309 }
6310 else
6311 {
6312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006314 VOS_ASSERT(0);
6315 }
6316
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6318 *channel and after ) so reset the WDA state to ready when the second
6319 * time UMAC issue the link state with PREASSOC
6320 */
6321 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6322 {
6323 /* RESET WDA state back to WDA_READY_STATE */
6324 pWDA->wdaState = WDA_READY_STATE;
6325 }
6326 else
6327 {
6328 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6329 }
6330 //populate linkState info in WDACbCtxt
6331 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 default:
6334 if(pWDA->wdaState != WDA_READY_STATE)
6335 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006336 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6337 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6338 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6339 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6340 *the ASSERT in WDA_Stop during module unload.*/
6341 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6342 {
6343 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006344 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006345 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006346 else
6347 {
6348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006349 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006350 status = WDA_IGNORE_SET_LINK_STATE;
6351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 }
6353 break;
6354 }
6355
6356 return status;
6357}
Jeff Johnson295189b2012-06-20 16:38:30 -07006358/*
6359 * FUNCTION: WDA_SetLinkStateCallback
6360 * call back function for set link state from WDI
6361 */
6362void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6363{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306364 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 tLinkStateParams *linkStateParams;
6366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006368 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306369 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 {
6371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 VOS_ASSERT(0) ;
6374 return ;
6375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306377 if (NULL == pWDA)
6378 {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6380 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6382 vos_mem_free(pWdaParams->wdaMsgParam);
6383 vos_mem_free(pWdaParams);
6384
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306385 VOS_ASSERT(0);
6386 return ;
6387 }
6388
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 /*
6391 * In STA mode start the BA activity check timer after association
6392 * and in AP mode start BA activity check timer after BSS start */
6393 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6394 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006395 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6396 ((status == WDI_STATUS_SUCCESS) &&
6397 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 {
6399 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 /*
6403 * No respone required for WDA_SET_LINK_STATE so free the request
6404 * param here
6405 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6407 vos_mem_free(pWdaParams);
6408
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 return ;
6410}
Jeff Johnson295189b2012-06-20 16:38:30 -07006411/*
6412 * FUNCTION: WDA_ProcessSetLinkState
6413 * Request to WDI to set the link status.
6414 */
6415VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6416 tLinkStateParams *linkStateParams)
6417{
6418 WDI_Status status = WDI_STATUS_SUCCESS ;
6419 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6420 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6421 sizeof(WDI_SetLinkReqParamsType)) ;
6422 tWDA_ReqParams *pWdaParams ;
6423 tpAniSirGlobal pMac;
6424 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6425
6426 if(NULL == pMac)
6427 {
6428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006429 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006431 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 return VOS_STATUS_E_FAILURE;
6433 }
6434
6435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 if(NULL == wdiSetLinkStateParam)
6438 {
6439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 VOS_ASSERT(0);
6442 return VOS_STATUS_E_NOMEM;
6443 }
6444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6445 if(NULL == pWdaParams)
6446 {
6447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006449 VOS_ASSERT(0);
6450 vos_mem_free(wdiSetLinkStateParam);
6451 return VOS_STATUS_E_NOMEM;
6452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 if(WDA_IGNORE_SET_LINK_STATE ==
6454 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6455 {
6456 status = WDI_STATUS_E_FAILURE;
6457 }
6458 else
6459 {
6460 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6461 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6463 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6465 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 pWdaParams->pWdaContext = pWDA;
6467 /* Store remove key pointer, as this will be used for response */
6468 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 /* store Params pass it to WDI */
6470 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6471 /* Stop Timer only other than GO role and concurrent session */
6472 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006473 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6475 {
6476 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6479 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 if(IS_WDI_STATUS_FAILURE(status))
6481 {
6482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6483 "Failure in set link state Req WDI API, free all the memory " );
6484 }
6485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 if(IS_WDI_STATUS_FAILURE(status))
6487 {
6488 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006489 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 vos_mem_free(pWdaParams);
6491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 return CONVERT_WDI2VOS_STATUS(status) ;
6493}
Jeff Johnson295189b2012-06-20 16:38:30 -07006494/*
6495 * FUNCTION: WDA_GetStatsReqParamsCallback
6496 * send the response to PE with Stats received from WDI
6497 */
6498void WDA_GetStatsReqParamsCallback(
6499 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6500 void* pUserData)
6501{
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306503 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504
6505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006506 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 pGetPEStatsRspParams =
6508 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6509 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6510
6511 if(NULL == pGetPEStatsRspParams)
6512 {
6513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 VOS_ASSERT(0);
6516 return;
6517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306519 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6521 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006522
6523 //Fill the Session Id Properly in PE
6524 pGetPEStatsRspParams->sessionId = 0;
6525 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006526 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6528 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 vos_mem_copy( pGetPEStatsRspParams + 1,
6530 wdiGetStatsRsp + 1,
6531 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306532
6533 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6534 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6535 vosMsg.bodyval = 0;
6536 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6537 (vos_msg_t*)&vosMsg))
6538 {
6539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6540 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6541 vos_mem_free(pGetPEStatsRspParams);
6542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006543
6544 return;
6545}
6546
Jeff Johnson295189b2012-06-20 16:38:30 -07006547/*
6548 * FUNCTION: WDA_ProcessGetStatsReq
6549 * Request to WDI to get the statistics
6550 */
6551VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6552 tAniGetPEStatsReq *pGetStatsParams)
6553{
6554 WDI_Status status = WDI_STATUS_SUCCESS ;
6555 WDI_GetStatsReqParamsType wdiGetStatsParam;
6556 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306557 vos_msg_t vosMsg;
6558
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6562 pGetStatsParams->staId;
6563 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6564 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 status = WDI_GetStatsReq(&wdiGetStatsParam,
6567 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 if(IS_WDI_STATUS_FAILURE(status))
6569 {
6570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6571 "Failure in Get Stats Req WDI API, free all the memory " );
6572 pGetPEStatsRspParams =
6573 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6574 if(NULL == pGetPEStatsRspParams)
6575 {
6576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006579 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 return VOS_STATUS_E_NOMEM;
6581 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306582 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6584 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6585 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306586
6587 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6588 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6589 vosMsg.bodyval = 0;
6590 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6591 (vos_msg_t*)&vosMsg))
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6594 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6595 vos_mem_free(pGetPEStatsRspParams);
6596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 /* Free the request message */
6599 vos_mem_free(pGetStatsParams);
6600 return CONVERT_WDI2VOS_STATUS(status);
6601}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006602
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006603#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006604/*
6605 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6606 * send the response to PE with roam Rssi received from WDI
6607 */
6608void WDA_GetRoamRssiReqParamsCallback(
6609 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6610 void* pUserData)
6611{
6612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6613 tWDA_CbContext *pWDA = NULL;
6614 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6615 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6617 "<------ %s " ,__func__);
6618 if(NULL == pWdaParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6621 "%s: pWdaParams received NULL", __func__);
6622 VOS_ASSERT(0) ;
6623 return ;
6624 }
6625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6626 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6627
6628 if(NULL == pGetRoamRssiReqParams)
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6631 "%s: pGetRoamRssiReqParams received NULL", __func__);
6632 VOS_ASSERT(0);
6633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6634 vos_mem_free(pWdaParams);
6635 return ;
6636 }
6637 pGetRoamRssiRspParams =
6638 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6639
6640 if(NULL == pGetRoamRssiRspParams)
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6643 "%s: VOS MEM Alloc Failure", __func__);
6644 VOS_ASSERT(0);
6645 return;
6646 }
6647 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6648 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006649 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006650 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6651 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6652
6653 /* Assign get roam rssi req (backup) in to the response */
6654 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6655
6656 /* free WDI command buffer */
6657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6658 vos_mem_free(pWdaParams) ;
6659
6660 /* send response to UMAC*/
6661 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6662
6663 return;
6664}
6665
6666
6667
6668/*
6669 * FUNCTION: WDA_ProcessGetRoamRssiReq
6670 * Request to WDI to get the statistics
6671 */
6672VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6673 tAniGetRssiReq *pGetRoamRssiParams)
6674{
6675 WDI_Status status = WDI_STATUS_SUCCESS ;
6676 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6677 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6678 tWDA_ReqParams *pWdaParams = NULL;
6679
6680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6681 "------> %s " ,__func__);
6682 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6683 pGetRoamRssiParams->staId;
6684 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6685
6686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6687 if(NULL == pWdaParams)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6690 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306691 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006692 VOS_ASSERT(0);
6693 return VOS_STATUS_E_NOMEM;
6694 }
6695
6696 /* Store Init Req pointer, as this will be used for response */
6697 pWdaParams->pWdaContext = pWDA;
6698
6699 /* Take Get roam Rssi req backup as it stores the callback to be called after
6700 receiving the response */
6701 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6702 pWdaParams->wdaWdiApiMsgParam = NULL;
6703
6704 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6705 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6706 if(IS_WDI_STATUS_FAILURE(status))
6707 {
6708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6709 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6710 pGetRoamRssiRspParams =
6711 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6712 if(NULL == pGetRoamRssiRspParams)
6713 {
6714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6715 "%s: VOS MEM Alloc Failure", __func__);
6716 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306717 vos_mem_free(pGetRoamRssiParams);
6718 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006719 return VOS_STATUS_E_NOMEM;
6720 }
6721 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6722 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6723 pGetRoamRssiRspParams->rssi = 0;
6724 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6725 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6726 (void *)pGetRoamRssiRspParams, 0) ;
6727 }
6728 return CONVERT_WDI2VOS_STATUS(status);
6729}
6730#endif
6731
6732
Jeff Johnson295189b2012-06-20 16:38:30 -07006733/*
6734 * FUNCTION: WDA_UpdateEDCAParamCallback
6735 * call back function for Update EDCA params from WDI
6736 */
6737void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6738{
6739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6740 tEdcaParams *pEdcaParams;
6741
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 if(NULL == pWdaParams)
6745 {
6746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 VOS_ASSERT(0) ;
6749 return ;
6750 }
6751 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6753 vos_mem_free(pWdaParams);
6754 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 return ;
6756}
Jeff Johnson295189b2012-06-20 16:38:30 -07006757/*
6758 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6759 * Request to WDI to Update the EDCA params.
6760 */
6761VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6762 tEdcaParams *pEdcaParams)
6763{
6764 WDI_Status status = WDI_STATUS_SUCCESS ;
6765 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6766 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6767 sizeof(WDI_UpdateEDCAParamsType)) ;
6768 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006770 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 if(NULL == wdiEdcaParam)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006776 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 return VOS_STATUS_E_NOMEM;
6778 }
6779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6780 if(NULL == pWdaParams)
6781 {
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 VOS_ASSERT(0);
6785 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006786 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 return VOS_STATUS_E_NOMEM;
6788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006790 /*
6791 Since firmware is not using highperformance flag, we have removed
6792 this flag from wdiEDCAInfo structure to match sizeof the structure
6793 between host and firmware.In future if we are planning to use
6794 highperformance flag then Please define this flag in wdiEDCAInfo
6795 structure, update it here and send it to firmware. i.e.
6796 Following is the original line which we removed as part of the fix
6797 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6798 pEdcaParams->highPerformance;
6799 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6801 &pEdcaParams->acbe);
6802 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6803 &pEdcaParams->acbk);
6804 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6805 &pEdcaParams->acvi);
6806 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6807 &pEdcaParams->acvo);
6808 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 pWdaParams->pWdaContext = pWDA;
6810 /* Store remove key pointer, as this will be used for response */
6811 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 /* store Params pass it to WDI */
6813 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6815 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 if(IS_WDI_STATUS_FAILURE(status))
6817 {
6818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6819 "Failure in Update EDCA Params WDI API, free all the memory " );
6820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6821 vos_mem_free(pWdaParams);
6822 vos_mem_free(pEdcaParams);
6823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 return CONVERT_WDI2VOS_STATUS(status) ;
6825}
Jeff Johnson295189b2012-06-20 16:38:30 -07006826/*
6827 * FUNCTION: WDA_AddBAReqCallback
6828 * send ADD BA RSP back to PE
6829 */
6830void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6831 void* pUserData)
6832{
6833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6834 tWDA_CbContext *pWDA;
6835 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306838 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 {
6840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 VOS_ASSERT(0) ;
6843 return ;
6844 }
6845 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306846 if (NULL == pWDA)
6847 {
6848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6849 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6851 vos_mem_free(pWdaParams->wdaMsgParam);
6852 vos_mem_free(pWdaParams);
6853
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306854 VOS_ASSERT(0);
6855 return ;
6856 }
6857
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6860 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006861 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 return ;
6864}
6865
Jeff Johnson295189b2012-06-20 16:38:30 -07006866/*
6867 * FUNCTION: WDA_ProcessAddBAReq
6868 * Request to WDI to Update the ADDBA REQ params.
6869 */
6870VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306871 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006872{
Jeff Johnson43971f52012-07-17 12:26:56 -07006873 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6875 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6876 sizeof(WDI_AddBAReqParamsType)) ;
6877 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006879 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 if(NULL == wdiAddBAReqParam)
6881 {
6882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 VOS_ASSERT(0);
6885 return VOS_STATUS_E_NOMEM;
6886 }
6887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6888 if(NULL == pWdaParams)
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_ASSERT(0);
6893 vos_mem_free(wdiAddBAReqParam);
6894 return VOS_STATUS_E_NOMEM;
6895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 do
6897 {
6898 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 wdiAddBaInfo->ucSTAIdx = staIdx ;
6900 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306901 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 } while(0) ;
6903 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 pWdaParams->pWdaContext = pWDA;
6905 /* store Params pass it to WDI */
6906 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6907 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006908 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6909 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910
Jeff Johnson43971f52012-07-17 12:26:56 -07006911 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 {
6913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006914 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6915 status = CONVERT_WDI2VOS_STATUS(wstatus);
6916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 vos_mem_free(pWdaParams);
6918 pAddBAReqParams->status = eSIR_FAILURE;
6919 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6920 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006921 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006922}
Jeff Johnson295189b2012-06-20 16:38:30 -07006923/*
6924 * FUNCTION: WDA_AddBASessionReqCallback
6925 * send ADD BA SESSION RSP back to PE/(or TL)
6926 */
6927void WDA_AddBASessionReqCallback(
6928 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6929{
6930 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306932 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 if(NULL == pWdaParams)
6937 {
6938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006939 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 VOS_ASSERT(0) ;
6941 return ;
6942 }
6943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306944 if (NULL == pWDA)
6945 {
6946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6947 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6949 vos_mem_free(pWdaParams->wdaMsgParam);
6950 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306951 VOS_ASSERT(0);
6952 return ;
6953 }
6954
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 if( NULL == pAddBAReqParams )
6957 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006959 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return ;
6964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306968 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 * another request to HAL(/WDI) (ADD_BA_REQ)
6970 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 if((VOS_STATUS_SUCCESS ==
6972 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306973 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 {
6975 /* Update TL with BA info received from HAL/WDI */
6976 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6977 wdiAddBaSession->usBaSessionID,
6978 wdiAddBaSession->ucSTAIdx,
6979 wdiAddBaSession->ucBaTID,
6980 wdiAddBaSession->ucBaBufferSize,
6981 wdiAddBaSession->ucWinSize,
6982 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306984 wdiAddBaSession->ucSTAIdx,
6985 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 }
6987 else
6988 {
6989 pAddBAReqParams->status =
6990 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6991
6992 /* Setting Flag to indicate that Set BA is success */
6993 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6994 {
6995 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6996 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6997 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 /*Reset the WDA state to READY */
7002 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 return ;
7004}
7005
Jeff Johnson295189b2012-06-20 16:38:30 -07007006/*
7007 * FUNCTION: WDA_ProcessAddBASessionReq
7008 * Request to WDI to Update the ADDBA REQ params.
7009 */
7010VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7011 tAddBAParams *pAddBAReqParams)
7012{
7013 WDI_Status status = WDI_STATUS_SUCCESS ;
7014 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7015 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7016 sizeof(WDI_AddBASessionReqParamsType)) ;
7017 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007018 WLANTL_STAStateType tlSTAState = 0;
7019
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007021 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 if(NULL == wdiAddBASessionReqParam)
7023 {
7024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 VOS_ASSERT(0);
7027 return VOS_STATUS_E_NOMEM;
7028 }
7029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7030 if(NULL == pWdaParams)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0);
7035 vos_mem_free(wdiAddBASessionReqParam);
7036 return VOS_STATUS_E_NOMEM;
7037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 /*
7039 * Populate ADD BA parameters and pass these paarmeters to WDI.
7040 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7041 * the state to track if these is BA recipient case or BA initiator
7042 * case.
7043 */
7044 do
7045 {
7046 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7047 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7048 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7049 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7050 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7051 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7052 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7055 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7056 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7057 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7058 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307059
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 }while(0) ;
7061 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 pWdaParams->pWdaContext = pWDA;
7063 /* Store ADD BA pointer, as this will be used for response */
7064 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7065 /* store Params pass it to WDI */
7066 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007067
7068 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7069 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7070 */
7071 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7072 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7073 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007075 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007076 status = WDI_STATUS_E_NOT_ALLOWED;
7077 pAddBAReqParams->status =
7078 CONVERT_WDI2SIR_STATUS(status) ;
7079 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7080 /*Reset the WDA state to READY */
7081 pWDA->wdaState = WDA_READY_STATE;
7082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7083 vos_mem_free(pWdaParams);
7084
7085 return CONVERT_WDI2VOS_STATUS(status) ;
7086 }
7087
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7089 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(IS_WDI_STATUS_FAILURE(status))
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007093 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007095 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007096 pAddBAReqParams->status =
7097 CONVERT_WDI2SIR_STATUS(status) ;
7098 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007099 /*Reset the WDA state to READY */
7100 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 vos_mem_free(pWdaParams);
7103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105}
Jeff Johnson295189b2012-06-20 16:38:30 -07007106/*
7107 * FUNCTION: WDA_DelBANotifyTL
7108 * send DEL BA IND to TL
7109 */
7110void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7111 tDelBAParams *pDelBAReqParams)
7112{
7113 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7114 //tSirMsgQ msg;
7115 vos_msg_t vosMsg;
7116 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pDelBAInd)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7125 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7126 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7127 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007128
Jeff Johnson295189b2012-06-20 16:38:30 -07007129
7130 vosMsg.type = WDA_DELETEBA_IND;
7131 vosMsg.bodyptr = pDelBAInd;
7132 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7133 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7134 {
7135 vosStatus = VOS_STATUS_E_BADMSG;
7136 }
7137}
Jeff Johnson295189b2012-06-20 16:38:30 -07007138/*
7139 * FUNCTION: WDA_DelBAReqCallback
7140 * send DEL BA RSP back to PE
7141 */
7142void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7143{
7144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7145 tWDA_CbContext *pWDA;
7146 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 if(NULL == pWdaParams)
7150 {
7151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007152 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 VOS_ASSERT(0) ;
7154 return ;
7155 }
7156 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307157
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 /* Notify TL about DEL BA in case of recipinet */
7160 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7161 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7162 {
7163 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 /*
7166 * No respone required for WDA_DELBA_IND so just free the request
7167 * param here
7168 */
7169 vos_mem_free(pDelBAReqParams);
7170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7171 vos_mem_free(pWdaParams);
7172 return ;
7173}
7174
Jeff Johnson295189b2012-06-20 16:38:30 -07007175/*
7176 * FUNCTION: WDA_ProcessDelBAReq
7177 * Request to WDI to Update the DELBA REQ params.
7178 */
7179VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7180 tDelBAParams *pDelBAReqParams)
7181{
7182 WDI_Status status = WDI_STATUS_SUCCESS ;
7183 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7184 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7185 sizeof(WDI_DelBAReqParamsType)) ;
7186 tWDA_ReqParams *pWdaParams ;
7187 tANI_U16 staIdx = 0;
7188 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 if(NULL == wdiDelBAReqParam)
7192 {
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 VOS_ASSERT(0);
7196 return VOS_STATUS_E_NOMEM;
7197 }
7198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7199 if(NULL == pWdaParams)
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 VOS_ASSERT(0);
7204 vos_mem_free(wdiDelBAReqParam);
7205 return VOS_STATUS_E_NOMEM;
7206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7208 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7209 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7210 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 pWdaParams->pWdaContext = pWDA;
7212 /* Store DEL BA pointer, as this will be used for response */
7213 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 /* store Params pass it to WDI */
7215 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7217 * maintained in WDA, so that WDA can retry for another BA session
7218 */
7219 staIdx = pDelBAReqParams->staIdx;
7220 tid = pDelBAReqParams->baTID;
7221 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 status = WDI_DelBAReq(wdiDelBAReqParam,
7223 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if(IS_WDI_STATUS_FAILURE(status))
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7227 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7229 vos_mem_free(pWdaParams->wdaMsgParam);
7230 vos_mem_free(pWdaParams);
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007233}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007234
7235/*
7236 * FUNCTION: WDA_UpdateChReqCallback
7237 *
7238 */
7239void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7240{
Siddharth Bhala006c122014-05-03 12:13:27 +05307241 tWDA_ReqParams *pWdaParams;
7242 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7243 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7244 WDI_UpdateChannelReqinfoType *pChanInfoType;
7245 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007246
7247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7248 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307249 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007250 {
7251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307252 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007253 VOS_ASSERT(0);
7254 return;
7255 }
7256
Siddharth Bhala006c122014-05-03 12:13:27 +05307257 pWdaParams = (tWDA_ReqParams *)pUserData;
7258 pwdiUpdateChReqParam =
7259 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7260 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7261 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7262 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007263 /*
7264 * currently there is no response message is expected between PE and
7265 * WDA, Failure return from WDI is a ASSERT condition
7266 */
7267 vos_mem_free(pChanInfoType);
7268 vos_mem_free(pChanList);
7269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7270 vos_mem_free(pWdaParams);
7271
7272 return;
7273}
7274
7275/*
7276 * FUNCTION: WDA_ProcessUpdateChannelList
7277 * Request to WDI to Update the ChannelList params.
7278 */
7279VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7280 tSirUpdateChanList *pChanList)
7281{
7282 WDI_Status status = WDI_STATUS_SUCCESS;
7283 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7284 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7285 WDI_UpdateChannelReqinfoType *pChanInfoType;
7286 tWDA_ReqParams *pWdaParams;
7287 wpt_uint8 i;
7288
7289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7290 "------> %s " ,__func__);
7291 if(NULL == pChanList)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7294 "%s: NULL pChanList", __func__);
7295 VOS_ASSERT(0);
7296 return VOS_STATUS_E_INVAL;
7297 }
7298
7299 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7300 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007302 "Update channel list capability Not Supported");
7303 vos_mem_free(pChanList);
7304 return VOS_STATUS_E_INVAL;
7305 }
7306
7307 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7308 sizeof(WDI_UpdateChReqParamsType));
7309 if(NULL == pwdiUpdateChReqParam)
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7313 __func__);
7314 VOS_ASSERT(0);
7315 vos_mem_free(pChanList);
7316 return VOS_STATUS_E_NOMEM;
7317 }
7318 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7319 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7320 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7321 pChanList->numChan);
7322 if(NULL == pChanInfoType)
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7325 "%s: VOS MEM Alloc Failure", __func__);
7326 VOS_ASSERT(0);
7327 vos_mem_free(pChanList);
7328 vos_mem_free(pwdiUpdateChReqParam);
7329 return VOS_STATUS_E_NOMEM;
7330 }
7331 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7332 * pChanList->numChan);
7333 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7334
7335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7336 if(NULL == pWdaParams)
7337 {
7338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7339 "%s: VOS MEM Alloc Failure", __func__);
7340 VOS_ASSERT(0);
7341 vos_mem_free(pChanList);
7342 vos_mem_free(pChanInfoType);
7343 vos_mem_free(pwdiUpdateChReqParam);
7344 return VOS_STATUS_E_NOMEM;
7345 }
7346 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7347
7348 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7349 {
7350 pChanInfoType->mhz =
7351 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7352
7353 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7354 pChanInfoType->band_center_freq2 = 0;
7355
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7357 "chan[%d] = %u", i, pChanInfoType->mhz);
7358 if (pChanList->chanParam[i].dfsSet)
7359 {
7360 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7362 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7363 pChanList->chanParam[i].dfsSet);
7364 }
7365
7366 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7367 {
7368 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7369 }
7370 else
7371 {
7372 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7373 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7374 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7375 }
7376
7377 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7378 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307379 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007380 pChanInfoType++;
7381 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007382 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7383 pWdaParams->pWdaContext = pWDA;
7384 pWdaParams->wdaMsgParam = (void *)pChanList;
7385 /* store Params pass it to WDI */
7386 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7387 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7388 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7389 if(IS_WDI_STATUS_FAILURE(status))
7390 {
7391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7392 "Failure in Update Channel REQ Params WDI API, free all the memory");
7393 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7394 vos_mem_free(pwdiUpdateChReqParam);
7395 vos_mem_free(pWdaParams->wdaMsgParam);
7396 vos_mem_free(pWdaParams);
7397 }
7398 return CONVERT_WDI2VOS_STATUS(status);
7399}
7400
Jeff Johnson295189b2012-06-20 16:38:30 -07007401/*
7402 * FUNCTION: WDA_AddTSReqCallback
7403 * send ADD TS RSP back to PE
7404 */
7405void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7406{
7407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307408 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 tAddTsParams *pAddTsReqParams;
7410
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007412 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 if(NULL == pWdaParams)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 VOS_ASSERT(0) ;
7418 return ;
7419 }
7420 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307421 if (NULL == pWDA)
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7424 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7426 vos_mem_free(pWdaParams->wdaMsgParam);
7427 vos_mem_free(pWdaParams);
7428
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307429 VOS_ASSERT(0);
7430 return ;
7431 }
7432
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7435 vos_mem_free(pWdaParams);
7436
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007437 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 return ;
7440}
7441
Jeff Johnson295189b2012-06-20 16:38:30 -07007442/*
7443 * FUNCTION: WDA_ProcessAddTSReq
7444 * Request to WDI to Update the ADD TS REQ params.
7445 */
7446VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7447 tAddTsParams *pAddTsReqParams)
7448{
7449 WDI_Status status = WDI_STATUS_SUCCESS ;
7450 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7451 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7452 sizeof(WDI_AddTSReqParamsType)) ;
7453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007456 if(NULL == wdiAddTSReqParam)
7457 {
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 VOS_ASSERT(0);
7461 return VOS_STATUS_E_NOMEM;
7462 }
7463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7464 if(NULL == pWdaParams)
7465 {
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 VOS_ASSERT(0);
7469 vos_mem_free(wdiAddTSReqParam);
7470 return VOS_STATUS_E_NOMEM;
7471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7473 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 //TS IE
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7476 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7477 pAddTsReqParams->tspec.length;
7478
7479 //TS IE : TS INFO : TRAFFIC
7480 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7481 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7482 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7483 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7484 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7485 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7486 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7487 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7488 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7489 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7490 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7491 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7492 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7493 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7495 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7496
7497 //TS IE : TS INFO : SCHEDULE
7498 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7499 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7501 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 //TS IE
7503 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7504 pAddTsReqParams->tspec.nomMsduSz;
7505 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7506 pAddTsReqParams->tspec.maxMsduSz;
7507 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7508 pAddTsReqParams->tspec.minSvcInterval;
7509 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7510 pAddTsReqParams->tspec.maxSvcInterval;
7511 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7512 pAddTsReqParams->tspec.inactInterval;
7513 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7514 pAddTsReqParams->tspec.suspendInterval;
7515 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7516 pAddTsReqParams->tspec.svcStartTime;
7517 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7518 pAddTsReqParams->tspec.minDataRate;
7519 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7520 pAddTsReqParams->tspec.meanDataRate;
7521 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7522 pAddTsReqParams->tspec.peakDataRate;
7523 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7524 pAddTsReqParams->tspec.maxBurstSz;
7525 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7526 pAddTsReqParams->tspec.delayBound;
7527 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7528 pAddTsReqParams->tspec.minPhyRate;
7529 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7530 pAddTsReqParams->tspec.surplusBw;
7531 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7532 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 /* TODO: tAddTsParams doesn't have the following fields */
7534#if 0
7535 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7536 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7537 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7538 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7539#endif
7540 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7541
7542 pWdaParams->pWdaContext = pWDA;
7543 /* Store ADD TS pointer, as this will be used for response */
7544 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 /* store Params pass it to WDI */
7546 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 status = WDI_AddTSReq(wdiAddTSReqParam,
7548 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 if(IS_WDI_STATUS_FAILURE(status))
7550 {
7551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7552 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7554 vos_mem_free(pWdaParams);
7555 pAddTsReqParams->status = eSIR_FAILURE ;
7556 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007559}
7560
Jeff Johnson295189b2012-06-20 16:38:30 -07007561/*
7562 * FUNCTION: WDA_DelTSReqCallback
7563 * send DEL TS RSP back to PE
7564 */
7565void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7566{
7567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7571 vos_mem_free(pWdaParams->wdaMsgParam) ;
7572 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 /*
7574 * No respone required for WDA_DEL_TS_REQ so just free the request
7575 * param here
7576 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 return ;
7578}
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_ProcessDelTSReq
7582 * Request to WDI to Update the DELTS REQ params.
7583 */
7584VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7585 tDelTsParams *pDelTSReqParams)
7586{
7587 WDI_Status status = WDI_STATUS_SUCCESS ;
7588 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7589 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7590 sizeof(WDI_DelTSReqParamsType)) ;
7591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 if(NULL == wdiDelTSReqParam)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 return VOS_STATUS_E_NOMEM;
7600 }
7601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7602 if(NULL == pWdaParams)
7603 {
7604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_ASSERT(0);
7607 vos_mem_free(wdiDelTSReqParam);
7608 return VOS_STATUS_E_NOMEM;
7609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7611 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7612 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7613 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7614 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 pWdaParams->pWdaContext = pWDA;
7616 /* Store DEL TS pointer, as this will be used for response */
7617 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 /* store Params pass it to WDI */
7619 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 status = WDI_DelTSReq(wdiDelTSReqParam,
7621 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 if(IS_WDI_STATUS_FAILURE(status))
7623 {
7624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7625 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7627 vos_mem_free(pWdaParams->wdaMsgParam);
7628 vos_mem_free(pWdaParams);
7629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631}
Jeff Johnson295189b2012-06-20 16:38:30 -07007632/*
7633 * FUNCTION: WDA_UpdateBeaconParamsCallback
7634 * Free the memory. No need to send any response to PE in this case
7635 */
7636void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7637{
7638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(NULL == pWdaParams)
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007644 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 VOS_ASSERT(0) ;
7646 return ;
7647 }
7648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7649 vos_mem_free(pWdaParams->wdaMsgParam) ;
7650 vos_mem_free(pWdaParams);
7651 /*
7652 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7653 * param here
7654 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 return ;
7656}
Jeff Johnson295189b2012-06-20 16:38:30 -07007657/*
7658 * FUNCTION: WDA_ProcessUpdateBeaconParams
7659 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7660 */
7661VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7662 tUpdateBeaconParams *pUpdateBeaconParams)
7663{
7664 WDI_Status status = WDI_STATUS_SUCCESS ;
7665 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7666 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7667 sizeof(WDI_UpdateBeaconParamsType)) ;
7668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 if(NULL == wdiUpdateBeaconParams)
7672 {
7673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 VOS_ASSERT(0);
7676 return VOS_STATUS_E_NOMEM;
7677 }
7678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7679 if(NULL == pWdaParams)
7680 {
7681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 VOS_ASSERT(0);
7684 vos_mem_free(wdiUpdateBeaconParams);
7685 return VOS_STATUS_E_NOMEM;
7686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7688 pUpdateBeaconParams->bssIdx;
7689 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7690 pUpdateBeaconParams->fShortPreamble;
7691 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7692 pUpdateBeaconParams->fShortSlotTime;
7693 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7694 pUpdateBeaconParams->beaconInterval;
7695 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7696 pUpdateBeaconParams->llaCoexist;
7697 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7698 pUpdateBeaconParams->llbCoexist;
7699 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7700 pUpdateBeaconParams->llgCoexist;
7701 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7702 pUpdateBeaconParams->ht20MhzCoexist;
7703 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7704 pUpdateBeaconParams->llnNonGFCoexist;
7705 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7706 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7707 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7708 pUpdateBeaconParams->fRIFSMode;
7709 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7710 pUpdateBeaconParams->paramChangeBitmap;
7711 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7712
7713 pWdaParams->pWdaContext = pWDA;
7714 /* Store UpdateBeacon Req pointer, as this will be used for response */
7715 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 /* store Params pass it to WDI */
7717 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7719 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7720 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 if(IS_WDI_STATUS_FAILURE(status))
7722 {
7723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7724 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7726 vos_mem_free(pWdaParams->wdaMsgParam);
7727 vos_mem_free(pWdaParams);
7728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007730}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007731#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007732/*
7733 * FUNCTION: WDA_TSMStatsReqCallback
7734 * send TSM Stats RSP back to PE
7735 */
7736void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7737{
7738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7739 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007740 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7741 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742
7743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007744 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 if(NULL == pWdaParams)
7746 {
7747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 VOS_ASSERT(0) ;
7750 return ;
7751 }
7752 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307753 if (NULL == pWDA)
7754 {
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7756 "%s:pWDA is NULL", __func__);
7757 VOS_ASSERT(0);
7758 return ;
7759 }
7760
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007761 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7762
7763 if(NULL == pGetTsmStatsReqParams)
7764 {
7765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7766 "%s: pGetTsmStatsReqParams received NULL", __func__);
7767 VOS_ASSERT(0);
7768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7769 vos_mem_free(pWdaParams);
7770 return;
7771 }
7772
7773 pTsmRspParams =
7774 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 if( NULL == pTsmRspParams )
7776 {
7777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007778 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 VOS_ASSERT( 0 );
7780 return ;
7781 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007782 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7783 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7784 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7785
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7787 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7788 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7789 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7790 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7791 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7792 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7793 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7794 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7795 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007796
7797 /* Assign get tsm stats req req (backup) in to the response */
7798 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7799
7800 /* free WDI command buffer */
7801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7802 vos_mem_free(pWdaParams);
7803
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 return ;
7806}
7807
7808
Jeff Johnson295189b2012-06-20 16:38:30 -07007809/*
7810 * FUNCTION: WDA_ProcessTsmStatsReq
7811 * Request to WDI to get the TSM Stats params.
7812 */
7813VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007814 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007815{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007816 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007818 tWDA_ReqParams *pWdaParams = NULL;
7819 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7820
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007822 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7824 sizeof(WDI_TSMStatsReqParamsType));
7825 if(NULL == wdiTSMReqParam)
7826 {
7827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 VOS_ASSERT(0);
7830 return VOS_STATUS_E_NOMEM;
7831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7833 if(NULL == pWdaParams)
7834 {
7835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 VOS_ASSERT(0);
7838 vos_mem_free(wdiTSMReqParam);
7839 return VOS_STATUS_E_NOMEM;
7840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7842 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7843 pTsmStats->bssId,
7844 sizeof(wpt_macAddr));
7845 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7846
7847 pWdaParams->pWdaContext = pWDA;
7848 /* Store TSM Stats pointer, as this will be used for response */
7849 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007850 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 status = WDI_TSMStatsReq(wdiTSMReqParam,
7852 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 if(IS_WDI_STATUS_FAILURE(status))
7854 {
7855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7856 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007857 vos_mem_free(pWdaParams);
7858
7859 pGetTsmStatsRspParams =
7860 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7861 if(NULL == pGetTsmStatsRspParams)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7864 "%s: VOS MEM Alloc Failure", __func__);
7865 VOS_ASSERT(0);
7866 vos_mem_free(pTsmStats);
7867 return VOS_STATUS_E_NOMEM;
7868 }
7869 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7870 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7871 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7872
7873 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 return CONVERT_WDI2VOS_STATUS(status) ;
7876}
7877#endif
7878/*
7879 * FUNCTION: WDA_SendBeaconParamsCallback
7880 * No need to send any response to PE in this case
7881 */
7882void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7883{
7884
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 return ;
7888}
Jeff Johnson295189b2012-06-20 16:38:30 -07007889/*
7890 * FUNCTION: WDA_ProcessSendBeacon
7891 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7892 * start beacon trasmission
7893 */
7894VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7895 tSendbeaconParams *pSendbeaconParams)
7896{
7897 WDI_Status status = WDI_STATUS_SUCCESS ;
7898 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7902 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7903 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7904 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7906 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307907 /* p2pIeOffset should be atleast greater than timIeOffset */
7908 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7909 (pSendbeaconParams->p2pIeOffset <
7910 pSendbeaconParams->timIeOffset))
7911 {
7912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7913 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307914 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307915 VOS_ASSERT( 0 );
7916 return WDI_STATUS_E_FAILURE;
7917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7919 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 /* Copy the beacon template to local buffer */
7921 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7922 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7923 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7924
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7926 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 if(IS_WDI_STATUS_FAILURE(status))
7928 {
7929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7930 "Failure in SEND BEACON REQ Params WDI API" );
7931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 vos_mem_free(pSendbeaconParams);
7933 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934}
Jeff Johnson295189b2012-06-20 16:38:30 -07007935/*
7936 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7937 * No need to send any response to PE in this case
7938 */
7939void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7940{
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007942 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 return ;
7944}
7945
Jeff Johnson295189b2012-06-20 16:38:30 -07007946/*
7947 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7948 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7949 * send probe response
7950 */
7951VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7952 tSendProbeRespParams *pSendProbeRspParams)
7953{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007954 WDI_Status status = WDI_STATUS_SUCCESS;
7955 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7956 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007958 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007959
7960 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307961 {
7962 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007963 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307964 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007965
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007967 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007969 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 /* Copy the Probe Response template to local buffer */
7972 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007973 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 pSendProbeRspParams->pProbeRespTemplate,
7975 pSendProbeRspParams->probeRespTemplateLen);
7976 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007977 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7979 WDI_PROBE_REQ_BITMAP_IE_LEN);
7980
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007981 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007982
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007983 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 if(IS_WDI_STATUS_FAILURE(status))
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7988 "Failure in SEND Probe RSP Params WDI API" );
7989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007991 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007993}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007994#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007995/*
7996 * FUNCTION: WDA_SetMaxTxPowerCallBack
7997 * send the response to PE with power value received from WDI
7998 */
7999void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8000 void* pUserData)
8001{
8002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8003 tWDA_CbContext *pWDA = NULL;
8004 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8005
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 if(NULL == pWdaParams)
8009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 VOS_ASSERT(0) ;
8013 return ;
8014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308016 if (NULL == pWDA)
8017 {
8018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8019 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8021 vos_mem_free(pWdaParams->wdaMsgParam);
8022 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308023 VOS_ASSERT(0);
8024 return ;
8025 }
8026
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if( NULL == pMaxTxPowerParams )
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008031 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008032 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 return ;
8036 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008037
Jeff Johnson295189b2012-06-20 16:38:30 -07008038
8039 /*need to free memory for the pointers used in the
8040 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8042 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008044
Jeff Johnson295189b2012-06-20 16:38:30 -07008045
8046 /* send response to UMAC*/
8047 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8048
8049 return;
8050}
Jeff Johnson295189b2012-06-20 16:38:30 -07008051/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008052 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 * Request to WDI to send set Max Tx Power Request
8054 */
8055 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8056 tMaxTxPowerParams *MaxTxPowerParams)
8057{
8058 WDI_Status status = WDI_STATUS_SUCCESS;
8059 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8060 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008061
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008064
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8066 sizeof(WDI_SetMaxTxPowerParamsType));
8067 if(NULL == wdiSetMaxTxPowerParams)
8068 {
8069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 VOS_ASSERT(0);
8072 return VOS_STATUS_E_NOMEM;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8075 if(NULL == pWdaParams)
8076 {
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 vos_mem_free(wdiSetMaxTxPowerParams);
8080 VOS_ASSERT(0);
8081 return VOS_STATUS_E_NOMEM;
8082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 /* Copy.Max.Tx.Power Params to WDI structure */
8084 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8085 MaxTxPowerParams->bssId,
8086 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8088 MaxTxPowerParams->selfStaMacAddr,
8089 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8091 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 pWdaParams->pWdaContext = pWDA;
8094 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 /* store Params pass it to WDI */
8096 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8098 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 if(IS_WDI_STATUS_FAILURE(status))
8100 {
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8102 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8104 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008105 /* send response to UMAC*/
8106 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 }
8108 return CONVERT_WDI2VOS_STATUS(status);
8109
8110}
Jeff Johnson295189b2012-06-20 16:38:30 -07008111#endif
schang86c22c42013-03-13 18:41:24 -07008112
8113/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008114 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8115 * send the response to PE with power value received from WDI
8116 */
8117void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8118 *pwdiSetMaxTxPowerPerBandRsp,
8119 void* pUserData)
8120{
8121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8122 tWDA_CbContext *pWDA = NULL;
8123 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8124
8125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8126 "<------ %s ", __func__);
8127 if (NULL == pWdaParams)
8128 {
8129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8130 "%s: pWdaParams received NULL", __func__);
8131 VOS_ASSERT(0);
8132 return ;
8133 }
8134 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308135 if (NULL == pWDA)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8138 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8140 vos_mem_free(pWdaParams->wdaMsgParam);
8141 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308142 VOS_ASSERT(0);
8143 return ;
8144 }
8145
Arif Hussaina5ebce02013-08-09 15:09:58 -07008146 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8147 if ( NULL == pMxTxPwrPerBandParams )
8148 {
8149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8150 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8151 VOS_ASSERT(0);
8152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8153 vos_mem_free(pWdaParams);
8154 return;
8155 }
8156
8157 /*need to free memory for the pointers used in the
8158 WDA Process.Set Max Tx Power Req function*/
8159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8160 vos_mem_free(pWdaParams);
8161 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8162
8163 /* send response to UMAC*/
8164 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8165 pMxTxPwrPerBandParams, 0);
8166
8167 return;
8168}
8169
8170/*
8171 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8172 * Request to WDI to send set Max Tx Power Per band Request
8173 */
8174 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8175 tMaxTxPowerPerBandParams
8176 *MaxTxPowerPerBandParams)
8177{
8178 WDI_Status status = WDI_STATUS_SUCCESS;
8179 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8180 tWDA_ReqParams *pWdaParams = NULL;
8181
8182 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8183 "------> %s ", __func__);
8184
8185 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8186 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8187
8188 if (NULL == wdiSetMxTxPwrPerBandParams)
8189 {
8190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8191 "%s: VOS MEM Alloc Failure", __func__);
8192 VOS_ASSERT(0);
8193 return VOS_STATUS_E_NOMEM;
8194 }
8195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8196 if (NULL == pWdaParams)
8197 {
8198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8199 "%s: VOS MEM Alloc Failure", __func__);
8200 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8201 VOS_ASSERT(0);
8202 return VOS_STATUS_E_NOMEM;
8203 }
8204 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8205 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8206 MaxTxPowerPerBandParams->bandInfo;
8207 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8208 MaxTxPowerPerBandParams->power;
8209 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8210 pWdaParams->pWdaContext = pWDA;
8211 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8212 /* store Params pass it to WDI */
8213 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8214 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8215 WDA_SetMaxTxPowerPerBandCallBack,
8216 pWdaParams);
8217 if (IS_WDI_STATUS_FAILURE(status))
8218 {
8219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8220 "Failure in SET MAX TX Power REQ Params WDI API,"
8221 " free all the memory");
8222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8223 vos_mem_free(pWdaParams);
8224 /* send response to UMAC*/
8225 WDA_SendMsg(pWDA,
8226 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8227 MaxTxPowerPerBandParams, 0);
8228 }
8229 return CONVERT_WDI2VOS_STATUS(status);
8230}
8231
8232/*
schang86c22c42013-03-13 18:41:24 -07008233 * FUNCTION: WDA_SetTxPowerCallBack
8234 * send the response to PE with power value received from WDI
8235 */
8236void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8237 void* pUserData)
8238{
8239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8240 tWDA_CbContext *pWDA = NULL;
8241 tSirSetTxPowerReq *pTxPowerParams = NULL;
8242
8243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8244 "<------ %s ", __func__);
8245 if(NULL == pWdaParams)
8246 {
8247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8248 "%s: pWdaParams received NULL", __func__);
8249 VOS_ASSERT(0) ;
8250 return ;
8251 }
8252 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308253 if (NULL == pWDA)
8254 {
8255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8256 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8258 vos_mem_free(pWdaParams->wdaMsgParam);
8259 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308260 VOS_ASSERT(0);
8261 return ;
8262 }
8263
schang86c22c42013-03-13 18:41:24 -07008264 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8265 if(NULL == pTxPowerParams)
8266 {
8267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8268 "%s: pTxPowerParams received NULL " ,__func__);
8269 VOS_ASSERT(0);
8270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8271 vos_mem_free(pWdaParams);
8272 return ;
8273 }
8274
8275 /*need to free memory for the pointers used in the
8276 WDA Process.Set Max Tx Power Req function*/
8277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8278 vos_mem_free(pWdaParams);
8279
8280 /* send response to UMAC*/
8281 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8282 return;
8283}
8284
8285/*
8286 * FUNCTION: WDA_ProcessSetTxPowerReq
8287 * Request to WDI to send set Tx Power Request
8288 */
8289 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8290 tSirSetTxPowerReq *txPowerParams)
8291{
8292 WDI_Status status = WDI_STATUS_SUCCESS;
8293 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8294 tWDA_ReqParams *pWdaParams = NULL;
8295
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8297 "------> %s ", __func__);
8298
8299 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8300 sizeof(WDI_SetTxPowerParamsType));
8301 if(NULL == wdiSetTxPowerParams)
8302 {
8303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8304 "%s: VOS MEM Alloc Failure", __func__);
8305 VOS_ASSERT(0);
8306 return VOS_STATUS_E_NOMEM;
8307 }
8308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8309 if(NULL == pWdaParams)
8310 {
8311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8312 "%s: VOS MEM Alloc Failure", __func__);
8313 vos_mem_free(wdiSetTxPowerParams);
8314 VOS_ASSERT(0);
8315 return VOS_STATUS_E_NOMEM;
8316 }
8317 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8318 txPowerParams->bssIdx;
8319 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8320 txPowerParams->mwPower;
8321 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8322 pWdaParams->pWdaContext = pWDA;
8323 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8324 /* store Params pass it to WDI */
8325 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8326 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8327 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8328 if(IS_WDI_STATUS_FAILURE(status))
8329 {
8330 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8331 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8333 vos_mem_free(pWdaParams);
8334 /* send response to UMAC*/
8335 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8336 }
8337 return CONVERT_WDI2VOS_STATUS(status);
8338}
8339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340/*
8341 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8342 * Free the memory. No need to send any response to PE in this case
8343 */
8344void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8345{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008349 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008350
8351 if(NULL == pWdaParams)
8352 {
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008355 VOS_ASSERT(0) ;
8356 return ;
8357 }
8358
8359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8360 vos_mem_free(pWdaParams->wdaMsgParam) ;
8361 vos_mem_free(pWdaParams);
8362
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 /*
8364 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8365 * so just free the request param here
8366 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 return ;
8368}
8369
Jeff Johnson295189b2012-06-20 16:38:30 -07008370/*
8371 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8372 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8373 */
8374VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8375 tP2pPsParams *pP2pPsConfigParams)
8376{
8377 WDI_Status status = WDI_STATUS_SUCCESS ;
8378 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8379 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8380 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008381 tWDA_ReqParams *pWdaParams = NULL;
8382
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 if(NULL == wdiSetP2PGONOAReqParam)
8386 {
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008388 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308389 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 VOS_ASSERT(0);
8391 return VOS_STATUS_E_NOMEM;
8392 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008393
8394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8395 if(NULL == pWdaParams)
8396 {
8397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008398 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008399 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008400 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008401 VOS_ASSERT(0);
8402 return VOS_STATUS_E_NOMEM;
8403 }
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8406 pP2pPsConfigParams->opp_ps;
8407 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8408 pP2pPsConfigParams->ctWindow;
8409 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8410 pP2pPsConfigParams->count;
8411 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8412 pP2pPsConfigParams->duration;
8413 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8414 pP2pPsConfigParams->interval;
8415 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8416 pP2pPsConfigParams->single_noa_duration;
8417 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8418 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008419
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8421 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008422 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8423
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008425 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8426 pWdaParams->pWdaContext = pWDA;
8427
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008429 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8430
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(IS_WDI_STATUS_FAILURE(status))
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8434 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8436 vos_mem_free(pWdaParams->wdaMsgParam);
8437 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 return CONVERT_WDI2VOS_STATUS(status);
8440
Jeff Johnson295189b2012-06-20 16:38:30 -07008441}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308442
8443#ifdef FEATURE_WLAN_TDLS
8444/*
8445 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8446 * Free the memory. No need to send any response to PE in this case
8447 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308448void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8449 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308450{
8451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8452 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308453 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308454
8455
8456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8457 "<------ %s " ,__func__);
8458 if(NULL == pWdaParams)
8459 {
8460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8461 "%s: pWdaParams received NULL", __func__);
8462 VOS_ASSERT(0) ;
8463 return ;
8464 }
8465 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8466
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308467 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308468 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8470 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8472 vos_mem_free(pWdaParams->wdaMsgParam);
8473 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308474 VOS_ASSERT(0);
8475 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308476 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308477
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308478 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8479 if( NULL == pTdlsLinkEstablishParams )
8480 {
8481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8482 "%s: pTdlsLinkEstablishParams "
8483 "received NULL " ,__func__);
8484 VOS_ASSERT(0);
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8486 vos_mem_free(pWdaParams);
8487 return ;
8488 }
8489 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8490 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308492 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308493 /* send response to UMAC*/
8494 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8495
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308496 return ;
8497}
8498
8499VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8500 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8501{
8502 WDI_Status status = WDI_STATUS_SUCCESS ;
8503 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8504 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8505 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8506 tWDA_ReqParams *pWdaParams = NULL;
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8508 "------> %s " ,__func__);
8509 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308513 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308514 VOS_ASSERT(0);
8515 return VOS_STATUS_E_NOMEM;
8516 }
8517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8518 if(NULL == pWdaParams)
8519 {
8520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8521 "%s: VOS MEM Alloc Failure", __func__);
8522 vos_mem_free(pTdlsLinkEstablishParams);
8523 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8524 VOS_ASSERT(0);
8525 return VOS_STATUS_E_NOMEM;
8526 }
8527 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308528 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308529 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308530 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308531 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308532 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308533 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308534 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308535 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308536 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308537 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8538 pTdlsLinkEstablishParams->isOffChannelSupported;
8539
8540 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8541 pTdlsLinkEstablishParams->validChannels,
8542 pTdlsLinkEstablishParams->validChannelsLen);
8543
8544 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8545 pTdlsLinkEstablishParams->validChannelsLen;
8546
8547 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8548 pTdlsLinkEstablishParams->validOperClasses,
8549 pTdlsLinkEstablishParams->validOperClassesLen);
8550 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8551 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308552
8553 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8554 /* Store msg pointer from PE, as this will be used for response */
8555 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8556 /* store Params pass it to WDI */
8557 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8558 pWdaParams->pWdaContext = pWDA;
8559
8560 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8561 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8562 WDA_SetTDLSLinkEstablishReqParamsCallback,
8563 pWdaParams);
8564 if(IS_WDI_STATUS_FAILURE(status))
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8569 vos_mem_free(pWdaParams->wdaMsgParam);
8570 vos_mem_free(pWdaParams);
8571 }
8572 return CONVERT_WDI2VOS_STATUS(status);
8573}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308574
8575// tdlsoffchan
8576void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8577 void* pUserData)
8578{
8579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8580 tWDA_CbContext *pWDA = NULL;
8581 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8582
8583
8584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8585 "<------ %s " ,__func__);
8586 if(NULL == pWdaParams)
8587 {
8588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308590 VOS_ASSERT(0) ;
8591 return ;
8592 }
8593 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8594
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308595 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308596 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8598 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8600 vos_mem_free(pWdaParams->wdaMsgParam);
8601 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308602 VOS_ASSERT(0);
8603 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308604 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308605
Atul Mittalc0f739f2014-07-31 13:47:47 +05308606 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308607 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "%s: pTdlsChanSwitchParams "
8611 "received NULL " ,__func__);
8612 VOS_ASSERT(0);
8613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8614 vos_mem_free(pWdaParams);
8615 return ;
8616 }
8617 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8618 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8620 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308621 /* send response to UMAC*/
8622 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308623
8624 return ;
8625}
8626VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8627 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8628{
8629 WDI_Status status = WDI_STATUS_SUCCESS ;
8630 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8631 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8632 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8633 tWDA_ReqParams *pWdaParams = NULL;
8634
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8636 "Enter: %s ",__func__);
8637 if(NULL == wdiSetTDLSChanSwitchReqParam)
8638 {
8639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8640 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308641 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308642 VOS_ASSERT(0);
8643 return VOS_STATUS_E_NOMEM;
8644 }
8645
8646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8647 if(NULL == pWdaParams)
8648 {
8649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8650 "%s: VOS MEM Alloc Failure", __func__);
8651 vos_mem_free(pTdlsChanSwitchParams);
8652 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8653 VOS_ASSERT(0);
8654 return VOS_STATUS_E_NOMEM;
8655 }
8656 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8657 pTdlsChanSwitchParams->staIdx;
8658 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8659 pTdlsChanSwitchParams->tdlsSwMode;
8660 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8661 pTdlsChanSwitchParams->operClass;
8662 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8663 pTdlsChanSwitchParams->tdlsOffCh;
8664 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8665 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8666
8667
8668 /* Store msg pointer from PE, as this will be used for response */
8669 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8670 /* store Params pass it to WDI */
8671 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8672 pWdaParams->pWdaContext = pWDA;
8673 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8674 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8675 WDA_SetTDLSChanSwitchReqParamsCallback,
8676 pWdaParams);
8677 if(IS_WDI_STATUS_FAILURE(status))
8678 {
8679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8680 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8682 vos_mem_free(pWdaParams->wdaMsgParam);
8683 vos_mem_free(pWdaParams);
8684 }
8685 return CONVERT_WDI2VOS_STATUS(status);
8686}
8687#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308688
8689
Jeff Johnson295189b2012-06-20 16:38:30 -07008690#ifdef WLAN_FEATURE_VOWIFI_11R
8691/*
8692 * FUNCTION: WDA_AggrAddTSReqCallback
8693 * send ADD AGGREGATED TS RSP back to PE
8694 */
8695void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8696{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308698 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008699 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008702 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008703 if(NULL == pWdaParams)
8704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008706 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008707 VOS_ASSERT(0) ;
8708 return ;
8709 }
8710
8711 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308712 if (NULL == pWDA)
8713 {
8714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8715 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8717 vos_mem_free(pWdaParams->wdaMsgParam);
8718 vos_mem_free(pWdaParams);
8719
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308720 VOS_ASSERT(0);
8721 return ;
8722 }
8723
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008724 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008725
8726 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8727 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008728 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008731
8732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8733 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 return ;
8735}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008736/*
8737 * FUNCTION: WDA_ProcessAddTSReq
8738 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8739 */
8740VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8741 tAggrAddTsParams *pAggrAddTsReqParams)
8742{
8743 WDI_Status status = WDI_STATUS_SUCCESS ;
8744 int i;
8745 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008746 tWDA_ReqParams *pWdaParams = NULL;
8747
8748
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8752 sizeof(WDI_AggrAddTSReqParamsType)) ;
8753 if(NULL == wdiAggrAddTSReqParam)
8754 {
8755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008756 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308757 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008758 VOS_ASSERT(0);
8759 return VOS_STATUS_E_NOMEM;
8760 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761
8762
8763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8764 if(NULL == pWdaParams)
8765 {
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008768 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008769 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008770 VOS_ASSERT(0);
8771 return VOS_STATUS_E_NOMEM;
8772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8774 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8775 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008776 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8777 {
8778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8780 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8782 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8784 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8786 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8788 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8790 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8792 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8794 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8796 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8798 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8800 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8802 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8804 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8806 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8808 pAggrAddTsReqParams->tspec[i].inactInterval;
8809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8810 pAggrAddTsReqParams->tspec[i].suspendInterval;
8811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8812 pAggrAddTsReqParams->tspec[i].svcStartTime;
8813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8814 pAggrAddTsReqParams->tspec[i].minDataRate;
8815 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8816 pAggrAddTsReqParams->tspec[i].meanDataRate;
8817 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8818 pAggrAddTsReqParams->tspec[i].peakDataRate;
8819 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8820 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8821 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8822 pAggrAddTsReqParams->tspec[i].delayBound;
8823 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8824 pAggrAddTsReqParams->tspec[i].minPhyRate;
8825 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8826 pAggrAddTsReqParams->tspec[i].surplusBw;
8827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8828 pAggrAddTsReqParams->tspec[i].mediumTime;
8829 }
8830
8831 /* TODO: tAggrAddTsParams doesn't have the following fields */
8832#if 0
8833 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8834 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8835 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8836 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8837#endif
8838 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8839
8840 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008841 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8844
8845 pWdaParams->pWdaContext = pWDA;
8846
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008848 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8849
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 if(IS_WDI_STATUS_FAILURE(status))
8851 {
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8853 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008854
8855 /* send the failure response back to PE*/
8856 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8857 {
8858 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8859 }
8860
8861 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8862 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05308863
8864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8865 vos_mem_free(pWdaParams);
8866
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 return CONVERT_WDI2VOS_STATUS(status) ;
8869}
8870#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008871/*
Mihir Shetea4306052014-03-25 00:02:54 +05308872 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 * send Enter IMPS RSP back to PE
8874 */
Mihir Shetea4306052014-03-25 00:02:54 +05308875void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008876{
Mihir Shetea4306052014-03-25 00:02:54 +05308877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308878 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308879
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308881 "<------ %s status=%d" ,__func__,status);
8882 if(NULL == pWdaParams)
8883 {
8884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8885 "%s: pWdaParams received NULL", __func__);
8886 VOS_ASSERT(0);
8887 return;
8888 }
8889
8890 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308891 if (NULL == pWDA)
8892 {
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8894 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8896 vos_mem_free(pWdaParams->wdaMsgParam);
8897 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308898 VOS_ASSERT(0);
8899 return ;
8900 }
Mihir Shetea4306052014-03-25 00:02:54 +05308901
8902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8903 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308904 if (WDI_STATUS_SUCCESS != status)
8905 {
8906 pWDA->failureCounts.enterImpsFailureCount++;
8907 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8908 pWDA->failureCounts.enterImpsFailureCount)
8909 {
8910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8911 "%s: Status %d fail count %d", __func__, status,
8912 pWDA->failureCounts.enterImpsFailureCount);
8913 pWDA->failureCounts.enterImpsFailureCount = 0;
8914 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8915 WLAN_LOG_INDICATOR_HOST_DRIVER,
8916 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8917 FALSE, TRUE);
8918 }
8919 }
8920 else
8921 {
8922 pWDA->failureCounts.enterImpsFailureCount = 0;
8923 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008924 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 return ;
8926}
Mihir Shetea4306052014-03-25 00:02:54 +05308927
8928
8929/*
8930 * FUNCTION: WDA_EnterImpsReqCallback
8931 * Free memory and send Enter IMPS RSP back to PE.
8932 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8933 */
8934void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8935{
8936 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308937 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308938
8939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8940 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8941
8942 if(NULL == pWdaParams)
8943 {
8944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8945 "%s: pWdaParams received NULL", __func__);
8946 VOS_ASSERT(0);
8947 return;
8948 }
8949
8950 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308951 if (NULL == pWDA)
8952 {
8953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8954 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8956 vos_mem_free(pWdaParams->wdaMsgParam);
8957 vos_mem_free(pWdaParams);
8958
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308959 VOS_ASSERT(0);
8960 return ;
8961 }
8962
Mihir Shetea4306052014-03-25 00:02:54 +05308963
8964 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8965 {
8966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8967 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308968 pWDA->failureCounts.enterImpsFailureCount++;
8969 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8970 pWDA->failureCounts.enterImpsFailureCount)
8971 {
8972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8973 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8974 pWDA->failureCounts.enterImpsFailureCount);
8975 pWDA->failureCounts.enterImpsFailureCount = 0;
8976 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8977 WLAN_LOG_INDICATOR_HOST_DRIVER,
8978 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8979 FALSE, TRUE);
8980 }
Mihir Shetea4306052014-03-25 00:02:54 +05308981 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8982 CONVERT_WDI2SIR_STATUS(wdiStatus));
8983 }
8984
8985 return;
8986}
Jeff Johnson295189b2012-06-20 16:38:30 -07008987/*
8988 * FUNCTION: WDA_ProcessEnterImpsReq
8989 * Request to WDI to Enter IMPS power state.
8990 */
8991VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8992{
8993 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308994 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8995 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308996 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008998 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308999
9000
9001 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9002 if (NULL == wdiEnterImpsReqParams)
9003 {
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9005 "%s: VOS MEM Alloc Failure", __func__);
9006 VOS_ASSERT(0);
9007 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9008 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9009 return VOS_STATUS_E_NOMEM;
9010 }
9011
9012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9013 if (NULL == pWdaParams)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9016 "%s: VOS MEM Alloc Failure", __func__);
9017 VOS_ASSERT(0);
9018 vos_mem_free(wdiEnterImpsReqParams);
9019 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9020 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9021 return VOS_STATUS_E_NOMEM;
9022 }
9023
9024 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9025 wdiEnterImpsReqParams->pUserData = pWdaParams;
9026
9027 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9028 pWdaParams->wdaMsgParam = NULL;
9029 pWdaParams->pWdaContext = pWDA;
9030
9031 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9032 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9033 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 if(IS_WDI_STATUS_FAILURE(status))
9035 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309036 if (! (failcnt & 0xF))
9037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9038 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9039 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309040 vos_mem_free(wdiEnterImpsReqParams);
9041 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009042 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 return CONVERT_WDI2VOS_STATUS(status) ;
9045}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309046
9047/*
9048 * FUNCTION: WDA_ExitImpsRespCallback
9049 * send Exit IMPS RSP back to PE
9050 */
9051void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9052{
9053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9054 tWDA_CbContext *pWDA;
9055
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9057 "<------ %s " ,__func__);
9058
9059 if (NULL == pWdaParams)
9060 {
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9062 "%s: pWdaParams received NULL", __func__);
9063 VOS_ASSERT(0);
9064 return;
9065 }
9066 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9067
9068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9069 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309070 if (WDI_STATUS_SUCCESS != status)
9071 {
9072 pWDA->failureCounts.exitImpsFailureCount++;
9073 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9074 pWDA->failureCounts.exitImpsFailureCount)
9075 {
9076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9077 "%s: Status %d fail count %d", __func__,
9078 status,
9079 pWDA->failureCounts.exitImpsFailureCount);
9080 pWDA->failureCounts.exitImpsFailureCount = 0;
9081 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9082 WLAN_LOG_INDICATOR_HOST_DRIVER,
9083 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9084 FALSE, TRUE);
9085 }
9086 }
9087 else
9088 {
9089 pWDA->failureCounts.exitImpsFailureCount = 0;
9090 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309091
9092 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9093 return;
9094}
9095
Jeff Johnson295189b2012-06-20 16:38:30 -07009096/*
9097 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 */
9099void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9100{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309102 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009104 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309105 if(NULL == pWdaParams)
9106 {
9107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9108 "%s: pWdaParams received NULL", __func__);
9109 VOS_ASSERT(0);
9110 return;
9111 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309112 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309113 if (IS_WDI_STATUS_FAILURE(status))
9114 {
9115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9116 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309117
9118 pWDA->failureCounts.exitImpsFailureCount++;
9119 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9120 pWDA->failureCounts.exitImpsFailureCount)
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9123 "%s: wdiStatus %d fail count %d", __func__,
9124 status,
9125 pWDA->failureCounts.exitImpsFailureCount);
9126 pWDA->failureCounts.exitImpsFailureCount = 0;
9127 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9128 WLAN_LOG_INDICATOR_HOST_DRIVER,
9129 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9130 FALSE, TRUE);
9131 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309132 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9133 {
9134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9135 FL("reload wlan driver"));
9136 wpalWlanReload();
9137 }
9138 }
9139 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009140}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309141
Jeff Johnson295189b2012-06-20 16:38:30 -07009142/*
9143 * FUNCTION: WDA_ProcessExitImpsReq
9144 * Request to WDI to Exit IMPS power state.
9145 */
9146VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9147{
9148 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309149 tWDA_ReqParams *pWdaParams;
9150 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9151
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009153 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309154 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9155 sizeof(WDI_ExitImpsReqParamsType));
9156 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9159 "%s: VOS MEM Alloc Failure", __func__);
9160 VOS_ASSERT(0);
9161 return VOS_STATUS_E_NOMEM;
9162 }
9163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9164 if(NULL == pWdaParams)
9165 {
9166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9167 "%s: VOS MEM Alloc Failure", __func__);
9168 VOS_ASSERT(0);
9169 vos_mem_free(wdiExitImpsReqParams);
9170 return VOS_STATUS_E_NOMEM;
9171 }
9172 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9173 wdiExitImpsReqParams->pUserData = pWdaParams;
9174
9175 /* Store param pointer as passed in by caller */
9176 /* store Params pass it to WDI */
9177 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9178 pWdaParams->pWdaContext = pWDA;
9179 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9180 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9181 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9182 pWdaParams);
9183 if (IS_WDI_STATUS_FAILURE(status))
9184 {
9185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9186 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9188 vos_mem_free(pWdaParams);
9189 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 return CONVERT_WDI2VOS_STATUS(status) ;
9192}
Jeff Johnson295189b2012-06-20 16:38:30 -07009193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009194 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 * send Enter BMPS RSP back to PE
9196 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009197void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009198{
9199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309200 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009201 tEnterBmpsParams *pEnterBmpsRspParams;
9202
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009205 if(NULL == pWdaParams)
9206 {
9207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 VOS_ASSERT(0) ;
9210 return ;
9211 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009212
9213 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309214 if (NULL == pWDA)
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9217 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309218
9219 if(pWdaParams->wdaWdiApiMsgParam)
9220 {
9221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9222 }
9223 vos_mem_free(pWdaParams);
9224
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309225 VOS_ASSERT(0);
9226 return ;
9227 }
9228
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009229 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9230
9231 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009232 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009233
9234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309236 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9237 {
9238 pWDA->failureCounts.enterBmpsFailureCount++;
9239 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9240 pWDA->failureCounts.enterBmpsFailureCount)
9241 {
9242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9243 "%s: wdiStatus %d fail count %d", __func__,
9244 pwdiEnterBmpsRsp->wdiStatus,
9245 pWDA->failureCounts.enterBmpsFailureCount);
9246 pWDA->failureCounts.enterBmpsFailureCount = 0;
9247 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9248 WLAN_LOG_INDICATOR_HOST_DRIVER,
9249 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9250 FALSE, TRUE);
9251 }
9252 }
9253 else
9254 {
9255 pWDA->failureCounts.enterBmpsFailureCount = 0;
9256 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009257 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9258
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 return ;
9260}
Jeff Johnson295189b2012-06-20 16:38:30 -07009261/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009262 * FUNCTION: WDA_EnterBmpsReqCallback
9263 * Free memory and send Enter BMPS RSP back to PE.
9264 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9265 */
9266void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9267{
9268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309269 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009270 tEnterBmpsParams *pEnterBmpsRspParams;
9271
9272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9273 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9274
9275 if(NULL == pWdaParams)
9276 {
9277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9278 "%s: pWdaParams received NULL", __func__);
9279 VOS_ASSERT(0);
9280 return;
9281 }
9282
9283 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309284 if (NULL == pWDA)
9285 {
9286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9287 "%s:pWDA is NULL", __func__);
9288 VOS_ASSERT(0);
9289 return ;
9290 }
9291
Yue Ma7f44bbe2013-04-12 11:47:39 -07009292 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9293 pEnterBmpsRspParams->status = wdiStatus;
9294
9295 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9296 {
9297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9298 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309299 pWDA->failureCounts.enterBmpsFailureCount++;
9300 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9301 pWDA->failureCounts.enterBmpsFailureCount)
9302 {
9303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9304 "%s: wdiStatus %d fail count %d", __func__,
9305 wdiStatus,
9306 pWDA->failureCounts.enterBmpsFailureCount);
9307 pWDA->failureCounts.enterBmpsFailureCount = 0;
9308 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9309 WLAN_LOG_INDICATOR_HOST_DRIVER,
9310 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9311 FALSE, TRUE);
9312 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009313 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9314 }
9315
9316 return;
9317}
9318/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 * FUNCTION: WDA_ProcessEnterBmpsReq
9320 * Request to WDI to Enter BMPS power state.
9321 */
9322VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9323 tEnterBmpsParams *pEnterBmpsReqParams)
9324{
9325 WDI_Status status = WDI_STATUS_SUCCESS;
9326 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9327 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009329 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9331 {
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 VOS_ASSERT(0);
9335 return VOS_STATUS_E_FAILURE;
9336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9338 if (NULL == wdiEnterBmpsReqParams)
9339 {
9340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9344 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 return VOS_STATUS_E_NOMEM;
9346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9348 if (NULL == pWdaParams)
9349 {
9350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 VOS_ASSERT(0);
9353 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009354 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9355 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 return VOS_STATUS_E_NOMEM;
9357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9359 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9360 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9361 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009362 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9364 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9365 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009366 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9367 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009368
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 /* Store param pointer as passed in by caller */
9370 /* store Params pass it to WDI */
9371 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009372 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009375 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 if (IS_WDI_STATUS_FAILURE(status))
9377 {
9378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9379 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009381 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009383 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 return CONVERT_WDI2VOS_STATUS(status);
9386}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009387
9388
9389static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9390 WDI_Status wdiStatus,
9391 tExitBmpsParams *pExitBmpsReqParams)
9392{
9393 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9394
9395 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9396}
9397
9398
Jeff Johnson295189b2012-06-20 16:38:30 -07009399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009400 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 * send Exit BMPS RSP back to PE
9402 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009403void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009404{
9405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309406 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009407 tExitBmpsParams *pExitBmpsRspParams;
9408
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009410 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009411 if(NULL == pWdaParams)
9412 {
9413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009414 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 VOS_ASSERT(0) ;
9416 return ;
9417 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009418
9419 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309420 if (NULL == pWDA)
9421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9423 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309424
9425 if(pWdaParams->wdaWdiApiMsgParam)
9426 {
9427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9428 }
9429 vos_mem_free(pWdaParams);
9430
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309431 VOS_ASSERT(0);
9432 return ;
9433 }
9434
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009435 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9436
9437 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009438 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009439
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309441 vos_mem_free(pWdaParams);
9442
9443 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9444 {
9445 pWDA->failureCounts.exitBmpsFailureCount++;
9446 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9447 pWDA->failureCounts.exitBmpsFailureCount)
9448 {
9449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9450 "%s: Status %d fail count %d", __func__,
9451 pExitBmpsRspParams->status,
9452 pWDA->failureCounts.exitBmpsFailureCount);
9453 pWDA->failureCounts.exitBmpsFailureCount = 0;
9454 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9455 WLAN_LOG_INDICATOR_HOST_DRIVER,
9456 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9457 FALSE, TRUE);
9458 }
9459 }
9460 else
9461 {
9462 pWDA->failureCounts.exitBmpsFailureCount = 0;
9463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009464
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009465 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 return ;
9467}
Jeff Johnson295189b2012-06-20 16:38:30 -07009468/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009469 * FUNCTION: WDA_ExitBmpsReqCallback
9470 * Free memory and send Exit BMPS RSP back to PE.
9471 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9472 */
9473void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9474{
9475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309476 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009477 tExitBmpsParams *pExitBmpsRspParams;
9478
9479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9481
9482 if(NULL == pWdaParams)
9483 {
9484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9485 "%s: pWdaParams received NULL", __func__);
9486 VOS_ASSERT(0);
9487 return;
9488 }
9489
9490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309491 if (NULL == pWDA)
9492 {
9493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9494 "%s:pWDA is NULL", __func__);
9495 VOS_ASSERT(0);
9496 return ;
9497 }
9498
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9500 pExitBmpsRspParams->status = wdiStatus;
9501
9502 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9503 {
9504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9505 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309506 pWDA->failureCounts.exitBmpsFailureCount++;
9507 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9508 pWDA->failureCounts.exitBmpsFailureCount)
9509 {
9510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9511 "%s: wdiStatus %d fail count %d", __func__,
9512 wdiStatus,
9513 pWDA->failureCounts.exitBmpsFailureCount);
9514 pWDA->failureCounts.exitBmpsFailureCount = 0;
9515 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9516 WLAN_LOG_INDICATOR_HOST_DRIVER,
9517 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9518 FALSE, TRUE);
9519 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009520 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9521 }
9522
9523 return;
9524}
9525/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 * FUNCTION: WDA_ProcessExitBmpsReq
9527 * Request to WDI to Exit BMPS power state.
9528 */
9529VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9530 tExitBmpsParams *pExitBmpsReqParams)
9531{
9532 WDI_Status status = WDI_STATUS_SUCCESS ;
9533 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9534 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9535 sizeof(WDI_ExitBmpsReqParamsType)) ;
9536 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009538 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 if(NULL == wdiExitBmpsReqParams)
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009544 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 return VOS_STATUS_E_NOMEM;
9546 }
9547 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9548 if(NULL == pWdaParams)
9549 {
9550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 VOS_ASSERT(0);
9553 vos_mem_free(wdiExitBmpsReqParams);
9554 return VOS_STATUS_E_NOMEM;
9555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009557
9558 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9559
Yue Ma7f44bbe2013-04-12 11:47:39 -07009560 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9561 wdiExitBmpsReqParams->pUserData = pWdaParams;
9562
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 /* Store param pointer as passed in by caller */
9564 /* store Params pass it to WDI */
9565 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9566 pWdaParams->pWdaContext = pWDA;
9567 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009569 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 if(IS_WDI_STATUS_FAILURE(status))
9571 {
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9573 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9575 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009576 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 return CONVERT_WDI2VOS_STATUS(status) ;
9579}
Jeff Johnson295189b2012-06-20 16:38:30 -07009580/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009581 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 * send Enter UAPSD RSP back to PE
9583 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009584void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009585{
9586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309587 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009588 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009590 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 if(NULL == pWdaParams)
9592 {
9593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009594 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 VOS_ASSERT(0) ;
9596 return ;
9597 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009598
9599 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309600 if (NULL == pWDA)
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9603 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309604
9605 if(pWdaParams->wdaWdiApiMsgParam)
9606 {
9607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9608 }
9609 vos_mem_free(pWdaParams);
9610
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309611 VOS_ASSERT(0);
9612 return ;
9613 }
9614
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009615 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9616
9617 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009618 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009619
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9621 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009622 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 return ;
9624}
Jeff Johnson295189b2012-06-20 16:38:30 -07009625/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009626 * FUNCTION: WDA_EnterUapsdReqCallback
9627 * Free memory and send Enter UAPSD RSP back to PE.
9628 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9629 */
9630void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9631{
9632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9633 tWDA_CbContext *pWDA;
9634 tUapsdParams *pEnterUapsdRsqParams;
9635
9636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9637 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9638
9639 if(NULL == pWdaParams)
9640 {
9641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9642 "%s: pWdaParams received NULL", __func__);
9643 VOS_ASSERT(0);
9644 return;
9645 }
9646
9647 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309648 if (NULL == pWDA)
9649 {
9650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9651 "%s:pWDA is NULL", __func__);
9652 VOS_ASSERT(0);
9653 return ;
9654 }
9655
Yue Ma7f44bbe2013-04-12 11:47:39 -07009656 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9657 pEnterUapsdRsqParams->status = wdiStatus;
9658
9659 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9660 {
9661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9662 vos_mem_free(pWdaParams);
9663 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9664 }
9665
9666 return;
9667}
9668/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 * FUNCTION: WDA_ProcessEnterUapsdReq
9670 * Request to WDI to Enter UAPSD power state.
9671 */
9672VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9673 tUapsdParams *pEnterUapsdReqParams)
9674{
9675 WDI_Status status = WDI_STATUS_SUCCESS ;
9676 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9677 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9678 sizeof(WDI_EnterUapsdReqParamsType)) ;
9679 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009681 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 if(NULL == wdiEnterUapsdReqParams)
9683 {
9684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 VOS_ASSERT(0);
9687 return VOS_STATUS_E_NOMEM;
9688 }
9689 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9690 if(NULL == pWdaParams)
9691 {
9692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 VOS_ASSERT(0);
9695 vos_mem_free(wdiEnterUapsdReqParams);
9696 return VOS_STATUS_E_NOMEM;
9697 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9699 pEnterUapsdReqParams->beDeliveryEnabled;
9700 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9701 pEnterUapsdReqParams->beTriggerEnabled;
9702 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9703 pEnterUapsdReqParams->bkDeliveryEnabled;
9704 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9705 pEnterUapsdReqParams->bkTriggerEnabled;
9706 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9707 pEnterUapsdReqParams->viDeliveryEnabled;
9708 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9709 pEnterUapsdReqParams->viTriggerEnabled;
9710 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9711 pEnterUapsdReqParams->voDeliveryEnabled;
9712 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9713 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009714 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009715
Yue Ma7f44bbe2013-04-12 11:47:39 -07009716 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9717 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009718
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 /* Store param pointer as passed in by caller */
9720 /* store Params pass it to WDI */
9721 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9722 pWdaParams->pWdaContext = pWDA;
9723 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009725 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 if(IS_WDI_STATUS_FAILURE(status))
9727 {
9728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9729 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9730 vos_mem_free(pWdaParams->wdaMsgParam) ;
9731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9732 vos_mem_free(pWdaParams) ;
9733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 return CONVERT_WDI2VOS_STATUS(status) ;
9735}
Jeff Johnson295189b2012-06-20 16:38:30 -07009736/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009737 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 * send Exit UAPSD RSP back to PE
9739 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009740void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009741{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009742
9743 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9744 tWDA_CbContext *pWDA;
9745 tExitUapsdParams *pExitUapsdRspParams;
9746
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009748 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009749 if(NULL == pWdaParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009752 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009753 VOS_ASSERT(0);
9754 return;
9755 }
9756
9757 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9758 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9759
9760 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009761 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009762
9763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9764 vos_mem_free(pWdaParams) ;
9765
9766 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 return ;
9768}
Jeff Johnson295189b2012-06-20 16:38:30 -07009769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009770 * FUNCTION: WDA_ExitUapsdReqCallback
9771 * Free memory and send Exit UAPSD RSP back to PE.
9772 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9773 */
9774void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9775{
9776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309777 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009778 tExitUapsdParams *pExitUapsdRspParams;
9779
9780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9781 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9782
9783 if(NULL == pWdaParams)
9784 {
9785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9786 "%s: pWdaParams received NULL", __func__);
9787 VOS_ASSERT(0);
9788 return;
9789 }
9790
9791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309792 if (NULL == pWDA)
9793 {
9794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9795 "%s:pWDA is NULL", __func__);
9796 VOS_ASSERT(0);
9797 return ;
9798 }
9799
Yue Ma7f44bbe2013-04-12 11:47:39 -07009800 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9801 pExitUapsdRspParams->status = wdiStatus;
9802
9803 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9804 {
9805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9806 vos_mem_free(pWdaParams);
9807 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9808 }
9809
9810 return;
9811}
9812/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 * FUNCTION: WDA_ProcessExitUapsdReq
9814 * Request to WDI to Exit UAPSD power state.
9815 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9817 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009818{
9819 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009820 tWDA_ReqParams *pWdaParams ;
9821 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9822 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9823 sizeof(WDI_ExitUapsdReqParamsType)) ;
9824
Jeff Johnson295189b2012-06-20 16:38:30 -07009825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009826 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009827
9828 if(NULL == wdiExitUapsdReqParams)
9829 {
9830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009831 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009832 VOS_ASSERT(0);
9833 return VOS_STATUS_E_NOMEM;
9834 }
9835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9836 if(NULL == pWdaParams)
9837 {
9838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009839 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009840 VOS_ASSERT(0);
9841 vos_mem_free(wdiExitUapsdReqParams);
9842 return VOS_STATUS_E_NOMEM;
9843 }
9844
9845 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009846 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9847 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009848
9849 /* Store param pointer as passed in by caller */
9850 /* store Params pass it to WDI */
9851 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9852 pWdaParams->pWdaContext = pWDA;
9853 pWdaParams->wdaMsgParam = pExitUapsdParams;
9854
Yue Ma7f44bbe2013-04-12 11:47:39 -07009855 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 if(IS_WDI_STATUS_FAILURE(status))
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9859 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009860 vos_mem_free(pWdaParams->wdaMsgParam) ;
9861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9862 vos_mem_free(pWdaParams) ;
9863
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 return CONVERT_WDI2VOS_STATUS(status) ;
9866}
9867
Jeff Johnson295189b2012-06-20 16:38:30 -07009868/*
9869 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9870 *
9871 */
9872void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9873{
9874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 if(NULL == pWdaParams)
9878 {
9879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009880 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 VOS_ASSERT(0) ;
9882 return ;
9883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 if( pWdaParams != NULL )
9885 {
9886 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9887 {
9888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9889 }
9890 if( pWdaParams->wdaMsgParam != NULL )
9891 {
9892 vos_mem_free(pWdaParams->wdaMsgParam) ;
9893 }
9894 vos_mem_free(pWdaParams) ;
9895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 return ;
9897}
Jeff Johnson295189b2012-06-20 16:38:30 -07009898/*
9899 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9900 * Request to WDI to set the power save params at start.
9901 */
9902VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9903 tSirPowerSaveCfg *pPowerSaveCfg)
9904{
9905 WDI_Status status = WDI_STATUS_SUCCESS ;
9906 tHalCfg *tlvStruct = NULL ;
9907 tANI_U8 *tlvStructStart = NULL ;
9908 v_PVOID_t *configParam;
9909 tANI_U32 configParamSize;
9910 tANI_U32 *configDataValue;
9911 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9912 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9916 {
9917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009918 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009920 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 return VOS_STATUS_E_FAILURE;
9922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9924 if (NULL == wdiPowerSaveCfg)
9925 {
9926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009929 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 return VOS_STATUS_E_NOMEM;
9931 }
9932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9933 if(NULL == pWdaParams)
9934 {
9935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 VOS_ASSERT(0);
9938 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009939 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009940 return VOS_STATUS_E_NOMEM;
9941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9943 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 if(NULL == configParam)
9945 {
9946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009947 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009948 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 vos_mem_free(pWdaParams);
9950 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009951 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 return VOS_STATUS_E_NOMEM;
9953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 vos_mem_set(configParam, configParamSize, 0);
9955 wdiPowerSaveCfg->pConfigBuffer = configParam;
9956 tlvStruct = (tHalCfg *)configParam;
9957 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9959 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9960 tlvStruct->length = sizeof(tANI_U32);
9961 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9962 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9964 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9966 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9967 tlvStruct->length = sizeof(tANI_U32);
9968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9969 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9971 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9973 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9974 tlvStruct->length = sizeof(tANI_U32);
9975 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9976 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9978 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9980 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9981 tlvStruct->length = sizeof(tANI_U32);
9982 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9983 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9985 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9987 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9988 tlvStruct->length = sizeof(tANI_U32);
9989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9990 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9992 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9994 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9995 tlvStruct->length = sizeof(tANI_U32);
9996 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9997 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9999 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10001 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10002 tlvStruct->length = sizeof(tANI_U32);
10003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10004 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10006 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10008 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10009 tlvStruct->length = sizeof(tANI_U32);
10010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10011 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10012 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10013 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10015 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10016 tlvStruct->length = sizeof(tANI_U32);
10017 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10018 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10019 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10020 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10022 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10023 tlvStruct->length = sizeof(tANI_U32);
10024 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10025 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10027 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10029 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10030 tlvStruct->length = sizeof(tANI_U32);
10031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10032 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10034 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 /* store Params pass it to WDI */
10038 pWdaParams->wdaMsgParam = configParam;
10039 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10040 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10042 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 if(IS_WDI_STATUS_FAILURE(status))
10044 {
10045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10046 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10047 vos_mem_free(pWdaParams->wdaMsgParam);
10048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10049 vos_mem_free(pWdaParams);
10050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 return CONVERT_WDI2VOS_STATUS(status);
10053}
Jeff Johnson295189b2012-06-20 16:38:30 -070010054/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010055 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010056 *
10057 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010058void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010059{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10061
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010064
10065 if(NULL == pWdaParams)
10066 {
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10068 "%s: pWdaParams received NULL", __func__);
10069 VOS_ASSERT(0);
10070 return ;
10071 }
10072
10073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 vos_mem_free(pWdaParams);
10075
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 return ;
10077}
Jeff Johnson295189b2012-06-20 16:38:30 -070010078/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010079 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10080 * Free memory.
10081 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10082 */
10083void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10084{
10085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10086
10087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10088 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10089
10090 if(NULL == pWdaParams)
10091 {
10092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10093 "%s: pWdaParams received NULL", __func__);
10094 VOS_ASSERT(0);
10095 return;
10096 }
10097
10098 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10099 {
10100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10101 vos_mem_free(pWdaParams);
10102 }
10103
10104 return;
10105}
10106/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 * FUNCTION: WDA_SetUapsdAcParamsReq
10108 * Request to WDI to set the UAPSD params for an ac (sta mode).
10109 */
10110VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10111 tUapsdInfo *pUapsdInfo)
10112{
10113 WDI_Status status = WDI_STATUS_SUCCESS;
10114 tWDA_CbContext *pWDA = NULL ;
10115 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10116 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10117 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10118 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 if(NULL == wdiUapsdParams)
10122 {
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 VOS_ASSERT(0);
10126 return VOS_STATUS_E_NOMEM;
10127 }
10128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10129 if(NULL == pWdaParams)
10130 {
10131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 VOS_ASSERT(0);
10134 vos_mem_free(wdiUapsdParams);
10135 return VOS_STATUS_E_NOMEM;
10136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10138 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10139 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10140 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10141 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10142 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010143 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10144 wdiUapsdParams->pUserData = pWdaParams;
10145
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 pWdaParams->pWdaContext = pWDA;
10148 /* Store param pointer as passed in by caller */
10149 pWdaParams->wdaMsgParam = pUapsdInfo;
10150 /* store Params pass it to WDI */
10151 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010153 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 if(IS_WDI_STATUS_FAILURE(status))
10156 {
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10158 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10160 vos_mem_free(pWdaParams);
10161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10163 return VOS_STATUS_SUCCESS;
10164 else
10165 return VOS_STATUS_E_FAILURE;
10166
Jeff Johnson295189b2012-06-20 16:38:30 -070010167}
10168/*
10169 * FUNCTION: WDA_ClearUapsdAcParamsReq
10170 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10171 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10172 * and again enter the UPASD with the modified params. Hence the disable
10173 * function was kept empty.
10174 *
10175 */
10176VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10177{
10178 /* do nothing */
10179 return VOS_STATUS_SUCCESS;
10180}
Jeff Johnson295189b2012-06-20 16:38:30 -070010181/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010182 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 *
10184 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010185void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010186{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10188
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010190 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010191
10192 if(NULL == pWdaParams)
10193 {
10194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010195 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010196 VOS_ASSERT(0) ;
10197 return ;
10198 }
10199
10200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10201 vos_mem_free(pWdaParams->wdaMsgParam);
10202 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010203
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 //print a msg, nothing else to do
10205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010206 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 return ;
10208}
Jeff Johnson295189b2012-06-20 16:38:30 -070010209/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010210 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10211 * Free memory.
10212 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10213 */
10214void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10215{
10216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10217
10218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10219 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10220
10221 if(NULL == pWdaParams)
10222 {
10223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10224 "%s: pWdaParams received NULL", __func__);
10225 VOS_ASSERT(0);
10226 return;
10227 }
10228
10229 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10230 {
10231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10232 vos_mem_free(pWdaParams->wdaMsgParam);
10233 vos_mem_free(pWdaParams);
10234 }
10235
10236 return;
10237}
10238/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 * FUNCTION: WDA_UpdateUapsdParamsReq
10240 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10241 */
10242VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10243 tUpdateUapsdParams* pUpdateUapsdInfo)
10244{
10245 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010246 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10248 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10249 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010250 tWDA_ReqParams *pWdaParams = NULL;
10251
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 if(NULL == wdiUpdateUapsdParams)
10255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 VOS_ASSERT(0);
10259 return VOS_STATUS_E_NOMEM;
10260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10262 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10263 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010264 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10265 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010266
10267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10268 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 {
10270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010273 vos_mem_free(pUpdateUapsdInfo);
10274 vos_mem_free(wdiUpdateUapsdParams);
10275 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010278 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010280 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10281 pWdaParams->pWdaContext = pWDA;
10282
Jeff Johnson43971f52012-07-17 12:26:56 -070010283 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010284 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010285 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010286
Jeff Johnson43971f52012-07-17 12:26:56 -070010287 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 {
10289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10290 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010291 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10293 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010294 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010296 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010297}
Jeff Johnson295189b2012-06-20 16:38:30 -070010298/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010299 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 *
10301 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010302void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010303{
10304 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010306 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 if(WDI_STATUS_SUCCESS != wdiStatus)
10308 {
10309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010310 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010312 if(NULL == pWdaParams)
10313 {
10314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010315 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010316 VOS_ASSERT(0) ;
10317 return ;
10318 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10320 vos_mem_free(pWdaParams->wdaMsgParam);
10321 vos_mem_free(pWdaParams);
10322 return ;
10323}
Jeff Johnson295189b2012-06-20 16:38:30 -070010324/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010325 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10326 * Free memory.
10327 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10328 */
10329void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10330{
10331 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10332
10333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10334 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10335
10336 if(NULL == pWdaParams)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10339 "%s: pWdaParams received NULL", __func__);
10340 VOS_ASSERT(0);
10341 return;
10342 }
10343
10344 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10345 {
10346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10347 vos_mem_free(pWdaParams->wdaMsgParam);
10348 vos_mem_free(pWdaParams);
10349 }
10350
10351 return;
10352}
10353/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10355 *
10356 */
10357VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10358 tSirWlanSetRxpFilters *pWlanSuspendParam)
10359{
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010361 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010362 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010364 /* Sanity Check
10365 * This is very unlikely and add assert to collect more info next time */
10366 if(NULL == pWlanSuspendParam)
10367 {
10368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10369 "%s: pWlanSuspendParam received NULL", __func__);
10370 VOS_ASSERT(0) ;
10371 return VOS_STATUS_E_FAULT;
10372 }
10373 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10374 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010376 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 if(NULL == wdiRxpFilterParams)
10378 {
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 VOS_ASSERT(0);
10382 vos_mem_free(pWlanSuspendParam);
10383 return VOS_STATUS_E_NOMEM;
10384 }
10385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10386 if(NULL == pWdaParams)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 VOS_ASSERT(0);
10391 vos_mem_free(wdiRxpFilterParams);
10392 vos_mem_free(pWlanSuspendParam);
10393 return VOS_STATUS_E_NOMEM;
10394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10396 pWlanSuspendParam->setMcstBcstFilter;
10397 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10398 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10399
Yue Ma7f44bbe2013-04-12 11:47:39 -070010400 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10401 wdiRxpFilterParams->pUserData = pWdaParams;
10402
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 pWdaParams->pWdaContext = pWDA;
10404 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10405 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010406 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010407 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010409 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010410 {
10411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10412 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010413 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10415 vos_mem_free(pWdaParams->wdaMsgParam);
10416 vos_mem_free(pWdaParams);
10417 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010418 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010419}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010420
10421/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010422 * FUNCTION: WDA_ProcessGetFrameLogReq
10423 * Request to WDI to get the Frame Log.
10424 */
10425VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10426 tAniGetFrameLogReq *pGetFrameLog)
10427{
10428 VOS_STATUS status = VOS_STATUS_SUCCESS;
10429 WDI_Status wstatus;
10430 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10431 tWDA_ReqParams *pWdaParams ;
10432
10433 /* Sanity Check*/
10434 if(NULL == pGetFrameLog)
10435 {
10436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010437 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010438 VOS_ASSERT(0) ;
10439 return VOS_STATUS_E_FAULT;
10440 }
10441
10442 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10443 sizeof(WDI_GetFrameLogReqInfoType));
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10445 "------> %s " ,__func__);
10446
10447 if(NULL == wdiGetFrameLogInfo)
10448 {
10449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10450 "%s: VOS MEM Alloc Failure", __func__);
10451 VOS_ASSERT(0);
10452 vos_mem_free(pGetFrameLog);
10453 return VOS_STATUS_E_NOMEM;
10454 }
10455
10456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10457 if(NULL == pWdaParams)
10458 {
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10460 "%s: VOS MEM Alloc Failure", __func__);
10461 VOS_ASSERT(0);
10462 vos_mem_free(wdiGetFrameLogInfo);
10463 vos_mem_free(pGetFrameLog);
10464 return VOS_STATUS_E_NOMEM;
10465 }
10466
10467 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10468
10469 pWdaParams->pWdaContext = pWDA;
10470 pWdaParams->wdaMsgParam = pGetFrameLog;
10471 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10472
10473 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10474 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10475 pWdaParams);
10476 if(IS_WDI_STATUS_FAILURE(wstatus))
10477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10479 "Failure in get frame log REQ WDI API, free all the memory" );
10480 status = CONVERT_WDI2VOS_STATUS(wstatus);
10481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10482 vos_mem_free(pWdaParams->wdaMsgParam);
10483 vos_mem_free(pWdaParams);
10484 }
10485 return status;
10486}
10487
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010488
10489/*
10490 * FUNCTION: WDA_FatalEventLogsRspCallback
10491 * recieves Flush Logs response from FW
10492 */
10493
10494void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10495 void* pUserData)
10496{
10497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10498
10499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10500 "<------ %s,wdiStatus:%d " ,
10501 __func__, wdiRsp->wdiStatus);
10502 if(NULL == pWdaParams)
10503 {
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10505 "%s: pWdaParams received NULL", __func__);
10506 VOS_ASSERT(0);
10507 return ;
10508 }
10509
10510 if(NULL == pWdaParams->wdaMsgParam)
10511 {
10512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10513 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10514 VOS_ASSERT(0);
10515 vos_mem_free(pWdaParams);
10516 return ;
10517 }
10518
10519 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10520 {
10521 /*
10522 * If it is failure, it means JOb is already posted by FW
10523 * for logging, so for failure scenario also we will get the
10524 * done indication
10525 */
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10528 __func__, wdiRsp->wdiStatus);
10529 }
10530
10531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10532 vos_mem_free(pWdaParams->wdaMsgParam);
10533 vos_mem_free(pWdaParams);
10534
10535 return;
10536
10537}
10538
10539/*
10540 * FUNCTION: WDA_ProcessFatalEventLogsReq
10541 * Request to WDI to send the fatal Event Logs Req.
10542 */
10543
10544VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10545 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10546{
10547 VOS_STATUS status = VOS_STATUS_SUCCESS;
10548 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10549 tWDA_ReqParams *pWdaParams ;
10550 WDI_Status wstatus;
10551
10552
10553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10554 "------> %s " ,__func__);
10555 if (NULL == pFatalEventLogsReqParam)
10556 {
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10558 "%s: pMgmtLoggingInitParam received NULL", __func__);
10559 VOS_ASSERT(0) ;
10560 return VOS_STATUS_E_FAULT;
10561 }
10562 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10563 sizeof(WDI_FatalEventLogsReqInfoType));
10564 if(NULL == wdiFatalEventLogsReqInfo)
10565 {
10566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10567 "%s: VOS MEM Alloc Failure", __func__);
10568 VOS_ASSERT(0);
10569 vos_mem_free(pFatalEventLogsReqParam);
10570 return VOS_STATUS_E_NOMEM;
10571 }
10572 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10573 if(NULL == pWdaParams)
10574 {
10575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10576 "%s: VOS MEM Alloc Failure", __func__);
10577 VOS_ASSERT(0);
10578 vos_mem_free(wdiFatalEventLogsReqInfo);
10579 vos_mem_free(pFatalEventLogsReqParam);
10580 return VOS_STATUS_E_NOMEM;
10581 }
10582 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10583 pWdaParams->pWdaContext = pWDA;
10584 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10585 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10586
10587 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10588 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10589 pWdaParams);
10590 if(IS_WDI_STATUS_FAILURE(wstatus))
10591 {
10592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10593 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10594 status = CONVERT_WDI2VOS_STATUS(wstatus);
10595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10596 vos_mem_free(pWdaParams->wdaMsgParam);
10597 vos_mem_free(pWdaParams);
10598 }
10599
10600 return status;
10601
10602}
10603
Siddharth Bhal64246172015-02-27 01:04:37 +053010604/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010605 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010606 *
10607 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010608VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10609 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010610{
10611 VOS_STATUS status = VOS_STATUS_SUCCESS;
10612 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010613 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010614 tWDA_ReqParams *pWdaParams ;
10615
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10617 "------> %s " ,__func__);
10618
10619 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010620 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010621 {
10622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010623 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010624 VOS_ASSERT(0) ;
10625 return VOS_STATUS_E_FAULT;
10626 }
10627
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010628 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10629 sizeof(WDI_FWLoggingInitReqInfoType));
10630 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010631 {
10632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10633 "%s: VOS MEM Alloc Failure", __func__);
10634 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010635 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010636 return VOS_STATUS_E_NOMEM;
10637 }
10638
10639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10640 if(NULL == pWdaParams)
10641 {
10642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10643 "%s: VOS MEM Alloc Failure", __func__);
10644 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010645 vos_mem_free(wdiFWLoggingInitInfo);
10646 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010647 return VOS_STATUS_E_NOMEM;
10648 }
10649
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010650 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10651 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10652 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10653 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10654 wdiFWLoggingInitInfo->continuousFrameLogging =
10655 pFWLoggingInitParam->continuousFrameLogging;
10656 wdiFWLoggingInitInfo->minLogBufferSize=
10657 pFWLoggingInitParam->minLogBufferSize;
10658 wdiFWLoggingInitInfo->maxLogBufferSize=
10659 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010660
10661 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010662 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10663 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010664
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010665 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10666 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010667 pWdaParams);
10668 if(IS_WDI_STATUS_FAILURE(wstatus))
10669 {
10670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10671 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10672 status = CONVERT_WDI2VOS_STATUS(wstatus);
10673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10674 vos_mem_free(pWdaParams->wdaMsgParam);
10675 vos_mem_free(pWdaParams);
10676 }
10677
10678 return status;
10679}
10680
Jeff Johnson295189b2012-06-20 16:38:30 -070010681/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010682 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10683 *
10684 */
10685VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10686 tSirRssiMonitorReq *pRssiMonitorReqParam)
10687{
10688 VOS_STATUS status = VOS_STATUS_SUCCESS;
10689 WDI_Status wstatus;
10690 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10691 tWDA_ReqParams *pWdaParams ;
10692
10693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10694 "------> %s " ,__func__);
10695
10696 /* Sanity Check*/
10697 if(NULL == pRssiMonitorReqParam)
10698 {
10699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10700 "%s: pRssiMonitorReqParam received NULL", __func__);
10701 VOS_ASSERT(0) ;
10702 return VOS_STATUS_E_FAULT;
10703 }
10704
10705 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10706 sizeof(WDI_RssiMonitorReqInfoType));
10707 if(NULL == wdiRssiMonitorInfo)
10708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10710 "%s: VOS MEM Alloc Failure", __func__);
10711 VOS_ASSERT(0);
10712 vos_mem_free(pRssiMonitorReqParam);
10713 return VOS_STATUS_E_NOMEM;
10714 }
10715
10716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10717 if(NULL == pWdaParams)
10718 {
10719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10720 "%s: VOS MEM Alloc Failure", __func__);
10721 VOS_ASSERT(0);
10722 vos_mem_free(wdiRssiMonitorInfo);
10723 vos_mem_free(pRssiMonitorReqParam);
10724 return VOS_STATUS_E_NOMEM;
10725 }
10726
10727 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10728 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10729 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10730 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10731 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10732
10733 pWdaParams->pWdaContext = pWDA;
10734 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10735 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10736
10737 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10738 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10739 pWdaParams);
10740 if(IS_WDI_STATUS_FAILURE(wstatus))
10741 {
10742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10743 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10744 status = CONVERT_WDI2VOS_STATUS(wstatus);
10745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10746 vos_mem_free(pWdaParams->wdaMsgParam);
10747 vos_mem_free(pWdaParams);
10748 }
10749
10750 return status;
10751}
10752
10753/*
10754 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10755 *
10756 */
10757VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10758 tSirRssiMonitorReq *pRssiMonitorReqParam)
10759{
10760 VOS_STATUS status = VOS_STATUS_SUCCESS;
10761 WDI_Status wstatus;
10762 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10763 tWDA_ReqParams *pWdaParams ;
10764
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10766 "------> %s " ,__func__);
10767
10768 /* Sanity Check*/
10769 if(NULL == pRssiMonitorReqParam)
10770 {
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10772 "%s: pRssiMonitorReqParam received NULL", __func__);
10773 VOS_ASSERT(0) ;
10774 return VOS_STATUS_E_FAULT;
10775 }
10776
10777 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10778 sizeof(WDI_RssiMonitorReqInfoType));
10779 if(NULL == wdiRssiMonitorInfo)
10780 {
10781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10782 "%s: VOS MEM Alloc Failure", __func__);
10783 VOS_ASSERT(0);
10784 vos_mem_free(pRssiMonitorReqParam);
10785 return VOS_STATUS_E_NOMEM;
10786 }
10787
10788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10789 if(NULL == pWdaParams)
10790 {
10791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10792 "%s: VOS MEM Alloc Failure", __func__);
10793 VOS_ASSERT(0);
10794 vos_mem_free(wdiRssiMonitorInfo);
10795 vos_mem_free(pRssiMonitorReqParam);
10796 return VOS_STATUS_E_NOMEM;
10797 }
10798
10799 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10800 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10801 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10802
10803 pWdaParams->pWdaContext = pWDA;
10804 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10805 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10806
10807 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10808 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10809 pWdaParams);
10810 if(IS_WDI_STATUS_FAILURE(wstatus))
10811 {
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10813 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10814 status = CONVERT_WDI2VOS_STATUS(wstatus);
10815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10816 vos_mem_free(pWdaParams->wdaMsgParam);
10817 vos_mem_free(pWdaParams);
10818 }
10819
10820 return status;
10821}
10822
10823
10824/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 * FUNCTION: WDA_WdiIndicationCallback
10826 *
10827 */
10828void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10829 void* pUserData)
10830{
10831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010832 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010833}
Jeff Johnson295189b2012-06-20 16:38:30 -070010834/*
10835 * FUNCTION: WDA_ProcessWlanSuspendInd
10836 *
10837 */
10838VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10839 tSirWlanSuspendParam *pWlanSuspendParam)
10840{
10841 WDI_Status wdiStatus;
10842 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010844 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10846 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10847 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10848 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10851 if(WDI_STATUS_PENDING == wdiStatus)
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010854 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 }
10856 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10857 {
10858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010859 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 vos_mem_free(pWlanSuspendParam);
10862 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10863}
10864
Chet Lanctot186b5732013-03-18 10:26:30 -070010865#ifdef WLAN_FEATURE_11W
10866/*
10867 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10868 *
10869 */
10870VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10871 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10872{
10873 WDI_Status wdiStatus;
10874 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10876 "------> %s ", __func__);
10877
10878 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10879 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10880 sizeof(tSirMacAddr));
10881
10882 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10883 wdiExclUnencryptParams.pUserData = pWDA;
10884
10885 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10886 if(WDI_STATUS_PENDING == wdiStatus)
10887 {
10888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10889 "Pending received for %s:%d ", __func__, __LINE__ );
10890 }
10891 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10892 {
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10894 "Failure in %s:%d ", __func__, __LINE__ );
10895 }
10896 vos_mem_free(pExclUnencryptParam);
10897 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10898}
10899#endif
10900
Jeff Johnson295189b2012-06-20 16:38:30 -070010901/*
10902 * FUNCTION: WDA_ProcessWlanResumeCallback
10903 *
10904 */
10905void WDA_ProcessWlanResumeCallback(
10906 WDI_SuspendResumeRspParamsType *resumeRspParams,
10907 void* pUserData)
10908{
10909 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 if(NULL == pWdaParams)
10913 {
10914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010915 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 VOS_ASSERT(0) ;
10917 return ;
10918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10920 {
10921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010922 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10925 vos_mem_free(pWdaParams->wdaMsgParam);
10926 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 return ;
10928}
Jeff Johnson295189b2012-06-20 16:38:30 -070010929/*
10930 * FUNCTION: WDA_ProcessWlanResumeReq
10931 *
10932 */
10933VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10934 tSirWlanResumeParam *pWlanResumeParam)
10935{
10936 WDI_Status wdiStatus;
10937 WDI_ResumeParamsType *wdiResumeParams =
10938 (WDI_ResumeParamsType *)vos_mem_malloc(
10939 sizeof(WDI_ResumeParamsType) ) ;
10940 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010942 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 if(NULL == wdiResumeParams)
10944 {
10945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 VOS_ASSERT(0);
10948 return VOS_STATUS_E_NOMEM;
10949 }
10950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10951 if(NULL == pWdaParams)
10952 {
10953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 VOS_ASSERT(0);
10956 vos_mem_free(wdiResumeParams);
10957 return VOS_STATUS_E_NOMEM;
10958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10960 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 wdiResumeParams->wdiReqStatusCB = NULL;
10963 pWdaParams->wdaMsgParam = pWlanResumeParam;
10964 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10965 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10967 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10968 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10970 {
10971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10972 "Failure in Host Resume REQ WDI API, free all the memory " );
10973 VOS_ASSERT(0);
10974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10975 vos_mem_free(pWdaParams->wdaMsgParam);
10976 vos_mem_free(pWdaParams);
10977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10979}
10980
Jeff Johnson295189b2012-06-20 16:38:30 -070010981/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010982 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 *
10984 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010985void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010986{
10987 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 if(NULL == pWdaParams)
10991 {
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010994 VOS_ASSERT(0) ;
10995 return ;
10996 }
10997
10998 vos_mem_free(pWdaParams->wdaMsgParam) ;
10999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11000 vos_mem_free(pWdaParams) ;
11001 /*
11002 * No respone required for SetBeaconFilter req so just free the request
11003 * param here
11004 */
11005
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 return ;
11007}
Jeff Johnson295189b2012-06-20 16:38:30 -070011008/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011009 * FUNCTION: WDA_SetBeaconFilterReqCallback
11010 * Free memory.
11011 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11012 */
11013void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11014{
11015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11016
11017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11018 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11019
11020 if(NULL == pWdaParams)
11021 {
11022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11023 "%s: pWdaParams received NULL", __func__);
11024 VOS_ASSERT(0);
11025 return;
11026 }
11027
11028 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11029 {
11030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11031 vos_mem_free(pWdaParams->wdaMsgParam);
11032 vos_mem_free(pWdaParams);
11033 }
11034
11035 return;
11036}
11037/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 * FUNCTION: WDA_SetBeaconFilterReq
11039 * Request to WDI to send the beacon filtering related information.
11040 */
11041VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11042 tBeaconFilterMsg* pBeaconFilterInfo)
11043{
11044 WDI_Status status = WDI_STATUS_SUCCESS;
11045 tANI_U8 *dstPtr, *srcPtr;
11046 tANI_U8 filterLength;
11047 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11048 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11049 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11050 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011052 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 if(NULL == wdiBeaconFilterInfo)
11054 {
11055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 VOS_ASSERT(0);
11058 return VOS_STATUS_E_NOMEM;
11059 }
11060 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11061 if(NULL == pWdaParams)
11062 {
11063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 VOS_ASSERT(0);
11066 vos_mem_free(wdiBeaconFilterInfo);
11067 return VOS_STATUS_E_NOMEM;
11068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11070 pBeaconFilterInfo->beaconInterval;
11071 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11072 pBeaconFilterInfo->capabilityInfo;
11073 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11074 pBeaconFilterInfo->capabilityMask;
11075 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011076
11077 //Fill the BssIdx
11078 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11079
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 //Fill structure with info contained in the beaconFilterTable
11081 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11082 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11083 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11084 if(WDI_BEACON_FILTER_LEN < filterLength)
11085 {
11086 filterLength = WDI_BEACON_FILTER_LEN;
11087 }
11088 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011089 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11090 wdiBeaconFilterInfo->pUserData = pWdaParams;
11091
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 /* Store param pointer as passed in by caller */
11093 /* store Params pass it to WDI */
11094 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11095 pWdaParams->pWdaContext = pWDA;
11096 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11097
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011099 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 if(IS_WDI_STATUS_FAILURE(status))
11101 {
11102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11103 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11104 vos_mem_free(pWdaParams->wdaMsgParam) ;
11105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11106 vos_mem_free(pWdaParams) ;
11107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 return CONVERT_WDI2VOS_STATUS(status) ;
11109}
Jeff Johnson295189b2012-06-20 16:38:30 -070011110/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011111 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011112 *
11113 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011114void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011115{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11117
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011119 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011120
11121 if(NULL == pWdaParams)
11122 {
11123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011124 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011125 VOS_ASSERT(0) ;
11126 return ;
11127 }
11128
11129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11130 vos_mem_free(pWdaParams->wdaMsgParam);
11131 vos_mem_free(pWdaParams);
11132
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 //print a msg, nothing else to do
11134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011135 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 return ;
11137}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011138/*
11139 * FUNCTION: WDA_RemBeaconFilterReqCallback
11140 * Free memory.
11141 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11142 */
11143void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11144{
11145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11146
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11148 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11149
11150 if(NULL == pWdaParams)
11151 {
11152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11153 "%s: pWdaParams received NULL", __func__);
11154 VOS_ASSERT(0);
11155 return;
11156 }
11157
11158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11159 {
11160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11161 vos_mem_free(pWdaParams->wdaMsgParam);
11162 vos_mem_free(pWdaParams);
11163 }
11164
11165 return;
11166}
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 // TODO: PE does not have this feature for now implemented,
11168 // but the support for removing beacon filter exists between
11169 // HAL and FW. This function can be called whenever PE defines
11170 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011171/*
11172 * FUNCTION: WDA_RemBeaconFilterReq
11173 * Request to WDI to send the removal of beacon filtering related information.
11174 */
11175VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11176 tRemBeaconFilterMsg* pBeaconFilterInfo)
11177{
11178 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011179 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11181 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11182 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 tWDA_ReqParams *pWdaParams ;
11184
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 if(NULL == wdiBeaconFilterInfo)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_ASSERT(0);
11192 return VOS_STATUS_E_NOMEM;
11193 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11195 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 {
11197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011200 vos_mem_free(wdiBeaconFilterInfo);
11201 vos_mem_free(pBeaconFilterInfo);
11202 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204
11205 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11206 pBeaconFilterInfo->ucIeCount;
11207 //Fill structure with info contained in the ucRemIeId
11208 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11209 pBeaconFilterInfo->ucRemIeId,
11210 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11211 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11212 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011213
11214 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011215 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011216 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011217 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11218
11219 pWdaParams->pWdaContext = pWDA;
11220
Jeff Johnson43971f52012-07-17 12:26:56 -070011221 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011222 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011223 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 {
11225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11226 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011227 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11229 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011230 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011232 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011233}
Jeff Johnson295189b2012-06-20 16:38:30 -070011234/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011235 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 *
11237 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011238void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011239{
11240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011242 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 if(NULL == pWdaParams)
11244 {
11245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011246 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011247 VOS_ASSERT(0) ;
11248 return ;
11249 }
11250
11251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11252 vos_mem_free(pWdaParams) ;
11253
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 return ;
11255}
Jeff Johnson295189b2012-06-20 16:38:30 -070011256/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011257 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11258 * Free memory.
11259 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11260 */
11261void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11262{
11263 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11264
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11266 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11267
11268 if(NULL == pWdaParams)
11269 {
11270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11271 "%s: pWdaParams received NULL", __func__);
11272 VOS_ASSERT(0);
11273 return;
11274 }
11275
11276 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11277 {
11278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11279 vos_mem_free(pWdaParams);
11280 }
11281
11282 return;
11283}
11284/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011285 * FUNCTION: WDA_SetRSSIThresholdsReq
11286 * Request to WDI to set the RSSI thresholds (sta mode).
11287 */
11288VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11289{
11290 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011291 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 tWDA_CbContext *pWDA = NULL ;
11293 v_PVOID_t pVosContext = NULL;
11294 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11295 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11296 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11297 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011299 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 if(NULL == wdiRSSIThresholdsInfo)
11301 {
11302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 VOS_ASSERT(0);
11305 return VOS_STATUS_E_NOMEM;
11306 }
11307 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11308 if(NULL == pWdaParams)
11309 {
11310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 VOS_ASSERT(0);
11313 vos_mem_free(wdiRSSIThresholdsInfo);
11314 return VOS_STATUS_E_NOMEM;
11315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011316 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11318 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11319 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11321 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11322 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011323 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11324 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11325 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011326 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11327 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011328 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11329 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11330
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 /* Store param pointer as passed in by caller */
11332 /* store Params pass it to WDI */
11333 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11334 pWdaParams->pWdaContext = pWDA;
11335 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011336 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011337 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011338 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 {
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11341 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011342 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11344 vos_mem_free(pWdaParams) ;
11345 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011346 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011347
11348}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011349/*
Yue Madb90ac12013-04-04 13:39:13 -070011350 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011351 *
11352 */
Yue Madb90ac12013-04-04 13:39:13 -070011353void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011354{
11355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11356
11357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 if(NULL == pWdaParams)
11360 {
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 VOS_ASSERT(0) ;
11364 return ;
11365 }
11366
11367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11368 vos_mem_free(pWdaParams->wdaMsgParam);
11369 vos_mem_free(pWdaParams) ;
11370
11371 //print a msg, nothing else to do
11372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011373 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 return ;
11375}
Jeff Johnson295189b2012-06-20 16:38:30 -070011376/*
Yue Madb90ac12013-04-04 13:39:13 -070011377 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011378 * Free memory.
11379 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011380 */
11381void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11382{
11383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11384
11385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11386 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11387
11388 if(NULL == pWdaParams)
11389 {
11390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11391 "%s: Invalid pWdaParams pointer", __func__);
11392 VOS_ASSERT(0);
11393 return;
11394 }
11395
11396 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11397 {
11398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11399 vos_mem_free(pWdaParams->wdaMsgParam);
11400 vos_mem_free(pWdaParams);
11401 }
11402
11403 return;
11404}
11405/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 * FUNCTION: WDA_ProcessHostOffloadReq
11407 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11408 * to broadcast traffic (sta mode).
11409 */
11410VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11411 tSirHostOffloadReq *pHostOffloadParams)
11412{
11413 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011414 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11416 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11417 sizeof(WDI_HostOffloadReqParamsType)) ;
11418 tWDA_ReqParams *pWdaParams ;
11419
11420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011421 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422
11423 if(NULL == wdiHostOffloadInfo)
11424 {
11425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 VOS_ASSERT(0);
11428 return VOS_STATUS_E_NOMEM;
11429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11431 if(NULL == pWdaParams)
11432 {
11433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 VOS_ASSERT(0);
11436 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011437 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 return VOS_STATUS_E_NOMEM;
11439 }
11440
11441 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11442 pHostOffloadParams->offloadType;
11443 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11444 pHostOffloadParams->enableOrDisable;
11445
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011446 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11447 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11448
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11450 {
11451 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11452 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11453 pHostOffloadParams->params.hostIpv4Addr,
11454 4);
11455 break;
11456 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11457 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11458 pHostOffloadParams->params.hostIpv6Addr,
11459 16);
11460 break;
11461 case SIR_IPV6_NS_OFFLOAD:
11462 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11463 pHostOffloadParams->params.hostIpv6Addr,
11464 16);
11465
11466#ifdef WLAN_NS_OFFLOAD
11467 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11468 {
11469 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11470 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11471 16);
11472 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11473 }
11474 else
11475 {
11476 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11477 }
11478
11479 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11480 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11481 16);
11482 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11483 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11484 6);
11485
11486 //Only two are supported so let's go through them without a loop
11487 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11488 {
11489 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11490 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11491 16);
11492 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11493 }
11494 else
11495 {
11496 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11497 }
11498
11499 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11500 {
11501 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11502 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11503 16);
11504 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11505 }
11506 else
11507 {
11508 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11509 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011510 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11511 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 break;
11513#endif //WLAN_NS_OFFLOAD
11514 default:
11515 {
11516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11517 "No Handling for Offload Type %x in WDA "
11518 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11519 //WDA_VOS_ASSERT(0) ;
11520 }
11521 }
Yue Madb90ac12013-04-04 13:39:13 -070011522 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11523 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011524
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011526 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 /* store Params pass it to WDI */
11528 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11529 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011530
Jeff Johnson295189b2012-06-20 16:38:30 -070011531
Jeff Johnson43971f52012-07-17 12:26:56 -070011532 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011533 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011534
Jeff Johnson43971f52012-07-17 12:26:56 -070011535 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 {
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011538 "Failure in host offload REQ WDI API, free all the memory %d",
11539 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011540 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11542 vos_mem_free(pWdaParams->wdaMsgParam);
11543 vos_mem_free(pWdaParams) ;
11544 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011545 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011546
11547}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011548/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011549 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011550 *
11551 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011552void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011553{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11555
Jeff Johnson295189b2012-06-20 16:38:30 -070011556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011557 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011558
11559 if(NULL == pWdaParams)
11560 {
11561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011562 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011563 VOS_ASSERT(0) ;
11564 return ;
11565 }
11566
11567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11568 vos_mem_free(pWdaParams->wdaMsgParam);
11569 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011570
Jeff Johnson295189b2012-06-20 16:38:30 -070011571 //print a msg, nothing else to do
11572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011573 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011574 return ;
11575}
Jeff Johnson295189b2012-06-20 16:38:30 -070011576/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011577 * FUNCTION: WDA_KeepAliveReqCallback
11578 * Free memory.
11579 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11580 */
11581void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11582{
11583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11584
11585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11586 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11587
11588 if(NULL == pWdaParams)
11589 {
11590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11591 "%s: pWdaParams received NULL", __func__);
11592 VOS_ASSERT(0);
11593 return;
11594 }
11595
11596 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11597 {
11598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11599 vos_mem_free(pWdaParams->wdaMsgParam);
11600 vos_mem_free(pWdaParams);
11601 }
11602
11603 return;
11604}
11605/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 * FUNCTION: WDA_ProcessKeepAliveReq
11607 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11608 * wakeup due to broadcast traffic (sta mode).
11609 */
11610VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11611 tSirKeepAliveReq *pKeepAliveParams)
11612{
11613 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011614 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11616 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11617 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011618 tWDA_ReqParams *pWdaParams;
11619
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 if(NULL == wdiKeepAliveInfo)
11623 {
11624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011627 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 return VOS_STATUS_E_NOMEM;
11629 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011630
11631 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11632 if(NULL == pWdaParams)
11633 {
11634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011635 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011636 VOS_ASSERT(0);
11637 vos_mem_free(wdiKeepAliveInfo);
11638 vos_mem_free(pKeepAliveParams);
11639 return VOS_STATUS_E_NOMEM;
11640 }
11641
Jeff Johnson295189b2012-06-20 16:38:30 -070011642 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11643 pKeepAliveParams->packetType;
11644 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11645 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011646
11647 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11648 pKeepAliveParams->bssId,
11649 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011650
11651 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11652 {
11653 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11654 pKeepAliveParams->hostIpv4Addr,
11655 SIR_IPV4_ADDR_LEN);
11656 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11657 pKeepAliveParams->destIpv4Addr,
11658 SIR_IPV4_ADDR_LEN);
11659 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11660 pKeepAliveParams->destMacAddr,
11661 SIR_MAC_ADDR_LEN);
11662 }
11663 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11664 {
11665 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11666 SIR_IPV4_ADDR_LEN,
11667 0);
11668 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11669 SIR_IPV4_ADDR_LEN,
11670 0);
11671 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11672 SIR_MAC_ADDR_LEN,
11673 0);
11674 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011675 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11676 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011677
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011679 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011681 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11682 pWdaParams->pWdaContext = pWDA;
11683
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11686 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11687 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11690 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11691 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11692 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11693 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11695 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11696 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11697 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11698 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11699 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11700 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11701 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11703 "TimePeriod %d PacketType %d",
11704 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11705 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011706 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011707 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011708
Jeff Johnson43971f52012-07-17 12:26:56 -070011709 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 {
11711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11712 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011713 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11715 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011716 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011718 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719
11720}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011721/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011722 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 *
11724 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011725void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011726 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11727 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011728{
11729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011731 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 if(NULL == pWdaParams)
11733 {
11734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011735 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 VOS_ASSERT(0) ;
11737 return ;
11738 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11740 vos_mem_free(pWdaParams->wdaMsgParam);
11741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 return ;
11743}
Jeff Johnson295189b2012-06-20 16:38:30 -070011744/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011745 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11746 * Free memory.
11747 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11748 */
11749void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11750{
11751 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11752
11753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11754 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11755
11756 if(NULL == pWdaParams)
11757 {
11758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11759 "%s: pWdaParams received NULL", __func__);
11760 VOS_ASSERT(0);
11761 return;
11762 }
11763
11764 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11765 {
11766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11767 vos_mem_free(pWdaParams->wdaMsgParam);
11768 vos_mem_free(pWdaParams);
11769 }
11770
11771 return;
11772}
11773
11774/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11776 * Request to WDI to add WOWL Bcast pattern
11777 */
11778VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11779 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11780{
11781 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011782 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011783 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11784 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11785 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11786 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011788 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 if(NULL == wdiWowlAddBcPtrnInfo)
11790 {
11791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 VOS_ASSERT(0);
11794 return VOS_STATUS_E_NOMEM;
11795 }
11796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11797 if(NULL == pWdaParams)
11798 {
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 VOS_ASSERT(0);
11802 vos_mem_free(wdiWowlAddBcPtrnInfo);
11803 return VOS_STATUS_E_NOMEM;
11804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11806 pWowlAddBcPtrnParams->ucPatternId;
11807 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11808 pWowlAddBcPtrnParams->ucPatternByteOffset;
11809 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11810 pWowlAddBcPtrnParams->ucPatternMaskSize;
11811 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11812 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11814 {
11815 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11816 pWowlAddBcPtrnParams->ucPattern,
11817 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11818 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11819 pWowlAddBcPtrnParams->ucPatternMask,
11820 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11821 }
11822 else
11823 {
11824 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11825 pWowlAddBcPtrnParams->ucPattern,
11826 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11827 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11828 pWowlAddBcPtrnParams->ucPatternMask,
11829 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11830
11831 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11832 pWowlAddBcPtrnParams->ucPatternExt,
11833 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11834 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11835 pWowlAddBcPtrnParams->ucPatternMaskExt,
11836 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11837 }
11838
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011839 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11840 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11841
Yue Ma7f44bbe2013-04-12 11:47:39 -070011842 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11843 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 /* Store param pointer as passed in by caller */
11845 /* store Params pass it to WDI */
11846 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11847 pWdaParams->pWdaContext = pWDA;
11848 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011849 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011850 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011851 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 {
11853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11854 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011855 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 vos_mem_free(pWdaParams->wdaMsgParam) ;
11857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11858 vos_mem_free(pWdaParams) ;
11859 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011860 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861
11862}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011863/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011864 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 *
11866 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011867void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011868 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11869 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011870{
11871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011873 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011874 if(NULL == pWdaParams)
11875 {
11876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011877 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011878 VOS_ASSERT(0) ;
11879 return ;
11880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11882 vos_mem_free(pWdaParams->wdaMsgParam);
11883 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 return ;
11885}
Jeff Johnson295189b2012-06-20 16:38:30 -070011886/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011887 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11888 * Free memory.
11889 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11890 */
11891void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11892{
11893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11894
11895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11897
11898 if(NULL == pWdaParams)
11899 {
11900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11901 "%s: pWdaParams received NULL", __func__);
11902 VOS_ASSERT(0);
11903 return;
11904 }
11905
11906 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11907 {
11908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11909 vos_mem_free(pWdaParams->wdaMsgParam);
11910 vos_mem_free(pWdaParams);
11911 }
11912
11913 return;
11914}
11915/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011916 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11917 * Request to WDI to delete WOWL Bcast pattern
11918 */
11919VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11920 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11921{
11922 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011923 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011924 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11925 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11926 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 if(NULL == wdiWowlDelBcPtrnInfo)
11931 {
11932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 VOS_ASSERT(0);
11935 return VOS_STATUS_E_NOMEM;
11936 }
11937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11938 if(NULL == pWdaParams)
11939 {
11940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011942 VOS_ASSERT(0);
11943 vos_mem_free(wdiWowlDelBcPtrnInfo);
11944 return VOS_STATUS_E_NOMEM;
11945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11947 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011948
11949 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11950 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11951
Yue Ma7f44bbe2013-04-12 11:47:39 -070011952 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11953 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 /* Store param pointer as passed in by caller */
11955 /* store Params pass it to WDI */
11956 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11957 pWdaParams->pWdaContext = pWDA;
11958 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011959 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011960 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011961 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 {
11963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11964 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011965 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011966 vos_mem_free(pWdaParams->wdaMsgParam) ;
11967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11968 vos_mem_free(pWdaParams) ;
11969 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011970 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011971
11972}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011973/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011974 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 *
11976 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011977void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011978{
11979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011980 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011981 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011984 if(NULL == pWdaParams)
11985 {
11986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 VOS_ASSERT(0) ;
11989 return ;
11990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011992 if (NULL == pWDA)
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11995 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011996
11997 if(pWdaParams->wdaWdiApiMsgParam)
11998 {
11999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12000 }
12001 vos_mem_free(pWdaParams);
12002
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012003 VOS_ASSERT(0);
12004 return ;
12005 }
12006
Jeff Johnson295189b2012-06-20 16:38:30 -070012007 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12008
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012009 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12010
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12012 vos_mem_free(pWdaParams) ;
12013
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012014 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012015 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012017 return ;
12018}
Jeff Johnson295189b2012-06-20 16:38:30 -070012019/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012020 * FUNCTION: WDA_WowlEnterReqCallback
12021 * Free memory and send WOWL Enter RSP back to PE.
12022 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12023 */
12024void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12025{
12026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012027 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012028 tSirHalWowlEnterParams *pWowlEnterParams;
12029
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12031 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12032
12033 if(NULL == pWdaParams)
12034 {
12035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12036 "%s: pWdaParams received NULL", __func__);
12037 VOS_ASSERT(0);
12038 return;
12039 }
12040
12041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012042 if (NULL == pWDA)
12043 {
12044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12045 "%s:pWDA is NULL", __func__);
12046 VOS_ASSERT(0);
12047 return ;
12048 }
12049
Yue Ma7f44bbe2013-04-12 11:47:39 -070012050 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12051 pWowlEnterParams->status = wdiStatus;
12052
12053 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12054 {
12055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12056 vos_mem_free(pWdaParams);
12057 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12058 }
12059
12060 return;
12061}
12062/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012063 * FUNCTION: WDA_ProcessWowlEnterReq
12064 * Request to WDI to enter WOWL
12065 */
12066VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12067 tSirHalWowlEnterParams *pWowlEnterParams)
12068{
12069 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012070 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12072 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12073 sizeof(WDI_WowlEnterReqParamsType)) ;
12074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 if(NULL == wdiWowlEnterInfo)
12078 {
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 VOS_ASSERT(0);
12082 return VOS_STATUS_E_NOMEM;
12083 }
12084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12085 if(NULL == pWdaParams)
12086 {
12087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 VOS_ASSERT(0);
12090 vos_mem_free(wdiWowlEnterInfo);
12091 return VOS_STATUS_E_NOMEM;
12092 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012093
12094 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12095
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12097 pWowlEnterParams->magicPtrn,
12098 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12100 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12102 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12104 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12106 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12108 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12110 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12112 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12114 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012115#ifdef WLAN_WAKEUP_EVENTS
12116 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12117 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12118
12119 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12120 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12121
12122 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12123 pWowlEnterParams->ucWowNetScanOffloadMatch;
12124
12125 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12126 pWowlEnterParams->ucWowGTKRekeyError;
12127
12128 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12129 pWowlEnterParams->ucWoWBSSConnLoss;
12130#endif // WLAN_WAKEUP_EVENTS
12131
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012132 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12133 pWowlEnterParams->bssIdx;
12134
Yue Ma7f44bbe2013-04-12 11:47:39 -070012135 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12136 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 /* Store param pointer as passed in by caller */
12138 /* store Params pass it to WDI */
12139 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12140 pWdaParams->pWdaContext = pWDA;
12141 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012142 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012143 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012144 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012145 {
12146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12147 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012148 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 vos_mem_free(pWdaParams->wdaMsgParam) ;
12150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12151 vos_mem_free(pWdaParams) ;
12152 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012153 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012154
12155}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012156/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012157 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 *
12159 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012160void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012161{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012162 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012163 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012164 tSirHalWowlExitParams *pWowlExitParams;
12165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012166 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012167 if(NULL == pWdaParams)
12168 {
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012171 VOS_ASSERT(0) ;
12172 return ;
12173 }
12174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012175 if (NULL == pWDA)
12176 {
12177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12178 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012179
12180 if(pWdaParams->wdaWdiApiMsgParam)
12181 {
12182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12183 }
12184 vos_mem_free(pWdaParams);
12185
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012186 VOS_ASSERT(0);
12187 return ;
12188 }
12189
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012190 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12191
12192 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012193 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012194
12195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12196 vos_mem_free(pWdaParams) ;
12197
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012199 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012200 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012201 return ;
12202}
Jeff Johnson295189b2012-06-20 16:38:30 -070012203/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012204 * FUNCTION: WDA_WowlExitReqCallback
12205 * Free memory and send WOWL Exit RSP back to PE.
12206 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12207 */
12208void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12209{
12210 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012211 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012212 tSirHalWowlExitParams *pWowlExitParams;
12213
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12215 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12216
12217 if(NULL == pWdaParams)
12218 {
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12220 "%s: pWdaParams received NULL", __func__);
12221 VOS_ASSERT(0);
12222 return;
12223 }
12224
12225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012226 if (NULL == pWDA)
12227 {
12228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12229 "%s:pWDA is NULL", __func__);
12230 VOS_ASSERT(0);
12231 return ;
12232 }
12233
Yue Ma7f44bbe2013-04-12 11:47:39 -070012234 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12235 pWowlExitParams->status = wdiStatus;
12236
12237 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12238 {
12239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12240 vos_mem_free(pWdaParams);
12241 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12242 }
12243
12244 return;
12245}
12246/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 * FUNCTION: WDA_ProcessWowlExitReq
12248 * Request to WDI to add WOWL Bcast pattern
12249 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012250VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12251 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012252{
12253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012254 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012255 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12256 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12257 sizeof(WDI_WowlExitReqParamsType)) ;
12258 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012260 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012261 if(NULL == wdiWowlExitInfo)
12262 {
12263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012264 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012265 VOS_ASSERT(0);
12266 return VOS_STATUS_E_NOMEM;
12267 }
12268 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12269 if(NULL == pWdaParams)
12270 {
12271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012272 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012273 VOS_ASSERT(0);
12274 vos_mem_free(wdiWowlExitInfo);
12275 return VOS_STATUS_E_NOMEM;
12276 }
12277
12278 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12279 pWowlExitParams->bssIdx;
12280
Yue Ma7f44bbe2013-04-12 11:47:39 -070012281 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12282 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012283
12284 /* Store param pointer as passed in by caller */
12285 /* store Params pass it to WDI */
12286 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12287 pWdaParams->pWdaContext = pWDA;
12288 pWdaParams->wdaMsgParam = pWowlExitParams;
12289
12290 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012291 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012292
Jeff Johnson43971f52012-07-17 12:26:56 -070012293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 {
12295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12296 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012297 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -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 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012302 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012303}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012304/*
12305 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12306 * Request to WDI to determine whether a given station is capable of
12307 * using HW-based frame translation
12308 */
12309v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12310 tANI_U8 staIdx)
12311{
12312 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12313}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012314
12315/*
12316 * FUNCTION: WDA_IsSelfSTA
12317 * Request to WDI to determine whether a given STAID is self station
12318 * index.
12319 */
12320v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12321{
12322
12323 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12324
Girish Gowli05cf44e2014-06-12 21:53:37 +053012325 if (NULL != pWDA)
12326 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12327 else
12328 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012329}
Jeff Johnson295189b2012-06-20 16:38:30 -070012330/*
12331 * FUNCTION: WDA_NvDownloadReqCallback
12332 * send NV Download RSP back to PE
12333 */
12334void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12335 void* pUserData)
12336{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012337
12338 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012339 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012340
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012342 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012343
12344 if(NULL == pWdaParams)
12345 {
12346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012347 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012348 VOS_ASSERT(0) ;
12349 return ;
12350 }
12351
12352 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012353 if (NULL == pWDA)
12354 {
12355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12356 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012357
12358 if(pWdaParams->wdaWdiApiMsgParam)
12359 {
12360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12361 }
12362 vos_mem_free(pWdaParams);
12363
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012364 VOS_ASSERT(0);
12365 return ;
12366 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012367
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12370 vos_mem_free(pWdaParams);
12371
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012373 return ;
12374}
Jeff Johnson295189b2012-06-20 16:38:30 -070012375/*
12376 * FUNCTION: WDA_ProcessNvDownloadReq
12377 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12378 */
12379VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12380{
12381 /* Initialize the local Variables*/
12382 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12383 v_VOID_t *pNvBuffer=NULL;
12384 v_SIZE_t bufferSize = 0;
12385 WDI_Status status = WDI_STATUS_E_FAILURE;
12386 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012387 tWDA_ReqParams *pWdaParams ;
12388
Jeff Johnson295189b2012-06-20 16:38:30 -070012389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012390 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012391 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 {
12393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012394 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012395 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 return VOS_STATUS_E_FAILURE;
12397 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012398
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012400 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12401
Jeff Johnson295189b2012-06-20 16:38:30 -070012402 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12403 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012404 if(NULL == wdiNvDownloadReqParam)
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 VOS_ASSERT(0);
12409 return VOS_STATUS_E_NOMEM;
12410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012411 /* Copy Params to wdiNvDownloadReqParam*/
12412 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12413 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012414
12415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12416 if(NULL == pWdaParams)
12417 {
12418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012419 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012420 VOS_ASSERT(0);
12421 vos_mem_free(wdiNvDownloadReqParam);
12422 return VOS_STATUS_E_NOMEM;
12423 }
12424
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012426 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12427 pWdaParams->wdaMsgParam = NULL;
12428 pWdaParams->pWdaContext = pWDA;
12429
12430
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012432
Jeff Johnson295189b2012-06-20 16:38:30 -070012433 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012434 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12435
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 if(IS_WDI_STATUS_FAILURE(status))
12437 {
12438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12439 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12441 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012443 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012444}
12445/*
12446 * FUNCTION: WDA_FlushAcReqCallback
12447 * send Flush AC RSP back to TL
12448 */
12449void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12450{
12451 vos_msg_t wdaMsg = {0} ;
12452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12453 tFlushACReq *pFlushACReqParams;
12454 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012456 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012457 if(NULL == pWdaParams)
12458 {
12459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012460 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012461 VOS_ASSERT(0) ;
12462 return ;
12463 }
12464
12465 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12466 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12467 if(NULL == pFlushACRspParams)
12468 {
12469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012472 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 return ;
12474 }
12475 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12476 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12477 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12478 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12479 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012480 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 vos_mem_free(pWdaParams->wdaMsgParam) ;
12482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12483 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012484 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12485 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12486 // POST message to TL
12487 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12488
Jeff Johnson295189b2012-06-20 16:38:30 -070012489 return ;
12490}
Jeff Johnson295189b2012-06-20 16:38:30 -070012491/*
12492 * FUNCTION: WDA_ProcessFlushAcReq
12493 * Request to WDI to Update the DELBA REQ params.
12494 */
12495VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12496 tFlushACReq *pFlushAcReqParams)
12497{
12498 WDI_Status status = WDI_STATUS_SUCCESS ;
12499 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12500 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12501 sizeof(WDI_FlushAcReqParamsType)) ;
12502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012503 if(NULL == wdiFlushAcReqParam)
12504 {
12505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 VOS_ASSERT(0);
12508 return VOS_STATUS_E_NOMEM;
12509 }
12510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12511 if(NULL == pWdaParams)
12512 {
12513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 VOS_ASSERT(0);
12516 vos_mem_free(wdiFlushAcReqParam);
12517 return VOS_STATUS_E_NOMEM;
12518 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12522 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12523 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12524 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 /* Store Flush AC pointer, as this will be used for response */
12526 /* store Params pass it to WDI */
12527 pWdaParams->pWdaContext = pWDA;
12528 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12529 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12531 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 if(IS_WDI_STATUS_FAILURE(status))
12533 {
12534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12535 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12536 vos_mem_free(pWdaParams->wdaMsgParam) ;
12537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12538 vos_mem_free(pWdaParams) ;
12539 //TODO: respond to TL with failure
12540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012541 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012542}
Jeff Johnson295189b2012-06-20 16:38:30 -070012543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012544 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012545 *
12546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012547void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012548{
12549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012550 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012551 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012552
12553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 if(NULL == pWdaParams)
12556 {
12557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012559 VOS_ASSERT(0) ;
12560 return ;
12561 }
12562 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012563 if (NULL == pWDA)
12564 {
12565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12566 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012567 vos_mem_free(pWdaParams->wdaMsgParam) ;
12568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12569 vos_mem_free(pWdaParams) ;
12570
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012571 VOS_ASSERT(0);
12572 return ;
12573 }
12574
Jeff Johnson295189b2012-06-20 16:38:30 -070012575 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12576 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12577 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12578 {
12579 pWDA->wdaAmpSessionOn = VOS_FALSE;
12580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012581 vos_mem_free(pWdaParams->wdaMsgParam) ;
12582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12583 vos_mem_free(pWdaParams) ;
12584 /*
12585 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12586 * param here
12587 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012588 return ;
12589}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012590/*
12591 * FUNCTION: WDA_BtAmpEventReqCallback
12592 * Free memory.
12593 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12594 */
12595void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12596{
12597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012598 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012600
Yue Ma7f44bbe2013-04-12 11:47:39 -070012601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12602 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12603
12604 if(NULL == pWdaParams)
12605 {
12606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12607 "%s: pWdaParams received NULL", __func__);
12608 VOS_ASSERT(0);
12609 return;
12610 }
12611
12612 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012613 if (NULL == pWDA)
12614 {
12615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12616 "%s:pWDA is NULL", __func__);
12617 VOS_ASSERT(0);
12618 return ;
12619 }
12620
Yue Ma7f44bbe2013-04-12 11:47:39 -070012621 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12622
12623 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12624 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12625 {
12626 pWDA->wdaAmpSessionOn = VOS_FALSE;
12627 }
12628
12629 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12630 {
12631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12632 vos_mem_free(pWdaParams->wdaMsgParam);
12633 vos_mem_free(pWdaParams);
12634 }
12635
12636 return;
12637}
Jeff Johnson295189b2012-06-20 16:38:30 -070012638/*
12639 * FUNCTION: WDA_ProcessBtAmpEventReq
12640 * Request to WDI to Update with BT AMP events.
12641 */
12642VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12643 tSmeBtAmpEvent *pBtAmpEventParams)
12644{
12645 WDI_Status status = WDI_STATUS_SUCCESS ;
12646 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12647 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12648 sizeof(WDI_BtAmpEventParamsType)) ;
12649 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 if(NULL == wdiBtAmpEventParam)
12653 {
12654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 VOS_ASSERT(0);
12657 return VOS_STATUS_E_NOMEM;
12658 }
12659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12660 if(NULL == pWdaParams)
12661 {
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 VOS_ASSERT(0);
12665 vos_mem_free(wdiBtAmpEventParam);
12666 return VOS_STATUS_E_NOMEM;
12667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12669 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012670 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12671 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 /* Store BT AMP event pointer, as this will be used for response */
12673 /* store Params pass it to WDI */
12674 pWdaParams->pWdaContext = pWDA;
12675 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12676 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012678 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 if(IS_WDI_STATUS_FAILURE(status))
12680 {
12681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12682 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12683 vos_mem_free(pWdaParams->wdaMsgParam) ;
12684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12685 vos_mem_free(pWdaParams) ;
12686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012687 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12688 {
12689 pWDA->wdaAmpSessionOn = VOS_TRUE;
12690 }
12691 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692}
12693
Jeff Johnson295189b2012-06-20 16:38:30 -070012694/*
12695 * FUNCTION: WDA_FTMCommandReqCallback
12696 * Handle FTM CMD response came from HAL
12697 * Route responce to HDD FTM
12698 */
12699void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12700 void *usrData)
12701{
12702 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12704 {
12705 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012706 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 return;
12708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 /* Release Current FTM Command Request */
12710 vos_mem_free(pWDA->wdaFTMCmdReq);
12711 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 /* Post FTM Responce to HDD FTM */
12713 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 return;
12715}
Jeff Johnson295189b2012-06-20 16:38:30 -070012716/*
12717 * FUNCTION: WDA_ProcessFTMCommand
12718 * Send FTM command to WDI
12719 */
12720VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12721 tPttMsgbuffer *pPTTFtmCmd)
12722{
12723 WDI_Status status = WDI_STATUS_SUCCESS;
12724 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 ftmCMDReq = (WDI_FTMCommandReqType *)
12726 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12727 if(NULL == ftmCMDReq)
12728 {
12729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12730 "WDA FTM Command buffer alloc fail");
12731 return VOS_STATUS_E_NOMEM;
12732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12734 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012735 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012736 /* Send command to WDI */
12737 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012738 return status;
12739}
Jeff Johnsone7245742012-09-05 17:12:55 -070012740#ifdef FEATURE_OEM_DATA_SUPPORT
12741/*
12742 * FUNCTION: WDA_StartOemDataReqCallback
12743 *
12744 */
12745void WDA_StartOemDataReqCallback(
12746 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12747 void* pUserData)
12748{
12749 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012751 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012752 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012753
Jeff Johnsone7245742012-09-05 17:12:55 -070012754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012755 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012756
12757 if(NULL == pWdaParams)
12758 {
12759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012760 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012761 VOS_ASSERT(0) ;
12762 return ;
12763 }
12764 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12765
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012766 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012767 {
12768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012769 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012770 VOS_ASSERT(0);
12771 return ;
12772 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012773
Jeff Johnsone7245742012-09-05 17:12:55 -070012774 /*
12775 * Allocate memory for response params sent to PE
12776 */
12777 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12778
12779 // Check if memory is allocated for OemdataMeasRsp Params.
12780 if(NULL == pOemDataRspParams)
12781 {
12782 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12783 "OEM DATA WDA callback alloc fail");
12784 VOS_ASSERT(0) ;
12785 return;
12786 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012787
Jeff Johnsone7245742012-09-05 17:12:55 -070012788 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12790 vos_mem_free(pWdaParams->wdaMsgParam);
12791 vos_mem_free(pWdaParams) ;
12792
Jeff Johnsone7245742012-09-05 17:12:55 -070012793 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012794 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012795 * Also, here success always means that we have atleast one BSSID.
12796 */
12797 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12798
12799 //enable Tx
12800 status = WDA_ResumeDataTx(pWDA);
12801 if(status != VOS_STATUS_SUCCESS)
12802 {
12803 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12804 }
12805 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12806 return ;
12807}
12808/*
12809 * FUNCTION: WDA_ProcessStartOemDataReq
12810 * Send Start Oem Data Req to WDI
12811 */
12812VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12813 tStartOemDataReq *pOemDataReqParams)
12814{
12815 WDI_Status status = WDI_STATUS_SUCCESS;
12816 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012817 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012818
12819 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12820
12821 if(NULL == wdiOemDataReqParams)
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 Johnsone7245742012-09-05 17:12:55 -070012825 VOS_ASSERT(0);
12826 return VOS_STATUS_E_NOMEM;
12827 }
12828
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012829 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12830 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12831 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12832 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012833
12834 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12835
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12837 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012838 {
12839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012841 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012842 vos_mem_free(pOemDataReqParams);
12843 VOS_ASSERT(0);
12844 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012845 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012846
Bernald44a1ae2013-01-09 08:30:39 -080012847 pWdaParams->pWdaContext = (void*)pWDA;
12848 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12849 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012850
12851 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12852 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012853
12854 if(IS_WDI_STATUS_FAILURE(status))
12855 {
12856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12857 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12859 vos_mem_free(pWdaParams->wdaMsgParam);
12860 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012861 }
12862 return CONVERT_WDI2VOS_STATUS(status) ;
12863}
12864#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012865/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012866 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 *
12868 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012869void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012870{
12871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012881
12882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12883 vos_mem_free(pWdaParams->wdaMsgParam);
12884 vos_mem_free(pWdaParams);
12885
12886 return ;
12887}
12888/*
12889 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12890 * Free memory.
12891 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12892 */
12893void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12894{
12895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12896
12897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12898 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12899
12900 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12903 "%s: pWdaParams received NULL", __func__);
12904 VOS_ASSERT(0);
12905 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012906 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012907
12908 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 {
12910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012911 vos_mem_free(pWdaParams->wdaMsgParam);
12912 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012913 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012914
12915 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012916}
Jeff Johnson295189b2012-06-20 16:38:30 -070012917#ifdef WLAN_FEATURE_GTK_OFFLOAD
12918/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012919 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012920 *
12921 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012922void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012923 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012924{
12925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12926
12927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012928 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012929 if(NULL == pWdaParams)
12930 {
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12932 "%s: pWdaParams received NULL", __func__);
12933 VOS_ASSERT(0);
12934 return;
12935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012936
Jeff Johnson295189b2012-06-20 16:38:30 -070012937 vos_mem_free(pWdaParams->wdaMsgParam) ;
12938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12939 vos_mem_free(pWdaParams) ;
12940
12941 //print a msg, nothing else to do
12942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012943 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012944
12945 return ;
12946}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012947/*
12948 * FUNCTION: WDA_GTKOffloadReqCallback
12949 * Free memory.
12950 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12951 */
12952void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12953{
12954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012955
Yue Ma7f44bbe2013-04-12 11:47:39 -070012956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12957 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12958
12959 if(NULL == pWdaParams)
12960 {
12961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12962 "%s: pWdaParams received NULL", __func__);
12963 VOS_ASSERT(0);
12964 return;
12965 }
12966
12967 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12968 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012969 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12970 sizeof(WDI_GtkOffloadReqMsg));
12971 vos_mem_zero(pWdaParams->wdaMsgParam,
12972 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12974 vos_mem_free(pWdaParams->wdaMsgParam);
12975 vos_mem_free(pWdaParams);
12976 }
12977
12978 return;
12979}
Jeff Johnson295189b2012-06-20 16:38:30 -070012980/*
12981 * FUNCTION: WDA_ProcessGTKOffloadReq
12982 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12983 * to broadcast traffic (sta mode).
12984 */
12985VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12986 tpSirGtkOffloadParams pGtkOffloadParams)
12987{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012988 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12990 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12991 sizeof(WDI_GtkOffloadReqMsg)) ;
12992 tWDA_ReqParams *pWdaParams ;
12993
12994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012996
12997 if(NULL == wdiGtkOffloadReqMsg)
12998 {
12999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013001 VOS_ASSERT(0);
13002 return VOS_STATUS_E_NOMEM;
13003 }
13004
13005 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13006 if(NULL == pWdaParams)
13007 {
13008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013010 VOS_ASSERT(0);
13011 vos_mem_free(wdiGtkOffloadReqMsg);
13012 return VOS_STATUS_E_NOMEM;
13013 }
13014
13015 //
13016 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13017 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013018
13019 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013020 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013021
Jeff Johnson295189b2012-06-20 16:38:30 -070013022 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13023 // Copy KCK
13024 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13025 // Copy KEK
13026 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13027 // Copy KeyReplayCounter
13028 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13029 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13030
Yue Ma7f44bbe2013-04-12 11:47:39 -070013031 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13032 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013033
Jeff Johnson295189b2012-06-20 16:38:30 -070013034
13035 /* Store Params pass it to WDI */
13036 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13037 pWdaParams->pWdaContext = pWDA;
13038 /* Store param pointer as passed in by caller */
13039 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13040
Yue Ma7f44bbe2013-04-12 11:47:39 -070013041 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013042
13043 if(IS_WDI_STATUS_FAILURE(status))
13044 {
13045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13046 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013047 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13048 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13050 vos_mem_free(pWdaParams->wdaMsgParam);
13051 vos_mem_free(pWdaParams);
13052 }
13053
13054 return CONVERT_WDI2VOS_STATUS(status) ;
13055}
13056
13057/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013058 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 *
13060 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013061void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013062 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013063{
13064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13065 tWDA_CbContext *pWDA;
13066 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013067 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 vos_msg_t vosMsg;
13069
13070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013071 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013072
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013073 if(NULL == pWdaParams)
13074 {
13075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13076 "%s: pWdaParams received NULL", __func__);
13077 VOS_ASSERT(0);
13078 return;
13079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013080
Nirav Shah374de6e2014-02-13 16:40:01 +053013081 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13082 if(NULL == pGtkOffloadGetInfoRsp)
13083 {
13084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13085 "%s: vos_mem_malloc failed ", __func__);
13086 VOS_ASSERT(0);
13087 return;
13088 }
13089
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13091 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13092
13093 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13094 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13095
13096 /* Message Header */
13097 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013098 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013099
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013100 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13101 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13102 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13103 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13104 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013105
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013106 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13107 pwdiGtkOffloadGetInfoRsparams->bssId,
13108 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013109 /* VOS message wrapper */
13110 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13111 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13112 vosMsg.bodyval = 0;
13113
13114 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13115 {
13116 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013117 vos_mem_zero(pGtkOffloadGetInfoRsp,
13118 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13120 }
13121
13122 vos_mem_free(pWdaParams->wdaMsgParam) ;
13123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13124 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013125
13126 return;
13127}
13128/*
13129 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13130 * Free memory and send RSP back to SME.
13131 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13132 */
13133void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13134{
13135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13136 vos_msg_t vosMsg;
13137
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13139 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13140
13141 if(NULL == pWdaParams)
13142 {
13143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13144 "%s: pWdaParams received NULL", __func__);
13145 VOS_ASSERT(0);
13146 return;
13147 }
13148
13149 /* VOS message wrapper */
13150 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13151 vosMsg.bodyptr = NULL;
13152 vosMsg.bodyval = 0;
13153
13154 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13155 {
13156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13157 vos_mem_free(pWdaParams->wdaMsgParam);
13158 vos_mem_free(pWdaParams);
13159 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13160 }
13161
13162 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163}
13164#endif
13165
13166/*
13167 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13168 * Request to WDI to set Tx Per Tracking configurations
13169 */
13170VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13171{
13172 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013173 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13175 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13176 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013179 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 if(NULL == pwdiSetTxPerTrackingReqParams)
13181 {
13182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013184 vos_mem_free(pTxPerTrackingParams);
13185 VOS_ASSERT(0);
13186 return VOS_STATUS_E_NOMEM;
13187 }
13188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13189 if(NULL == pWdaParams)
13190 {
13191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13194 vos_mem_free(pTxPerTrackingParams);
13195 VOS_ASSERT(0);
13196 return VOS_STATUS_E_NOMEM;
13197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13199 pTxPerTrackingParams->ucTxPerTrackingEnable;
13200 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13201 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13202 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13203 pTxPerTrackingParams->ucTxPerTrackingRatio;
13204 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13205 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013206 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13207 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013208 /* Store param pointer as passed in by caller */
13209 /* store Params pass it to WDI
13210 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13211 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13212 pWdaParams->pWdaContext = pWDA;
13213 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013214 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013215 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013216 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013217 {
13218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13219 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013220 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 vos_mem_free(pWdaParams->wdaMsgParam) ;
13222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13223 vos_mem_free(pWdaParams) ;
13224 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013225 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013226
13227}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013228/*
13229 * FUNCTION: WDA_HALDumpCmdCallback
13230 * Send the VOS complete .
13231 */
13232void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13233 void* pUserData)
13234{
13235 tANI_U8 *buffer = NULL;
13236 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013237 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 if(NULL == pWdaParams)
13239 {
13240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 VOS_ASSERT(0) ;
13243 return ;
13244 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013245
13246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13247 "%s: WDA HAL DUMP Resp Received",__func__);
13248
Jeff Johnson295189b2012-06-20 16:38:30 -070013249 pWDA = pWdaParams->pWdaContext;
13250 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013251 if(wdiRspParams->usBufferLen > 0)
13252 {
13253 /*Copy the Resp data to UMAC supplied buffer*/
13254 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13255 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013256
13257 if (!pWdaParams->wdaHALDumpAsync)
13258 {/* Indicate VOSS about the start complete */
13259 vos_WDAComplete_cback(pWDA->pVosContext);
13260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013263 return ;
13264}
13265
Jeff Johnson295189b2012-06-20 16:38:30 -070013266/*
13267 * FUNCTION: WDA_ProcessHALDumpCmdReq
13268 * Send Dump command to WDI
13269 */
13270VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13271 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013272 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013273{
13274 WDI_Status status = WDI_STATUS_SUCCESS;
13275 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13276 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013277 tWDA_HalDumpReqParams *pWdaParams ;
13278
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 pVosContextType pVosContext = NULL;
13280 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013281 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13282 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013283 if(pVosContext)
13284 {
13285 if (pVosContext->isLogpInProgress)
13286 {
13287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13288 "%s:LOGP in Progress. Ignore!!!", __func__);
13289 return VOS_STATUS_E_BUSY;
13290 }
13291 }
13292 else
13293 {
13294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13295 "%s: VOS Context Null", __func__);
13296 return VOS_STATUS_E_RESOURCES;
13297 }
13298
Siddharth Bhal68115602015-01-18 20:44:55 +053013299 if (NULL == pVosContext->pWDAContext)
13300 {
13301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13302 "%s: WDA Context Null", __func__);
13303 return VOS_STATUS_E_RESOURCES;
13304 }
13305 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 if(NULL == pWdaParams)
13307 {
13308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 return VOS_STATUS_E_NOMEM;
13311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 /* Allocate memory WDI request structure*/
13313 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13314 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13315 if(NULL == wdiHALDumpCmdReqParam)
13316 {
13317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13318 "WDA HAL DUMP Command buffer alloc fail");
13319 vos_mem_free(pWdaParams);
13320 return WDI_STATUS_E_FAILURE;
13321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013322 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 /* Extract the arguments */
13324 wdiHalDumpCmdInfo->command = cmd;
13325 wdiHalDumpCmdInfo->argument1 = arg1;
13326 wdiHalDumpCmdInfo->argument2 = arg2;
13327 wdiHalDumpCmdInfo->argument3 = arg3;
13328 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013329 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013331 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013332
13333 /* Response message will be passed through the buffer */
13334 pWdaParams->wdaMsgParam = (void *)pBuffer;
13335
13336 /* store Params pass it to WDI */
13337 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013338
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13340 "%s: WDA HAL DUMP Command sent",__func__);
13341
Jeff Johnson295189b2012-06-20 16:38:30 -070013342 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013343 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13344 pWdaParams);
13345 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13346 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013347 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013348 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13349 WDA_DUMPCMD_WAIT_TIMEOUT );
13350 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013351 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013352 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13353 {
13354 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13355 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13356 }
13357 else
13358 {
13359 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13360 "%s: WDA_HALDUMP reporting other error",__func__);
13361 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013362 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 }
13365 return status;
13366}
Jeff Johnson295189b2012-06-20 16:38:30 -070013367#ifdef WLAN_FEATURE_GTK_OFFLOAD
13368/*
13369 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13370 * Request to WDI to get GTK Offload Information
13371 */
13372VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13373 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13374{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013375 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013376 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13377 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13378 tWDA_ReqParams *pWdaParams ;
13379
13380 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13381 {
13382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013384 VOS_ASSERT(0);
13385 return VOS_STATUS_E_NOMEM;
13386 }
13387
13388 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13389 if(NULL == pWdaParams)
13390 {
13391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 VOS_ASSERT(0);
13394 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13395 return VOS_STATUS_E_NOMEM;
13396 }
13397
Yue Ma7f44bbe2013-04-12 11:47:39 -070013398 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13399 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013400
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 /* Store Params pass it to WDI */
13402 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13403 pWdaParams->pWdaContext = pWDA;
13404 /* Store param pointer as passed in by caller */
13405 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13406
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013407 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013408 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013409
Yue Ma7f44bbe2013-04-12 11:47:39 -070013410 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013411
13412 if(IS_WDI_STATUS_FAILURE(status))
13413 {
13414 /* failure returned by WDI API */
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13416 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13418 vos_mem_free(pWdaParams) ;
13419 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13420 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13421 }
13422
13423 return CONVERT_WDI2VOS_STATUS(status) ;
13424}
13425#endif // WLAN_FEATURE_GTK_OFFLOAD
13426
13427/*
Yue Mab9c86f42013-08-14 15:59:08 -070013428 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13429 *
13430 */
13431VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13432 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13433{
13434 WDI_Status wdiStatus;
13435 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13436
13437 addPeriodicTxPtrnParams =
13438 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13439
13440 if (NULL == addPeriodicTxPtrnParams)
13441 {
13442 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13443 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13444 __func__);
13445
13446 return VOS_STATUS_E_NOMEM;
13447 }
13448
13449 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13450 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13451
13452 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13453 addPeriodicTxPtrnParams->pUserData = pWDA;
13454
13455 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13456
13457 if (WDI_STATUS_PENDING == wdiStatus)
13458 {
13459 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13460 "Pending received for %s:%d", __func__, __LINE__ );
13461 }
13462 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13463 {
13464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13465 "Failure in %s:%d", __func__, __LINE__ );
13466 }
13467
13468 vos_mem_free(addPeriodicTxPtrnParams);
13469
13470 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13471}
13472
13473/*
13474 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13475 *
13476 */
13477VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13478 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13479{
13480 WDI_Status wdiStatus;
13481 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13482
13483 delPeriodicTxPtrnParams =
13484 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13485
13486 if (NULL == delPeriodicTxPtrnParams)
13487 {
13488 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13489 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13490 __func__);
13491
13492 return VOS_STATUS_E_NOMEM;
13493 }
13494
13495 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13496 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13497
13498 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13499 delPeriodicTxPtrnParams->pUserData = pWDA;
13500
13501 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13502
13503 if (WDI_STATUS_PENDING == wdiStatus)
13504 {
13505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13506 "Pending received for %s:%d", __func__, __LINE__ );
13507 }
13508 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13509 {
13510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13511 "Failure in %s:%d", __func__, __LINE__ );
13512 }
13513
13514 vos_mem_free(delPeriodicTxPtrnParams);
13515
13516 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13517}
13518
Abhishek Singh00b71972016-01-07 10:51:04 +053013519/*
13520 * FUNCTION: WDA_ProcessRateUpdateInd
13521 *
13522 */
13523VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13524 tSirRateUpdateInd *pRateUpdateParams)
13525{
13526 WDI_Status wdiStatus;
13527 WDI_RateUpdateIndParams rateUpdateParams;
13528
13529 vos_mem_copy(rateUpdateParams.bssid,
13530 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13531
13532 rateUpdateParams.ucastDataRateTxFlag =
13533 pRateUpdateParams->ucastDataRateTxFlag;
13534 rateUpdateParams.rmcDataRateTxFlag =
13535 pRateUpdateParams->rmcDataRateTxFlag;
13536 rateUpdateParams.mcastDataRate24GHzTxFlag =
13537 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13538 rateUpdateParams.mcastDataRate5GHzTxFlag =
13539 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13540
13541 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13542 rateUpdateParams.rmcDataRate =
13543 pRateUpdateParams->rmcDataRate;
13544 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13545 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13546
13547 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13548 rateUpdateParams.pUserData = pWDA;
13549
13550 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13551
13552 if (WDI_STATUS_PENDING == wdiStatus)
13553 {
13554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13555 "Pending received for %s:%d", __func__, __LINE__ );
13556 }
13557 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13558 {
13559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13560 "Failure in %s:%d", __func__, __LINE__ );
13561 }
13562
13563 vos_mem_free(pRateUpdateParams);
13564
13565 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13566}
13567
13568
Rajeev79dbe4c2013-10-05 11:03:42 +053013569#ifdef FEATURE_WLAN_BATCH_SCAN
13570/*
13571 * FUNCTION: WDA_ProcessStopBatchScanInd
13572 *
13573 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13574 *
13575 * PARAM:
13576 * pWDA: pointer to WDA context
13577 * pReq: pointer to stop batch scan request
13578 */
13579VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13580 tSirStopBatchScanInd *pReq)
13581{
13582 WDI_Status wdiStatus;
13583 WDI_StopBatchScanIndType wdiReq;
13584
13585 wdiReq.param = pReq->param;
13586
13587 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13588
13589 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13590 {
13591 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13592 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13593 }
13594
13595 vos_mem_free(pReq);
13596
13597 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13598}
13599/*==========================================================================
13600 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13601
13602 DESCRIPTION
13603 API to pull batch scan result from FW
13604
13605 PARAMETERS
13606 pWDA: Pointer to WDA context
13607 pGetBatchScanReq: Pointer to get batch scan result indication
13608
13609 RETURN VALUE
13610 NONE
13611
13612===========================================================================*/
13613VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13614 tSirTriggerBatchScanResultInd *pReq)
13615{
13616 WDI_Status wdiStatus;
13617 WDI_TriggerBatchScanResultIndType wdiReq;
13618
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13620 "------> %s " ,__func__);
13621
13622 wdiReq.param = pReq->param;
13623
13624 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13625
13626 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13627 {
13628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13629 "Trigger batch scan result ind failed %s:%d",
13630 __func__, wdiStatus);
13631 }
13632
13633 vos_mem_free(pReq);
13634
13635 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13636}
13637
13638/*==========================================================================
13639 FUNCTION WDA_SetBatchScanRespCallback
13640
13641 DESCRIPTION
13642 API to process set batch scan response from FW
13643
13644 PARAMETERS
13645 pRsp: Pointer to set batch scan response
13646 pUserData: Pointer to user data
13647
13648 RETURN VALUE
13649 NONE
13650
13651===========================================================================*/
13652void WDA_SetBatchScanRespCallback
13653(
13654 WDI_SetBatchScanRspType *pRsp,
13655 void* pUserData
13656)
13657{
13658 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13659 tpAniSirGlobal pMac;
13660 void *pCallbackContext;
13661 tWDA_CbContext *pWDA = NULL ;
13662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13663
13664
13665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13666 "<------ %s " ,__func__);
13667 if (NULL == pWdaParams)
13668 {
13669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13670 "%s: pWdaParams received NULL", __func__);
13671 VOS_ASSERT(0) ;
13672 return ;
13673 }
13674
13675 /*extract WDA context*/
13676 pWDA = pWdaParams->pWdaContext;
13677 if (NULL == pWDA)
13678 {
13679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13680 "%s:pWDA is NULL can't invole HDD callback",
13681 __func__);
13682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13683 vos_mem_free(pWdaParams->wdaMsgParam);
13684 vos_mem_free(pWdaParams);
13685 VOS_ASSERT(0);
13686 return;
13687 }
13688
13689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13690 vos_mem_free(pWdaParams->wdaMsgParam);
13691 vos_mem_free(pWdaParams);
13692
13693 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13694 if (NULL == pMac)
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13697 "%s:pMac is NULL", __func__);
13698 VOS_ASSERT(0);
13699 return;
13700 }
13701
13702 pHddSetBatchScanRsp =
13703 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13704 if (NULL == pHddSetBatchScanRsp)
13705 {
13706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13707 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13708 VOS_ASSERT(0);
13709 return;
13710 }
13711
13712 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13713
13714 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13715 /*call hdd callback with set batch scan response data*/
13716 if(pMac->pmc.setBatchScanReqCallback)
13717 {
13718 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13719 }
13720 else
13721 {
13722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13723 "%s:HDD callback is null", __func__);
13724 VOS_ASSERT(0);
13725 }
13726
13727 vos_mem_free(pHddSetBatchScanRsp);
13728 return ;
13729}
13730
13731/*==========================================================================
13732 FUNCTION WDA_ProcessSetBatchScanReq
13733
13734 DESCRIPTION
13735 API to send set batch scan request to WDI
13736
13737 PARAMETERS
13738 pWDA: Pointer to WDA context
13739 pSetBatchScanReq: Pointer to set batch scan req
13740
13741 RETURN VALUE
13742 NONE
13743
13744===========================================================================*/
13745VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13746 tSirSetBatchScanReq *pSetBatchScanReq)
13747{
13748 WDI_Status status;
13749 tWDA_ReqParams *pWdaParams ;
13750 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13751
13752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13753 "------> %s " ,__func__);
13754
13755 pWdiSetBatchScanReq =
13756 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13757 if (NULL == pWdiSetBatchScanReq)
13758 {
13759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13760 "%s: VOS MEM Alloc Failure", __func__);
13761 vos_mem_free(pSetBatchScanReq);
13762 VOS_ASSERT(0);
13763 return VOS_STATUS_E_NOMEM;
13764 }
13765
13766 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13767 if (NULL == pWdaParams)
13768 {
13769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13770 "%s: VOS MEM Alloc Failure", __func__);
13771 VOS_ASSERT(0);
13772 vos_mem_free(pSetBatchScanReq);
13773 vos_mem_free(pWdiSetBatchScanReq);
13774 return VOS_STATUS_E_NOMEM;
13775 }
13776
13777 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13778 pWdiSetBatchScanReq->numberOfScansToBatch =
13779 pSetBatchScanReq->numberOfScansToBatch;
13780 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13781 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13782 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13783
13784 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13785 pWdaParams->pWdaContext = pWDA;
13786 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13787
13788 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13789 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13790 if (IS_WDI_STATUS_FAILURE(status))
13791 {
13792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13793 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13795 vos_mem_free(pWdaParams->wdaMsgParam);
13796 vos_mem_free(pWdaParams);
13797 }
13798 return CONVERT_WDI2VOS_STATUS(status);
13799}
13800
13801#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013802/*
13803 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13804 *
13805 * DESCRIPTION: This function sends start/update OBSS scan
13806 * inidcation message to WDI
13807 *
13808 * PARAM:
13809 * pWDA: pointer to WDA context
13810 * pReq: pointer to start OBSS scan request
13811 */
13812VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13813 tSirHT40OBSSScanInd *pReq)
13814{
13815 WDI_Status status;
13816 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13817 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013818
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13820 "------> %s " ,__func__);
13821 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13822 wdiOBSSScanParams.pUserData = pWDA;
13823
13824 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13825 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13826 pWdiOBSSScanInd->scanType = pReq->scanType;
13827 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13828 pReq->OBSSScanActiveDwellTime;
13829 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13830 pReq->OBSSScanPassiveDwellTime;
13831 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13832 pReq->BSSChannelWidthTriggerScanInterval;
13833 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13834 pReq->BSSWidthChannelTransitionDelayFactor;
13835 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13836 pReq->OBSSScanActiveTotalPerChannel;
13837 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13838 pReq->OBSSScanPassiveTotalPerChannel;
13839 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13840 pReq->OBSSScanActivityThreshold;
13841 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13842 vos_mem_copy(pWdiOBSSScanInd->channels,
13843 pReq->channels,
13844 pReq->channelCount);
13845 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13846 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13847 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13848 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13849 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13850
13851 vos_mem_copy(pWdiOBSSScanInd->ieField,
13852 pReq->ieField,
13853 pReq->ieFieldLen);
13854
13855 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13856 if (WDI_STATUS_PENDING == status)
13857 {
13858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13859 "Pending received for %s:%d ",__func__,__LINE__ );
13860 }
13861 else if (WDI_STATUS_SUCCESS_SYNC != status)
13862 {
13863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13864 "Failure in %s:%d ",__func__,__LINE__ );
13865 }
13866 return CONVERT_WDI2VOS_STATUS(status) ;
13867}
13868/*
13869 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13870 *
13871 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13872 *
13873 * PARAM:
13874 * pWDA: pointer to WDA context
13875 * pReq: pointer to stop batch scan request
13876 */
13877VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13878 tANI_U8 *bssIdx)
13879{
13880 WDI_Status status;
13881
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13883 "------> %s " ,__func__);
13884
13885 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13886 if (WDI_STATUS_PENDING == status)
13887 {
13888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13889 "Pending received for %s:%d ",__func__,__LINE__ );
13890 }
13891 else if (WDI_STATUS_SUCCESS_SYNC != status)
13892 {
13893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13894 "Failure in %s:%d ",__func__,__LINE__ );
13895 }
13896 return CONVERT_WDI2VOS_STATUS(status) ;
13897}
Yue Mab9c86f42013-08-14 15:59:08 -070013898/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 * -------------------------------------------------------------------------
13900 * DATA interface with WDI for Mgmt Frames
13901 * -------------------------------------------------------------------------
13902 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013903/*
13904 * FUNCTION: WDA_TxComplete
13905 * Callback function for the WDA_TxPacket
13906 */
13907VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13908 VOS_STATUS status )
13909{
13910
13911 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13912 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013913 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013914
Mihir Shete63341222015-03-24 15:39:18 +053013915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13916
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 if(NULL == wdaContext)
13918 {
13919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13920 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013921 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013922 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013923 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013924 return VOS_STATUS_E_FAILURE;
13925 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013926
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013927 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013928 /*Check if frame was timed out or not*/
13929 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13930 (v_PVOID_t)&uUserData);
13931
13932 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13933 {
13934 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13936 "%s: MGMT Frame Tx timed out",
13937 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013938 vos_pkt_return_packet(pData);
13939 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013940 return VOS_STATUS_SUCCESS;
13941 }
13942
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13944 if( NULL!=wdaContext->pTxCbFunc)
13945 {
13946 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013947 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 {
13949 wdaContext->pTxCbFunc(pMac, pData);
13950 }
13951 else
13952 {
13953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013954 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013955 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013956 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013957 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 return status;
13959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013961 else {
13962 wdaContext->mgmt_pktfree_fail++;
13963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13964 "%s:packet (%p) userData (%lx) is not freed",
13965 __func__, pData, uUserData);
13966 }
13967 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013968
13969 /*
13970 * Trigger the event to bring the HAL TL Tx complete function to come
13971 * out of wait
13972 * Let the coe above to complete the packet first. When this event is set,
13973 * the thread waiting for the event may run and set Vospacket_freed causing the original
13974 * packet not being freed.
13975 */
13976 status = vos_event_set(&wdaContext->txFrameEvent);
13977 if(!VOS_IS_STATUS_SUCCESS(status))
13978 {
13979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013980 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013982 return status;
13983}
Jeff Johnson295189b2012-06-20 16:38:30 -070013984/*
13985 * FUNCTION: WDA_TxPacket
13986 * Forward TX management frame to WDI
13987 */
13988VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13989 void *pFrmBuf,
13990 tANI_U16 frmLen,
13991 eFrameType frmType,
13992 eFrameTxDir txDir,
13993 tANI_U8 tid,
13994 pWDATxRxCompFunc pCompFunc,
13995 void *pData,
13996 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013997 tANI_U32 txFlag,
13998 tANI_U32 txBdToken
13999 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014000{
14001 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14002 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14003 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14004 tANI_U8 eventIdx = 0;
14005 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14006 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014007 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014008 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014009
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 if((NULL == pWDA)||(NULL == pFrmBuf))
14011 {
14012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014013 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014014 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014015 VOS_ASSERT(0);
14016 return VOS_STATUS_E_FAILURE;
14017 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014018
Jeff Johnson295189b2012-06-20 16:38:30 -070014019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014020 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14021 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014022 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14023 if(NULL == pMac)
14024 {
14025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014026 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014027 VOS_ASSERT(0);
14028 return VOS_STATUS_E_FAILURE;
14029 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014030
Jeff Johnson295189b2012-06-20 16:38:30 -070014031 /* store the call back function in WDA context */
14032 pWDA->pTxCbFunc = pCompFunc;
14033 /* store the call back for the function of ackTxComplete */
14034 if( pAckTxComp )
14035 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014036 if( NULL != pWDA->pAckTxCbFunc )
14037 {
14038 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014040 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014041 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014042 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014043
Jeff Johnsone7245742012-09-05 17:12:55 -070014044 if( VOS_STATUS_SUCCESS !=
14045 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14046 {
14047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14048 "Tx Complete timeout Timer Stop Failed ");
14049 }
14050 else
14051 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014053 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014054 }
14055 }
14056
14057 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14058 pWDA->pAckTxCbFunc = pAckTxComp;
14059 if( VOS_STATUS_SUCCESS !=
14060 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14061 {
14062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14063 "Tx Complete Timer Start Failed ");
14064 pWDA->pAckTxCbFunc = NULL;
14065 return eHAL_STATUS_FAILURE;
14066 }
14067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 /* Reset the event to be not signalled */
14069 status = vos_event_reset(&pWDA->txFrameEvent);
14070 if(!VOS_IS_STATUS_SUCCESS(status))
14071 {
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014073 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014074 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14075 if( pAckTxComp )
14076 {
14077 pWDA->pAckTxCbFunc = NULL;
14078 if( VOS_STATUS_SUCCESS !=
14079 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14080 {
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14082 "Tx Complete timeout Timer Stop Failed ");
14083 }
14084 }
14085 return VOS_STATUS_E_FAILURE;
14086 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014087
14088 /* If Peer Sta mask is set don't overwrite to self sta */
14089 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014091 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014092 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014093 else
14094 {
Ganesh K08bce952012-12-13 15:04:41 -080014095 /* Get system role, use the self station if in unknown role or STA role */
14096 systemRole = wdaGetGlobalSystemRole(pMac);
14097 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14098 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014099#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014100 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014101#endif
Ganesh K08bce952012-12-13 15:04:41 -080014102 ))
14103 {
14104 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14105 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014107
Jeff Johnsone7245742012-09-05 17:12:55 -070014108 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14109 disassoc frame reaches the HW, HAL has already deleted the peer station */
14110 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014111 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014112 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014113 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014114 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014115 /*Send Probe request frames on self sta idx*/
14116 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 /* Since we donot want probe responses to be retried, send probe responses
14119 through the NO_ACK queues */
14120 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14121 {
14122 //probe response is sent out using self station and no retries options.
14123 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14124 }
14125 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14126 {
14127 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14128 }
14129 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014130#ifdef FEATURE_WLAN_TDLS
14131 /* TDLS Management frames are sent using Peer Sta mask */
14132 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14133 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14134 {
14135 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14136
14137 }
14138#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014139 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014140
14141 /*Set frame tag to 0
14142 We will use the WDA user data in order to tag a frame as expired*/
14143 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14144 (v_PVOID_t)0);
14145
14146
14147 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014148 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14149 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014150 {
14151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014152 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014153 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014154 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 -070014155 if( pAckTxComp )
14156 {
14157 pWDA->pAckTxCbFunc = NULL;
14158 if( VOS_STATUS_SUCCESS !=
14159 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14160 {
14161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14162 "Tx Complete timeout Timer Stop Failed ");
14163 }
14164 }
14165 return VOS_STATUS_E_FAILURE;
14166 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014167 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 /*
14169 * Wait for the event to be set by the TL, to get the response of TX
14170 * complete, this event should be set by the Callback function called by TL
14171 */
14172 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14173 &eventIdx);
14174 if(!VOS_IS_STATUS_SUCCESS(status))
14175 {
14176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14177 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014178 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014179 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014180 /*Tag Frame as timed out for later deletion*/
14181 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14182 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14184 after the packet gets completed(packet freed once)*/
14185
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014186 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14187
14188 /*
14189 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14190 * TX completion call back
14191 */
14192 VOS_SMP_MB;
14193 vos_lock_release(&pWDA->mgmt_pkt_lock);
14194
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014195 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014196 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014197
Abhishek Singh837adf22015-10-01 17:37:37 +053014198 if (vos_isFatalEventEnabled())
14199 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14200 WLAN_LOG_INDICATOR_HOST_DRIVER,
14201 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14202 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014203
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 if( pAckTxComp )
14205 {
14206 pWDA->pAckTxCbFunc = NULL;
14207 if( VOS_STATUS_SUCCESS !=
14208 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14209 {
14210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14211 "Tx Complete timeout Timer Stop Failed ");
14212 }
14213 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014214 pWDA->mgmtTxfailureCnt++;
14215
14216 /* SSR if timeout continously for
14217 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14218 */
14219 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14220 pWDA->mgmtTxfailureCnt)
14221 {
14222 vos_wlanRestart();
14223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014224 status = VOS_STATUS_E_FAILURE;
14225 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014226
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014227#ifdef WLAN_DUMP_MGMTFRAMES
14228 if (VOS_IS_STATUS_SUCCESS(status))
14229 {
14230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14231 "%s() TX packet : SubType %d", __func__,pFc->subType);
14232 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14233 pData, frmLen);
14234 }
14235#endif
14236
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014237 if (VOS_IS_STATUS_SUCCESS(status))
14238 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014239 pWDA->mgmtTxfailureCnt = 0;
14240 if ((vos_timer_get_system_time() - time_snapshot) >=
14241 WDA_TX_TIME_THRESHOLD)
14242 {
14243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14244 "Tx Complete took %lu ms",
14245 vos_timer_get_system_time() - time_snapshot);
14246 }
14247
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014248 if (pMac->fEnableDebugLog & 0x1)
14249 {
14250 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14251 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14252 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14253 {
14254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14255 pFc->type, pFc->subType);
14256 }
14257 }
14258 }
14259
14260
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 return status;
14262}
Jeff Johnson295189b2012-06-20 16:38:30 -070014263/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014264 * FUNCTION: WDA_ProcessDHCPStartInd
14265 * Forward DHCP Start to WDI
14266 */
14267static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14268 tAniDHCPInd *dhcpStartInd)
14269{
14270 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014271 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014272
c_hpothu0b0cab72014-02-13 21:52:40 +053014273 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14274 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014275 sizeof(tSirMacAddr));
14276
c_hpothu0b0cab72014-02-13 21:52:40 +053014277 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014278
c_hpothu0b0cab72014-02-13 21:52:40 +053014279 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014280 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14282 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014283 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014284 else if (WDI_STATUS_SUCCESS_SYNC != status)
14285 {
14286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14287 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14288 }
14289
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014290 vos_mem_free(dhcpStartInd);
14291 return CONVERT_WDI2VOS_STATUS(status) ;
14292}
14293
14294 /*
14295 * FUNCTION: WDA_ProcessDHCPStopInd
14296 * Forward DHCP Stop to WDI
14297 */
14298 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14299 tAniDHCPInd *dhcpStopInd)
14300 {
14301 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014302 WDI_DHCPInd wdiDHCPInd;
14303
14304 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14305 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14306
14307 status = WDI_dhcpStopInd(&wdiDHCPInd);
14308
14309 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014310 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14312 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014313 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014314 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014315 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14317 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014318 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014319
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014320 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014321
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014322 return CONVERT_WDI2VOS_STATUS(status) ;
14323 }
14324
Abhishek Singh00b71972016-01-07 10:51:04 +053014325#ifdef WLAN_FEATURE_RMC
14326
14327void
14328WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14329{
14330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14331 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14332
14333 switch (wdiRmcResponse->cmd)
14334 {
14335 case eWDI_BECOME_RULER_CMD :
14336 {
14337 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14338
14339 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14340 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14341
14342 if (NULL == pRmcBecomeRulerInd)
14343 {
14344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14345 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14346 break;
14347 }
14348
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14350 "Received eWDI_BECOME_RULER_CMD from WDI");
14351
14352 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14353
14354 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14355 wdiRmcResponse->mcastTransmitter,
14356 sizeof(tSirMacAddr));
14357 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14358 wdiRmcResponse->mcastGroup,
14359 sizeof(tSirMacAddr));
14360
14361 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14362 (void *)pRmcBecomeRulerInd, 0) ;
14363 break;
14364 }
14365 case eWDI_SUGGEST_RULER_CMD :
14366 {
14367 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14368
14369 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14370 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14371
14372 if (NULL == pRmcRulerSelectInd)
14373 {
14374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14375 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14376 break;
14377 }
14378
14379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14380 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14381
14382 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14383
14384 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14385 wdiRmcResponse->mcastTransmitter,
14386 sizeof(tSirMacAddr));
14387 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14388 wdiRmcResponse->mcastGroup,
14389 sizeof(tSirMacAddr));
14390 vos_mem_copy(pRmcRulerSelectInd->ruler,
14391 wdiRmcResponse->ruler,
14392 sizeof(pRmcRulerSelectInd->ruler));
14393
14394 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14395 (void *)pRmcRulerSelectInd, 0) ;
14396 break;
14397 }
14398 }
14399
14400 /* free the config structure */
14401 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14402 {
14403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14404 }
14405 vos_mem_free(pWdaParams->wdaMsgParam);
14406 vos_mem_free(pWdaParams);
14407
14408}
14409
14410void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14411{
14412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14413
14414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14415 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14416
14417 if (NULL == pWdaParams)
14418 {
14419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14420 "%s: pWdaParams received NULL", __func__);
14421 VOS_ASSERT(0);
14422 return;
14423 }
14424
14425 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14426 {
14427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14428 vos_mem_free(pWdaParams->wdaMsgParam);
14429 vos_mem_free(pWdaParams);
14430 }
14431
14432 return;
14433}
14434
14435static VOS_STATUS
14436WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14437 tSirRmcRulerReq *rmcRulerReq)
14438{
14439 WDI_Status status;
14440 WDI_RmcRulerReqParams *wdiRulerReq;
14441 tWDA_ReqParams *pWdaParams;
14442
14443 wdiRulerReq = (WDI_RmcRulerReqParams *)
14444 vos_mem_malloc(sizeof(*wdiRulerReq));
14445
14446 if (NULL == wdiRulerReq)
14447 {
14448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14449 "%s: VOS MEM Alloc Failure", __func__);
14450 VOS_ASSERT(0);
14451 vos_mem_free(rmcRulerReq);
14452 return VOS_STATUS_E_NOMEM;
14453 }
14454
14455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14456 if (NULL == pWdaParams)
14457 {
14458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14459 "%s: VOS MEM Alloc Failure", __func__);
14460 VOS_ASSERT(0);
14461 vos_mem_free(rmcRulerReq);
14462 vos_mem_free(wdiRulerReq);
14463 return VOS_STATUS_E_NOMEM;
14464 }
14465
14466 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14467 /* Store param pointer as passed in by caller */
14468 pWdaParams->wdaMsgParam = rmcRulerReq;
14469 pWdaParams->pWdaContext = pWDA;
14470
14471 wdiRulerReq->cmd = rmcRulerReq->cmd;
14472
14473 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14474 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14475 vos_mem_copy(wdiRulerReq->mcastGroup,
14476 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14477 vos_mem_copy(wdiRulerReq->blacklist,
14478 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14479
14480 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14481
14482 status = WDI_RmcRulerReq(wdiRulerReq,
14483 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14484 (void *)pWdaParams);
14485 if (IS_WDI_STATUS_FAILURE(status))
14486 {
14487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14488 vos_mem_free(pWdaParams->wdaMsgParam);
14489 vos_mem_free(pWdaParams) ;
14490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14491 "Ruler Request failed");
14492 }
14493 return CONVERT_WDI2VOS_STATUS(status) ;
14494}
14495
14496/*
14497 * FUNCTION: WDA_ProcessRMCUpdateInd
14498 * Forward Update Indication to WDI
14499*/
14500static VOS_STATUS
14501WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14502 tSirRmcUpdateInd *rmcUpdateInd)
14503{
14504 WDI_Status status;
14505 WDI_RmcUpdateIndParams wdiUpdateInd;
14506
14507 /* Copy the paramters for Update_Ind */
14508
14509 wdiUpdateInd.indication = rmcUpdateInd->indication;
14510 wdiUpdateInd.role = rmcUpdateInd->role;
14511
14512 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14513 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14514
14515 vos_mem_copy(wdiUpdateInd.mcastGroup,
14516 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14517
14518 vos_mem_copy(wdiUpdateInd.mcastRuler,
14519 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14520
14521 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14522 wdiUpdateInd.pUserData = pWDA;
14523 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14524
14525 if (WDI_STATUS_PENDING == status)
14526 {
14527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14528 "Pending received for %s:%d ",__func__,__LINE__ );
14529 }
14530 else if (WDI_STATUS_SUCCESS_SYNC != status)
14531 {
14532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14533 "Failure in %s:%d ",__func__,__LINE__ );
14534 }
14535
14536 vos_mem_free(rmcUpdateInd);
14537
14538 return CONVERT_WDI2VOS_STATUS(status) ;
14539}
14540
14541void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14542 ,void* pUserData)
14543{
14544
14545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14546 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14547 tWDA_CbContext *pWDA;
14548 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14549 vos_msg_t vosMsg;
14550 v_U32_t wdaCnt = 0;
14551
14552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14553 "<------ %s " ,__func__);
14554 if (NULL == pWdaParams)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14557 "%s: pWdaParams received NULL", __func__);
14558 VOS_ASSERT(0);
14559 return;
14560 }
14561
14562 if (NULL == peerInfoRspParams)
14563 {
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14565 "%s: peerInfoRspParams received NULL", __func__);
14566 if(pWdaParams->wdaMsgParam)
14567 vos_mem_free(pWdaParams->wdaMsgParam);
14568 if(pWdaParams->wdaWdiApiMsgParam)
14569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14570 vos_mem_free(pWdaParams);
14571
14572 VOS_ASSERT(0);
14573 return;
14574 }
14575
14576 pIbssPeerInfoParams =
14577 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14578
14579 pIbssGetPeerInfoRsp =
14580 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14581
14582 if(NULL == pIbssGetPeerInfoRsp)
14583 {
14584 if(pWdaParams->wdaMsgParam)
14585 vos_mem_free(pWdaParams->wdaMsgParam);
14586 if(pWdaParams->wdaWdiApiMsgParam)
14587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14588 vos_mem_free(pWdaParams);
14589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14590 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14591 __func__);
14592 VOS_ASSERT(0);
14593 return;
14594
14595 }
14596
14597 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14598
14599
14600 if (peerInfoRspParams->wdiNumPeers > 32)
14601 {
14602 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14603 /* free the mem and return */
14604 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14605 if(pWdaParams->wdaMsgParam)
14606 vos_mem_free(pWdaParams->wdaMsgParam);
14607 if(pWdaParams->wdaWdiApiMsgParam)
14608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14609 vos_mem_free(pWdaParams);
14610
14611 return;
14612 }
14613
14614 /* Message Header */
14615 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14616 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14617 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14618 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14619
14620 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14621 {
14622 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14623 tSirIbssPeerInfoParams *pSmeTmp =
14624 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14625
14626 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14627 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14628 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14629 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14630 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14631 }
14632
14633 /* VOS message wrapper */
14634 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14635 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14636 vosMsg.bodyval = 0;
14637
14638 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14639 {
14640 /* free the mem and return */
14641 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14642 }
14643
14644 if(NULL != pWdaParams)
14645 {
14646 if(pWdaParams->wdaMsgParam)
14647 vos_mem_free(pWdaParams->wdaMsgParam);
14648 if(pWdaParams->wdaWdiApiMsgParam)
14649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14650 vos_mem_free(pWdaParams);
14651 }
14652
14653 return;
14654}
14655
14656static VOS_STATUS
14657WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14658 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14659{
14660 WDI_Status status;
14661 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14662 tWDA_ReqParams *pWdaParams;
14663
14664 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14665 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14666 if (NULL == wdiPeerInfoReq)
14667 {
14668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14669 "%s: VOS MEM Alloc Failure", __func__);
14670 VOS_ASSERT(0);
14671 vos_mem_free(ibssPeerInfoReqParams);
14672 return VOS_STATUS_E_NOMEM;
14673 }
14674
14675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14676 if (NULL == pWdaParams)
14677 {
14678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14679 "%s: VOS MEM Alloc Failure", __func__);
14680 VOS_ASSERT(0);
14681 vos_mem_free(wdiPeerInfoReq);
14682 vos_mem_free(ibssPeerInfoReqParams);
14683 return VOS_STATUS_E_NOMEM;
14684 }
14685
14686 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14687 /* Store param pointer as passed in by caller */
14688 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14689 pWdaParams->pWdaContext = pWDA;
14690
14691 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14692 ibssPeerInfoReqParams->allPeerInfoReqd;
14693 wdiPeerInfoReq->wdiStaIdx =
14694 ibssPeerInfoReqParams->staIdx;
14695
14696 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14697 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14698 (void *)pWdaParams);
14699 if (IS_WDI_STATUS_FAILURE(status))
14700 {
14701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14702 vos_mem_free(pWdaParams->wdaMsgParam);
14703 vos_mem_free(pWdaParams) ;
14704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14705 "IBSS Peer Info Request failed");
14706 }
14707 return CONVERT_WDI2VOS_STATUS(status) ;
14708
14709}
14710
14711/*
14712 * FUNCTION: WDA_ProcessTXFailMonitorInd
14713 * Forward TX Fail Monitor to WDI
14714 */
14715static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14716 tWDA_CbContext *pWDA,
14717 tAniTXFailMonitorInd *txFailMonitorInd)
14718{
14719 WDI_Status status;
14720 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14721 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14722
14723 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14724 "<------ %s " ,__func__);
14725
14726 if (NULL == wdiTXFailMonitorInd)
14727 {
14728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14729 "%s: VOS MEM Alloc Failure", __func__);
14730 VOS_ASSERT(0);
14731 vos_mem_free(txFailMonitorInd);
14732 return VOS_STATUS_E_NOMEM;
14733 }
14734
14735 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14736
14737 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14738 wdiTXFailMonitorInd->pUserData = pWDA;
14739
14740 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14741
14742 if (WDI_STATUS_PENDING == status)
14743 {
14744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14745 "TX Fail Monitor Indication Pending");
14746 }
14747 else if (WDI_STATUS_SUCCESS_SYNC == status)
14748 {
14749 if (0 == txFailMonitorInd->tx_fail_count)
14750 pWDA->txFailIndCallback = NULL;
14751 else
14752 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14753 }
14754 else
14755 {
14756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14757 "TX Fail Monitor Indication Failed");
14758 }
14759
14760 vos_mem_free(wdiTXFailMonitorInd);
14761 vos_mem_free(txFailMonitorInd);
14762
14763 return CONVERT_WDI2VOS_STATUS(status) ;
14764}
14765#endif /* WLAN_FEATURE_RMC */
14766
Kapil Gupta04ab1992016-06-26 13:36:51 +053014767#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14768VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
14769 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
14770{
14771 WDI_Status status;
14772 tWDA_ReqParams *pWdaParams ;
14773 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
14774 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
14775 sizeof(WDI_PERRoamTriggerScanInfo));
14776
14777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14778 "------> %s " ,__func__);
14779
14780 if (NULL == pwdiPERRoamTriggerScanInfo)
14781 {
14782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14783 "%s: VOS MEM Alloc Failure", __func__);
14784 VOS_ASSERT(0);
14785 return VOS_STATUS_E_NOMEM;
14786 }
14787
14788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14789 if (NULL == pWdaParams)
14790 {
14791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14792 "%s: VOS MEM Alloc Failure", __func__);
14793 VOS_ASSERT(0);
14794 vos_mem_free(pwdiPERRoamTriggerScanInfo);
14795 return VOS_STATUS_E_NOMEM;
14796 }
14797
14798 pwdiPERRoamTriggerScanInfo->roamScanReq =
14799 pPERRoamTriggerScanReqParams->start;
14800
14801 /* Store Params pass it to WDI */
14802 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
14803 pWdaParams->pWdaContext = pWDA;
14804
14805 /* Store param pointer as passed in by caller */
14806 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
14807 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
14808 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
14809 pWdaParams);
14810
14811 if(IS_WDI_STATUS_FAILURE(status))
14812 {
14813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14814 "Failure in Start Roam Candidate trigger Req WDI API" );
14815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14816 vos_mem_free(pWdaParams->wdaMsgParam);
14817 pWdaParams->wdaWdiApiMsgParam = NULL;
14818 pWdaParams->wdaMsgParam = NULL;
14819 }
14820 return CONVERT_WDI2VOS_STATUS(status) ;
14821}
14822#endif
14823
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014824/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014825 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14826 *
14827 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14828 *
14829 * PARAM:
14830 * pWDA: pointer to WDA context
14831 * pReq: pointer to stop batch scan request
14832 */
14833VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14834 tpSpoofMacAddrReqParams pReq)
14835{
14836 WDI_Status wdiStatus;
14837 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14838 tWDA_ReqParams *pWdaParams;
14839
14840 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14841 sizeof(WDI_SpoofMacAddrInfoType));
14842 if(NULL == WDI_SpoofMacAddrInfoParams) {
14843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14844 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14845 VOS_ASSERT(0);
14846 return VOS_STATUS_E_NOMEM;
14847 }
14848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14849 if(NULL == pWdaParams) {
14850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14851 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014852 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014853 VOS_ASSERT(0);
14854 return VOS_STATUS_E_NOMEM;
14855 }
14856
14857 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14858 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14859
14860 pWdaParams->pWdaContext = pWDA;
14861 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014862 pWdaParams->wdaMsgParam = (void *)pReq;
14863
14864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14865 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14866
Siddharth Bhal171788a2014-09-29 21:02:40 +053014867 /* store Params pass it to WDI */
14868 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14869
14870 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014871 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14872 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014873
14874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14875 {
14876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14877 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14879 vos_mem_free(pWdaParams->wdaMsgParam);
14880 vos_mem_free(pWdaParams);
14881 }
14882
14883 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14884}
14885
c_manjeecfd1efb2015-09-25 19:32:34 +053014886
14887/*
14888 * FUNCTION: WDA_FwrMemDumpRespCallback
14889 * recieves Mgmt Logging init response from FW
14890 */
14891 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14892 void* pUserData)
14893{
14894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14895 tAniFwrDumpReq *pFwrMemDumpReq;
14896 tAniFwrDumpRsp *pFwrMemDumpRsp;
14897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14898 "<------ %s " ,__func__);
14899
14900 if(NULL == pWdaParams)
14901 {
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14903 "%s: pWdaParams received NULL", __func__);
14904 VOS_ASSERT(0);
14905 return ;
14906 }
14907
14908 if(NULL == pWdaParams->wdaMsgParam)
14909 {
14910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14911 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14912 VOS_ASSERT(0);
14913 vos_mem_free(pWdaParams);
14914 return ;
14915 }
14916
14917 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14918 if(pFwrMemDumpRsp == NULL)
14919 {
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14921 "%s: pFwrMemDumpRsp is NULL", __func__);
14922 VOS_ASSERT(0);
14923 vos_mem_free(pWdaParams);
14924 return ;
14925 }
14926
14927 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14928 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14929
14930 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14931 {
14932 pFwrMemDumpReq->fwMemDumpReqCallback(
14933 pFwrMemDumpReq->fwMemDumpReqContext,
14934 pFwrMemDumpRsp);
14935 }
14936 else
14937 {
14938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14939 "%s: FwrMemDump callback is NULL", __func__);
14940 }
14941
14942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14943 vos_mem_free(pWdaParams->wdaMsgParam);
14944 vos_mem_free(pWdaParams);
14945 vos_mem_free(pFwrMemDumpRsp);
14946
14947 return ;
14948}
14949
14950VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14951 tAniFwrDumpReq* pFwrMemDumpReq)
14952{
14953 VOS_STATUS status = VOS_STATUS_SUCCESS;
14954 WDI_Status wstatus;
14955 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14956 tWDA_ReqParams *pWdaParams ;
14957
14958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14959 "------> %s " ,__func__);
14960 /* Sanity Check*/
14961 if(NULL == pFwrMemDumpReq)
14962 {
14963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14964 "%s: pFwrMemDumpReq received NULL", __func__);
14965 VOS_ASSERT(0) ;
14966 return VOS_STATUS_E_FAULT;
14967 }
14968
14969 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14970 if(NULL == pWdiFwrMemDumpReq)
14971 {
14972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14973 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14974 VOS_ASSERT(0);
14975 return VOS_STATUS_E_NOMEM;
14976 }
14977
14978 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14979 if(NULL == pWdaParams)
14980 {
14981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14982 "%s: pWdaParams Alloc Failure", __func__);
14983 VOS_ASSERT(0);
14984 vos_mem_free(pWdiFwrMemDumpReq);
14985 return VOS_STATUS_E_NOMEM;
14986 }
14987
14988 /* Store Params pass it to WDI */
14989 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14990 pWdaParams->pWdaContext = pWDA;
14991 /* Store param pointer as passed in by caller */
14992 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14993
14994 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14995 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14996 pWdaParams);
14997
14998 if(IS_WDI_STATUS_FAILURE(wstatus))
14999 {
15000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15001 FL("Fwr Mem Dump Req failed, free all the memory"));
15002 status = CONVERT_WDI2VOS_STATUS(wstatus);
15003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015004 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015005 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015006 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015007 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015008 }
15009
15010 return status;
15011
15012}
15013
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015014/**
15015 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15016 *
15017 * @pWDA: WDA Call back context
15018 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15019 * that holds allowed action frames bitmask
15020 *
15021 * This function sets the allowed action frames that the FW needs to
15022 * handover to host.The Action frames other than the requested ones
15023 * can be dropped in FW
15024 *
15025 * Return: VOS_STATUS enumeration
15026 */
15027VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15028 struct sir_allowed_action_frames *allowed_action_frames)
15029{
15030 WDI_Status status;
15031 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15033 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015034
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015035 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15036 vos_mem_malloc(sizeof
15037 (*wdi_allowed_action_frames));
15038 if (!wdi_allowed_action_frames) {
15039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15040 "%s: VOS MEM Alloc Failure", __func__);
15041 vos_mem_free(allowed_action_frames);
15042 return VOS_STATUS_E_NOMEM;
15043 }
15044
15045 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15046 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15047
15048 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15049 if (WDI_STATUS_PENDING == status) {
15050 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15051 FL("pending status received"));
15052 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15053 (WDI_STATUS_SUCCESS != status)) {
15054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15055 FL("Failure in allowed_action_frames API %d"), status);
15056 }
15057
15058 vos_mem_free(wdi_allowed_action_frames);
15059 vos_mem_free(allowed_action_frames);
15060 return CONVERT_WDI2VOS_STATUS(status) ;
15061}
c_manjeecfd1efb2015-09-25 19:32:34 +053015062
Siddharth Bhal171788a2014-09-29 21:02:40 +053015063/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015064 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15065 * Request to WDI.
15066 */
15067VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15068{
15069 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015070 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015071
15072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15073
15074 staId = (v_U8_t)params;
15075
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015076 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15077 if ( NULL == pTLCb )
15078 {
15079 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15080 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15081 return VOS_STATUS_E_FAULT;
15082 }
15083
15084
15085 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015086 /* Pause TL for Sta ID */
15087 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15088}
15089
15090/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015091 * FUNCTION: WDA_McProcessMsg
15092 * Trigger DAL-AL to start CFG download
15093 */
15094VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15095{
15096 VOS_STATUS status = VOS_STATUS_SUCCESS;
15097 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015098 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 {
15100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015101 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 VOS_ASSERT(0);
15103 return VOS_STATUS_E_FAILURE;
15104 }
15105
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015107 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015108
15109 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15110 if(NULL == pWDA )
15111 {
15112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015113 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015115 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015116 return VOS_STATUS_E_FAILURE;
15117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015118 /* Process all the WDA messages.. */
15119 switch( pMsg->type )
15120 {
15121 case WNI_CFG_DNLD_REQ:
15122 {
15123 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015124 /* call WDA complete event if config download success */
15125 if( VOS_IS_STATUS_SUCCESS(status) )
15126 {
15127 vos_WDAComplete_cback(pVosContext);
15128 }
15129 else
15130 {
15131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15132 "WDA Config Download failure" );
15133 }
15134 break ;
15135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015136 /*
15137 * Init SCAN request from PE, convert it into DAL format
15138 * and send it to DAL
15139 */
15140 case WDA_INIT_SCAN_REQ:
15141 {
15142 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15143 break ;
15144 }
15145 /* start SCAN request from PE */
15146 case WDA_START_SCAN_REQ:
15147 {
15148 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15149 break ;
15150 }
15151 /* end SCAN request from PE */
15152 case WDA_END_SCAN_REQ:
15153 {
15154 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15155 break ;
15156 }
15157 /* end SCAN request from PE */
15158 case WDA_FINISH_SCAN_REQ:
15159 {
15160 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15161 break ;
15162 }
15163 /* join request from PE */
15164 case WDA_CHNL_SWITCH_REQ:
15165 {
15166 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15167 {
15168 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15169 }
15170 else
15171 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015172 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15173 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15174 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15175 {
15176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15177 "call ProcessChannelSwitchReq_V1" );
15178 WDA_ProcessChannelSwitchReq_V1(pWDA,
15179 (tSwitchChannelParams*)pMsg->bodyptr) ;
15180 }
15181 else
15182 {
15183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15184 "call ProcessChannelSwitchReq" );
15185 WDA_ProcessChannelSwitchReq(pWDA,
15186 (tSwitchChannelParams*)pMsg->bodyptr) ;
15187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015188 }
15189 break ;
15190 }
15191 /* ADD BSS request from PE */
15192 case WDA_ADD_BSS_REQ:
15193 {
15194 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15195 break ;
15196 }
15197 case WDA_ADD_STA_REQ:
15198 {
15199 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15200 break ;
15201 }
15202 case WDA_DELETE_BSS_REQ:
15203 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015204 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15205 break ;
15206 }
15207 case WDA_DELETE_STA_REQ:
15208 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015209 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15210 break ;
15211 }
15212 case WDA_CONFIG_PARAM_UPDATE_REQ:
15213 {
15214 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15215 break ;
15216 }
15217 case WDA_SET_BSSKEY_REQ:
15218 {
15219 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15220 break ;
15221 }
15222 case WDA_SET_STAKEY_REQ:
15223 {
15224 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15225 break ;
15226 }
15227 case WDA_SET_STA_BCASTKEY_REQ:
15228 {
15229 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15230 break ;
15231 }
15232 case WDA_REMOVE_BSSKEY_REQ:
15233 {
15234 WDA_ProcessRemoveBssKeyReq(pWDA,
15235 (tRemoveBssKeyParams *)pMsg->bodyptr);
15236 break ;
15237 }
15238 case WDA_REMOVE_STAKEY_REQ:
15239 {
15240 WDA_ProcessRemoveStaKeyReq(pWDA,
15241 (tRemoveStaKeyParams *)pMsg->bodyptr);
15242 break ;
15243 }
15244 case WDA_REMOVE_STA_BCASTKEY_REQ:
15245 {
15246 /* TODO: currently UMAC is not sending this request, Add the code for
15247 handling this request when UMAC supports */
15248 break;
15249 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015250#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015251 case WDA_TSM_STATS_REQ:
15252 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015253 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015254 break;
15255 }
15256#endif
15257 case WDA_UPDATE_EDCA_PROFILE_IND:
15258 {
15259 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15260 break;
15261 }
15262 case WDA_ADD_TS_REQ:
15263 {
15264 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15265 break;
15266 }
15267 case WDA_DEL_TS_REQ:
15268 {
15269 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15270 break;
15271 }
15272 case WDA_ADDBA_REQ:
15273 {
15274 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15275 break;
15276 }
15277 case WDA_DELBA_IND:
15278 {
15279 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15280 break;
15281 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015282 case WDA_UPDATE_CHAN_LIST_REQ:
15283 {
15284 WDA_ProcessUpdateChannelList(pWDA,
15285 (tSirUpdateChanList *)pMsg->bodyptr);
15286 break;
15287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015288 case WDA_SET_LINK_STATE:
15289 {
15290 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15291 break;
15292 }
15293 case WDA_GET_STATISTICS_REQ:
15294 {
15295 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15296 break;
15297 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015298#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015299 case WDA_GET_ROAM_RSSI_REQ:
15300 {
15301 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15302 break;
15303 }
15304#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015305 case WDA_PWR_SAVE_CFG:
15306 {
15307 if(pWDA->wdaState == WDA_READY_STATE)
15308 {
15309 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15310 }
15311 else
15312 {
15313 if(NULL != pMsg->bodyptr)
15314 {
15315 vos_mem_free(pMsg->bodyptr);
15316 }
15317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15318 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15319 }
15320 break;
15321 }
15322 case WDA_ENTER_IMPS_REQ:
15323 {
15324 if(pWDA->wdaState == WDA_READY_STATE)
15325 {
15326 WDA_ProcessEnterImpsReq(pWDA);
15327 }
15328 else
15329 {
15330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15331 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15332 }
15333 break;
15334 }
15335 case WDA_EXIT_IMPS_REQ:
15336 {
15337 if(pWDA->wdaState == WDA_READY_STATE)
15338 {
15339 WDA_ProcessExitImpsReq(pWDA);
15340 }
15341 else
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15344 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15345 }
15346 break;
15347 }
15348 case WDA_ENTER_BMPS_REQ:
15349 {
15350 if(pWDA->wdaState == WDA_READY_STATE)
15351 {
15352 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15353 }
15354 else
15355 {
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15357 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15358 }
15359 break;
15360 }
15361 case WDA_EXIT_BMPS_REQ:
15362 {
15363 if(pWDA->wdaState == WDA_READY_STATE)
15364 {
15365 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15366 }
15367 else
15368 {
15369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15370 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15371 }
15372 break;
15373 }
15374 case WDA_ENTER_UAPSD_REQ:
15375 {
15376 if(pWDA->wdaState == WDA_READY_STATE)
15377 {
15378 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15379 }
15380 else
15381 {
15382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15383 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15384 }
15385 break;
15386 }
15387 case WDA_EXIT_UAPSD_REQ:
15388 {
15389 if(pWDA->wdaState == WDA_READY_STATE)
15390 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015391 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 }
15393 else
15394 {
15395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15396 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15397 }
15398 break;
15399 }
15400 case WDA_UPDATE_UAPSD_IND:
15401 {
15402 if(pWDA->wdaState == WDA_READY_STATE)
15403 {
15404 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15405 }
15406 else
15407 {
15408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15409 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15410 }
15411 break;
15412 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015413 case WDA_REGISTER_PE_CALLBACK :
15414 {
15415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15416 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15417 /*TODO: store the PE callback */
15418 /* Do Nothing? MSG Body should be freed at here */
15419 if(NULL != pMsg->bodyptr)
15420 {
15421 vos_mem_free(pMsg->bodyptr);
15422 }
15423 break;
15424 }
15425 case WDA_SYS_READY_IND :
15426 {
15427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15428 "Handling msg type WDA_SYS_READY_IND " );
15429 pWDA->wdaState = WDA_READY_STATE;
15430 if(NULL != pMsg->bodyptr)
15431 {
15432 vos_mem_free(pMsg->bodyptr);
15433 }
15434 break;
15435 }
15436 case WDA_BEACON_FILTER_IND :
15437 {
15438 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15439 break;
15440 }
15441 case WDA_BTC_SET_CFG:
15442 {
15443 /*TODO: handle this while dealing with BTC */
15444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15445 "Handling msg type WDA_BTC_SET_CFG " );
15446 /* Do Nothing? MSG Body should be freed at here */
15447 if(NULL != pMsg->bodyptr)
15448 {
15449 vos_mem_free(pMsg->bodyptr);
15450 }
15451 break;
15452 }
15453 case WDA_SIGNAL_BT_EVENT:
15454 {
15455 /*TODO: handle this while dealing with BTC */
15456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15457 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15458 /* Do Nothing? MSG Body should be freed at here */
15459 if(NULL != pMsg->bodyptr)
15460 {
15461 vos_mem_free(pMsg->bodyptr);
15462 }
15463 break;
15464 }
15465 case WDA_CFG_RXP_FILTER_REQ:
15466 {
15467 WDA_ProcessConfigureRxpFilterReq(pWDA,
15468 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15469 break;
15470 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015471 case WDA_MGMT_LOGGING_INIT_REQ:
15472 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015473 WDA_ProcessFWLoggingInitReq(pWDA,
15474 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015475 break;
15476 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015477 case WDA_GET_FRAME_LOG_REQ:
15478 {
15479 WDA_ProcessGetFrameLogReq(pWDA,
15480 (tAniGetFrameLogReq *)pMsg->bodyptr);
15481 break;
15482 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015483 case WDA_START_RSSI_MONITOR_REQ:
15484 {
15485 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15486 break;
15487 }
15488 case WDA_STOP_RSSI_MONITOR_REQ:
15489 {
15490 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15491 break;
15492 }
Karthick Sa35b0692015-08-21 15:57:05 +053015493 case WDA_SEND_LOG_DONE_IND:
15494 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015495 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015496 break;
15497 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015498 case WDA_FATAL_EVENT_LOGS_REQ:
15499 {
15500 WDA_ProcessFatalEventLogsReq(pWDA,
15501 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15502 break;
15503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 case WDA_SET_HOST_OFFLOAD:
15505 {
15506 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15507 break;
15508 }
15509 case WDA_SET_KEEP_ALIVE:
15510 {
15511 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15512 break;
15513 }
15514#ifdef WLAN_NS_OFFLOAD
15515 case WDA_SET_NS_OFFLOAD:
15516 {
15517 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15518 break;
15519 }
15520#endif //WLAN_NS_OFFLOAD
15521 case WDA_ADD_STA_SELF_REQ:
15522 {
15523 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15524 break;
15525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015526 case WDA_DEL_STA_SELF_REQ:
15527 {
15528 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15529 break;
15530 }
15531 case WDA_WOWL_ADD_BCAST_PTRN:
15532 {
15533 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15534 break;
15535 }
15536 case WDA_WOWL_DEL_BCAST_PTRN:
15537 {
15538 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15539 break;
15540 }
15541 case WDA_WOWL_ENTER_REQ:
15542 {
15543 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15544 break;
15545 }
15546 case WDA_WOWL_EXIT_REQ:
15547 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015548 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015549 break;
15550 }
15551 case WDA_TL_FLUSH_AC_REQ:
15552 {
15553 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15554 break;
15555 }
15556 case WDA_SIGNAL_BTAMP_EVENT:
15557 {
15558 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15559 break;
15560 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015561 case WDA_FW_STATS_GET_REQ:
15562 {
15563 WDA_ProcessFWStatsGetReq(pWDA,
15564 (tSirFWStatsGetReq *)pMsg->bodyptr);
15565 break;
15566 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015567#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15568 case WDA_LINK_LAYER_STATS_SET_REQ:
15569 {
15570 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15571 break;
15572 }
15573 case WDA_LINK_LAYER_STATS_GET_REQ:
15574 {
15575 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15576 break;
15577 }
15578 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15579 {
15580 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15581 break;
15582 }
15583#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015584#ifdef WLAN_FEATURE_EXTSCAN
15585 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15586 {
15587 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15588 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15589 break;
15590 }
15591 case WDA_EXTSCAN_START_REQ:
15592 {
15593 WDA_ProcessEXTScanStartReq(pWDA,
15594 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15595 break;
15596 }
15597 case WDA_EXTSCAN_STOP_REQ:
15598 {
15599 WDA_ProcessEXTScanStopReq(pWDA,
15600 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15601 break;
15602 }
15603 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15604 {
15605 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15606 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15607 break;
15608 }
15609 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15610 {
15611 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15612 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15613 break;
15614 }
15615 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15616 {
15617 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15618 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15619 break;
15620 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015621 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15622 {
15623 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15624 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15625 break;
15626 }
15627 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15628 {
15629 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15630 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15631 break;
15632 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015633 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15634 {
15635 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15636 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15637 break;
15638 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015639#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015640#ifdef WDA_UT
15641 case WDA_WDI_EVENT_MSG:
15642 {
15643 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15644 break ;
15645 }
15646#endif
15647 case WDA_UPDATE_BEACON_IND:
15648 {
15649 WDA_ProcessUpdateBeaconParams(pWDA,
15650 (tUpdateBeaconParams *)pMsg->bodyptr);
15651 break;
15652 }
15653 case WDA_SEND_BEACON_REQ:
15654 {
15655 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15656 break;
15657 }
15658 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15659 {
15660 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15661 (tSendProbeRespParams *)pMsg->bodyptr);
15662 break;
15663 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015664#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 case WDA_SET_MAX_TX_POWER_REQ:
15666 {
15667 WDA_ProcessSetMaxTxPowerReq(pWDA,
15668 (tMaxTxPowerParams *)pMsg->bodyptr);
15669 break;
15670 }
15671#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015672 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15673 {
15674 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15675 pMsg->bodyptr);
15676 break;
15677 }
schang86c22c42013-03-13 18:41:24 -070015678 case WDA_SET_TX_POWER_REQ:
15679 {
15680 WDA_ProcessSetTxPowerReq(pWDA,
15681 (tSirSetTxPowerReq *)pMsg->bodyptr);
15682 break;
15683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015684 case WDA_SET_P2P_GO_NOA_REQ:
15685 {
15686 WDA_ProcessSetP2PGONOAReq(pWDA,
15687 (tP2pPsParams *)pMsg->bodyptr);
15688 break;
15689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015690 /* timer related messages */
15691 case WDA_TIMER_BA_ACTIVITY_REQ:
15692 {
15693 WDA_BaCheckActivity(pWDA) ;
15694 break ;
15695 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015696
15697 /* timer related messages */
15698 case WDA_TIMER_TRAFFIC_STATS_IND:
15699 {
15700 WDA_TimerTrafficStatsInd(pWDA);
15701 break;
15702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015703#ifdef WLAN_FEATURE_VOWIFI_11R
15704 case WDA_AGGR_QOS_REQ:
15705 {
15706 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15707 break;
15708 }
15709#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015710 case WDA_FTM_CMD_REQ:
15711 {
15712 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15713 break ;
15714 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015715#ifdef FEATURE_OEM_DATA_SUPPORT
15716 case WDA_START_OEM_DATA_REQ:
15717 {
15718 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15719 break;
15720 }
15721#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015722 /* Tx Complete Time out Indication */
15723 case WDA_TX_COMPLETE_TIMEOUT_IND:
15724 {
15725 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15726 break;
15727 }
15728 case WDA_WLAN_SUSPEND_IND:
15729 {
15730 WDA_ProcessWlanSuspendInd(pWDA,
15731 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15732 break;
15733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015734 case WDA_WLAN_RESUME_REQ:
15735 {
15736 WDA_ProcessWlanResumeReq(pWDA,
15737 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15738 break;
15739 }
15740
15741 case WDA_UPDATE_CF_IND:
15742 {
15743 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15744 pMsg->bodyptr = NULL;
15745 break;
15746 }
15747#ifdef FEATURE_WLAN_SCAN_PNO
15748 case WDA_SET_PNO_REQ:
15749 {
15750 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15751 break;
15752 }
15753 case WDA_UPDATE_SCAN_PARAMS_REQ:
15754 {
15755 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15756 break;
15757 }
15758 case WDA_SET_RSSI_FILTER_REQ:
15759 {
15760 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15761 break;
15762 }
15763#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015764#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015765 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015766 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015767 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015768 break;
15769 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053015770 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
15771 {
15772 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
15773 break;
15774 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015775#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015776 case WDA_SET_TX_PER_TRACKING_REQ:
15777 {
15778 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15779 break;
15780 }
15781
15782#ifdef WLAN_FEATURE_PACKET_FILTERING
15783 case WDA_8023_MULTICAST_LIST_REQ:
15784 {
15785 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15786 break;
15787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15789 {
15790 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15791 break;
15792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015793 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15794 {
15795 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15796 break;
15797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15799 {
15800 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15801 break;
15802 }
15803#endif // WLAN_FEATURE_PACKET_FILTERING
15804
15805
15806 case WDA_TRANSMISSION_CONTROL_IND:
15807 {
15808 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15809 break;
15810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015811 case WDA_SET_POWER_PARAMS_REQ:
15812 {
15813 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15814 break;
15815 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015816 case WDA_FW_MEM_DUMP_REQ:
15817 {
15818 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15819 break;
15820 }
15821
Jeff Johnson295189b2012-06-20 16:38:30 -070015822#ifdef WLAN_FEATURE_GTK_OFFLOAD
15823 case WDA_GTK_OFFLOAD_REQ:
15824 {
15825 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15826 break;
15827 }
15828
15829 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15830 {
15831 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15832 break;
15833 }
15834#endif //WLAN_FEATURE_GTK_OFFLOAD
15835
15836 case WDA_SET_TM_LEVEL_REQ:
15837 {
15838 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15839 break;
15840 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015841
Mohit Khanna4a70d262012-09-11 16:30:12 -070015842 case WDA_UPDATE_OP_MODE:
15843 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015844 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15845 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15846 {
15847 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15848 }
15849 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015850 {
15851 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15852 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15853 else
15854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015855 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015856 }
15857 else
15858 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015859 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015860 break;
15861 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015862#ifdef WLAN_FEATURE_11W
15863 case WDA_EXCLUDE_UNENCRYPTED_IND:
15864 {
15865 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15866 break;
15867 }
15868#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015869#ifdef FEATURE_WLAN_TDLS
15870 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15871 {
15872 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15873 break;
15874 }
15875#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015876 case WDA_DHCP_START_IND:
15877 {
15878 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15879 break;
15880 }
15881 case WDA_DHCP_STOP_IND:
15882 {
15883 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15884 break;
15885 }
Leo Chang9056f462013-08-01 19:21:11 -070015886#ifdef FEATURE_WLAN_LPHB
15887 case WDA_LPHB_CONF_REQ:
15888 {
15889 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15890 break;
15891 }
15892#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015893 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15894 {
15895 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15896 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15897 break;
15898 }
15899 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15900 {
15901 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15902 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15903 break;
15904 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015905 case WDA_RATE_UPDATE_IND:
15906 {
15907 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15908 break;
15909 }
15910#ifdef WLAN_FEATURE_RMC
15911 case WDA_RMC_RULER_REQ:
15912 {
15913 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15914 break;
15915 }
15916 case WDA_RMC_UPDATE_IND:
15917 {
15918 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15919 break;
15920 }
15921 case WDA_GET_IBSS_PEER_INFO_REQ:
15922 {
15923 WDA_ProcessIbssPeerInfoReq(pWDA,
15924 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15925 break;
15926 }
15927 case WDA_TX_FAIL_MONITOR_IND:
15928 {
15929 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15930 break;
15931 }
15932#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053015933#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15934 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
15935 {
15936 WDA_ProcessPERRoamScanTriggerReq(pWDA,
15937 (tPERRoamScanStart *)pMsg->bodyptr);
15938 break;
15939 }
15940#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053015941#ifdef FEATURE_WLAN_BATCH_SCAN
15942 case WDA_SET_BATCH_SCAN_REQ:
15943 {
15944 WDA_ProcessSetBatchScanReq(pWDA,
15945 (tSirSetBatchScanReq *)pMsg->bodyptr);
15946 break;
15947 }
15948 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15949 {
15950 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15951 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15952 break;
15953 }
15954 case WDA_STOP_BATCH_SCAN_IND:
15955 {
15956 WDA_ProcessStopBatchScanInd(pWDA,
15957 (tSirStopBatchScanInd *)pMsg->bodyptr);
15958 break;
15959 }
c_hpothu92367912014-05-01 15:18:17 +053015960 case WDA_GET_BCN_MISS_RATE_REQ:
15961 WDA_ProcessGetBcnMissRateReq(pWDA,
15962 (tSirBcnMissRateReq *)pMsg->bodyptr);
15963 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015964#endif
15965
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015966 case WDA_HT40_OBSS_SCAN_IND:
15967 {
15968 WDA_ProcessHT40OBSSScanInd(pWDA,
15969 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15970 break;
15971 }
15972 case WDA_HT40_OBSS_STOP_SCAN_IND:
15973 {
15974 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15975 (tANI_U8*)pMsg->bodyptr);
15976 break;
15977 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015978// tdlsoffchan
15979#ifdef FEATURE_WLAN_TDLS
15980 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15981 {
15982 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15983 break;
15984 }
15985#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015986 case WDA_SPOOF_MAC_ADDR_REQ:
15987 {
15988 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15989 break;
15990 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015991 case WDA_ENCRYPT_MSG_REQ:
15992 {
15993 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15994 break;
15995 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015996
15997 case WDA_NAN_REQUEST:
15998 {
15999 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
16000 break;
16001 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016002 case WDA_SET_RTS_CTS_HTVHT:
16003 {
16004 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16005 break;
16006 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016007
16008 case WDA_MON_START_REQ:
16009 {
16010 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16011 break;
16012 }
16013 case WDA_MON_STOP_REQ:
16014 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016015 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016016 break;
16017 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016018 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16019 {
16020 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16021 break;
16022 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016023 case WDA_WIFI_CONFIG_REQ:
16024 {
16025 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16026 break;
16027 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016028#ifdef FEATURE_OEM_DATA_SUPPORT
16029 case WDA_START_OEM_DATA_REQ_IND_NEW:
16030 {
16031 WDA_ProcessStartOemDataReqIndNew(pWDA,
16032 (tOemDataReqNewConfig *)pMsg->bodyptr);
16033 break;
16034 }
16035#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016036 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16037 {
16038 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16039 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16040 break;
16041 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016042 case WDA_MODIFY_ROAM_PARAMS_IND:
16043 {
16044 WDA_ProcessBcnMissPenaltyCount(pWDA,
16045 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16046 break;
16047 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016048
16049 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16050 wda_process_set_allowed_action_frames_ind(pWDA,
16051 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16052 break;
16053
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016054 case WDA_PAUSE_TL_IND:
16055 {
16056 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16057 break;
16058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016059 default:
16060 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016062 "No Handling for msg type %x in WDA "
16063 ,pMsg->type);
16064 /* Do Nothing? MSG Body should be freed at here */
16065 if(NULL != pMsg->bodyptr)
16066 {
16067 vos_mem_free(pMsg->bodyptr);
16068 }
16069 //WDA_VOS_ASSERT(0) ;
16070 }
16071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 return status ;
16073}
16074
Jeff Johnson295189b2012-06-20 16:38:30 -070016075/*
16076 * FUNCTION: WDA_LowLevelIndCallback
16077 * IND API callback from WDI, send Ind to PE
16078 */
16079void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16080 void* pUserData )
16081{
16082 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16083#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16084 tSirRSSINotification rssiNotification;
16085#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016086 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016087 {
16088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016089 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016090 VOS_ASSERT(0);
16091 return ;
16092 }
16093
16094 switch(wdiLowLevelInd->wdiIndicationType)
16095 {
16096 case WDI_RSSI_NOTIFICATION_IND:
16097 {
16098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16099 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016100#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16101 rssiNotification.bReserved =
16102 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16103 rssiNotification.bRssiThres1NegCross =
16104 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16105 rssiNotification.bRssiThres1PosCross =
16106 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16107 rssiNotification.bRssiThres2NegCross =
16108 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16109 rssiNotification.bRssiThres2PosCross =
16110 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16111 rssiNotification.bRssiThres3NegCross =
16112 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16113 rssiNotification.bRssiThres3PosCross =
16114 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016115 rssiNotification.avgRssi = (v_S7_t)
16116 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 WLANTL_BMPSRSSIRegionChangedNotification(
16118 pWDA->pVosContext,
16119 &rssiNotification);
16120#endif
16121 break ;
16122 }
16123 case WDI_MISSED_BEACON_IND:
16124 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016125 tpSirSmeMissedBeaconInd pMissBeacInd =
16126 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16128 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016129 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016130 if(NULL == pMissBeacInd)
16131 {
16132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16133 "%s: VOS MEM Alloc Failure", __func__);
16134 break;
16135 }
16136 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16137 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16138 pMissBeacInd->bssIdx =
16139 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16140 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 break ;
16142 }
16143 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16144 {
16145 /* TODO: Decode Ind and send Ind to PE */
16146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16147 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16148 break ;
16149 }
16150
16151 case WDI_MIC_FAILURE_IND:
16152 {
16153 tpSirSmeMicFailureInd pMicInd =
16154 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16155
16156 if(NULL == pMicInd)
16157 {
16158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016160 break;
16161 }
16162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16163 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016164 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16165 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16166 vos_mem_copy(pMicInd->bssId,
16167 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16168 sizeof(tSirMacAddr));
16169 vos_mem_copy(pMicInd->info.srcMacAddr,
16170 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16171 sizeof(tSirMacAddr));
16172 vos_mem_copy(pMicInd->info.taMacAddr,
16173 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16174 sizeof(tSirMacAddr));
16175 vos_mem_copy(pMicInd->info.dstMacAddr,
16176 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16177 sizeof(tSirMacAddr));
16178 vos_mem_copy(pMicInd->info.rxMacAddr,
16179 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16180 sizeof(tSirMacAddr));
16181 pMicInd->info.multicast =
16182 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16183 pMicInd->info.keyId=
16184 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16185 pMicInd->info.IV1=
16186 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16187 vos_mem_copy(pMicInd->info.TSC,
16188 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016189 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16190 (void *)pMicInd , 0) ;
16191 break ;
16192 }
16193 case WDI_FATAL_ERROR_IND:
16194 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016195 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016196 /* TODO: Decode Ind and send Ind to PE */
16197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16198 "Received WDI_FATAL_ERROR_IND from WDI ");
16199 break ;
16200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016201 case WDI_DEL_STA_IND:
16202 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016203 tpDeleteStaContext pDelSTACtx =
16204 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16205
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16207 "Received WDI_DEL_STA_IND from WDI ");
16208 if(NULL == pDelSTACtx)
16209 {
16210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 break;
16213 }
16214 vos_mem_copy(pDelSTACtx->addr2,
16215 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16216 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016217 vos_mem_copy(pDelSTACtx->bssId,
16218 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16219 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016220 pDelSTACtx->assocId =
16221 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16222 pDelSTACtx->reasonCode =
16223 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16224 pDelSTACtx->staId =
16225 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016226 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16227 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016228 break ;
16229 }
16230 case WDI_COEX_IND:
16231 {
16232 tANI_U32 index;
16233 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016234 tSirSmeCoexInd *pSmeCoexInd;
16235
16236 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16237 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16238 {
16239 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16240 {
16241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16242 FL("Coex state: 0x%x coex feature: 0x%x"),
16243 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16244 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16245
16246 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16247 {
16248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16249 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16250 }
16251 }
16252 break;
16253 }
16254
16255 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016256 if(NULL == pSmeCoexInd)
16257 {
16258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016259 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 break;
16261 }
16262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16263 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 /* Message Header */
16265 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16266 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016267 /* Info from WDI Indication */
16268 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16269 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16270 {
16271 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016273 /* VOS message wrapper */
16274 vosMsg.type = eWNI_SME_COEX_IND;
16275 vosMsg.bodyptr = (void *)pSmeCoexInd;
16276 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016277 /* Send message to SME */
16278 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16279 {
16280 /* free the mem and return */
16281 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16282 }
16283 else
16284 {
16285 /* DEBUG */
16286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16287 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16288 pSmeCoexInd->coexIndType,
16289 pSmeCoexInd->coexIndData[0],
16290 pSmeCoexInd->coexIndData[1],
16291 pSmeCoexInd->coexIndData[2],
16292 pSmeCoexInd->coexIndData[3]);
16293 }
16294 break;
16295 }
16296 case WDI_TX_COMPLETE_IND:
16297 {
16298 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16299 /* Calling TxCompleteAck Indication from wda context*/
16300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16301 "Complete Indication received from HAL");
16302 if( pWDA->pAckTxCbFunc )
16303 {
16304 if( VOS_STATUS_SUCCESS !=
16305 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16306 {
16307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16308 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016309 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016310 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016311 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16312 else
16313 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 pWDA->pAckTxCbFunc = NULL;
16315 }
16316 else
16317 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016319 "Tx Complete Indication is received after timeout ");
16320 }
16321 break;
16322 }
Viral Modid86bde22012-12-10 13:09:21 -080016323 case WDI_P2P_NOA_START_IND :
16324 {
16325 tSirP2PNoaStart *pP2pNoaStart =
16326 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16327
16328 if (NULL == pP2pNoaStart)
16329 {
16330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16331 "Memory allocation failure, "
16332 "WDI_P2P_NOA_START_IND not forwarded");
16333 break;
16334 }
16335 pP2pNoaStart->status =
16336 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16337 pP2pNoaStart->bssIdx =
16338 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16339 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16340 (void *)pP2pNoaStart , 0) ;
16341 break;
16342 }
16343
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016344#ifdef FEATURE_WLAN_TDLS
16345 case WDI_TDLS_IND :
16346 {
16347 tSirTdlsInd *pTdlsInd =
16348 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16349
16350 if (NULL == pTdlsInd)
16351 {
16352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16353 "Memory allocation failure, "
16354 "WDI_TDLS_IND not forwarded");
16355 break;
16356 }
16357 pTdlsInd->status =
16358 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16359 pTdlsInd->assocId =
16360 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16361 pTdlsInd->staIdx =
16362 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16363 pTdlsInd->reasonCode =
16364 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16365 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16366 (void *)pTdlsInd , 0) ;
16367 break;
16368 }
16369#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016370 case WDI_P2P_NOA_ATTR_IND :
16371 {
16372 tSirP2PNoaAttr *pP2pNoaAttr =
16373 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16375 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016376 if (NULL == pP2pNoaAttr)
16377 {
16378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16379 "Memory allocation failure, "
16380 "WDI_P2P_NOA_ATTR_IND not forwarded");
16381 break;
16382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016383 pP2pNoaAttr->index =
16384 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16385 pP2pNoaAttr->oppPsFlag =
16386 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16387 pP2pNoaAttr->ctWin =
16388 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16389
16390 pP2pNoaAttr->uNoa1IntervalCnt =
16391 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16392 pP2pNoaAttr->uNoa1Duration =
16393 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16394 pP2pNoaAttr->uNoa1Interval =
16395 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16396 pP2pNoaAttr->uNoa1StartTime =
16397 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016398 pP2pNoaAttr->uNoa2IntervalCnt =
16399 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16400 pP2pNoaAttr->uNoa2Duration =
16401 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16402 pP2pNoaAttr->uNoa2Interval =
16403 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16404 pP2pNoaAttr->uNoa2StartTime =
16405 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016406 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16407 (void *)pP2pNoaAttr , 0) ;
16408 break;
16409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016410#ifdef FEATURE_WLAN_SCAN_PNO
16411 case WDI_PREF_NETWORK_FOUND_IND:
16412 {
16413 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016414 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16415 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16416 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16417 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16418
Jeff Johnson295189b2012-06-20 16:38:30 -070016419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16420 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 if (NULL == pPrefNetworkFoundInd)
16422 {
16423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16424 "Memory allocation failure, "
16425 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016426 if (NULL !=
16427 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16428 {
16429 wpalMemoryFree(
16430 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16431 );
16432 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016434 break;
16435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016436 /* Message Header */
16437 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016438 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016439
16440 /* Info from WDI Indication */
16441 pPrefNetworkFoundInd->ssId.length =
16442 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016443 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016444 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16445 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16446 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016447 if (NULL !=
16448 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16449 {
16450 pPrefNetworkFoundInd->frameLength =
16451 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16452 vos_mem_copy( pPrefNetworkFoundInd->data,
16453 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16454 pPrefNetworkFoundInd->frameLength);
16455 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16456 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16457 }
16458 else
16459 {
16460 pPrefNetworkFoundInd->frameLength = 0;
16461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016462 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016463 /* VOS message wrapper */
16464 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16465 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16466 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016467 /* Send message to SME */
16468 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16469 {
16470 /* free the mem and return */
16471 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16472 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016473 break;
16474 }
16475#endif // FEATURE_WLAN_SCAN_PNO
16476
16477#ifdef WLAN_WAKEUP_EVENTS
16478 case WDI_WAKE_REASON_IND:
16479 {
16480 vos_msg_t vosMsg;
16481 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16482 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16483 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16484
16485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016486 "[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 -070016487 wdiLowLevelInd->wdiIndicationType,
16488 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16489 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16490 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16491
16492 if (NULL == pWakeReasonInd)
16493 {
16494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16495 "Memory allocation failure, "
16496 "WDI_WAKE_REASON_IND not forwarded");
16497 break;
16498 }
16499
16500 vos_mem_zero(pWakeReasonInd, allocSize);
16501
16502 /* Message Header */
16503 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16504 pWakeReasonInd->mesgLen = allocSize;
16505
16506 /* Info from WDI Indication */
16507 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16508 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16509 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16510 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16511 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16512 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16513 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16514 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16515
16516 /* VOS message wrapper */
16517 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16518 vosMsg.bodyptr = (void *) pWakeReasonInd;
16519 vosMsg.bodyval = 0;
16520
16521 /* Send message to SME */
16522 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16523 {
16524 /* free the mem and return */
16525 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16526 }
16527
16528 break;
16529 }
16530#endif // WLAN_WAKEUP_EVENTS
16531
16532 case WDI_TX_PER_HIT_IND:
16533 {
16534 vos_msg_t vosMsg;
16535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16536 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16537 /* VOS message wrapper */
16538 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16539 vosMsg.bodyptr = NULL;
16540 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016541 /* Send message to SME */
16542 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16543 {
16544 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16545 }
16546 break;
16547 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016548#ifdef WLAN_FEATURE_RMC
16549 case WDI_TX_FAIL_IND:
16550 {
16551 if (pWDA->txFailIndCallback)
16552 {
16553 pWDA->txFailIndCallback(
16554 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16555 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16556 }
16557 break;
16558 }
16559#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016560
Leo Chang9056f462013-08-01 19:21:11 -070016561#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016562 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016563 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016564 vos_msg_t vosMsg;
16565 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016566
Leo Changd9df8aa2013-09-26 13:32:26 -070016567 lphbInd =
16568 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16569 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016570 {
16571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16572 "%s: LPHB IND buffer alloc Fail", __func__);
16573 return ;
16574 }
16575
Leo Changd9df8aa2013-09-26 13:32:26 -070016576 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016577 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016578 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016579 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016580 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016581 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16582
16583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016584 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016585 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16586
Leo Changd9df8aa2013-09-26 13:32:26 -070016587 vosMsg.type = eWNI_SME_LPHB_IND;
16588 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016589 vosMsg.bodyval = 0;
16590 /* Send message to SME */
16591 if (VOS_STATUS_SUCCESS !=
16592 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16593 {
16594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16595 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016596 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016597 }
16598 break;
16599 }
16600#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016601 case WDI_PERIODIC_TX_PTRN_FW_IND:
16602 {
16603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16604 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16605 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16606 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16607 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16608 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16609 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16610
16611 break;
16612 }
Leo Chang9056f462013-08-01 19:21:11 -070016613
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016614 case WDI_IBSS_PEER_INACTIVITY_IND:
16615 {
16616 tSirIbssPeerInactivityInd *pIbssInd =
16617 (tSirIbssPeerInactivityInd *)
16618 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16619
16620 if (NULL == pIbssInd)
16621 {
16622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16623 "Memory allocation failure, "
16624 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16625 break;
16626 }
16627
16628 pIbssInd->bssIdx =
16629 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16630 pIbssInd->staIdx =
16631 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16632 vos_mem_copy(pIbssInd->peerAddr,
16633 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16634 sizeof(tSirMacAddr));
16635 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16636 break;
16637 }
16638
Abhishek Singh00b71972016-01-07 10:51:04 +053016639#ifdef WLAN_FEATURE_RMC
16640 case WDI_RMC_RULER_PICK_NEW :
16641 {
16642 tSirRmcUpdateInd *pRmcUpdateInd =
16643 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16644
16645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16646 "Received WDI_RMC_UPDATE_IND from WDI");
16647 if (NULL == pRmcUpdateInd)
16648 {
16649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16650 "Memory allocation failure, "
16651 "WDI_RMC_UPDATE_IND not forwarded");
16652 break;
16653 }
16654
16655 pRmcUpdateInd->indication =
16656 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16657 pRmcUpdateInd->role =
16658 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16659
16660 /* Copy the mcast transmitter which should be us */
16661 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16662 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16663 mcastTransmitter,
16664 sizeof(tSirMacAddr));
16665 /* Copy the mcast group address */
16666 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16667 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16668 sizeof(tSirMacAddr));
16669 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16670 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16671 sizeof(tSirMacAddr));
16672 vos_mem_copy(pRmcUpdateInd->ruler,
16673 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16674 sizeof(pRmcUpdateInd->ruler));
16675
16676 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16677 break;
16678 }
16679#endif /* WLAN_FEATURE_RMC */
16680
Rajeev79dbe4c2013-10-05 11:03:42 +053016681#ifdef FEATURE_WLAN_BATCH_SCAN
16682 case WDI_BATCH_SCAN_RESULT_IND:
16683 {
16684 void *pBatchScanResult;
16685 void *pCallbackContext;
16686 tpAniSirGlobal pMac;
16687
16688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16689 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16690
16691 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016692 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016693 {
16694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16695 "%s:pWDA is NULL", __func__);
16696 VOS_ASSERT(0);
16697 return;
16698 }
16699
16700 pBatchScanResult =
16701 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16702 if (NULL == pBatchScanResult)
16703 {
16704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16705 "%s:Batch scan result from FW is null can't invoke HDD callback",
16706 __func__);
16707 VOS_ASSERT(0);
16708 return;
16709 }
16710
16711 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16712 if (NULL == pMac)
16713 {
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16715 "%s:pMac is NULL", __func__);
16716 VOS_ASSERT(0);
16717 return;
16718 }
16719
16720 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16721 /*call hdd callback with set batch scan response data*/
16722 if(pMac->pmc.batchScanResultCallback)
16723 {
16724 pMac->pmc.batchScanResultCallback(pCallbackContext,
16725 pBatchScanResult);
16726 }
16727 else
16728 {
16729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16730 "%s:HDD callback is null", __func__);
16731 VOS_ASSERT(0);
16732 }
16733 break;
16734 }
16735#endif
16736
Leo Chang0b0e45a2013-12-15 15:18:55 -080016737#ifdef FEATURE_WLAN_CH_AVOID
16738 case WDI_CH_AVOID_IND:
16739 {
16740 vos_msg_t vosMsg;
16741 tSirChAvoidIndType *chAvoidInd;
16742
16743 chAvoidInd =
16744 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16745 if (NULL == chAvoidInd)
16746 {
16747 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16748 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16749 return ;
16750 }
16751
16752 chAvoidInd->avoidRangeCount =
16753 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16754 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16755 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16756 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16757
16758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16759 "%s : WDA CH avoid notification", __func__);
16760
16761 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16762 vosMsg.bodyptr = chAvoidInd;
16763 vosMsg.bodyval = 0;
16764 /* Send message to SME */
16765 if (VOS_STATUS_SUCCESS !=
16766 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16767 {
16768 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16769 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16770 vos_mem_free(chAvoidInd);
16771 }
16772 break;
16773 }
16774#endif /* FEATURE_WLAN_CH_AVOID */
16775
Sunil Duttbd736ed2014-05-26 21:19:41 +053016776#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16777 case WDI_LL_STATS_RESULTS_IND:
16778 {
16779 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016780 tpAniSirGlobal pMac;
16781
16782 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16783 "Received WDI_LL_STATS_RESULTS_IND from FW");
16784
16785 /*sanity check*/
16786 if (NULL == pWDA)
16787 {
16788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16789 "%s:pWDA is NULL", __func__);
16790 VOS_ASSERT(0);
16791 return;
16792 }
16793
16794 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016795 (void *)wdiLowLevelInd->
16796 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016797 if (NULL == pLinkLayerStatsInd)
16798 {
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16800 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16801 __func__);
16802 VOS_ASSERT(0);
16803 return;
16804 }
16805
16806 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16807 if (NULL == pMac)
16808 {
16809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16810 "%s:pMac is NULL", __func__);
16811 VOS_ASSERT(0);
16812 return;
16813 }
16814
Dino Mycled3d50022014-07-07 12:58:25 +053016815 /* call hdd callback with Link Layer Statistics.
16816 * vdev_id/ifacId in link_stats_results will be
16817 * used to retrieve the correct HDD context
16818 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016819 if (pMac->sme.pLinkLayerStatsIndCallback)
16820 {
Dino Mycled3d50022014-07-07 12:58:25 +053016821 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016822 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016823 pLinkLayerStatsInd,
16824 wdiLowLevelInd->
16825 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016826 }
16827 else
16828 {
16829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16830 "%s:HDD callback is null", __func__);
16831 }
16832 break;
16833 }
16834#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16835
Dino Mycle41bdc942014-06-10 11:30:24 +053016836#ifdef WLAN_FEATURE_EXTSCAN
16837 case WDI_EXTSCAN_PROGRESS_IND:
16838 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16839 case WDI_EXTSCAN_SCAN_RESULT_IND:
16840 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016841 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016842 {
16843 void *pEXTScanData;
16844 void *pCallbackContext;
16845 tpAniSirGlobal pMac;
16846 tANI_U16 indType;
16847
16848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16849 "Received WDI_EXTSCAN Indications from FW");
16850 /*sanity check*/
16851 if (NULL == pWDA)
16852 {
16853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16854 "%s:pWDA is NULL", __func__);
16855 VOS_ASSERT(0);
16856 return;
16857 }
16858 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16859 {
16860 indType = WDA_EXTSCAN_PROGRESS_IND;
16861
16862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16863 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16864 }
16865 if (wdiLowLevelInd->wdiIndicationType ==
16866 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16867 {
16868 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16869
16870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16871 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16872 }
16873 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16874 {
16875 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16876
16877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16878 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16879 }
16880 if (wdiLowLevelInd->wdiIndicationType ==
16881 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16882 {
16883 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16884
16885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16886 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16887 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016888 if (wdiLowLevelInd->wdiIndicationType ==
16889 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16890 {
16891 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16892
16893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16894 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16895 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016896
16897 pEXTScanData =
16898 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16899 if (NULL == pEXTScanData)
16900 {
16901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16902 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16903 __func__);
16904 VOS_ASSERT(0);
16905 return;
16906 }
16907
16908 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16909 if (NULL == pMac)
16910 {
16911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16912 "%s:pMac is NULL", __func__);
16913 VOS_ASSERT(0);
16914 return;
16915 }
16916
16917 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16918
16919 if(pMac->sme.pEXTScanIndCb)
16920 {
16921 pMac->sme.pEXTScanIndCb(pCallbackContext,
16922 indType,
16923 pEXTScanData);
16924 }
16925 else
16926 {
16927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16928 "%s:HDD callback is null", __func__);
16929 }
16930 break;
16931 }
16932#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016933 case WDI_DEL_BA_IND:
16934 {
16935 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016936 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016937
16938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16939 "Received WDI_DEL_BA_IND from WDI ");
16940 if(NULL == pDelBAInd)
16941 {
16942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16943 "%s: VOS MEM Alloc Failure", __func__);
16944 break;
16945 }
16946 vos_mem_copy(pDelBAInd->peerMacAddr,
16947 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16948 sizeof(tSirMacAddr));
16949 vos_mem_copy(pDelBAInd->bssId,
16950 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16951 sizeof(tSirMacAddr));
16952 pDelBAInd->staIdx =
16953 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16954 pDelBAInd->baTID =
16955 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16956 pDelBAInd->baDirection =
16957 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16958 pDelBAInd->reasonCode =
16959 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16960
16961 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16962 (void *)pDelBAInd , 0) ;
16963 break;
16964 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016965 case WDI_NAN_EVENT_IND:
16966 {
16967 vos_msg_t vosMsg;
16968 tpSirNanEvent pSirNanEvent = NULL;
16969
16970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16971 "Received WDI_NAN_EVENT");
16972
16973 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16974 - sizeof( pSirNanEvent->event_data)
16975 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16976
16977 if (NULL == pSirNanEvent)
16978 {
16979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16980 "%s: VOS MEM Alloc Failure", __func__);
16981 VOS_ASSERT(0) ;
16982 break;
16983 }
16984
16985 pSirNanEvent->event_data_len =
16986 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16987
16988 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16989 {
16990 vos_mem_copy( pSirNanEvent->event_data,
16991 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16992 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16993 }
16994
16995 /* VOS message wrapper */
16996 vosMsg.type = eWNI_SME_NAN_EVENT;
16997 vosMsg.bodyptr = pSirNanEvent;
16998 vosMsg.bodyval = 0;
16999
17000 /* Send message to SME */
17001 if (VOS_STATUS_SUCCESS
17002 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17003 {
17004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17005 "post eWNI_SME_NAN_EVENT to SME Failed");
17006 vos_mem_free(pSirNanEvent);
17007 }
17008 break;
17009 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017010 case WDI_LOST_LINK_PARAMS_IND:
17011 {
17012 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17013 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017014
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017015 if (NULL == pLostLinkParamInd)
17016 {
17017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17018 "%s: VOS MEM Alloc Failure", __func__);
17019 break;
17020 }
17021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17022 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17023
17024 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17025 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17026 pLostLinkParamInd->info.bssIdx =
17027 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17028 pLostLinkParamInd->info.rssi =
17029 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17030 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17031 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17032 sizeof(tSirMacAddr));
17033 pLostLinkParamInd->info.linkFlCnt =
17034 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17035 pLostLinkParamInd->info.linkFlTx =
17036 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17037 pLostLinkParamInd->info.lastDataRate =
17038 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17039 pLostLinkParamInd->info.rsvd1 =
17040 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17041 pLostLinkParamInd->info.rsvd2 =
17042 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17043 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17044 (void *)pLostLinkParamInd , 0) ;
17045 break;
17046 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017047 case WDI_RSSI_BREACHED_IND:
17048 {
17049 WDI_RssiBreachedIndType *pRssiBreachedInd;
17050 tpAniSirGlobal pMac;
17051
17052 pRssiBreachedInd =
17053 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17055 "Received WDI_RSSI_BREACHED_IND from FW");
17056
17057 vos_mem_copy(pRssiBreachedInd,
17058 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17059 sizeof(WDI_RssiBreachedIndType));
17060
17061 /*sanity check*/
17062 if (NULL == pWDA)
17063 {
17064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17065 "%s:pWDA is NULL", __func__);
17066 vos_mem_free(pRssiBreachedInd);
17067 VOS_ASSERT(0);
17068 return;
17069 }
17070
17071 if (NULL == pRssiBreachedInd)
17072 {
17073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17074 "%s:Breach indication from FW is null can't invoke HDD callback",
17075 __func__);
17076 VOS_ASSERT(0);
17077 return;
17078 }
17079
17080 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17081 if (NULL == pMac)
17082 {
17083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17084 "%s:pMac is NULL", __func__);
17085 VOS_ASSERT(0);
17086 vos_mem_free(pRssiBreachedInd);
17087 return;
17088 }
17089
17090 if (pMac->sme.rssiThresholdBreachedCb)
17091 {
17092 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17093 }
17094 else
17095 {
17096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17097 "%s:HDD callback is null", __func__);
17098 }
17099 vos_mem_free(pRssiBreachedInd);
17100 break;
17101 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017102#ifdef FEATURE_OEM_DATA_SUPPORT
17103 case WDI_START_OEM_DATA_RSP_IND_NEW:
17104 {
17105 void *pCallbackContext;
17106 tpAniSirGlobal pMac;
17107 tANI_U16 indType;
17108 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017109 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017110
17111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17112 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17113
17114 /*sanity check*/
17115 if (NULL == pWDA)
17116 {
17117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17118 "%s:pWDA is NULL", __func__);
17119 VOS_ASSERT(0);
17120 return;
17121 }
17122
17123 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17124 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017125 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17126 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017127 if (NULL == pOemRspNewIndData)
17128 {
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17130 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17131 __func__);
17132 VOS_ASSERT(0);
17133 return;
17134 }
17135
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017136 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17137 OemRspNewLen;
17138
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017139 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17140 if (NULL == pMac)
17141 {
17142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17143 "%s:pMac is NULL", __func__);
17144 VOS_ASSERT(0);
17145 return;
17146 }
17147
17148 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17149
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17151 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17152
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017153 if(pMac->sme.pOemDataIndCb)
17154 {
17155 pMac->sme.pOemDataIndCb(pCallbackContext,
17156 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017157 pOemRspNewIndData,
17158 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017159 }
17160 else
17161 {
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17163 "%s:HDD callback is null", __func__);
17164 }
17165 break;
17166 }
17167#endif /* FEATURE_OEM_DATA_SUPPORT */
17168
Jeff Johnson295189b2012-06-20 16:38:30 -070017169 default:
17170 {
17171 /* TODO error */
17172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17173 "Received UNKNOWN Indication from WDI ");
17174 }
17175 }
17176 return ;
17177}
17178
Jeff Johnson295189b2012-06-20 16:38:30 -070017179/*
17180 * BA related processing in WDA.
17181 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017182void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17183 void* pUserData)
17184{
17185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17186 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017187 if(NULL == pWdaParams)
17188 {
17189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017190 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017191 VOS_ASSERT(0) ;
17192 return ;
17193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017194 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017195 vos_mem_free(pWdaParams->wdaMsgParam) ;
17196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17197 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017199 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017200 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17201 {
17202 tANI_U8 i = 0 ;
17203 tBaActivityInd *baActivityInd = NULL ;
17204 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17205 tANI_U8 allocSize = sizeof(tBaActivityInd)
17206 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17207 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17208 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017209 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017210 if(NULL == baActivityInd)
17211 {
17212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017213 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017214 VOS_ASSERT(0) ;
17215 return;
17216 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017217 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17218 sizeof(tSirMacAddr)) ;
17219 baActivityInd->baCandidateCnt = baCandidateCount ;
17220
17221 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17222 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17223
17224 for(i = 0 ; i < baCandidateCount ; i++)
17225 {
17226 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017227 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17228 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017229 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17230 {
17231 baCandidate->baInfo[tid].fBaEnable =
17232 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17233 baCandidate->baInfo[tid].startingSeqNum =
17234 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17235 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017236 wdiBaCandidate++ ;
17237 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017239 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17240 }
17241 else
17242 {
17243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17244 "BA Trigger RSP with Failure received ");
17245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017246 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017247}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017248
17249
17250/*
17251 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17252 * during MCC
17253 */
17254void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17255{
17256 wpt_uint32 enabled;
17257 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17258 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17259 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17260
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017261 if (NULL == pMac )
17262 {
17263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17264 "%s: Invoked with invalid MAC context ", __func__ );
17265 VOS_ASSERT(0);
17266 return;
17267 }
17268
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017269 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17270 != eSIR_SUCCESS)
17271 {
17272 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17273 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17274 return;
17275 }
17276
17277 if(!enabled)
17278 {
17279 return;
17280 }
17281
17282 if(NULL == pWDA)
17283 {
17284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17285 "%s:WDA context is NULL", __func__);
17286 VOS_ASSERT(0);
17287 return;
17288 }
17289
17290 if(activate)
17291 {
17292 if( VOS_STATUS_SUCCESS !=
17293 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17294 {
17295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17296 "Traffic Stats Timer Start Failed ");
17297 return;
17298 }
17299 WDI_DS_ActivateTrafficStats();
17300 }
17301 else
17302 {
17303 WDI_DS_DeactivateTrafficStats();
17304 WDI_DS_ClearTrafficStats();
17305
17306 if( VOS_STATUS_SUCCESS !=
17307 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17308 {
17309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17310 "Traffic Stats Timer Stop Failed ");
17311 return;
17312 }
17313 }
17314}
17315
17316/*
17317 * Traffic Stats Timer handler
17318 */
17319void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17320{
17321 WDI_Status wdiStatus;
17322 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17323 WDI_TrafficStatsIndType trafficStatsIndParams;
17324 wpt_uint32 length, enabled;
17325 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17326
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017327 if (NULL == pMac )
17328 {
17329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17330 "%s: Invoked with invalid MAC context ", __func__ );
17331 VOS_ASSERT(0);
17332 return;
17333 }
17334
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017335 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17336 != eSIR_SUCCESS)
17337 {
17338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17339 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17340 return;
17341 }
17342
17343 if(!enabled)
17344 {
17345 WDI_DS_DeactivateTrafficStats();
17346 return;
17347 }
17348
17349 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17350
17351 if(pWdiTrafficStats != NULL)
17352 {
17353 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17354 trafficStatsIndParams.length = length;
17355 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017356 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017357 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17358 trafficStatsIndParams.pUserData = pWDA;
17359
17360 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17361
17362 if(WDI_STATUS_PENDING == wdiStatus)
17363 {
17364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17365 "Pending received for %s:%d ",__func__,__LINE__ );
17366 }
17367 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17368 {
17369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17370 "Failure in %s:%d ",__func__,__LINE__ );
17371 }
17372
17373 WDI_DS_ClearTrafficStats();
17374 }
17375 else
17376 {
17377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17378 "pWdiTrafficStats is Null");
17379 }
17380
17381 if( VOS_STATUS_SUCCESS !=
17382 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17383 {
17384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17385 "Traffic Stats Timer Start Failed ");
17386 return;
17387 }
17388}
17389
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017390bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
17391{
17392 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
17393 return true;
17394 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
17395 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
17396 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
17397 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
17398 jiffies_to_msecs(jiffies)))
17399 {
17400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17401 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
17402 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
17403 return false;
17404 }
17405 return true;
17406}
17407
Jeff Johnson295189b2012-06-20 16:38:30 -070017408/*
17409 * BA Activity check timer handler
17410 */
17411void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17412{
17413 tANI_U8 curSta = 0 ;
17414 tANI_U8 tid = 0 ;
17415 tANI_U8 size = 0 ;
17416 tANI_U8 baCandidateCount = 0 ;
17417 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017418 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017419 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017420 tpAniSirGlobal pMac;
17421
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017422 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017423 {
17424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017425 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017426 VOS_ASSERT(0);
17427 return ;
17428 }
17429 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17430 {
17431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17432 "Inconsistent STA entries in WDA");
17433 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017434 }
17435 if(NULL == pWDA->pVosContext)
17436 {
17437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17438 "%s: pVosContext is NULL",__func__);
17439 VOS_ASSERT(0);
17440 return ;
17441 }
17442 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017443 if(NULL == pMac)
17444 {
17445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17446 "%s: pMac is NULL",__func__);
17447 VOS_ASSERT(0);
17448 return ;
17449 }
17450
Abhishek Singh0644e482014-10-06 18:38:23 +053017451 if (wlan_cfgGetInt(pMac,
17452 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17453 eSIR_SUCCESS)
17454 {
17455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17456 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17457 val = 0;
17458 }
17459
Jeff Johnson295189b2012-06-20 16:38:30 -070017460 /* walk through all STA entries and find out TX packet count */
17461 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17462 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017463 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017464#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017465 // We can only do BA on "hard" STAs.
17466 if (!(IS_HWSTA_IDX(curSta)))
17467 {
17468 continue;
17469 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017470#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017471 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17472 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017473 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017474 tANI_U32 txPktCount = 0 ;
17475 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017476 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017477 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17478 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017479 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17480 curSta, tid, &txPktCount)))
17481 {
17482#if 0
17483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17484 "************* %d:%d, %d ",curSta, txPktCount,
17485 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17486#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017487 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17488 (currentOperChan <= SIR_11B_CHANNEL_END)))
17489 {
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17491 "%s: BTC disabled aggregation - dont start "
17492 "TX ADDBA req",__func__);
17493 }
17494 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017495 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017496 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053017497 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17498 pWDA->wdaGlobalSystemRole) && txPktCount )
17499 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17500 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017501 {
17502 /* get prepare for sending message to HAL */
17503 //baCandidate[baCandidateCount].staIdx = curSta ;
17504 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17505 newBaCandidate = WDA_ENABLE_BA ;
17506 }
17507 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17508 }
17509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017510 /* fill the entry for all the sta with given TID's */
17511 if(WDA_ENABLE_BA == newBaCandidate)
17512 {
17513 /* move to next BA candidate */
17514 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17515 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17516 baCandidateCount++ ;
17517 newBaCandidate = WDA_DISABLE_BA ;
17518 }
17519 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017520 /* prepare and send message to hal */
17521 if( 0 < baCandidateCount)
17522 {
17523 WDI_Status status = WDI_STATUS_SUCCESS ;
17524 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17525 tWDA_ReqParams *pWdaParams =
17526 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017527 if(NULL == pWdaParams)
17528 {
17529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017531 VOS_ASSERT(0) ;
17532 return;
17533 }
17534 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17535 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17536 if(NULL == wdiTriggerBaReq)
17537 {
17538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017540 VOS_ASSERT(0) ;
17541 vos_mem_free(pWdaParams);
17542 return;
17543 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017544 do
17545 {
17546 WDI_TriggerBAReqinfoType *triggerBaInfo =
17547 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17548 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17549 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17550 * for each request */
17551 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17552 triggerBaInfo->ucBASessionID = 0;
17553 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17554 } while(0) ;
17555 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017557 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017558 pWdaParams->pWdaContext = pWDA;
17559 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17560 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017561 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017562 WDA_TriggerBaReqCallback, pWdaParams) ;
17563 if(IS_WDI_STATUS_FAILURE(status))
17564 {
17565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17566 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17567 vos_mem_free(pWdaParams->wdaMsgParam) ;
17568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17569 vos_mem_free(pWdaParams) ;
17570 }
17571 }
17572 else
17573 {
17574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17575 "There is no TID for initiating BA");
17576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017577 if( VOS_STATUS_SUCCESS !=
17578 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17579 {
17580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17581 "BA Activity Timer Stop Failed ");
17582 return ;
17583 }
17584 if( VOS_STATUS_SUCCESS !=
17585 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17586 {
17587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17588 "BA Activity Timer Start Failed ");
17589 return;
17590 }
17591 return ;
17592}
Jeff Johnson295189b2012-06-20 16:38:30 -070017593/*
17594 * WDA common routine to create timer used by WDA.
17595 */
17596static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17597{
Jeff Johnson295189b2012-06-20 16:38:30 -070017598 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17599 tANI_U32 val = 0 ;
17600 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17601
17602 if(NULL == pMac)
17603 {
17604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017605 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017606 VOS_ASSERT(0);
17607 return VOS_STATUS_E_FAILURE;
17608 }
17609 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17610 != eSIR_SUCCESS)
17611 {
17612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17613 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17614 return VOS_STATUS_E_FAILURE;
17615 }
17616 val = SYS_MS_TO_TICKS(val) ;
17617
17618 /* BA activity check timer */
17619 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17620 "BA Activity Check timer", WDA_TimerHandler,
17621 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17622 if(status != TX_SUCCESS)
17623 {
17624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17625 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017626 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017628 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017629 /* Tx Complete Timeout timer */
17630 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17631 "Tx Complete Check timer", WDA_TimerHandler,
17632 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017633 if(status != TX_SUCCESS)
17634 {
17635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17636 "Unable to create Tx Complete Timeout timer");
17637 /* Destroy timer of BA activity check timer */
17638 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17639 if(status != TX_SUCCESS)
17640 {
17641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17642 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017643 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017644 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017645 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017646 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017647
17648 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17649
17650 /* Traffic Stats timer */
17651 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17652 "Traffic Stats timer", WDA_TimerHandler,
17653 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17654 if(status != TX_SUCCESS)
17655 {
17656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17657 "Unable to create traffic stats timer");
17658 /* Destroy timer of BA activity check timer */
17659 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17660 if(status != TX_SUCCESS)
17661 {
17662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17663 "Unable to Destroy BA activity timer");
17664 }
17665 /* Destroy timer of tx complete timer */
17666 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17667 if(status != TX_SUCCESS)
17668 {
17669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17670 "Unable to Tx complete timer");
17671 }
17672 return VOS_STATUS_E_FAILURE ;
17673 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017674 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017675}
Jeff Johnson295189b2012-06-20 16:38:30 -070017676/*
17677 * WDA common routine to destroy timer used by WDA.
17678 */
17679static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17680{
17681 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017682 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17683 if(status != TX_SUCCESS)
17684 {
17685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17686 "Unable to Destroy Tx Complete Timeout timer");
17687 return eSIR_FAILURE ;
17688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017689 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17690 if(status != TX_SUCCESS)
17691 {
17692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17693 "Unable to Destroy BA activity timer");
17694 return eSIR_FAILURE ;
17695 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017696 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17697 if(status != TX_SUCCESS)
17698 {
17699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17700 "Unable to Destroy traffic stats timer");
17701 return eSIR_FAILURE ;
17702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017703 return eSIR_SUCCESS ;
17704}
Jeff Johnson295189b2012-06-20 16:38:30 -070017705/*
17706 * WDA timer handler.
17707 */
17708void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17709{
17710 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17711 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017712 /*
17713 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17714 */
17715 wdaMsg.type = timerInfo ;
17716 wdaMsg.bodyptr = NULL;
17717 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017718 /* post the message.. */
17719 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17720 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17721 {
17722 vosStatus = VOS_STATUS_E_BADMSG;
17723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017724}
Jeff Johnson295189b2012-06-20 16:38:30 -070017725/*
17726 * WDA Tx Complete timeout Indication.
17727 */
17728void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17729{
17730 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017731 tpSirTxBdStatus txBdStatus = {0};
17732
Jeff Johnson295189b2012-06-20 16:38:30 -070017733 if( pWDA->pAckTxCbFunc )
17734 {
17735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017736 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017737 /*Indicate failure*/
17738 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017739 pWDA->pAckTxCbFunc = NULL;
17740 }
17741 else
17742 {
17743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017744 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017745 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017746}
Jeff Johnson295189b2012-06-20 16:38:30 -070017747/*
17748 * WDA Set REG Domain to VOS NV
17749 */
Abhishek Singha306a442013-11-07 18:39:01 +053017750eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17751 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017752{
Abhishek Singha306a442013-11-07 18:39:01 +053017753 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017754 {
17755 return eHAL_STATUS_INVALID_PARAMETER;
17756 }
17757 return eHAL_STATUS_SUCCESS;
17758}
Jeff Johnson295189b2012-06-20 16:38:30 -070017759
Jeff Johnson295189b2012-06-20 16:38:30 -070017760#ifdef FEATURE_WLAN_SCAN_PNO
17761/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017762 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017763 *
17764 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017765void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017766{
17767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017768 tSirPNOScanReq *pPNOScanReqParams;
17769
Jeff Johnson295189b2012-06-20 16:38:30 -070017770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017771 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017772 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017773 {
17774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017775 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017776 VOS_ASSERT(0) ;
17777 return ;
17778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017779
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017780 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17781 if(pPNOScanReqParams->statusCallback)
17782 {
17783 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17784 (status == WDI_STATUS_SUCCESS) ?
17785 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17786 }
17787
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017788 if (pPNOScanReqParams->enable == 1)
17789 {
17790 if (pPNOScanReqParams->aNetworks)
17791 vos_mem_free(pPNOScanReqParams->aNetworks);
17792 if (pPNOScanReqParams->p24GProbeTemplate)
17793 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17794 if (pPNOScanReqParams->p5GProbeTemplate)
17795 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17796 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17798 vos_mem_free(pWdaParams->wdaMsgParam);
17799 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017800
17801 return ;
17802}
Jeff Johnson295189b2012-06-20 16:38:30 -070017803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017804 * FUNCTION: WDA_PNOScanReqCallback
17805 * Free memory.
17806 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17807 */
17808void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017809{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017811 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017812
17813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17814 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17815
17816 if(NULL == pWdaParams)
17817 {
17818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17819 "%s: pWdaParams received NULL", __func__);
17820 VOS_ASSERT(0);
17821 return;
17822 }
17823
17824 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17825 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017826 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17827 if(pPNOScanReqParams->statusCallback)
17828 {
17829 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17830 VOS_STATUS_E_FAILURE);
17831 }
17832
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017833 if (pPNOScanReqParams->enable == 1)
17834 {
17835 if (pPNOScanReqParams->aNetworks)
17836 vos_mem_free(pPNOScanReqParams->aNetworks);
17837 if (pPNOScanReqParams->p24GProbeTemplate)
17838 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17839 if (pPNOScanReqParams->p5GProbeTemplate)
17840 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17841 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17843 vos_mem_free(pWdaParams->wdaMsgParam);
17844 vos_mem_free(pWdaParams);
17845 }
17846
17847 return;
17848}
17849/*
17850 * FUNCTION: WDA_UpdateScanParamsRespCallback
17851 *
17852 */
17853void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17854{
17855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017857 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017858 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017859 {
17860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017861 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017862 VOS_ASSERT(0) ;
17863 return ;
17864 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017865
17866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17867 vos_mem_free(pWdaParams->wdaMsgParam);
17868 vos_mem_free(pWdaParams);
17869
Jeff Johnson295189b2012-06-20 16:38:30 -070017870 return ;
17871}
Jeff Johnson295189b2012-06-20 16:38:30 -070017872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017873 * FUNCTION: WDA_UpdateScanParamsReqCallback
17874 * Free memory.
17875 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17876 */
17877void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17878{
17879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17880
17881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17882 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17883
17884 if(NULL == pWdaParams)
17885 {
17886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17887 "%s: pWdaParams received NULL", __func__);
17888 VOS_ASSERT(0);
17889 return;
17890 }
17891
17892 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17893 {
17894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17895 vos_mem_free(pWdaParams->wdaMsgParam);
17896 vos_mem_free(pWdaParams);
17897 }
17898
17899 return;
17900}
17901/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017902 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17903 * Request to WDI to set Preferred Network List.Offload
17904 */
17905VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17906 tSirPNOScanReq *pPNOScanReqParams)
17907{
Jeff Johnson43971f52012-07-17 12:26:56 -070017908 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017909 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17910 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17911 tWDA_ReqParams *pWdaParams ;
17912 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017915 if(NULL == pwdiPNOScanReqInfo)
17916 {
17917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017919 VOS_ASSERT(0);
17920 return VOS_STATUS_E_NOMEM;
17921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017922 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17923 if(NULL == pWdaParams)
17924 {
17925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017927 VOS_ASSERT(0);
17928 vos_mem_free(pwdiPNOScanReqInfo);
17929 return VOS_STATUS_E_NOMEM;
17930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017931 //
17932 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17933 //
17934 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17935 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017936 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17937 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17938 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17940 {
17941 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17942 &pPNOScanReqParams->aNetworks[i],
17943 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017945 /*Scan timer intervals*/
17946 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17947 &pPNOScanReqParams->scanTimers,
17948 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017949 /*Probe template for 2.4GHz band*/
17950 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17951 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17952 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017953 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17954 pPNOScanReqParams->p24GProbeTemplate,
17955 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017956 /*Probe template for 5GHz band*/
17957 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17958 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17959 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017960 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17961 pPNOScanReqParams->p5GProbeTemplate,
17962 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017963 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17964 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017965
Jeff Johnson295189b2012-06-20 16:38:30 -070017966 /* Store Params pass it to WDI */
17967 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17968 pWdaParams->pWdaContext = pWDA;
17969 /* Store param pointer as passed in by caller */
17970 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017971 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017972 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017973 if(IS_WDI_STATUS_FAILURE(status))
17974 {
17975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17976 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017977 if(pPNOScanReqParams->statusCallback)
17978 {
17979 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17980 VOS_STATUS_E_FAILURE);
17981 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017982 if (pPNOScanReqParams->enable == 1)
17983 {
17984 if (pPNOScanReqParams->aNetworks)
17985 vos_mem_free(pPNOScanReqParams->aNetworks);
17986 if (pPNOScanReqParams->p24GProbeTemplate)
17987 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17988 if (pPNOScanReqParams->p5GProbeTemplate)
17989 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17992 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017993
Jeff Johnson295189b2012-06-20 16:38:30 -070017994 pWdaParams->wdaWdiApiMsgParam = NULL;
17995 pWdaParams->wdaMsgParam = NULL;
17996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017997 return CONVERT_WDI2VOS_STATUS(status) ;
17998}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017999
18000#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18001
18002void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18003{
18004 /*Convert the CSR Auth types to WDI Auth types */
18005 switch (csrAuthType)
18006 {
18007 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18008 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18009 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018010#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018011 case eCSR_AUTH_TYPE_CCKM_WPA:
18012 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18013 break;
18014#endif
18015 case eCSR_AUTH_TYPE_WPA:
18016 *AuthType = eWDA_AUTH_TYPE_WPA;
18017 break;
18018 case eCSR_AUTH_TYPE_WPA_PSK:
18019 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18020 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018021#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018022 case eCSR_AUTH_TYPE_CCKM_RSN:
18023 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18024 break;
18025#endif
18026 case eCSR_AUTH_TYPE_RSN:
18027 *AuthType = eWDA_AUTH_TYPE_RSN;
18028 break;
18029 case eCSR_AUTH_TYPE_RSN_PSK:
18030 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18031 break;
18032#if defined WLAN_FEATURE_VOWIFI_11R
18033 case eCSR_AUTH_TYPE_FT_RSN:
18034 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18035 break;
18036 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18037 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18038 break;
18039#endif
18040#ifdef FEATURE_WLAN_WAPI
18041 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18042 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18043 break;
18044 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18045 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18046 break;
18047#endif /* FEATURE_WLAN_WAPI */
18048 case eCSR_AUTH_TYPE_SHARED_KEY:
18049 case eCSR_AUTH_TYPE_AUTOSWITCH:
18050 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18051 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018052#ifdef WLAN_FEATURE_11W
18053 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18054 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018055 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018056 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18057 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18058 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018059#endif
18060 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018062 "%s: Unknown Auth Type", __func__);
18063 break;
18064 }
18065}
18066void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18067{
18068 switch (csrEncrType)
18069 {
18070 case eCSR_ENCRYPT_TYPE_NONE:
18071 *EncrType = WDI_ED_NONE;
18072 break;
18073 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18074 case eCSR_ENCRYPT_TYPE_WEP40:
18075 *EncrType = WDI_ED_WEP40;
18076 break;
18077 case eCSR_ENCRYPT_TYPE_WEP104:
18078 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18079 *EncrType = WDI_ED_WEP104;
18080 break;
18081 case eCSR_ENCRYPT_TYPE_TKIP:
18082 *EncrType = WDI_ED_TKIP;
18083 break;
18084 case eCSR_ENCRYPT_TYPE_AES:
18085 *EncrType = WDI_ED_CCMP;
18086 break;
18087#ifdef WLAN_FEATURE_11W
18088 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18089 *EncrType = WDI_ED_AES_128_CMAC;
18090 break;
18091#endif
18092#ifdef FEATURE_WLAN_WAPI
18093 case eCSR_ENCRYPT_TYPE_WPI:
18094 *EncrType = WDI_ED_WPI;
18095 break;
18096#endif
18097 case eCSR_ENCRYPT_TYPE_ANY:
18098 *EncrType = WDI_ED_ANY;
18099 break;
18100
18101 default:
18102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18103 "%s: Unknown Encryption Type", __func__);
18104 break;
18105 }
18106}
18107
Kapil Gupta04ab1992016-06-26 13:36:51 +053018108#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18109VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18110 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18111{
18112 WDI_Status status;
18113 tWDA_ReqParams *pWdaParams ;
18114 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18115
18116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18117 "------> %s " ,__func__);
18118
18119 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18120 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18121 if (NULL == pwdiPERRoamOffloadScanInfo) {
18122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18123 "%s: VOS MEM Alloc Failure", __func__);
18124 VOS_ASSERT(0);
18125 return VOS_STATUS_E_NOMEM;
18126 }
18127
18128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18129 if (NULL == pWdaParams) {
18130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18131 "%s: VOS MEM Alloc Failure", __func__);
18132 VOS_ASSERT(0);
18133 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18134 return VOS_STATUS_E_NOMEM;
18135 }
18136
18137 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18138 pPERRoamOffloadScanReqParams->rateUpThreshold;
18139 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18140 pPERRoamOffloadScanReqParams->rateDownThreshold;
18141 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18142 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18143 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18144 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18145 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18146 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053018147 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
18148 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053018149 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18150 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18151
18152 /* Store Params pass it to WDI */
18153 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18154 pWdaParams->pWdaContext = pWDA;
18155
18156 /* Store param pointer as passed in by caller */
18157 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18158 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18159 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18160 pWdaParams);
18161
18162 if(IS_WDI_STATUS_FAILURE(status)) {
18163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18164 "Failure in Send config PER roam params");
18165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18166 vos_mem_free(pWdaParams->wdaMsgParam);
18167 vos_mem_free(pWdaParams);
18168 }
18169 return CONVERT_WDI2VOS_STATUS(status) ;
18170}
18171#endif
18172
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018173/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018174 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018175 * Request to WDI to set Roam Offload Scan
18176 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018177VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018178 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18179{
18180 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018181 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18182 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018183 tWDA_ReqParams *pWdaParams ;
18184 v_U8_t csrAuthType;
18185 WDI_RoamNetworkType *pwdiRoamNetworkType;
18186 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18188 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018189 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018190 {
18191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18192 "%s: VOS MEM Alloc Failure", __func__);
18193 VOS_ASSERT(0);
18194 return VOS_STATUS_E_NOMEM;
18195 }
18196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18197 if (NULL == pWdaParams)
18198 {
18199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18200 "%s: VOS MEM Alloc Failure", __func__);
18201 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018202 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018203 return VOS_STATUS_E_NOMEM;
18204 }
18205
18206 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018207 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018208 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018209 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18210 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018211 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18212 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18213 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18214 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18215 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18216 sizeof(pwdiRoamNetworkType->currAPbssid));
18217 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18218 csrAuthType);
18219 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18220 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18221 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18222 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18223 pwdiRoamOffloadScanInfo->LookupThreshold =
18224 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018225 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18226 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018227 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18228 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018229 pwdiRoamOffloadScanInfo->MAWCEnabled =
18230 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018231 pwdiRoamOffloadScanInfo->Command =
18232 pRoamOffloadScanReqParams->Command ;
18233 pwdiRoamOffloadScanInfo->StartScanReason =
18234 pRoamOffloadScanReqParams->StartScanReason ;
18235 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18236 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18237 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18238 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18239 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18240 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18241 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18242 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18243 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18244 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018245 pwdiRoamOffloadScanInfo->IsESEEnabled =
18246 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018247 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18248 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18249 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18250 pwdiRoamNetworkType->ssId.ucLength =
18251 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18252 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18253 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18254 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18255 pwdiRoamNetworkType->ChannelCount =
18256 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18257 pwdiRoamOffloadScanInfo->ChannelCacheType =
18258 pRoamOffloadScanReqParams->ChannelCacheType;
18259 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18260 pRoamOffloadScanReqParams->ValidChannelList,
18261 pRoamOffloadScanReqParams->ValidChannelCount);
18262 pwdiRoamOffloadScanInfo->ValidChannelCount =
18263 pRoamOffloadScanReqParams->ValidChannelCount;
18264 pwdiRoamOffloadScanInfo->us24GProbeSize =
18265 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18266 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18267 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18268 pRoamOffloadScanReqParams->p24GProbeTemplate,
18269 pwdiRoamOffloadScanInfo->us24GProbeSize);
18270 pwdiRoamOffloadScanInfo->us5GProbeSize =
18271 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18272 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18273 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18274 pRoamOffloadScanReqParams->p5GProbeTemplate,
18275 pwdiRoamOffloadScanInfo->us5GProbeSize);
18276 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18277 pRoamOffloadScanReqParams->MDID.mdiePresent;
18278 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18279 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018280 pwdiRoamOffloadScanInfo->nProbes =
18281 pRoamOffloadScanReqParams->nProbes;
18282 pwdiRoamOffloadScanInfo->HomeAwayTime =
18283 pRoamOffloadScanReqParams->HomeAwayTime;
18284 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018285 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018286 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018287 pWdaParams->pWdaContext = pWDA;
18288 /* Store param pointer as passed in by caller */
18289 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018290 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018291 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18292 if(IS_WDI_STATUS_FAILURE(status))
18293 {
18294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18295 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18297 vos_mem_free(pWdaParams->wdaMsgParam);
18298 pWdaParams->wdaWdiApiMsgParam = NULL;
18299 pWdaParams->wdaMsgParam = NULL;
18300 }
18301 return CONVERT_WDI2VOS_STATUS(status) ;
18302}
18303#endif
18304
Jeff Johnson295189b2012-06-20 16:38:30 -070018305/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018306 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018307 *
18308 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018309void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018310{
18311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18312
18313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018315
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018316 if(NULL == pWdaParams)
18317 {
18318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018319 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018320 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018321 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018322 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018323
Jeff Johnson295189b2012-06-20 16:38:30 -070018324 vos_mem_free(pWdaParams->wdaMsgParam) ;
18325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18326 vos_mem_free(pWdaParams) ;
18327
18328 return ;
18329}
18330/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018331 * FUNCTION: WDA_RssiFilterReqCallback
18332 * Free memory.
18333 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18334 */
18335void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18336{
18337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18338
18339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18340 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18341
18342 if(NULL == pWdaParams)
18343 {
18344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18345 "%s: pWdaParams received NULL", __func__);
18346 VOS_ASSERT(0);
18347 return;
18348 }
18349
18350 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18351 {
18352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18353 vos_mem_free(pWdaParams->wdaMsgParam);
18354 vos_mem_free(pWdaParams);
18355 }
18356
18357 return;
18358}
18359/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018360 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018361 * Request to WDI to set Preferred Network List.Offload
18362 */
18363VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18364 tSirSetRSSIFilterReq* pRssiFilterParams)
18365{
Jeff Johnson43971f52012-07-17 12:26:56 -070018366 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018367 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18368 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018372 if(NULL == pwdiSetRssiFilterReqInfo)
18373 {
18374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018376 VOS_ASSERT(0);
18377 return VOS_STATUS_E_NOMEM;
18378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18380 if(NULL == pWdaParams)
18381 {
18382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018384 VOS_ASSERT(0);
18385 vos_mem_free(pwdiSetRssiFilterReqInfo);
18386 return VOS_STATUS_E_NOMEM;
18387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018388 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018389 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18390 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018391
Jeff Johnson295189b2012-06-20 16:38:30 -070018392 /* Store Params pass it to WDI */
18393 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18394 pWdaParams->pWdaContext = pWDA;
18395 /* Store param pointer as passed in by caller */
18396 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018397 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018398 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018399 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018400 if(IS_WDI_STATUS_FAILURE(status))
18401 {
18402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18403 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18405 vos_mem_free(pWdaParams->wdaMsgParam);
18406 pWdaParams->wdaWdiApiMsgParam = NULL;
18407 pWdaParams->wdaMsgParam = NULL;
18408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018409 return CONVERT_WDI2VOS_STATUS(status) ;
18410}
18411
Jeff Johnson295189b2012-06-20 16:38:30 -070018412/*
18413 * FUNCTION: WDA_ProcessUpdateScanParams
18414 * Request to WDI to update Scan Parameters
18415 */
18416VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18417 tSirUpdateScanParams *pUpdateScanParams)
18418{
Jeff Johnson43971f52012-07-17 12:26:56 -070018419 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018420 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18421 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18422 sizeof(WDI_UpdateScanParamsInfoType)) ;
18423 tWDA_ReqParams *pWdaParams ;
18424 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018426 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018427 if(NULL == wdiUpdateScanParamsInfoType)
18428 {
18429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018431 VOS_ASSERT(0);
18432 return VOS_STATUS_E_NOMEM;
18433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18435 if ( NULL == pWdaParams )
18436 {
18437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018439 VOS_ASSERT(0);
18440 vos_mem_free(wdiUpdateScanParamsInfoType);
18441 return VOS_STATUS_E_NOMEM;
18442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018443 //
18444 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18445 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18447 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18448 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18449 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018450 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018451 pUpdateScanParams->b11dEnabled,
18452 pUpdateScanParams->b11dResolved,
18453 pUpdateScanParams->ucChannelCount,
18454 pUpdateScanParams->usPassiveMinChTime,
18455 pUpdateScanParams->usPassiveMaxChTime,
18456 pUpdateScanParams->usActiveMinChTime,
18457 pUpdateScanParams->usActiveMaxChTime,
18458 sizeof(tSirUpdateScanParams),
18459 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18460
Jeff Johnson295189b2012-06-20 16:38:30 -070018461 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18462 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018463 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18464 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018465 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18466 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018467 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18468 pUpdateScanParams->usActiveMaxChTime;
18469 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18470 pUpdateScanParams->usActiveMinChTime;
18471 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18472 pUpdateScanParams->usPassiveMaxChTime;
18473 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18474 pUpdateScanParams->usPassiveMinChTime;
18475
Jeff Johnson295189b2012-06-20 16:38:30 -070018476 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018477 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18478 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018479
Jeff Johnson295189b2012-06-20 16:38:30 -070018480 for ( i = 0; i <
18481 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18482 i++)
18483 {
18484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18485 "Update Scan Parameters channel: %d",
18486 pUpdateScanParams->aChannels[i]);
18487
18488 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18489 pUpdateScanParams->aChannels[i];
18490 }
18491
Yue Ma7f44bbe2013-04-12 11:47:39 -070018492 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18493 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018494
Jeff Johnson295189b2012-06-20 16:38:30 -070018495 /* Store Params pass it to WDI */
18496 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18497 pWdaParams->pWdaContext = pWDA;
18498 /* Store param pointer as passed in by caller */
18499 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018500
Jeff Johnson295189b2012-06-20 16:38:30 -070018501
18502
18503 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018504 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018505 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018506 if(IS_WDI_STATUS_FAILURE(status))
18507 {
18508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18509 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18511 vos_mem_free(pWdaParams->wdaMsgParam);
18512 vos_mem_free(pWdaParams);
18513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018514 return CONVERT_WDI2VOS_STATUS(status) ;
18515}
18516#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018517
18518#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18519/*
18520 * FUNCTION: WDA_RoamOffloadScanReqCallback
18521 *
18522 */
18523void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18524{
18525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018526 vos_msg_t vosMsg;
18527 wpt_uint8 reason = 0;
18528
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018530 "<------ %s " ,__func__);
18531 if (NULL == pWdaParams)
18532 {
18533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18534 "%s: pWdaParams received NULL", __func__);
18535 VOS_ASSERT(0) ;
18536 return ;
18537 }
18538 if ( pWdaParams != NULL )
18539 {
18540 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18541 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018542 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18544 }
18545 if ( pWdaParams->wdaMsgParam != NULL)
18546 {
18547 vos_mem_free(pWdaParams->wdaMsgParam);
18548 }
18549
18550 vos_mem_free(pWdaParams) ;
18551 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018552 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18553 vosMsg.bodyptr = NULL;
18554 if (WDI_STATUS_SUCCESS != status)
18555 {
18556 reason = 0;
18557 }
18558 vosMsg.bodyval = reason;
18559 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18560 {
18561 /* free the mem and return */
18562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018563 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018564 }
18565
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018566 return ;
18567}
Kapil Gupta04ab1992016-06-26 13:36:51 +053018568
18569void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
18570{
18571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18572 vos_msg_t vosMsg;
18573 wpt_uint8 reason = 0;
18574
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18576 "<------ %s " ,__func__);
18577 if (NULL == pWdaParams) {
18578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18579 "%s: pWdaParams received NULL", __func__);
18580 VOS_ASSERT(0) ;
18581 return ;
18582 }
18583 if ( pWdaParams->wdaMsgParam != NULL)
18584 vos_mem_free(pWdaParams->wdaMsgParam);
18585
18586 vos_mem_free(pWdaParams) ;
18587 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
18588 vosMsg.bodyptr = NULL;
18589 if (WDI_STATUS_SUCCESS != status)
18590 reason = 0;
18591
18592 vosMsg.bodyval = reason;
18593 if (VOS_STATUS_SUCCESS !=
18594 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18595 /* free the mem and return */
18596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18597 "%s: Failed to post the rsp to UMAC", __func__);
18598 }
18599
18600 return ;
18601}
18602
18603
18604void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18605{
18606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18607 vos_msg_t vosMsg;
18608 wpt_uint8 reason = 0;
18609
18610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18611 "<------ %s " ,__func__);
18612 if (NULL == pWdaParams) {
18613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18614 "%s: pWdaParams received NULL", __func__);
18615 VOS_ASSERT(0) ;
18616 return ;
18617 }
18618 if ( pWdaParams->wdaMsgParam != NULL)
18619 vos_mem_free(pWdaParams->wdaMsgParam);
18620
18621 vos_mem_free(pWdaParams) ;
18622 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18623 vosMsg.bodyptr = NULL;
18624 if (WDI_STATUS_SUCCESS != status)
18625 reason = 0;
18626
18627 vosMsg.bodyval = reason;
18628 if (VOS_STATUS_SUCCESS !=
18629 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18630 /* free the mem and return */
18631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18632 "%s: Failed to post the rsp to UMAC", __func__);
18633 }
18634
18635 return ;
18636}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018637#endif
18638
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018639/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018640 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018641 *
18642 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018643void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018644{
18645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18646
18647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18648 "<------ %s " ,__func__);
18649
18650 if(NULL == pWdaParams)
18651 {
18652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18653 "%s: pWdaParams received NULL", __func__);
18654 VOS_ASSERT(0);
18655 return;
18656 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018657
18658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18659 vos_mem_free(pWdaParams->wdaMsgParam);
18660 vos_mem_free(pWdaParams);
18661
18662 return;
18663}
18664/*
18665 * FUNCTION: WDA_SetPowerParamsReqCallback
18666 * Free memory.
18667 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18668 */
18669void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18670{
18671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18672
18673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18674 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18675
18676 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018677 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18679 "%s: pWdaParams received NULL", __func__);
18680 VOS_ASSERT(0);
18681 return;
18682 }
18683
18684 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18685 {
18686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18687 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018688 vos_mem_free(pWdaParams);
18689 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018690
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018691 return;
18692}
18693
Jeff Johnson295189b2012-06-20 16:38:30 -070018694#ifdef WLAN_FEATURE_PACKET_FILTERING
18695/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018696 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018697 *
18698 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018699void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018700 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18701 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018702{
18703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018706 if(NULL == pWdaParams)
18707 {
18708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018709 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018710 VOS_ASSERT(0) ;
18711 return ;
18712 }
18713
18714 vos_mem_free(pWdaParams->wdaMsgParam) ;
18715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18716 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018717 //print a msg, nothing else to do
18718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018719 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018720 return ;
18721}
Jeff Johnson295189b2012-06-20 16:38:30 -070018722/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018723 * FUNCTION: WDA_8023MulticastListReqCallback
18724 * Free memory.
18725 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18726 */
18727void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18728{
18729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18730
18731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18732 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18733
18734 if(NULL == pWdaParams)
18735 {
18736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18737 "%s: pWdaParams received NULL", __func__);
18738 VOS_ASSERT(0);
18739 return;
18740 }
18741
18742 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18743 {
18744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18745 vos_mem_free(pWdaParams->wdaMsgParam);
18746 vos_mem_free(pWdaParams);
18747 }
18748
18749 return;
18750}
18751/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018752 * FUNCTION: WDA_Process8023MulticastListReq
18753 * Request to WDI to add 8023 Multicast List
18754 */
18755VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18756 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18757{
Jeff Johnson43971f52012-07-17 12:26:56 -070018758 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018759 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18760 tWDA_ReqParams *pWdaParams ;
18761 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018764 pwdiFltPktSetMcListReqParamsType =
18765 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18766 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18767 ) ;
18768 if(NULL == pwdiFltPktSetMcListReqParamsType)
18769 {
18770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018772 return VOS_STATUS_E_NOMEM;
18773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18775 if(NULL == pWdaParams)
18776 {
18777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018779 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18780 return VOS_STATUS_E_NOMEM;
18781 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018782
Jeff Johnson295189b2012-06-20 16:38:30 -070018783 //
18784 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18785 //
18786 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018787 pRcvFltMcAddrList->ulMulticastAddrCnt;
18788
18789 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18790 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18791 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18792 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18793
Jeff Johnson295189b2012-06-20 16:38:30 -070018794 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18795 {
18796 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18797 &(pRcvFltMcAddrList->multicastAddr[i]),
18798 sizeof(tSirMacAddr));
18799 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018800 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18801 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018802
Jeff Johnson295189b2012-06-20 16:38:30 -070018803 /* Store Params pass it to WDI */
18804 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18805 pWdaParams->pWdaContext = pWDA;
18806 /* Store param pointer as passed in by caller */
18807 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018808 status = WDI_8023MulticastListReq(
18809 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018810 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018811 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018812 if(IS_WDI_STATUS_FAILURE(status))
18813 {
18814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18815 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18817 vos_mem_free(pWdaParams->wdaMsgParam);
18818 vos_mem_free(pWdaParams);
18819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018820 return CONVERT_WDI2VOS_STATUS(status) ;
18821}
Jeff Johnson295189b2012-06-20 16:38:30 -070018822/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018823 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018824 *
18825 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018826void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018827 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18828 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018829{
18830 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018832 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018833 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018834 if(NULL == pWdaParams)
18835 {
18836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018838 VOS_ASSERT(0) ;
18839 return ;
18840 }
18841
18842 vos_mem_free(pWdaParams->wdaMsgParam) ;
18843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18844 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018845 //print a msg, nothing else to do
18846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018847 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018848 return ;
18849}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018850
18851/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018852 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18853 * Free memory.
18854 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018855 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018856void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018857 void* pUserData)
18858{
18859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18860
18861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18862 "<------ %s, wdiStatus: %d",
18863 __func__, wdiStatus);
18864
18865 if (NULL == pWdaParams)
18866 {
18867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18868 "%s: Invalid pWdaParams pointer", __func__);
18869 VOS_ASSERT(0);
18870 return;
18871 }
18872
18873 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18874 {
18875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18876 vos_mem_free(pWdaParams->wdaMsgParam);
18877 vos_mem_free(pWdaParams);
18878 }
18879
18880 return;
18881}
18882
Jeff Johnson295189b2012-06-20 16:38:30 -070018883/*
18884 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18885 * Request to WDI to set Receive Filters
18886 */
18887VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18888 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18889{
Jeff Johnson43971f52012-07-17 12:26:56 -070018890 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018891 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18892 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18893 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18894 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18895 tWDA_ReqParams *pWdaParams ;
18896 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018899 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18900 {
18901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018903 VOS_ASSERT(0);
18904 return VOS_STATUS_E_NOMEM;
18905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18907 if(NULL == pWdaParams)
18908 {
18909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018911 VOS_ASSERT(0);
18912 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18913 return VOS_STATUS_E_NOMEM;
18914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018915 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18916 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18917 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18918 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018919 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18920 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18921
18922 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18923 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018924
18925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18926 "FID %d FT %d NParams %d CT %d",
18927 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18928 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18929 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18930 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018931 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18932 {
18933 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18934 &pRcvPktFilterCfg->paramsData[i],
18935 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018937 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018938 pwdiSetRcvPktFilterReqParamsType->
18939 wdiPktFilterCfg.paramsData[i].protocolLayer,
18940 pwdiSetRcvPktFilterReqParamsType->
18941 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018943 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018944 pwdiSetRcvPktFilterReqParamsType->
18945 wdiPktFilterCfg.paramsData[i].dataOffset,
18946 pwdiSetRcvPktFilterReqParamsType->
18947 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018949 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018950 pwdiSetRcvPktFilterReqParamsType->
18951 wdiPktFilterCfg.paramsData[i].compareData[0],
18952 pwdiSetRcvPktFilterReqParamsType->
18953 wdiPktFilterCfg.paramsData[i].compareData[1],
18954 pwdiSetRcvPktFilterReqParamsType->
18955 wdiPktFilterCfg.paramsData[i].compareData[2],
18956 pwdiSetRcvPktFilterReqParamsType->
18957 wdiPktFilterCfg.paramsData[i].compareData[3],
18958 pwdiSetRcvPktFilterReqParamsType->
18959 wdiPktFilterCfg.paramsData[i].compareData[4],
18960 pwdiSetRcvPktFilterReqParamsType->
18961 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018963 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018964 pwdiSetRcvPktFilterReqParamsType->
18965 wdiPktFilterCfg.paramsData[i].dataMask[0],
18966 pwdiSetRcvPktFilterReqParamsType->
18967 wdiPktFilterCfg.paramsData[i].dataMask[1],
18968 pwdiSetRcvPktFilterReqParamsType->
18969 wdiPktFilterCfg.paramsData[i].dataMask[2],
18970 pwdiSetRcvPktFilterReqParamsType->
18971 wdiPktFilterCfg.paramsData[i].dataMask[3],
18972 pwdiSetRcvPktFilterReqParamsType->
18973 wdiPktFilterCfg.paramsData[i].dataMask[4],
18974 pwdiSetRcvPktFilterReqParamsType->
18975 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018976 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018977 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018978 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018979 /* Store Params pass it to WDI */
18980 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18981 pWdaParams->pWdaContext = pWDA;
18982 /* Store param pointer as passed in by caller */
18983 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018984 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018985 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018986 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018987 if(IS_WDI_STATUS_FAILURE(status))
18988 {
18989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18990 "Failure in SetFilter(),free all the memory,status %d ",status);
18991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18992 vos_mem_free(pWdaParams->wdaMsgParam);
18993 vos_mem_free(pWdaParams);
18994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018995 return CONVERT_WDI2VOS_STATUS(status) ;
18996}
Jeff Johnson295189b2012-06-20 16:38:30 -070018997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018998 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018999 *
19000 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019001void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019002 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
19003 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019004{
19005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19006 tWDA_CbContext *pWDA;
19007 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19008 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19009 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19010 tANI_U8 i;
19011 vos_msg_t vosMsg;
19012
19013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019014 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019015 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19016
Jeff Johnsone7245742012-09-05 17:12:55 -070019017 if(NULL == pRcvFltPktMatchCntRsp)
19018 {
19019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019020 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019021 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019022 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019023 return ;
19024 }
19025
Jeff Johnson295189b2012-06-20 16:38:30 -070019026 if(NULL == pWdaParams)
19027 {
19028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019029 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019030 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019031 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019032 return ;
19033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019034 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19035 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019036 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19037 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19038
19039 /* Message Header */
19040 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19041 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19042
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019043 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019044
19045 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19046 {
19047 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19048 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019050 /* VOS message wrapper */
19051 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19052 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19053 vosMsg.bodyval = 0;
19054 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19055 {
19056 /* free the mem and return */
19057 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19058 }
19059
19060 vos_mem_free(pWdaParams->wdaMsgParam) ;
19061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19062 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019063
19064 return;
19065}
19066/*
19067 * FUNCTION: WDA_FilterMatchCountReqCallback
19068 * Free memory and send RSP back to SME.
19069 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19070 */
19071void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19072{
19073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19074 vos_msg_t vosMsg;
19075
19076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19077 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19078
19079 if(NULL == pWdaParams)
19080 {
19081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19082 "%s: pWdaParams received NULL", __func__);
19083 VOS_ASSERT(0);
19084 return;
19085 }
19086
19087 /* VOS message wrapper */
19088 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19089 vosMsg.bodyptr = NULL;
19090 vosMsg.bodyval = 0;
19091
19092 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19093 {
19094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19095 vos_mem_free(pWdaParams->wdaMsgParam);
19096 vos_mem_free(pWdaParams);
19097 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19098 }
19099
19100 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019101}
Jeff Johnson295189b2012-06-20 16:38:30 -070019102/*
19103 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19104 * Request to WDI to get PC Filter Match Count
19105 */
19106VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19107{
Jeff Johnson43971f52012-07-17 12:26:56 -070019108 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019109 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19110 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019114 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19115 {
19116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019118 VOS_ASSERT(0);
19119 return VOS_STATUS_E_NOMEM;
19120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19122 if(NULL == pWdaParams)
19123 {
19124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019126 VOS_ASSERT(0);
19127 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19128 return VOS_STATUS_E_NOMEM;
19129 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019130
Yue Ma7f44bbe2013-04-12 11:47:39 -070019131 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19132 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019133
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019134 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19135 pRcvFltPktMatchRsp->bssId,
19136 sizeof(wpt_macAddr));
19137
Jeff Johnson295189b2012-06-20 16:38:30 -070019138 /* Store Params pass it to WDI */
19139 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19140 pWdaParams->pWdaContext = pWDA;
19141 /* Store param pointer as passed in by caller */
19142 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019143 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019144 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019145 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019146 if(IS_WDI_STATUS_FAILURE(status))
19147 {
19148 /* failure returned by WDI API */
19149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19150 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19152 vos_mem_free(pWdaParams) ;
19153 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19154 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019156 return CONVERT_WDI2VOS_STATUS(status) ;
19157}
Jeff Johnson295189b2012-06-20 16:38:30 -070019158/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019159 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019160 *
19161 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019162void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019163 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19164 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019165{
19166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019169/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19170 if(NULL == pWdaParams)
19171 {
19172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019174 VOS_ASSERT(0) ;
19175 return ;
19176 }
19177
19178 vos_mem_free(pWdaParams->wdaMsgParam) ;
19179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19180 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019181 //print a msg, nothing else to do
19182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019183 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019184 return ;
19185}
Jeff Johnson295189b2012-06-20 16:38:30 -070019186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019187 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19188 * Free memory.
19189 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19190 */
19191void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19192{
19193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19194
19195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19196 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19197
19198 if(NULL == pWdaParams)
19199 {
19200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19201 "%s: Invalid pWdaParams pointer", __func__);
19202 VOS_ASSERT(0);
19203 return;
19204 }
19205
19206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19207 {
19208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19209 vos_mem_free(pWdaParams->wdaMsgParam);
19210 vos_mem_free(pWdaParams);
19211 }
19212
19213 return;
19214}
19215/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019216 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19217 * Request to WDI to clear Receive Filters
19218 */
19219VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19220 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19221{
Jeff Johnson43971f52012-07-17 12:26:56 -070019222 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019223 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19224 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19225 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019227 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019228 if(NULL == pwdiRcvFltPktClearReqParamsType)
19229 {
19230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019232 VOS_ASSERT(0);
19233 return VOS_STATUS_E_NOMEM;
19234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19236 if(NULL == pWdaParams)
19237 {
19238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019240 VOS_ASSERT(0);
19241 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19242 return VOS_STATUS_E_NOMEM;
19243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019244 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19245 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019246 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19247 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19248 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19249 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019250
Yue Ma7f44bbe2013-04-12 11:47:39 -070019251 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019252 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019253 /* Store Params pass it to WDI */
19254 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19255 pWdaParams->pWdaContext = pWDA;
19256 /* Store param pointer as passed in by caller */
19257 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019258 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019259 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019260 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019261 if(IS_WDI_STATUS_FAILURE(status))
19262 {
19263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19264 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
19265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019266 vos_mem_free(pWdaParams->wdaMsgParam);
19267 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019269 return CONVERT_WDI2VOS_STATUS(status) ;
19270}
19271#endif // WLAN_FEATURE_PACKET_FILTERING
19272
Jeff Johnson295189b2012-06-20 16:38:30 -070019273/*
19274 * FUNCTION: WDA_ProcessSetPowerParamsReq
19275 * Request to WDI to set power params
19276 */
19277VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19278 tSirSetPowerParamsReq *pPowerParams)
19279{
Jeff Johnson43971f52012-07-17 12:26:56 -070019280 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019281 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19282 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019283 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019285 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019286 if(NULL == pwdiSetPowerParamsReqInfo)
19287 {
19288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019290 VOS_ASSERT(0);
19291 return VOS_STATUS_E_NOMEM;
19292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19294 if(NULL == pWdaParams)
19295 {
19296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019298 VOS_ASSERT(0);
19299 vos_mem_free(pwdiSetPowerParamsReqInfo);
19300 return VOS_STATUS_E_NOMEM;
19301 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019302
Jeff Johnson295189b2012-06-20 16:38:30 -070019303
19304 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19305 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019306 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19307 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019308 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19309 pPowerParams->uListenInterval;
19310 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19311 pPowerParams->uBcastMcastFilter;
19312 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19313 pPowerParams->uEnableBET;
19314 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19315 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019316 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19317 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019318 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19319 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019320
Jeff Johnson295189b2012-06-20 16:38:30 -070019321 /* Store Params pass it to WDI */
19322 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19323 pWdaParams->pWdaContext = pWDA;
19324 /* Store param pointer as passed in by caller */
19325 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019326 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019327 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019328 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019329 if(IS_WDI_STATUS_FAILURE(status))
19330 {
19331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19332 "Failure in Set power params REQ WDI API, free all the memory " );
19333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19334 vos_mem_free(pWdaParams->wdaMsgParam);
19335 pWdaParams->wdaWdiApiMsgParam = NULL;
19336 pWdaParams->wdaMsgParam = NULL;
19337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019338 return CONVERT_WDI2VOS_STATUS(status) ;
19339}
19340
19341/*
19342 * FUNCTION: WDA_SetTmLevelRspCallback
19343 * Set TM Level response
19344 */
19345void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19346{
19347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19348
19349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019351
19352 if(NULL == pWdaParams)
19353 {
19354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019355 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019356 VOS_ASSERT(0) ;
19357 return ;
19358 }
19359
19360 /* Dose not need to send notification to upper layer
19361 * Just free allocated resources */
19362 if( pWdaParams != NULL )
19363 {
19364 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19365 {
19366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19367 }
19368 vos_mem_free(pWdaParams->wdaMsgParam) ;
19369 vos_mem_free(pWdaParams) ;
19370 }
19371}
19372
19373/*
19374 * FUNCTION: WDA_ProcessSetTmLevelReq
19375 * Set TM Level request
19376 */
19377VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19378 tAniSetTmLevelReq *setTmLevelReq)
19379{
19380 WDI_Status status = WDI_STATUS_SUCCESS ;
19381 tWDA_ReqParams *pWdaParams ;
19382 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19383 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19384 sizeof(WDI_SetTmLevelReqType)) ;
19385 if(NULL == wdiSetTmLevelReq)
19386 {
19387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019389 VOS_ASSERT(0);
19390 return VOS_STATUS_E_NOMEM;
19391 }
19392
19393 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_ASSERT(0);
19399 vos_mem_free(wdiSetTmLevelReq);
19400 return VOS_STATUS_E_NOMEM;
19401 }
19402
19403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019404 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019405
19406 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19407 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19408
19409 pWdaParams->pWdaContext = pWDA;
19410 pWdaParams->wdaMsgParam = setTmLevelReq;
19411 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19412
19413 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19414 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19415
19416 if(IS_WDI_STATUS_FAILURE(status))
19417 {
19418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019419 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019420 vos_mem_free(pWdaParams->wdaMsgParam) ;
19421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19422 vos_mem_free(pWdaParams) ;
19423 }
19424
19425 return CONVERT_WDI2VOS_STATUS(status) ;
19426}
19427
19428VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19429 tpTxControlParams pTxCtrlParam)
19430{
19431 VOS_STATUS wdaStatus;
19432
19433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019435 if( pTxCtrlParam == NULL )
19436 {
19437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019438 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019439 return VOS_STATUS_E_FAILURE;
19440 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019441 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19442 {
19443 wdaStatus = WDA_SuspendDataTx(pWDA);
19444 }
19445 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19446 {
19447 wdaStatus = WDA_ResumeDataTx(pWDA);
19448 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019449 return wdaStatus;
19450}
19451
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019452void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019453{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019454 WDI_Status status;
19455 status = WDI_FWLoggingDXEdoneInd(logType);
19456
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019457 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019458 {
19459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19460 FL("Failure status %d"), status);
19461 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019462}
19463
Jeff Johnson295189b2012-06-20 16:38:30 -070019464 /* FUNCTION WDA_featureCapsExchange
19465 * WDA API to invoke capability exchange between host and FW.
19466 */
19467void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19468{
19469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019470 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019471 WDI_featureCapsExchangeReq( NULL, pVosContext);
19472}
19473
Yathish9f22e662012-12-10 14:21:35 -080019474/* FUNCTION WDA_disableCapablityFeature
19475 * WDA API to diable Active mode offload in host.
19476 */
19477void WDA_disableCapablityFeature(tANI_U8 feature_index)
19478{
19479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19480 "%s:enter", __func__ );
19481 WDI_disableCapablityFeature(feature_index);
19482}
19483
Jeff Johnson295189b2012-06-20 16:38:30 -070019484 /* FUNCTION WDA_getHostWlanFeatCaps
19485 * Wrapper for WDI API, that will return if the feature (enum value).passed
19486 * to this API is supported or not in Host
19487 * return value
19488 * 0 - implies feature is NOT Supported
19489 * any non zero value - implies feature is SUPPORTED
19490 */
19491tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19492{
19493 return WDI_getHostWlanFeatCaps(featEnumValue);
19494}
19495
19496 /* FUNCTION WDA_getFwWlanFeatCaps
19497 * Wrapper for WDI API, that will return if the feature (enum value).passed
19498 * to this API is supported or not in FW
19499 * return value
19500 * 0 - implies feature is NOT Supported
19501 * any non zero value - implies feature is SUPPORTED
19502 */
19503tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19504{
19505 return WDI_getFwWlanFeatCaps(featEnumValue);
19506}
19507
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019508
Jeff Johnson295189b2012-06-20 16:38:30 -070019509/*
19510 * FUNCTION: WDA_shutdown
19511 * Shutdown WDA/WDI without handshaking with Riva.
19512 * Synchronous function.
19513 */
19514VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19515{
19516 WDI_Status wdiStatus;
19517 //tANI_U8 eventIdx = 0;
19518 VOS_STATUS status = VOS_STATUS_SUCCESS;
19519 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019520 if (NULL == pWDA)
19521 {
19522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019523 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019524 VOS_ASSERT(0);
19525 return VOS_STATUS_E_FAILURE;
19526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019527 /* FTM mode stay START_STATE */
19528 if( (WDA_READY_STATE != pWDA->wdaState) &&
19529 (WDA_INIT_STATE != pWDA->wdaState) &&
19530 (WDA_START_STATE != pWDA->wdaState) )
19531 {
19532 VOS_ASSERT(0);
19533 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019534
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019535 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019536 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019537 if(VOS_TRUE == pWDA->wdaTimersCreated)
19538 {
19539 wdaDestroyTimers(pWDA);
19540 pWDA->wdaTimersCreated = VOS_FALSE;
19541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019542 }
Leo Chang9d76f622013-08-23 16:34:52 -070019543 else
19544 {
19545 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019546 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019547
Jeff Johnson295189b2012-06-20 16:38:30 -070019548 /* call WDI shutdown */
19549 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019550 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19551 {
19552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19553 "error in WDA Stop" );
19554 status = VOS_STATUS_E_FAILURE;
19555 }
19556 /* WDI stop is synchrnous, shutdown is complete when it returns */
19557 pWDA->wdaState = WDA_STOP_STATE;
19558
Jeff Johnson295189b2012-06-20 16:38:30 -070019559 /* shutdown should perform the stop & close actions. */
19560 /* Destroy the event */
19561 status = vos_event_destroy(&pWDA->txFrameEvent);
19562 if(!VOS_IS_STATUS_SUCCESS(status))
19563 {
19564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019565 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019566 status = VOS_STATUS_E_FAILURE;
19567 }
19568 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19569 if(!VOS_IS_STATUS_SUCCESS(status))
19570 {
19571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019572 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019573 status = VOS_STATUS_E_FAILURE;
19574 }
19575 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19576 if(!VOS_IS_STATUS_SUCCESS(status))
19577 {
19578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019579 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019580 status = VOS_STATUS_E_FAILURE;
19581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019582 /* free WDA context */
19583 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19584 if ( !VOS_IS_STATUS_SUCCESS(status) )
19585 {
19586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19587 "error in WDA close " );
19588 status = VOS_STATUS_E_FAILURE;
19589 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019590 return status;
19591}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019592
Jeff Johnsone7245742012-09-05 17:12:55 -070019593/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019594 * FUNCTION: WDA_setNeedShutdown
19595 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019596 */
19597
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019598void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019599{
19600 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019601 if(pWDA == NULL)
19602 {
19603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19604 "Could not get the WDA Context pointer" );
19605 return;
19606 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019607 pWDA->needShutdown = TRUE;
19608}
19609/*
19610 * FUNCTION: WDA_needShutdown
19611 * WDA needs a shutdown
19612 */
19613
19614v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19615{
19616 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019617 if(pWDA == NULL)
19618 {
19619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19620 "Could not get the WDA Context pointer" );
19621 return 0;
19622 }
19623 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019624}
19625
Mohit Khanna4a70d262012-09-11 16:30:12 -070019626#ifdef WLAN_FEATURE_11AC
19627/*
19628 * FUNCTION: WDA_SetBeaconFilterReqCallback
19629 *
19630 */
19631void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19632{
19633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019635 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019636 if(NULL == pWdaParams)
19637 {
19638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019639 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019640 VOS_ASSERT(0) ;
19641 return ;
19642 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019643
Mohit Khanna4a70d262012-09-11 16:30:12 -070019644 vos_mem_free(pWdaParams->wdaMsgParam) ;
19645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19646 vos_mem_free(pWdaParams) ;
19647 /*
19648 * No respone required for SetBeaconFilter req so just free the request
19649 * param here
19650 */
19651
19652 return ;
19653}
19654
19655VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19656 tUpdateVHTOpMode *pData)
19657{
19658 WDI_Status status = WDI_STATUS_SUCCESS ;
19659 tWDA_ReqParams *pWdaParams ;
19660 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19661 sizeof(WDI_UpdateVHTOpMode)) ;
19662 if(NULL == wdiTemp)
19663 {
19664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019665 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019666 VOS_ASSERT(0);
19667 return VOS_STATUS_E_NOMEM;
19668 }
19669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19670 if(NULL == pWdaParams)
19671 {
19672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019673 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019674 VOS_ASSERT(0);
19675 vos_mem_free(wdiTemp);
19676 return VOS_STATUS_E_NOMEM;
19677 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19679 "------> %s Opmode = %d and staid = %d" ,
19680 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019681 wdiTemp->opMode = pData->opMode;
19682 wdiTemp->staId = pData->staId;
19683
19684 pWdaParams->pWdaContext = pWDA;
19685 /* Store Req pointer, as this will be used for response */
19686 pWdaParams->wdaMsgParam = (void *)pData;
19687 /* store Params pass it to WDI */
19688 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19689
19690 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19691
19692 if(IS_WDI_STATUS_FAILURE(status))
19693 {
19694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19695 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19697 vos_mem_free(pWdaParams->wdaMsgParam);
19698 vos_mem_free(pWdaParams);
19699 }
19700 return CONVERT_WDI2VOS_STATUS(status) ;
19701}
19702#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019703
19704/*==========================================================================
19705 FUNCTION WDA_TransportChannelDebug
19706
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019707 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019708 Display Transport Channel debugging information
19709 User may request to display DXE channel snapshot
19710 Or if host driver detects any abnormal stcuk may display
19711
19712 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019713 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019714 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019715 debugFlags : Enable stall detect features
19716 defined by WPAL_DeviceDebugFlags
19717 These features may effect
19718 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019719
19720 RETURN VALUE
19721 NONE
19722
19723===========================================================================*/
19724void WDA_TransportChannelDebug
19725(
schang6295e542013-03-12 15:31:23 -070019726 tpAniSirGlobal pMac,
19727 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019728 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019729)
19730{
Mihir Shete40a55652014-03-02 14:14:47 +053019731 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019732 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019733}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019734
19735/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019736 FUNCTION WDA_TransportKickDxe
19737
19738 DESCRIPTION
19739 Request Kick Dxe when first hdd TX time out
19740 happens
19741
19742 PARAMETERS
19743 NONE
19744
19745 RETURN VALUE
19746 NONE
19747
19748===========================================================================*/
19749void WDA_TransportKickDxe()
19750{
19751 WDI_TransportKickDxe();
19752 return;
19753}
19754
19755
19756/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019757 FUNCTION WDA_SetEnableSSR
19758
19759 DESCRIPTION
19760 API to enable/disable SSR on WDI timeout
19761
19762 PARAMETERS
19763 enableSSR : enable/disable SSR
19764
19765 RETURN VALUE
19766 NONE
19767
19768===========================================================================*/
19769void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19770{
19771 WDI_SetEnableSSR(enableSSR);
19772}
Leo Chang9056f462013-08-01 19:21:11 -070019773
Agrawal Ashish0552be02016-03-02 18:03:43 +053019774/**
19775 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19776 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19777 *
19778 * Return: void
19779 */
19780void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19781{
19782 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19783}
19784
Leo Chang9056f462013-08-01 19:21:11 -070019785#ifdef FEATURE_WLAN_LPHB
19786/*
19787 * FUNCTION: WDA_LPHBconfRspCallback
19788 *
19789 */
19790void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19791{
19792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19793
19794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19795 "<------ %s " ,__func__);
19796 if (NULL == pWdaParams)
19797 {
19798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19799 "%s: pWdaParams received NULL", __func__);
19800 VOS_ASSERT(0) ;
19801 return ;
19802 }
19803
19804 /* Do not need to send notification to upper layer
19805 * Just free allocated resources */
19806 if (pWdaParams != NULL)
19807 {
19808 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19809 {
19810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19811 }
19812 vos_mem_free(pWdaParams->wdaMsgParam) ;
19813 vos_mem_free(pWdaParams) ;
19814 }
19815
19816 return;
19817}
19818
19819/*
19820 * FUNCTION: WDA_ProcessLPHBConfReq
19821 *
19822 */
19823VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19824 tSirLPHBReq *pData)
19825{
19826 WDI_Status wdiStatus;
19827 tWDA_ReqParams *pWdaParams ;
19828
19829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19830 "------> %s " , __func__);
19831
19832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19833 if (NULL == pWdaParams)
19834 {
19835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19836 "%s: VOS MEM Alloc Failure", __func__);
19837 VOS_ASSERT(0);
19838 vos_mem_free(pData);
19839 return VOS_STATUS_E_NOMEM;
19840 }
19841
19842 pWdaParams->pWdaContext = pWDA;
19843 pWdaParams->wdaMsgParam = (void *)pData;
19844 pWdaParams->wdaWdiApiMsgParam = NULL;
19845
19846 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19847 if (WDI_STATUS_PENDING == wdiStatus)
19848 {
19849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19850 "Pending received for %s:%d ", __func__, __LINE__);
19851 }
19852 else if (WDI_STATUS_SUCCESS != wdiStatus)
19853 {
19854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19855 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19856 vos_mem_free(pWdaParams->wdaMsgParam);
19857 vos_mem_free(pWdaParams);
19858 }
19859
19860 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19861}
19862#endif /* FEATURE_WLAN_LPHB */
19863
c_hpothu92367912014-05-01 15:18:17 +053019864void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19865 void* pUserData)
19866{
19867 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19868
19869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19870 "<------ %s " ,__func__);
19871 if (NULL == pBcnMissRateInfo)
19872 {
19873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19874 "%s: pWdaParams received NULL", __func__);
19875 VOS_ASSERT(0) ;
19876 return ;
19877 }
19878 if (pBcnMissRateInfo->callback)
19879 {
19880 pBcnMissRateInfo->callback(status, bcnMissRate,
19881 pBcnMissRateInfo->data);
19882 }
19883 vos_mem_free(pUserData);
19884
19885 return;
19886}
19887
19888v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19889 tSirBcnMissRateReq *pData)
19890{
19891 WDI_Status wdiStatus;
19892 tSirBcnMissRateInfo *pBcnMissRateInfo;
19893
19894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19895 "------> %s " , __func__);
19896
19897 pBcnMissRateInfo =
19898 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19899 if (NULL == pBcnMissRateInfo)
19900 {
19901 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19902 "%s: VOS MEM Alloc Failure", __func__);
19903 VOS_ASSERT(0);
19904 vos_mem_free(pData);
19905 return;
19906 }
19907
19908 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19909 pBcnMissRateInfo->data = pData->data;
19910
19911 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19912 WDA_GetBcnMissRateCallback,
19913 pData->bssid);
19914 if (WDI_STATUS_PENDING == wdiStatus)
19915 {
19916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19917 "Pending received for %s:%d ", __func__, __LINE__);
19918 }
19919 else if (WDI_STATUS_SUCCESS != wdiStatus)
19920 {
19921 if (pBcnMissRateInfo->callback)
19922 {
19923 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19924 -1, pBcnMissRateInfo->data);
19925 }
19926 }
19927 vos_mem_free(pData);
19928}
Dino Mycle41bdc942014-06-10 11:30:24 +053019929
19930#ifdef WLAN_FEATURE_EXTSCAN
19931
19932/*==========================================================================
19933 FUNCTION WDA_EXTScanStartRspCallback
19934
19935 DESCRIPTION
19936 API to send EXTScan Start Response to HDD
19937
19938 PARAMETERS
19939 pEventData: Response from FW
19940 pUserData:
19941===========================================================================*/
19942void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19943{
19944 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19945 tWDA_CbContext *pWDA = NULL;
19946 void *pCallbackContext;
19947 tpAniSirGlobal pMac;
19948
19949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19950 "%s:", __func__);
19951 if (NULL == pWdaParams)
19952 {
19953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19954 "%s: pWdaParams received NULL", __func__);
19955 VOS_ASSERT(0);
19956 return;
19957 }
19958
19959 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19960
19961 if (NULL == pWDA)
19962 {
19963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19964 "%s: pWDA received NULL", __func__);
19965 VOS_ASSERT(0);
19966 goto error;
19967 }
19968
19969 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19970 if (NULL == pMac)
19971 {
19972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19973 "%s:pMac is NULL", __func__);
19974 VOS_ASSERT(0);
19975 goto error;
19976 }
19977
19978 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19979
19980 if (pMac->sme.pEXTScanIndCb)
19981 {
19982 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19983 pEventData);
19984 }
19985 else
19986 {
19987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19988 "%s:HDD callback is null", __func__);
19989 VOS_ASSERT(0);
19990 }
19991
19992error:
19993
19994 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19995 {
19996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19997 }
19998 if (pWdaParams->wdaMsgParam != NULL)
19999 {
20000 vos_mem_free(pWdaParams->wdaMsgParam);
20001 }
20002 vos_mem_free(pWdaParams) ;
20003
20004 return;
20005}
20006
20007/*==========================================================================
20008 FUNCTION WDA_EXTScanStopRspCallback
20009
20010 DESCRIPTION
20011 API to send EXTScan Stop Response to HDD
20012
20013 PARAMETERS
20014 pEventData: Response from FW
20015 pUserData:
20016===========================================================================*/
20017void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20018{
20019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20020 tWDA_CbContext *pWDA = NULL;
20021 void *pCallbackContext;
20022 tpAniSirGlobal pMac;
20023
20024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20025 "%s:", __func__);
20026 if (NULL == pWdaParams)
20027 {
20028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20029 "%s: pWdaParams received NULL", __func__);
20030 VOS_ASSERT(0);
20031 return;
20032 }
20033
20034 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20035
20036 if (NULL == pWDA)
20037 {
20038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20039 "%s: pWDA received NULL", __func__);
20040 VOS_ASSERT(0);
20041 goto error;
20042 }
20043
20044 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20045 if (NULL == pMac)
20046 {
20047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20048 "%s:pMac is NULL", __func__);
20049 VOS_ASSERT(0);
20050 goto error;
20051 }
20052 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20053
20054 if (pMac->sme.pEXTScanIndCb)
20055 {
20056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20057 "%s:HDD call back function called", __func__);
20058 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20059 pEventData);
20060 }
20061 else
20062 {
20063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20064 "%s:HDD callback is null", __func__);
20065 VOS_ASSERT(0);
20066 }
20067
20068error:
20069
20070 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20071 {
20072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20073 }
20074 if (pWdaParams->wdaMsgParam != NULL)
20075 {
20076 vos_mem_free(pWdaParams->wdaMsgParam);
20077 }
20078 vos_mem_free(pWdaParams) ;
20079
20080
20081 return;
20082}
20083
20084/*==========================================================================
20085 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20086
20087 DESCRIPTION
20088 API to send EXTScan Get Cached Results Response to HDD
20089
20090 PARAMETERS
20091 pEventData: Response from FW
20092 pUserData:
20093===========================================================================*/
20094void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20095{
20096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20097 tWDA_CbContext *pWDA = NULL;
20098 void *pCallbackContext;
20099 tpAniSirGlobal pMac;
20100
20101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20102 "%s: ", __func__);
20103 if (NULL == pWdaParams)
20104 {
20105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20106 "%s: pWdaParams received NULL", __func__);
20107 VOS_ASSERT(0);
20108 return;
20109 }
20110
20111 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20112
20113 if (NULL == pWDA)
20114 {
20115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20116 "%s: pWDA received NULL", __func__);
20117 VOS_ASSERT(0);
20118 goto error;
20119 }
20120
20121 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20122 if (NULL == pMac)
20123 {
20124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20125 "%s:pMac is NULL", __func__);
20126 VOS_ASSERT(0);
20127 goto error;
20128 }
20129
20130 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20131
20132 if (pMac->sme.pEXTScanIndCb)
20133 {
20134 pMac->sme.pEXTScanIndCb(pCallbackContext,
20135 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20136 pEventData);
20137 }
20138 else
20139 {
20140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20141 "%s:HDD callback is null", __func__);
20142 VOS_ASSERT(0);
20143 }
20144
20145
20146error:
20147
20148 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20149 {
20150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20151 }
20152 if (pWdaParams->wdaMsgParam != NULL)
20153 {
20154 vos_mem_free(pWdaParams->wdaMsgParam);
20155 }
20156 vos_mem_free(pWdaParams) ;
20157
20158 return;
20159}
20160
20161/*==========================================================================
20162 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20163
20164 DESCRIPTION
20165 API to send EXTScan Get Capabilities Response to HDD
20166
20167 PARAMETERS
20168 pEventData: Response from FW
20169 pUserData:
20170===========================================================================*/
20171void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20172{
20173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20174 tWDA_CbContext *pWDA = NULL;
20175 void *pCallbackContext;
20176 tpAniSirGlobal pMac;
20177
20178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20179 "%s:", __func__);
20180 if (NULL == pWdaParams)
20181 {
20182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20183 "%s: pWdaParams received NULL", __func__);
20184 VOS_ASSERT(0);
20185 return;
20186 }
20187
20188 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20189
20190 if (NULL == pWDA)
20191 {
20192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20193 "%s: pWDA received NULL", __func__);
20194 VOS_ASSERT(0);
20195 goto error;
20196 }
20197
20198 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20199 if (NULL == pMac)
20200 {
20201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20202 "%s:pMac is NULL", __func__);
20203 VOS_ASSERT(0);
20204 goto error;
20205 }
20206
20207 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20208
20209 if (pMac->sme.pEXTScanIndCb)
20210 {
20211 pMac->sme.pEXTScanIndCb(pCallbackContext,
20212 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20213 pEventData);
20214 }
20215 else
20216 {
20217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20218 "%s:HDD callback is null", __func__);
20219 VOS_ASSERT(0);
20220 }
20221
20222
20223error:
20224
20225 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20226 {
20227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20228 }
20229 if (pWdaParams->wdaMsgParam != NULL)
20230 {
20231 vos_mem_free(pWdaParams->wdaMsgParam);
20232 }
20233 vos_mem_free(pWdaParams) ;
20234
20235 return;
20236}
20237
20238/*==========================================================================
20239 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20240
20241 DESCRIPTION
20242 API to send EXTScan Set BSSID Hotlist Response to HDD
20243
20244 PARAMETERS
20245 pEventData: Response from FW
20246 pUserData:
20247===========================================================================*/
20248void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20249{
20250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20251 tWDA_CbContext *pWDA = NULL;
20252 void *pCallbackContext;
20253 tpAniSirGlobal pMac;
20254
20255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20256 "%s: ", __func__);
20257 if (NULL == pWdaParams)
20258 {
20259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20260 "%s: pWdaParams received NULL", __func__);
20261 VOS_ASSERT(0) ;
20262 return;
20263 }
20264
20265 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20266
20267 if (NULL == pWDA)
20268 {
20269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20270 "%s: pWDA received NULL", __func__);
20271 VOS_ASSERT(0);
20272 goto error;
20273 }
20274
20275 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20276 if (NULL == pMac)
20277 {
20278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20279 "%s:pMac is NULL", __func__);
20280 VOS_ASSERT(0);
20281 goto error;
20282 }
20283
20284 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20285
20286 if (pMac->sme.pEXTScanIndCb)
20287 {
20288 pMac->sme.pEXTScanIndCb(pCallbackContext,
20289 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20290 pEventData);
20291 }
20292 else
20293 {
20294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20295 "%s:HDD callback is null", __func__);
20296 VOS_ASSERT(0);
20297 }
20298
20299
20300error:
20301
20302 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20303 {
20304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20305 }
20306 if (pWdaParams->wdaMsgParam != NULL)
20307 {
20308 vos_mem_free(pWdaParams->wdaMsgParam);
20309 }
20310 vos_mem_free(pWdaParams) ;
20311
20312 return;
20313}
20314
20315/*==========================================================================
20316 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20317
20318 DESCRIPTION
20319 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20320
20321 PARAMETERS
20322 pEventData: Response from FW
20323 pUserData:
20324===========================================================================*/
20325void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20326{
20327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20328 tWDA_CbContext *pWDA = NULL;
20329 void *pCallbackContext;
20330 tpAniSirGlobal pMac;
20331
20332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20333 "%s:", __func__);
20334 if (NULL == pWdaParams)
20335 {
20336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20337 "%s: pWdaParams received NULL", __func__);
20338 VOS_ASSERT(0) ;
20339 return;
20340 }
20341
20342 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20343
20344 if (NULL == pWDA)
20345 {
20346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20347 "%s: pWDA received NULL", __func__);
20348 VOS_ASSERT(0);
20349 goto error;
20350 }
20351
20352 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20353 if (NULL == pMac)
20354 {
20355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20356 "%s:pMac is NULL", __func__);
20357 VOS_ASSERT(0);
20358 goto error;
20359 }
20360
20361 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20362
20363 if (pMac->sme.pEXTScanIndCb)
20364 {
20365 pMac->sme.pEXTScanIndCb(pCallbackContext,
20366 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20367 pEventData);
20368 }
20369 else
20370 {
20371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20372 "%s:HDD callback is null", __func__);
20373 VOS_ASSERT(0);
20374 }
20375
20376
20377error:
20378
20379 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20380 {
20381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20382 }
20383 if (pWdaParams->wdaMsgParam != NULL)
20384 {
20385 vos_mem_free(pWdaParams->wdaMsgParam);
20386 }
20387 vos_mem_free(pWdaParams) ;
20388
20389 return;
20390}
20391
20392/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020393 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20394
20395 DESCRIPTION
20396 API to send EXTScan Set SSID Hotlist Response to HDD
20397
20398 PARAMETERS
20399 pEventData: Response from FW
20400 pUserData:
20401===========================================================================*/
20402void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20403{
20404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20405 tWDA_CbContext *pWDA = NULL;
20406 void *pCallbackContext;
20407 tpAniSirGlobal pMac;
20408
20409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20410 "%s: ", __func__);
20411 if (NULL == pWdaParams)
20412 {
20413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20414 "%s: pWdaParams received NULL", __func__);
20415 VOS_ASSERT(0) ;
20416 return;
20417 }
20418
20419 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20420
20421 if (NULL == pWDA)
20422 {
20423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20424 "%s: pWDA received NULL", __func__);
20425 VOS_ASSERT(0);
20426 goto error;
20427 }
20428
20429 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20430 if (NULL == pMac)
20431 {
20432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20433 "%s:pMac is NULL", __func__);
20434 VOS_ASSERT(0);
20435 goto error;
20436 }
20437
20438 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20439
20440 if (pMac->sme.pEXTScanIndCb)
20441 {
20442 pMac->sme.pEXTScanIndCb(pCallbackContext,
20443 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20444 pEventData);
20445 }
20446 else
20447 {
20448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20449 "%s:HDD callback is null", __func__);
20450 VOS_ASSERT(0);
20451 }
20452
20453
20454error:
20455
20456 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20457 {
20458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20459 }
20460 if (pWdaParams->wdaMsgParam != NULL)
20461 {
20462 vos_mem_free(pWdaParams->wdaMsgParam);
20463 }
20464 vos_mem_free(pWdaParams) ;
20465
20466 return;
20467}
20468
20469/*==========================================================================
20470 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20471
20472 DESCRIPTION
20473 API to send EXTScan ReSet SSID Hotlist Response to HDD
20474
20475 PARAMETERS
20476 pEventData: Response from FW
20477 pUserData:
20478===========================================================================*/
20479void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20480{
20481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20482 tWDA_CbContext *pWDA = NULL;
20483 void *pCallbackContext;
20484 tpAniSirGlobal pMac;
20485
20486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20487 "%s:", __func__);
20488 if (NULL == pWdaParams)
20489 {
20490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20491 "%s: pWdaParams received NULL", __func__);
20492 VOS_ASSERT(0) ;
20493 return;
20494 }
20495
20496 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20497
20498 if (NULL == pWDA)
20499 {
20500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20501 "%s: pWDA received NULL", __func__);
20502 VOS_ASSERT(0);
20503 goto error;
20504 }
20505
20506 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20507 if (NULL == pMac)
20508 {
20509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20510 "%s:pMac is NULL", __func__);
20511 VOS_ASSERT(0);
20512 goto error;
20513 }
20514
20515 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20516
20517 if (pMac->sme.pEXTScanIndCb)
20518 {
20519 pMac->sme.pEXTScanIndCb(pCallbackContext,
20520 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20521 pEventData);
20522 }
20523 else
20524 {
20525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20526 "%s:HDD callback is null", __func__);
20527 VOS_ASSERT(0);
20528 }
20529
20530
20531error:
20532
20533 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20534 {
20535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20536 }
20537 if (pWdaParams->wdaMsgParam != NULL)
20538 {
20539 vos_mem_free(pWdaParams->wdaMsgParam);
20540 }
20541 vos_mem_free(pWdaParams) ;
20542
20543 return;
20544}
20545
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020546/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020547 FUNCTION WDA_ProcessEXTScanStartReq
20548
20549 DESCRIPTION
20550 API to send EXTScan Start Request to WDI
20551
20552 PARAMETERS
20553 pWDA: Pointer to WDA context
20554 wdaRequest: Pointer to EXTScan req parameters
20555===========================================================================*/
20556VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20557 tSirEXTScanStartReqParams *wdaRequest)
20558{
20559 WDI_Status status = WDI_STATUS_SUCCESS;
20560 tWDA_ReqParams *pWdaParams;
20561
20562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20563 "%s: ", __func__);
20564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20565 if (NULL == pWdaParams)
20566 {
20567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20568 "%s: VOS MEM Alloc Failure", __func__);
20569 VOS_ASSERT(0);
20570 return VOS_STATUS_E_NOMEM;
20571 }
20572 pWdaParams->pWdaContext = pWDA;
20573 pWdaParams->wdaMsgParam = wdaRequest;
20574 pWdaParams->wdaWdiApiMsgParam = NULL;
20575
20576 status = WDI_EXTScanStartReq((void *)wdaRequest,
20577 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20578 (void *)pWdaParams);
20579 if (IS_WDI_STATUS_FAILURE(status))
20580 {
20581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20582 "Failure to request. Free all the memory " );
20583 vos_mem_free(pWdaParams->wdaMsgParam);
20584 vos_mem_free(pWdaParams);
20585 }
20586 return CONVERT_WDI2VOS_STATUS(status);
20587}
20588
20589/*==========================================================================
20590 FUNCTION WDA_ProcessEXTScanStopReq
20591
20592 DESCRIPTION
20593 API to send EXTScan Start Request to WDI
20594
20595 PARAMETERS
20596 pWDA: Pointer to WDA context
20597 wdaRequest: Pointer to EXTScan req parameters
20598===========================================================================*/
20599VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20600 tSirEXTScanStopReqParams *wdaRequest)
20601{
20602 WDI_Status status = WDI_STATUS_SUCCESS;
20603 tWDA_ReqParams *pWdaParams;
20604
20605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20606 "%s:", __func__);
20607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20608 if (NULL == pWdaParams)
20609 {
20610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20611 "%s: VOS MEM Alloc Failure", __func__);
20612 VOS_ASSERT(0);
20613 return VOS_STATUS_E_NOMEM;
20614 }
20615 pWdaParams->pWdaContext = pWDA;
20616 pWdaParams->wdaMsgParam = wdaRequest;
20617 pWdaParams->wdaWdiApiMsgParam = NULL;
20618
20619 status = WDI_EXTScanStopReq((void *)wdaRequest,
20620 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20621 (void *)pWdaParams);
20622 if (IS_WDI_STATUS_FAILURE(status))
20623 {
20624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20625 "Failure to request. Free all the memory " );
20626 vos_mem_free(pWdaParams->wdaMsgParam);
20627 vos_mem_free(pWdaParams);
20628 }
20629 return CONVERT_WDI2VOS_STATUS(status);
20630}
20631
20632/*==========================================================================
20633 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20634
20635 DESCRIPTION
20636 API to send EXTScan Get Cached Results Request to WDI
20637
20638 PARAMETERS
20639 pWDA: Pointer to WDA context
20640 wdaRequest: Pointer to EXTScan req parameters
20641===========================================================================*/
20642VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20643 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20644{
20645 WDI_Status status = WDI_STATUS_SUCCESS;
20646 tWDA_ReqParams *pWdaParams;
20647
20648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20649 "%s: ", __func__);
20650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20651 if (NULL == pWdaParams)
20652 {
20653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20654 "%s: VOS MEM Alloc Failure", __func__);
20655 VOS_ASSERT(0);
20656 return VOS_STATUS_E_NOMEM;
20657 }
20658 pWdaParams->pWdaContext = pWDA;
20659 pWdaParams->wdaMsgParam = wdaRequest;
20660 pWdaParams->wdaWdiApiMsgParam = NULL;
20661
20662 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20663 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20664 (void *)pWdaParams);
20665 if (IS_WDI_STATUS_FAILURE(status))
20666 {
20667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20668 "Failure to request. Free all the memory " );
20669 vos_mem_free(pWdaParams->wdaMsgParam);
20670 vos_mem_free(pWdaParams);
20671 }
20672 return CONVERT_WDI2VOS_STATUS(status);
20673}
20674
20675/*==========================================================================
20676 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20677
20678 DESCRIPTION
20679 API to send EXTScan Get Capabilities Request to WDI
20680
20681 PARAMETERS
20682 pWDA: Pointer to WDA context
20683 wdaRequest: Pointer to EXTScan req parameters
20684===========================================================================*/
20685VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20686 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20687{
20688 WDI_Status status = WDI_STATUS_SUCCESS;
20689 tWDA_ReqParams *pWdaParams;
20690
20691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20692 "%s:", __func__);
20693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20694 if (NULL == pWdaParams)
20695 {
20696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20697 "%s: VOS MEM Alloc Failure", __func__);
20698 VOS_ASSERT(0);
20699 return VOS_STATUS_E_NOMEM;
20700 }
20701 pWdaParams->pWdaContext = pWDA;
20702 pWdaParams->wdaMsgParam = wdaRequest;
20703 pWdaParams->wdaWdiApiMsgParam = NULL;
20704
20705 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20706 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20707 (void *)pWdaParams);
20708 if (IS_WDI_STATUS_FAILURE(status))
20709 {
20710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20711 "Failure to request. Free all the memory " );
20712 vos_mem_free(pWdaParams->wdaMsgParam);
20713 vos_mem_free(pWdaParams);
20714 }
20715 return CONVERT_WDI2VOS_STATUS(status);
20716}
20717
20718/*==========================================================================
20719 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20720
20721 DESCRIPTION
20722 API to send Set BSSID Hotlist Request to WDI
20723
20724 PARAMETERS
20725 pWDA: Pointer to WDA context
20726 wdaRequest: Pointer to EXTScan req parameters
20727===========================================================================*/
20728VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20729 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20730{
20731 WDI_Status status = WDI_STATUS_SUCCESS;
20732 tWDA_ReqParams *pWdaParams;
20733
20734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20735 "%s: ", __func__);
20736 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20737 if (NULL == pWdaParams)
20738 {
20739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20740 "%s: VOS MEM Alloc Failure", __func__);
20741 VOS_ASSERT(0);
20742 return VOS_STATUS_E_NOMEM;
20743 }
20744 pWdaParams->pWdaContext = pWDA;
20745 pWdaParams->wdaMsgParam = wdaRequest;
20746 pWdaParams->wdaWdiApiMsgParam = NULL;
20747
20748 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20749 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20750 (void *)pWdaParams);
20751 if (IS_WDI_STATUS_FAILURE(status))
20752 {
20753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20754 "Failure to request. Free all the memory " );
20755 vos_mem_free(pWdaParams->wdaMsgParam);
20756 vos_mem_free(pWdaParams);
20757 }
20758 return CONVERT_WDI2VOS_STATUS(status);
20759}
20760
20761/*==========================================================================
20762 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20763
20764 DESCRIPTION
20765 API to send Reset BSSID Hotlist Request to WDI
20766
20767 PARAMETERS
20768 pWDA: Pointer to WDA context
20769 wdaRequest: Pointer to EXTScan req parameters
20770===========================================================================*/
20771VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20772 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20773{
20774 WDI_Status status = WDI_STATUS_SUCCESS;
20775 tWDA_ReqParams *pWdaParams;
20776
20777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20778 "%s:", __func__);
20779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20780 if (NULL == pWdaParams)
20781 {
20782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20783 "%s: VOS MEM Alloc Failure", __func__);
20784 VOS_ASSERT(0);
20785 return VOS_STATUS_E_NOMEM;
20786 }
20787 pWdaParams->pWdaContext = pWDA;
20788 pWdaParams->wdaMsgParam = wdaRequest;
20789 pWdaParams->wdaWdiApiMsgParam = NULL;
20790
20791 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20792 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20793 (void *)pWdaParams);
20794 if (IS_WDI_STATUS_FAILURE(status))
20795 {
20796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20797 "Failure to request. Free all the memory " );
20798 vos_mem_free(pWdaParams->wdaMsgParam);
20799 vos_mem_free(pWdaParams);
20800 }
20801 return CONVERT_WDI2VOS_STATUS(status);
20802}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020803
20804/*==========================================================================
20805 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20806
20807 DESCRIPTION
20808 API to send Set SSID Hotlist Request to WDI
20809
20810 PARAMETERS
20811 pWDA: Pointer to WDA context
20812 wdaRequest: Pointer to EXTScan req parameters
20813===========================================================================*/
20814VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20815 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20816{
20817 WDI_Status status = WDI_STATUS_SUCCESS;
20818 tWDA_ReqParams *pWdaParams;
20819
20820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20821 "%s: ", __func__);
20822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20823 if (NULL == pWdaParams)
20824 {
20825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20826 "%s: VOS MEM Alloc Failure", __func__);
20827 VOS_ASSERT(0);
20828 return VOS_STATUS_E_NOMEM;
20829 }
20830 pWdaParams->pWdaContext = pWDA;
20831 pWdaParams->wdaMsgParam = wdaRequest;
20832 pWdaParams->wdaWdiApiMsgParam = NULL;
20833
20834 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20835 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20836 (void *)pWdaParams);
20837 if (IS_WDI_STATUS_FAILURE(status))
20838 {
20839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20840 "Failure to request. Free all the memory " );
20841 vos_mem_free(pWdaParams->wdaMsgParam);
20842 vos_mem_free(pWdaParams);
20843 }
20844 return CONVERT_WDI2VOS_STATUS(status);
20845}
20846
20847/*==========================================================================
20848 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20849
20850 DESCRIPTION
20851 API to send Reset SSID Hotlist Request to WDI
20852
20853 PARAMETERS
20854 pWDA: Pointer to WDA context
20855 wdaRequest: Pointer to EXTScan req parameters
20856===========================================================================*/
20857VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20858 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20859{
20860 WDI_Status status = WDI_STATUS_SUCCESS;
20861 tWDA_ReqParams *pWdaParams;
20862
20863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20864 "%s:", __func__);
20865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20866 if (NULL == pWdaParams)
20867 {
20868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20869 "%s: VOS MEM Alloc Failure", __func__);
20870 VOS_ASSERT(0);
20871 return VOS_STATUS_E_NOMEM;
20872 }
20873 pWdaParams->pWdaContext = pWDA;
20874 pWdaParams->wdaMsgParam = wdaRequest;
20875 pWdaParams->wdaWdiApiMsgParam = NULL;
20876
20877 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20878 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20879 (void *)pWdaParams);
20880 if (IS_WDI_STATUS_FAILURE(status))
20881 {
20882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20883 "Failure to request. Free all the memory " );
20884 vos_mem_free(pWdaParams->wdaMsgParam);
20885 vos_mem_free(pWdaParams);
20886 }
20887 return CONVERT_WDI2VOS_STATUS(status);
20888}
20889
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020890/*==========================================================================
20891 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20892
20893 DESCRIPTION
20894 API to send Reset SSID Hotlist Request to WDI
20895
20896 PARAMETERS
20897 pWDA: Pointer to WDA context
20898 wdaRequest: Pointer to EXTScan req parameters
20899===========================================================================*/
20900VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20901 tSirHighPriorityDataInfoInd *wdaRequest)
20902{
20903 WDI_Status status = WDI_STATUS_SUCCESS;
20904
20905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20906 "%s:", __func__);
20907
20908 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20909 if (WDI_STATUS_PENDING == status)
20910 {
20911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20912 FL("pending status received "));
20913 }
20914 else if (WDI_STATUS_SUCCESS_SYNC != status)
20915 {
20916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20917 FL("Failure status %d"), status);
20918 }
20919 return CONVERT_WDI2VOS_STATUS(status);
20920}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020921
Dino Mycle41bdc942014-06-10 11:30:24 +053020922#endif /* WLAN_FEATURE_EXTSCAN */
20923
Sunil Duttbd736ed2014-05-26 21:19:41 +053020924#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20925
20926/*==========================================================================
20927 FUNCTION WDA_LLStatsSetRspCallback
20928
20929 DESCRIPTION
20930 API to process set link layer statistics response from FW
20931
20932 PARAMETERS
20933 pRsp: Pointer to set link layer statistics response
20934 pUserData: Pointer to user data
20935
20936 RETURN VALUE
20937 NONE
20938
20939===========================================================================*/
20940void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20941{
20942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20943
20944
20945 if (NULL == pWdaParams)
20946 {
20947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20948 "%s: pWdaParams received NULL", __func__);
20949 VOS_ASSERT(0) ;
20950 return ;
20951 }
20952
20953 /* Do not need to send notification to upper layer
20954 * Just free allocated resources */
20955 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20956 {
20957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20958 }
20959 if (pWdaParams->wdaMsgParam != NULL)
20960 {
20961 vos_mem_free(pWdaParams->wdaMsgParam);
20962 }
20963 vos_mem_free(pWdaParams) ;
20964
20965 return;
20966}
20967
20968/*==========================================================================
20969 FUNCTION WDA_ProcessLLStatsSetReq
20970
20971 DESCRIPTION
20972 API to send Set Link Layer Stats request to WDI
20973
20974 PARAMETERS
20975 pWDA: Pointer to WDA context
20976 wdaRequest: Pointer to set Link Layer Stats req parameters
20977===========================================================================*/
20978VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20979 tSirLLStatsSetReq *wdaRequest)
20980{
20981 WDI_Status status = WDI_STATUS_SUCCESS;
20982 tWDA_ReqParams *pWdaParams;
20983
20984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20985 if (NULL == pWdaParams)
20986 {
20987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20988 "%s: VOS MEM Alloc Failure", __func__);
20989 VOS_ASSERT(0);
20990 return VOS_STATUS_E_NOMEM;
20991 }
20992 pWdaParams->pWdaContext = pWDA;
20993 pWdaParams->wdaMsgParam = wdaRequest;
20994 pWdaParams->wdaWdiApiMsgParam = NULL;
20995
20996 status = WDI_LLStatsSetReq((void *)wdaRequest,
20997 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20998 (void *)pWdaParams);
20999 if (IS_WDI_STATUS_FAILURE(status))
21000 {
21001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21002 "Failure to request. Free all the memory " );
21003 vos_mem_free(pWdaParams->wdaMsgParam);
21004 vos_mem_free(pWdaParams);
21005 }
21006 return CONVERT_WDI2VOS_STATUS(status);
21007}
21008
21009/*==========================================================================
21010 FUNCTION WDA_LLStatsGetRspCallback
21011
21012 DESCRIPTION
21013 API to process get link layer statistics response from FW
21014
21015 PARAMETERS
21016 pRsp: Pointer to get link layer statistics response
21017 pUserData: Pointer to user data
21018
21019 RETURN VALUE
21020 NONE
21021
21022===========================================================================*/
21023void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21024{
21025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21026
21027 if (NULL == pWdaParams)
21028 {
21029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21030 "%s: pWdaParams received NULL", __func__);
21031 VOS_ASSERT(0) ;
21032 return ;
21033 }
21034
21035 /* Do not need to send notification to upper layer
21036 * Just free allocated resources */
21037 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21038 {
21039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21040 }
21041 if (pWdaParams->wdaMsgParam != NULL)
21042 {
21043 vos_mem_free(pWdaParams->wdaMsgParam);
21044 }
21045 vos_mem_free(pWdaParams) ;
21046
21047 return;
21048}
21049
21050/*==========================================================================
21051 FUNCTION WDA_ProcessLLStatsGetReq
21052
21053 DESCRIPTION
21054 API to send Get Link Layer Stats request to WDI
21055
21056 PARAMETERS
21057 pWDA: Pointer to WDA context
21058 wdaRequest: Pointer to get Link Layer Stats req parameters
21059===========================================================================*/
21060VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21061 tSirLLStatsGetReq *wdaRequest)
21062{
21063 WDI_Status status = WDI_STATUS_SUCCESS;
21064 tWDA_ReqParams *pWdaParams;
21065
21066 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21067 if (NULL == pWdaParams)
21068 {
21069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21070 "%s: VOS MEM Alloc Failure", __func__);
21071 VOS_ASSERT(0);
21072 return VOS_STATUS_E_NOMEM;
21073 }
21074 pWdaParams->pWdaContext = pWDA;
21075 pWdaParams->wdaMsgParam = wdaRequest;
21076 pWdaParams->wdaWdiApiMsgParam = NULL;
21077
21078 status = WDI_LLStatsGetReq((void *) wdaRequest,
21079 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21080 (void *)pWdaParams);
21081 if (IS_WDI_STATUS_FAILURE(status))
21082 {
21083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21084 "Failure to request. Free all the memory " );
21085 vos_mem_free(pWdaParams->wdaMsgParam);
21086 vos_mem_free(pWdaParams);
21087 }
21088 return CONVERT_WDI2VOS_STATUS(status);
21089}
21090
21091/*==========================================================================
21092 FUNCTION WDA_LLStatsClearRspCallback
21093
21094 DESCRIPTION
21095 API to process clear link layer statistics response from FW
21096
21097 PARAMETERS
21098 pRsp: Pointer to clear link layer statistics response
21099 pUserData: Pointer to user data
21100
21101 RETURN VALUE
21102 NONE
21103
21104===========================================================================*/
21105void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21106{
21107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21108
21109
21110 if (NULL == pWdaParams)
21111 {
21112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21113 "%s: pWdaParams received NULL", __func__);
21114 VOS_ASSERT(0) ;
21115 return ;
21116 }
21117 /* Do not need to send notification to upper layer
21118 * Just free allocated resources */
21119 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21120 {
21121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21122 }
21123 if (pWdaParams->wdaMsgParam != NULL)
21124 {
21125 vos_mem_free(pWdaParams->wdaMsgParam);
21126 }
21127 vos_mem_free(pWdaParams) ;
21128 return;
21129}
21130
21131/*==========================================================================
21132 FUNCTION WDA_ProcessLLStatsClearReq
21133
21134 DESCRIPTION
21135 API to send Clear Link Layer Stats request to WDI
21136
21137 PARAMETERS
21138 pWDA: Pointer to WDA context
21139 wdaRequest: Pointer to earLink Layer Stats req
21140===========================================================================*/
21141VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21142 tSirLLStatsClearReq *wdaRequest)
21143{
21144 WDI_Status status = WDI_STATUS_SUCCESS;
21145 tWDA_ReqParams *pWdaParams;
21146
21147 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21148 if (NULL == pWdaParams)
21149 {
21150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21151 "%s: VOS MEM Alloc Failure", __func__);
21152 VOS_ASSERT(0);
21153 return VOS_STATUS_E_NOMEM;
21154 }
21155 pWdaParams->pWdaContext = pWDA;
21156 pWdaParams->wdaMsgParam = wdaRequest;
21157 pWdaParams->wdaWdiApiMsgParam = NULL;
21158
21159 status = WDI_LLStatsClearReq((void *) wdaRequest,
21160 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21161 (void *)pWdaParams);
21162 if (IS_WDI_STATUS_FAILURE(status))
21163 {
21164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21165 "Failure to request. Free all the memory " );
21166 vos_mem_free(pWdaParams->wdaMsgParam);
21167 vos_mem_free(pWdaParams);
21168 }
21169 return CONVERT_WDI2VOS_STATUS(status);
21170}
21171
21172#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021173
Abhishek Singh85b74712014-10-08 11:38:19 +053021174void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21175{
21176 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21177
21178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21179 "<------ %s " ,__func__);
21180 if (NULL == fwStatsinfo)
21181 {
21182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21183 "%s: pWdaParams received NULL", __func__);
21184 VOS_ASSERT(0);
21185 return;
21186 }
21187
21188 if(fwStatsinfo->callback)
21189 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21190
21191 vos_mem_free(pUserData);
21192 return;
21193}
21194
21195
21196v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21197 tSirFWStatsGetReq *pData)
21198{
21199
21200 WDI_Status wdiStatus;
21201 tSirFWStatsInfo *fwStatsinfo;
21202
21203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21204 "------> %s" , __func__);
21205
21206 fwStatsinfo =
21207 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21208 if (NULL == fwStatsinfo)
21209 {
21210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21211 "%s: VOS MEM Alloc Failure", __func__);
21212 VOS_ASSERT(0);
21213 vos_mem_free(pData);
21214 return;
21215 }
21216
21217 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21218 fwStatsinfo->data = pData->data;
21219
21220 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21221 WDA_FWStatsGetRspCallback,
21222 pData->stats);
21223 if (WDI_STATUS_PENDING == wdiStatus)
21224 {
21225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21226 "Pending received for %s:%d ", __func__, __LINE__);
21227 }
21228 else if (WDI_STATUS_SUCCESS != wdiStatus)
21229 {
21230 if (fwStatsinfo->callback)
21231 {
21232 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21233 }
21234 vos_mem_free(fwStatsinfo);
21235 }
21236 vos_mem_free(pData);
21237}
21238
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021239/*==========================================================================
21240 FUNCTION WDA_EncryptMsgRspCallback
21241
21242 DESCRIPTION
21243 API to send Encrypt message response to HDD
21244
21245 PARAMETERS
21246 pEventData: Response from FW
21247 pUserData: Data sent to firmware as part of request
21248===========================================================================*/
21249void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21250 void* pUserData)
21251{
21252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21253 tWDA_CbContext *pWDA = NULL;
21254 tpAniSirGlobal pMac;
21255 vos_msg_t vosMsg;
21256 tpSirEncryptedDataRspParams pEncRspParams;
21257 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21258
21259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21260 FL("%s:"), __func__);
21261 if (NULL == pWdaParams)
21262 {
21263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21264 FL("%s: pWdaParams received NULL"), __func__);
21265 VOS_ASSERT(0);
21266 return;
21267 }
21268
21269 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21270
21271 if (NULL == pWDA)
21272 {
21273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21274 FL("%s: pWDA received NULL"), __func__);
21275 VOS_ASSERT(0);
21276 goto error;
21277 }
21278
21279 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21280 if (NULL == pMac)
21281 {
21282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21283 FL("%s:pMac is NULL"), __func__);
21284 VOS_ASSERT(0);
21285 goto error;
21286 }
21287
21288 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21289
21290 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21291 if (NULL == pEncRspParams)
21292 {
21293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21294 FL("%s: VOS MEM Alloc Failure"), __func__);
21295 VOS_ASSERT(0);
21296 goto error;
21297 }
21298
21299 /* Message Header */
21300 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21301 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21302 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21303 pEncryptedDataRsp->encryptedPayload.length;
21304 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21305 pEncryptedDataRsp->encryptedPayload.data,
21306 pEncryptedDataRsp->encryptedPayload.length);
21307
21308 /* VOS message wrapper */
21309 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21310 vosMsg.bodyptr = (void *)pEncRspParams;
21311 vosMsg.bodyval = 0;
21312
21313 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21314 {
21315 /* free the mem */
21316 vos_mem_free((v_VOID_t *) pEncRspParams);
21317 }
21318
21319error:
21320
21321 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21322 {
21323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21324 }
21325 if (pWdaParams->wdaMsgParam != NULL)
21326 {
21327 vos_mem_free(pWdaParams->wdaMsgParam);
21328 }
21329 vos_mem_free(pWdaParams) ;
21330
21331 return;
21332}
21333/*==========================================================================
21334 FUNCTION WDA_ProcessEncryptMsgReq
21335
21336 DESCRIPTION
21337 API to send Encrypt message Request to WDI
21338
21339 PARAMETERS
21340 pWDA: Pointer to WDA context
21341 wdaRequest: Pointer to Encrypt_msg req parameters
21342===========================================================================*/
21343VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21344 u8 *wdaRequest)
21345{
21346 WDI_Status status = WDI_STATUS_SUCCESS;
21347 tWDA_ReqParams *pWdaParams;
21348
21349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21350 FL("%s: "), __func__);
21351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21352 if (NULL == pWdaParams)
21353 {
21354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21355 FL("%s: VOS MEM Alloc Failure"), __func__);
21356 VOS_ASSERT(0);
21357 return VOS_STATUS_E_NOMEM;
21358 }
21359 pWdaParams->pWdaContext = pWDA;
21360 pWdaParams->wdaMsgParam = wdaRequest;
21361 pWdaParams->wdaWdiApiMsgParam = NULL;
21362
21363 status = WDI_EncryptMsgReq((void *)wdaRequest,
21364 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21365 (void *)pWdaParams);
21366 if (IS_WDI_STATUS_FAILURE(status))
21367 {
21368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21369 FL("Failure to request. Free all the memory " ));
21370 vos_mem_free(pWdaParams->wdaMsgParam);
21371 vos_mem_free(pWdaParams);
21372 }
21373 return CONVERT_WDI2VOS_STATUS(status);
21374}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021375/*==========================================================================
21376 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21377
21378 DESCRIPTION
21379 API to enable/disable RTS/CTS for different modes.
21380
21381 PARAMETERS
21382 pWDA: Pointer to WDA context
21383 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21384===========================================================================*/
21385
21386VOS_STATUS
21387WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21388 tANI_U32 rtsCtsVal)
21389{
21390 WDI_Status status;
21391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21392 FL("---> %s"), __func__);
21393 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21394 if (WDI_STATUS_PENDING == status)
21395 {
21396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21397 FL("pending status received "));
21398 }
21399 else if (WDI_STATUS_SUCCESS_SYNC != status)
21400 {
21401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21402 FL("Failure status %d"), status);
21403 }
21404 return CONVERT_WDI2VOS_STATUS(status) ;
21405}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021406
21407void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021408{
21409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021410 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021411
21412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21413 "<------ %s " ,__func__);
21414 if (NULL == pWdaParams)
21415 {
21416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21417 "%s: pWdaParams received NULL", __func__);
21418 VOS_ASSERT(0) ;
21419 return ;
21420 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021421 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21422 if (pData != NULL) {
21423 pData->callback(pData->magic, pData->cmpVar);
21424 vos_mem_free(pWdaParams->wdaMsgParam);
21425 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021426 vos_mem_free(pWdaParams) ;
21427
21428 return;
21429}
21430
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021431VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021432{
21433
21434 WDI_Status status = WDI_STATUS_SUCCESS;
21435 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021436 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021437
21438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21439 FL("%s: "), __func__);
21440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21441 if (NULL == pWdaParams)
21442 {
21443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21444 FL("%s: VOS MEM Alloc Failure"), __func__);
21445 VOS_ASSERT(0);
21446 return VOS_STATUS_E_NOMEM;
21447 }
21448 pWdaParams->pWdaContext = pWDA;
21449 pWdaParams->wdaMsgParam = wdaRequest;
21450 pWdaParams->wdaWdiApiMsgParam = NULL;
21451
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021452 status = WDI_MonStartReq(pMonModeData->data,
21453 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021454 (void *)pWdaParams);
21455 if (IS_WDI_STATUS_FAILURE(status))
21456 {
21457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21458 "Failure to request. Free all the memory " );
21459 vos_mem_free(pWdaParams->wdaMsgParam);
21460 vos_mem_free(pWdaParams);
21461 }
21462 return CONVERT_WDI2VOS_STATUS(status);
21463}
21464
Katya Nigamf0511f62015-05-05 16:40:57 +053021465VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21466{
21467
21468 WDI_Status status = WDI_STATUS_SUCCESS;
21469 tWDA_ReqParams *pWdaParams;
21470
21471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21472 FL("%s: "), __func__);
21473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21474 if (NULL == pWdaParams)
21475 {
21476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21477 FL("%s: VOS MEM Alloc Failure"), __func__);
21478 VOS_ASSERT(0);
21479 return VOS_STATUS_E_NOMEM;
21480 }
21481 pWdaParams->pWdaContext = pWDA;
21482 pWdaParams->wdaMsgParam = wdaRequest;
21483 pWdaParams->wdaWdiApiMsgParam = NULL;
21484
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21486 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021487 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021488 (void *)pWdaParams);
21489
21490 if (IS_WDI_STATUS_FAILURE(status))
21491 {
21492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21493 "Failure to request. Free all the memory " );
21494 vos_mem_free(pWdaParams->wdaMsgParam);
21495 vos_mem_free(pWdaParams);
21496 }
21497 return CONVERT_WDI2VOS_STATUS(status);
21498}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021499
21500VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21501{
21502 WDI_Status status;
21503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21504 FL("---> %s"), __func__);
21505 status = WDI_EnableDisableCAEventInd(val);
21506 if (WDI_STATUS_PENDING == status)
21507 {
21508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21509 FL("pending status received "));
21510 }
21511 else if (WDI_STATUS_SUCCESS_SYNC != status)
21512 {
21513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21514 FL("Failure status %d"), status);
21515 }
21516 return CONVERT_WDI2VOS_STATUS(status) ;
21517}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021518
21519/*==========================================================================
21520 FUNCTION WDA_WifiConfigSetRspCallback
21521
21522 DESCRIPTION
21523 API to process set WifiConfig response from FW
21524
21525 PARAMETERS
21526 pRsp: Pointer to set WifiConfig response
21527 pUserData: Pointer to user data
21528
21529 RETURN VALUE
21530 NONE
21531
21532===========================================================================*/
21533void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21534{
21535 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21536
21537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21538 "<------ %s " ,__func__);
21539
21540 if(NULL == pWdaParams)
21541 {
21542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21543 "%s: pWdaParams received NULL", __func__);
21544 VOS_ASSERT(0);
21545 return ;
21546 }
21547
21548 if(NULL == pWdaParams->wdaMsgParam)
21549 {
21550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21551 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21552 VOS_ASSERT(0);
21553 vos_mem_free(pWdaParams);
21554 return ;
21555 }
21556
21557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21558 vos_mem_free(pWdaParams->wdaMsgParam);
21559 vos_mem_free(pWdaParams);
21560
21561 return;
21562}
21563
21564/*==========================================================================
21565 FUNCTION WDA_ProcessWifiConfigReq
21566
21567 DESCRIPTION
21568 API to send Set WifiConfig params request to WDI
21569
21570 PARAMETERS
21571 pWDA: Pointer to WDA context
21572 wdaRequest: Pointer to set WifiConfig req parameters
21573===========================================================================*/
21574
21575VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21576 tSetWifiConfigParams *pwdaWificonfig)
21577{
21578 WDI_Status status = WDI_STATUS_SUCCESS;
21579 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21580 tWDA_ReqParams *pWdaParams ;
21581 WDI_Status wstatus;
21582
21583 /* Sanity Check*/
21584 if(NULL == pwdaWificonfig)
21585 {
21586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21587 "%s: tSetWifiConfigParams received NULL", __func__);
21588 VOS_ASSERT(0) ;
21589 return VOS_STATUS_E_FAULT;
21590 }
21591
21592 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21593 sizeof(WDI_WifiConfigSetReqType));
21594 if(NULL == pwdiWifConfigSetReqParams)
21595 {
21596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21597 "%s: VOS MEM Alloc Failure", __func__);
21598 VOS_ASSERT(0);
21599 vos_mem_free(pwdaWificonfig);
21600 return VOS_STATUS_E_NOMEM;
21601 }
21602
21603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21604 if(NULL == pWdaParams)
21605 {
21606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21607 "%s: VOS MEM Alloc Failure", __func__);
21608 VOS_ASSERT(0);
21609 vos_mem_free(pwdiWifConfigSetReqParams);
21610 vos_mem_free(pwdaWificonfig);
21611 return VOS_STATUS_E_NOMEM;
21612 }
21613 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21614 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21615 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21616 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21617
21618 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021619 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021620 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21621
21622 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21623 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21624 pWdaParams);
21625 if(IS_WDI_STATUS_FAILURE(wstatus))
21626 {
21627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21628 "Failure in sendind WifiConfigReq, free all the memory" );
21629 status = CONVERT_WDI2VOS_STATUS(wstatus);
21630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21631 vos_mem_free(pWdaParams->wdaMsgParam);
21632 vos_mem_free(pWdaParams);
21633 }
21634
21635 return status;
21636
21637}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021638
21639#ifdef FEATURE_OEM_DATA_SUPPORT
21640/*
21641 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21642 * Request to WDI.
21643 */
21644VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21645 tOemDataReqNewConfig *pOemDataReqNewConfig)
21646{
21647 VOS_STATUS status = VOS_STATUS_SUCCESS;
21648 WDI_Status wstatus;
21649 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21650
21651 /* Sanity Check*/
21652 if(NULL == pOemDataReqNewConfig)
21653 {
21654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21655 "%s: pOemDataReqNewConfig received NULL", __func__);
21656 VOS_ASSERT(0) ;
21657 return VOS_STATUS_E_FAULT;
21658 }
21659
21660 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21661 sizeof(WDI_OemDataReqNewConfig));
21662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21663 "------> %s " ,__func__);
21664
21665 if(NULL == wdiOemDataReqNewConfig)
21666 {
21667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21668 "%s: VOS MEM Alloc Failure", __func__);
21669 VOS_ASSERT(0);
21670 vos_mem_free(pOemDataReqNewConfig);
21671 return VOS_STATUS_E_NOMEM;
21672 }
21673
21674 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21675 sizeof(WDI_OemDataReqNewConfig));
21676
21677 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21678
21679 if (WDI_STATUS_PENDING == wstatus)
21680 {
21681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21682 FL("pending status received "));
21683 }
21684 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21685 {
21686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21687 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021688 }
21689
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021690 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021691 vos_mem_free(pOemDataReqNewConfig);
21692
21693 return status;
21694}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021695
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021696void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21697 void *pUserData)
21698{
21699 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21700 (tSirAntennaDiversitySelectionInfo *)pUserData;
21701
21702 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21704 "<------ %s " ,__func__);
21705 if (NULL == pAntennaDivSelInfo)
21706 {
21707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21708 "%s: pWdaParams received NULL", __func__);
21709 VOS_ASSERT(0) ;
21710 return ;
21711 }
21712 if (NULL == resParams)
21713 {
21714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21715 "%s: resParams received NULL", __func__);
21716 VOS_ASSERT(0) ;
21717 return ;
21718 }
21719
21720 if (pAntennaDivSelInfo->callback)
21721 {
21722 if (WDI_STATUS_SUCCESS == status)
21723 {
21724 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21725 pAntennaDivSelInfo->data);
21726 }
21727 else
21728 {
21729 pAntennaDivSelInfo->callback(-1,
21730 pAntennaDivSelInfo->data);
21731 }
21732 }
21733
21734 vos_mem_free(pUserData);
21735 return;
21736}
21737
21738/*
21739 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21740 * Request to WDI.
21741 */
21742v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21743 tSirAntennaDiversitySelectionReq *pData)
21744{
21745 WDI_Status wdiStatus;
21746 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21747
21748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21749 "------> %s " , __func__);
21750
21751 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21752 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21753 if (NULL == pAntennaDivSelInfo)
21754 {
21755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21756 "%s: VOS MEM Alloc Failure", __func__);
21757 VOS_ASSERT(0);
21758 vos_mem_free(pData);
21759 return;
21760 }
21761
21762 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21763 pAntennaDivSelInfo->data = pData->data;
21764
21765 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21766 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21767
21768 if (WDI_STATUS_PENDING == wdiStatus)
21769 {
21770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21771 "Pending received for %s:%d ", __func__, __LINE__);
21772 }
21773 else if (WDI_STATUS_SUCCESS != wdiStatus)
21774 {
21775 if (pAntennaDivSelInfo->callback)
21776 {
21777 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21778 }
21779 }
21780
21781 vos_mem_free(pData);
21782 return;
21783}
21784
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021785/*
21786 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21787 * Request to WDI.
21788 */
21789VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21790 tModifyRoamParamsReqParams *params)
21791{
21792 WDI_Status status;
21793
21794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21795 FL("---> %s"), __func__);
21796
21797 if (NULL == params)
21798 {
21799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21800 FL("tModifyRoamParamsReqParams is received NULL"));
21801 return VOS_STATUS_E_NOMEM;
21802 }
21803
21804 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21805 if (WDI_STATUS_PENDING == status)
21806 {
21807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21808 FL("pending status received "));
21809 }
21810 else if (WDI_STATUS_SUCCESS_SYNC != status)
21811 {
21812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21813 FL("Failure status %d"), status);
21814 }
21815 vos_mem_free(params);
21816 return CONVERT_WDI2VOS_STATUS(status) ;
21817}
21818
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021819#endif