blob: 03f6dca5a750e954cac7726edbfa2ce3125371e4 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530139#define WDA_BA_MAX_RETRY_THRESHOLD 10
140#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800141
Jeff Johnson295189b2012-06-20 16:38:30 -0700142/* extern declarations */
143extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700144extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* forward declarations */
147void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
148 void *pBodyptr, tANI_U32 bodyVal) ;
149VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
150 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
152VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
153
154extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
155 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530156void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700157void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
158 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
159void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
160 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
161void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
162 void* pUserData ) ;
163static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
164static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530165bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800167void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef WLAN_FEATURE_VOWIFI_11R
170VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
171#endif /* WLAN_FEATURE_VOWIFI_11R */
172
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
174void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
175VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700176#ifdef FEATURE_WLAN_SCAN_PNO
177static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
178static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
179static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
180#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700181#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700182VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530183VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
184 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530186void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
187void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
c_hpothu92367912014-05-01 15:18:17 +0530222v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
223 tSirBcnMissRateReq *pData);
224
Jeff Johnson295189b2012-06-20 16:38:30 -0700225VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
226 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700227#ifdef WLAN_FEATURE_11AC
228VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
229 tUpdateVHTOpMode *pData);
230#endif
Leo Chang9056f462013-08-01 19:21:11 -0700231
232#ifdef FEATURE_WLAN_LPHB
233VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
234 tSirLPHBReq *pData);
235#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530236
Abhishek Singh00b71972016-01-07 10:51:04 +0530237#ifdef WLAN_FEATURE_RMC
238void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
239 v_PVOID_t pData);
240#endif /* WLAN_FEATURE_RMC */
241
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#ifdef WLAN_FEATURE_EXTSCAN
243VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
244 tSirEXTScanStartReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStopReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
248 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
250 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
252 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530255VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
257VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530259VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
260 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530261#endif /* WLAN_FEATURE_EXTSCAN */
262
Sunil Duttbd736ed2014-05-26 21:19:41 +0530263#ifdef WLAN_FEATURE_LINK_LAYER_STATS
264VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
265 tSirLLStatsSetReq *wdaRequest);
266
267VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
268 tSirLLStatsGetReq *wdaRequest);
269
270VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
271 tSirLLStatsClearReq *wdaRequest);
272#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530273
274v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
275 tSirFWStatsGetReq *wdaRequest);
276
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530277VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
278 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530279VOS_STATUS
280WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
281 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530282
c_manjeecfd1efb2015-09-25 19:32:34 +0530283VOS_STATUS
284WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
285 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530286
Katya Nigamf0511f62015-05-05 16:40:57 +0530287VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
288VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530289VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530290
291VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
292 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530293
294VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
295 tOemDataReqNewConfig *pOemDataReqNewConfig);
296
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530297
298v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
299 tSirAntennaDiversitySelectionReq *pData);
300
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530301VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
302 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530303/*
304 * FUNCTION: WDA_ProcessNanRequest
305 * Process NAN request
306 */
307VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
308 tNanRequest *wdaRequest)
309{
310 WDI_Status status = WDI_STATUS_SUCCESS;
311 tWDA_ReqParams *pWdaParams;
312 WDI_NanRequestType *wdiRequest = NULL;
313 size_t wdiReqLength = sizeof(WDI_NanRequestType)
314 - sizeof(wdiRequest->request_data)
315 + wdaRequest->request_data_len;
316
317 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
318
319 if (NULL == wdiRequest)
320 {
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
322 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
323 wdiReqLength);
324 vos_mem_free(wdaRequest);
325 return VOS_STATUS_E_NOMEM;
326 }
327
328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
329 "WDA: Process Nan Request length: %zu", wdiReqLength);
330
331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
332 if (NULL == pWdaParams)
333 {
334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
335 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
336 VOS_ASSERT(0);
337 vos_mem_free(wdaRequest);
338 vos_mem_free(wdiRequest);
339 return VOS_STATUS_E_NOMEM;
340 }
341
342 wdiRequest->request_data_len = wdaRequest->request_data_len;
343
344 vos_mem_copy( wdiRequest->request_data,
345 wdaRequest->request_data,
346 wdaRequest->request_data_len);
347
348 vos_mem_free(wdaRequest);
349
350 pWdaParams->pWdaContext = pWDA;
351 pWdaParams->wdaMsgParam = NULL;
352 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
353
354 status = WDI_NanRequest(wdiRequest, pWdaParams);
355
356 if (IS_WDI_STATUS_FAILURE(status))
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
359 "Failure to request. Free all the memory " );
360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
361 vos_mem_free(pWdaParams);
362 }
363
364 return CONVERT_WDI2VOS_STATUS(status) ;
365}
366
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530367/**
368 * wda_state_info_dump() - prints state information of wda layer
369 */
370static void wda_state_info_dump(void)
371{
372 v_CONTEXT_t vos_ctx_ptr = NULL;
373 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530374
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
376 "<------ %s " ,__func__);
377
378 /* Get the Global VOSS Context */
379 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
380
381 if (NULL != vos_ctx_ptr)
382 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
383 vos_ctx_ptr );
384 else {
385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
386 "%s: Invalid Global VOSS Context", __func__);
387 VOS_ASSERT(0);
388 return;
389 }
390
391 if (NULL != wda)
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
393 "wdaState: %d linkState: %d", wda->wdaState,
394 wda->linkState);
395 else {
396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
397 "%s: Invalid WDA Context", __func__);
398 VOS_ASSERT(0);
399 }
400}
401
402/**
403 * wda_register_debug_callback() - registration function for wda layer
404 * to print wda state information
405 */
406static void wda_register_debug_callback(void)
407{
408 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
409}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530410
Jeff Johnson295189b2012-06-20 16:38:30 -0700411/*
412 * FUNCTION: WDA_open
413 * Allocate the WDA context
414 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530415VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 tMacOpenParameters *pMacParams )
417{
418 tWDA_CbContext *wdaContext;
419 VOS_STATUS status;
420 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530422 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
424 if(!VOS_IS_STATUS_SUCCESS(status))
425 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
427 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 return VOS_STATUS_E_NOMEM;
429 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /*__asm int 3;*/
431 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
432
433 /* Initialize data structures */
434 wdaContext->pVosContext = pVosContext;
435 wdaContext->wdaState = WDA_INIT_STATE;
436 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530437 vos_lock_init(&wdaContext->mgmt_pkt_lock);
438
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Initialize WDA-WDI synchronization event */
440 status = vos_event_init(&wdaContext->wdaWdiEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 /* Init Frame transfer event */
448 status = vos_event_init(&wdaContext->txFrameEvent);
449 if(!VOS_IS_STATUS_SUCCESS(status))
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800452 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800453 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 status = vos_event_init(&wdaContext->suspendDataTxEvent);
456 if(!VOS_IS_STATUS_SUCCESS(status))
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800459 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800460 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
463 if(!VOS_IS_STATUS_SUCCESS(status))
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800466 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800467 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530471 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 &wdiDevCapability, pMacParams->driverType))
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800476 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 else
479 {
480 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
481 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
482 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* update max STA in WDA used for BA */
484 wdaContext->wdaMaxSta = pMacParams->maxStation;
485 /* store the frameTransRequired flag in wdaContext, to send this to HAL
486 * in WDA_Start
487 */
488 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
489 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530490
491 wda_register_debug_callback();
492
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800494
495error:
496 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
497 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700498}
499
Jeff Johnson295189b2012-06-20 16:38:30 -0700500/*
501 * FUNCTION: WDA_preStart
502 * Trigger DAL-AL to start CFG download
503 */
504VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
505{
506 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
507 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /*
509 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
510 */
511 wdaMsg.type = WNI_CFG_DNLD_REQ ;
512 wdaMsg.bodyptr = NULL;
513 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 /* post the message.. */
515 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
516 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
517 {
518 vosStatus = VOS_STATUS_E_BADMSG;
519 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 return( vosStatus );
521}
Jeff Johnson295189b2012-06-20 16:38:30 -0700522/*
523 * FUNCTION: WDA_wdiStartCallback
524 * Once WDI_Start is finished, WDI start callback will be called by WDI
525 * to indicate completion of WDI_Start.
526 */
527void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
528 void *pVosContext)
529{
530 tWDA_CbContext *wdaContext;
531 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (NULL == pVosContext)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 return;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
539 if (NULL == wdaContext)
540 {
541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700542 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 return;
544 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 }
550 else
551 {
552 wdaContext->wdaState = WDA_START_STATE;
553 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* extract and save version information from the Start Response */
555 wdaContext->wcnssWlanCompiledVersion.major =
556 wdiRspParams->wlanCompiledVersion.major;
557 wdaContext->wcnssWlanCompiledVersion.minor =
558 wdiRspParams->wlanCompiledVersion.minor;
559 wdaContext->wcnssWlanCompiledVersion.version =
560 wdiRspParams->wlanCompiledVersion.version;
561 wdaContext->wcnssWlanCompiledVersion.revision =
562 wdiRspParams->wlanCompiledVersion.revision;
563 wdaContext->wcnssWlanReportedVersion.major =
564 wdiRspParams->wlanReportedVersion.major;
565 wdaContext->wcnssWlanReportedVersion.minor =
566 wdiRspParams->wlanReportedVersion.minor;
567 wdaContext->wcnssWlanReportedVersion.version =
568 wdiRspParams->wlanReportedVersion.version;
569 wdaContext->wcnssWlanReportedVersion.revision =
570 wdiRspParams->wlanReportedVersion.revision;
571 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
572 wdiRspParams->wcnssSoftwareVersion,
573 sizeof(wdaContext->wcnssSoftwareVersionString));
574 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
575 wdiRspParams->wcnssHardwareVersion,
576 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 /* Notify WDA_start that WDI_Start has completed */
578 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700579 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 return;
585}
586
Jeff Johnson295189b2012-06-20 16:38:30 -0700587/*
588 * FUNCTION: WDA_start
589 * Prepare TLV configuration and call WDI_Start.
590 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700591VOS_STATUS WDA_start(v_PVOID_t pVosContext)
592{
593 tWDA_CbContext *wdaContext;
594 VOS_STATUS status;
595 WDI_Status wdiStatus;
596 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 if (NULL == pVosContext)
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700600 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 return VOS_STATUS_E_FAILURE;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
604 if (NULL == wdaContext)
605 {
606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700607 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 return VOS_STATUS_E_FAILURE;
609 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* Non-FTM mode, WDA status for START must be INIT
611 * FTM mode, WDA Status for START can be INIT or STOP */
612 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
613 (WDA_STOP_STATE != wdaContext->wdaState) )
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* initialize the wdiStartParam. Note that we can create this on
621 the stack since we won't exit until WDI_Start() completes or
622 times out */
623 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* prepare the config TLV for the WDI */
626 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
627 if ( !VOS_IS_STATUS_SUCCESS(status) )
628 {
629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700630 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 return VOS_STATUS_E_FAILURE;
632 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* note from here onwards if an error occurs we must
634 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
636 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
637 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* initialize the WDA-WDI synchronization event */
639 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* call WDI start */
641 wdiStatus = WDI_Start(&wdiStartParam,
642 (WDI_StartRspCb)WDA_wdiStartCallback,
643 (v_VOID_t *)pVosContext);
644 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700647 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 vos_mem_free(wdiStartParam.pConfigBuffer);
649 return VOS_STATUS_E_FAILURE;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* wait for WDI start to invoke our callback */
652 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
653 WDA_WDI_START_TIMEOUT );
654 if ( !VOS_IS_STATUS_SUCCESS(status) )
655 {
656 if ( VOS_STATUS_E_TIMEOUT == status )
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700659 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 }
661 else
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
664 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700665 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 }
667 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530668 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* we no longer need the config TLV */
672 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* if we are not in the START state then WDI_Start() failed */
674 if (WDA_START_STATE != wdaContext->wdaState)
675 {
676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700677 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 return VOS_STATUS_E_FAILURE;
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* FTM mode does not need to monitor BA activity */
681 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
682 {
683 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800684 if(VOS_STATUS_SUCCESS == status)
685 {
686 wdaContext->wdaTimersCreated = VOS_TRUE;
687 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530688 else
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 FL("wda create timers failed"));
692 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 }
Leo Chang9d76f622013-08-23 16:34:52 -0700694 else
695 {
696 vos_event_init(&wdaContext->ftmStopDoneEvent);
697 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 return status;
699}
700
Jeff Johnson295189b2012-06-20 16:38:30 -0700701/*
702 * FUNCTION: WDA_prepareConfigTLV
703 * Function to prepare CFG for DAL(WDA)
704 */
705VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
706 WDI_StartReqParamsType *wdiStartParams )
707{
708 /* get pMac to acess CFG data base */
709 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
711 tHalCfg *tlvStruct = NULL ;
712 tANI_U8 *tlvStructStart = NULL ;
713 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
714 v_PVOID_t *configParam;
715 tANI_U32 configParamSize;
716 tANI_U32 *configDataValue;
717 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700718 tANI_U8 i;
719
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 if ((NULL == pMac)||(NULL == wdaContext))
721 {
722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700723 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 VOS_ASSERT(0);
725 return VOS_STATUS_E_FAILURE;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
728 WNI_CFG_STA_ID_LEN +
729 WNI_CFG_EDCA_WME_ACBK_LEN +
730 WNI_CFG_EDCA_WME_ACBE_LEN +
731 WNI_CFG_EDCA_WME_ACVI_LEN +
732 WNI_CFG_EDCA_WME_ACVO_LEN +
733 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* malloc memory for all configs in one shot */
735 configParam = vos_mem_malloc(configParamSize);
736
737 if(NULL == configParam )
738 {
739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700740 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 VOS_ASSERT(0) ;
742 return VOS_STATUS_E_NOMEM;
743 }
744 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)configParam;
747 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* TODO: Remove Later */
749 /* QWLAN_HAL_CFG_STA_ID */
750 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
751 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
752 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_STA_ID");
757 goto handle_failure;
758 }
759 tlvStruct->length = strLength ;
760 /* calculate the pad bytes to have the CFG in aligned format */
761 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
762 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
770 != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
779 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
783 eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
792 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
793 tlvStruct->length = sizeof(tANI_U32);
794 configDataValue = (tANI_U32 *)(tlvStruct + 1);
795 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
796 != eSIR_SUCCESS)
797 {
798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
799 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
800 goto handle_failure;
801 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700802 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
803 + sizeof(tHalCfg) + tlvStruct->length)) ;
804
805 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
806 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
810 configDataValue ) != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_PERIOD */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_PERIOD");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_CAL_CONTROL */
832 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_CAL_CONTROL");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_PROXIMITY */
845 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_PROXIMITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
858 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
862 != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
875 eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
884 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
897 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
923 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
936 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
949 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length));
961
962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
976 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length));
988
989 /* QWLAN_HAL_CFG_FIXED_RATE */
990 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
994 != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_FIXED_RATE");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length));
1002
1003 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1004 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1005 tlvStruct->length = sizeof(tANI_U32);
1006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1007 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1008 != eSIR_SUCCESS)
1009 {
1010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1011 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1012 goto handle_failure;
1013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1015 + sizeof(tHalCfg) + tlvStruct->length));
1016
1017 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1031 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1039 goto handle_failure;
1040 }
1041 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1044 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1070 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1071 tlvStruct->length = sizeof(tANI_U32);
1072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1073 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1074 configDataValue ) != eSIR_SUCCESS)
1075 {
1076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1077 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1078 goto handle_failure;
1079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length);
1082
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1097 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1101 configDataValue ) != eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1110 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1111 tlvStruct->length = sizeof(tANI_U32);
1112 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1113 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1114 eSIR_SUCCESS)
1115 {
1116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1117 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1118 goto handle_failure;
1119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1121 + sizeof(tHalCfg) + tlvStruct->length);
1122
1123 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1150 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1163 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1164 tlvStruct->length = sizeof(tANI_U32);
1165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1166 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1167 configDataValue ) != eSIR_SUCCESS)
1168 {
1169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1170 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1171 goto handle_failure;
1172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1174 + sizeof(tHalCfg) + tlvStruct->length);
1175
1176 /* QWLAN_HAL_CFG_STATS_PERIOD */
1177 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_STATS_PERIOD");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1190 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1194 eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1203 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1207 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1211 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1224 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1225 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1228 &strLength) != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1232 goto handle_failure;
1233 }
1234 tlvStruct->length = strLength;
1235 /* calculate the pad bytes to have the CFG in aligned format */
1236 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1237 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1239 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1241 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1242 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1245 &strLength) != eSIR_SUCCESS)
1246 {
1247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1248 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1249 goto handle_failure;
1250 }
1251 tlvStruct->length = strLength;
1252 /* calculate the pad bytes to have the CFG in aligned format */
1253 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1254 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1256 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1258 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1259 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1261 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1262 &strLength) != eSIR_SUCCESS)
1263 {
1264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1265 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1266 goto handle_failure;
1267 }
1268 tlvStruct->length = strLength;
1269 /* calculate the pad bytes to have the CFG in aligned format */
1270 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1271 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1275 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1276 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1279 &strLength) != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1283 goto handle_failure;
1284 }
1285 tlvStruct->length = strLength;
1286 /* calculate the pad bytes to have the CFG in aligned format */
1287 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1288 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1292 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1305 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1318 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1326 goto handle_failure;
1327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1383 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1391 goto handle_failure;
1392 }
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1396 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1409 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1430 goto handle_failure;
1431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1433 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1435 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1436 * into FW, so the parameters are added here.
1437 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001438 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1439 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1453 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1454 tlvStruct->length = sizeof(tANI_U32);
1455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1456 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1457 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1458 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1556 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562
Wilson Tsaof8b37942013-09-06 10:49:00 -07001563 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1564 {
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1590 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596 }
1597
1598 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1599 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1603 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1604 + sizeof(tHalCfg) + tlvStruct->length) ;
1605
1606 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1607 {
1608 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1609 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 }
1616
1617 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1618 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624
Jeff Johnson32d95a32012-09-10 13:15:23 -07001625 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001626 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1630 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1631 wcnssCompiledApiVersion.minor,
1632 wcnssCompiledApiVersion.version,
1633 wcnssCompiledApiVersion.revision);
1634 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1635 + sizeof(tHalCfg) + tlvStruct->length) ;
1636
Jeff Johnsond13512a2012-07-17 11:42:19 -07001637 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1638 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1646 goto handle_failure;
1647 }
1648
1649 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1650 + sizeof(tHalCfg) + tlvStruct->length) ;
1651 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1652 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
1665
1666 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1667 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1675 goto handle_failure;
1676 }
1677
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001681 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1682 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1683 tlvStruct->length = sizeof(tANI_U32);
1684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1685 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1686 != eSIR_SUCCESS)
1687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1690 goto handle_failure;
1691 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301692
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length);
1695
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001696#ifdef WLAN_SOFTAP_VSTA_FEATURE
1697 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1701 != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1705 goto handle_failure;
1706 }
1707
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710#endif
1711
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001712 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1713 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1714 tlvStruct->length = sizeof(tANI_U32);
1715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1716
1717 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1718 != eSIR_SUCCESS)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1721 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1722 goto handle_failure;
1723 }
1724
1725 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1726 + sizeof(tHalCfg) + tlvStruct->length) ;
1727
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301728/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1729 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1730 tlvStruct->length = sizeof(tANI_U32);
1731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1732 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1733 configDataValue ) != eSIR_SUCCESS)
1734 {
1735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1736 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1737 goto handle_failure;
1738 }
1739
1740 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1741 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301742#ifdef FEATURE_WLAN_TDLS
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756
1757 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1758 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1759 tlvStruct->length = sizeof(tANI_U32);
1760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1761 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1762 configDataValue ) != eSIR_SUCCESS)
1763 {
1764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1765 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1766 goto handle_failure;
1767 }
1768 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1769 + sizeof(tHalCfg) + tlvStruct->length) ;
1770 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1771 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1772 tlvStruct->length = sizeof(tANI_U32);
1773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1774 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1775 configDataValue ) != eSIR_SUCCESS)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1779 goto handle_failure;
1780 }
1781 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1782 + sizeof(tHalCfg) + tlvStruct->length) ;
1783 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1784 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1785 tlvStruct->length = sizeof(tANI_U32);
1786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1787 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1788 configDataValue ) != eSIR_SUCCESS)
1789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1792 goto handle_failure;
1793 }
1794 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1795 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301796 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1797 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1798 tlvStruct->length = sizeof(tANI_U32);
1799 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1800 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1805 goto handle_failure;
1806 }
1807 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1808 + sizeof(tHalCfg) + tlvStruct->length) ;
1809
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301810#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301811
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001812 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1813 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1814 tlvStruct->length = sizeof(tANI_U32);
1815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1816 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1817 configDataValue ) != eSIR_SUCCESS)
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1821 goto handle_failure;
1822 }
1823
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001826
1827 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1828 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1832 != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1836 goto handle_failure;
1837 }
1838 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1839 + sizeof(tHalCfg) + tlvStruct->length));
1840
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301841 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1842 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1843 tlvStruct->length = sizeof(tANI_U32);
1844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1845 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1846 configDataValue ) != eSIR_SUCCESS)
1847 {
1848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1849 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1850 goto handle_failure;
1851 }
1852
1853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1854 + sizeof(tHalCfg) + tlvStruct->length) ;
1855
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301856 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1857 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1858 tlvStruct->length = sizeof(tANI_U32);
1859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1860 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301870 /* QWLAN_HAL_CFG_ATH_DISABLE */
1871 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_ATH_DISABLE");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
c_hpothu6d7dc922013-12-02 12:36:41 +05301884 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1889 configDataValue ) != eSIR_SUCCESS)
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1893 goto handle_failure;
1894 }
1895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1896 + sizeof(tHalCfg) + tlvStruct->length) ;
1897
1898 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1899 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1900 tlvStruct->length = sizeof(tANI_U32);
1901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1921 goto handle_failure;
1922 }
1923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
1926 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1927 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301940 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1941 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1955 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1959 configDataValue ) != eSIR_SUCCESS)
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1963 goto handle_failure;
1964 }
1965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1966 + sizeof(tHalCfg) + tlvStruct->length) ;
1967
1968 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1969 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1970 tlvStruct->length = sizeof(tANI_U32);
1971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1972 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001982 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1983 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1987 configDataValue ) != eSIR_SUCCESS)
1988 {
1989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1990 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1991 goto handle_failure;
1992 }
1993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1994 + sizeof(tHalCfg) + tlvStruct->length) ;
1995
c_hpothu5bd1ae42014-03-07 20:28:22 +05301996 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1997 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1998 tlvStruct->length = sizeof(tANI_U32);
1999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2000
2001 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2002 configDataValue ) != eSIR_SUCCESS)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2005 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2006 goto handle_failure;
2007 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2009 + sizeof(tHalCfg) + tlvStruct->length) ;
2010
2011 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2012 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2013 tlvStruct->length = sizeof(tANI_U32);
2014 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2015
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2021 goto handle_failure;
2022 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302025
c_hpothu2d0f1c42014-04-01 18:38:51 +05302026 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2027 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2036 goto handle_failure;
2037 }
2038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2042 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2051 goto handle_failure;
2052 }
2053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
2055
2056 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2057 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2062 configDataValue ) != eSIR_SUCCESS)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2065 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2072 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2077 configDataValue ) != eSIR_SUCCESS)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2080 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2081 goto handle_failure;
2082 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
Mihir Shetec34258c2014-07-30 17:50:27 +05302086 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2087 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2102 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2111 goto handle_failure;
2112 }
2113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
2115
2116 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2117 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2122 configDataValue ) != eSIR_SUCCESS)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2125 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
2131 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2132 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2137 configDataValue ) != eSIR_SUCCESS)
2138 {
2139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2140 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
2146 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2147 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2152 configDataValue ) != eSIR_SUCCESS)
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
2160
2161 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2162 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2167 configDataValue ) != eSIR_SUCCESS)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
2176 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2177 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2178 tlvStruct->length = sizeof(tANI_U32);
2179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2180
2181 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2182 configDataValue ) != eSIR_SUCCESS)
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2185 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2186 goto handle_failure;
2187 }
2188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2189 + sizeof(tHalCfg) + tlvStruct->length) ;
2190
2191 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2192 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2193 tlvStruct->length = sizeof(tANI_U32);
2194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2195
2196 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2197 configDataValue ) != eSIR_SUCCESS)
2198 {
2199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2200 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2201 goto handle_failure;
2202 }
2203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2204 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302205
2206 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2207 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2208 tlvStruct->length = sizeof(tANI_U32);
2209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2210
2211 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2212 configDataValue ) != eSIR_SUCCESS)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2215 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2216 goto handle_failure;
2217 }
2218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2219 + sizeof(tHalCfg) + tlvStruct->length) ;
2220
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302221 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2223 tlvStruct->length = sizeof(tANI_U32);
2224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2225
2226 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2227 configDataValue ) != eSIR_SUCCESS)
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2230 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2231 goto handle_failure;
2232 }
2233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2234 + sizeof(tHalCfg) + tlvStruct->length) ;
2235
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302236 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2237 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2238 tlvStruct->length = sizeof(tANI_U32);
2239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2240
2241 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2242 configDataValue ) != eSIR_SUCCESS)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2246 goto handle_failure;
2247 }
2248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2249 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302250
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302251 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2252 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2257 configDataValue ) != eSIR_SUCCESS)
2258 {
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2260 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2261 goto handle_failure;
2262 }
2263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
Sachin Ahuja41b61902015-06-18 18:32:15 +05302266
2267 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2269 tlvStruct->length = sizeof(tANI_U32);
2270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2271
2272 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2273 configDataValue ) != eSIR_SUCCESS)
2274 {
2275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2276 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2277 goto handle_failure;
2278 }
2279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2280 + sizeof(tHalCfg) + tlvStruct->length) ;
2281
2282 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2284 tlvStruct->length = sizeof(tANI_U32);
2285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2286
2287 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2288 configDataValue ) != eSIR_SUCCESS)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2291 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2292 goto handle_failure;
2293 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2295 + sizeof(tHalCfg) + tlvStruct->length) ;
2296
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302297 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2298 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2299 tlvStruct->length = sizeof(tANI_U32);
2300 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2301
2302 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2303 configDataValue ) != eSIR_SUCCESS)
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2307 goto handle_failure;
2308 }
2309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2310 + sizeof(tHalCfg) + tlvStruct->length) ;
2311
2312 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2313 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2314 tlvStruct->length = sizeof(tANI_U32);
2315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2316
2317 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2318 configDataValue ) != eSIR_SUCCESS)
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2321 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2322 goto handle_failure;
2323 }
2324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2325 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302326
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302327 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2328 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331
2332 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2333 configDataValue ) != eSIR_SUCCESS)
2334 {
2335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2336 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2337 goto handle_failure;
2338 }
2339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2340 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302341 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2342 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2343 tlvStruct->length = sizeof(tANI_U32);
2344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2345 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2346 configDataValue ) != eSIR_SUCCESS)
2347 {
2348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2349 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2350 goto handle_failure;
2351 }
2352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2353 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302354
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302355 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2356 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2357 tlvStruct->length = sizeof(tANI_U32);
2358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2359
2360 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2361 configDataValue ) != eSIR_SUCCESS)
2362 {
2363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2364 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2365 goto handle_failure;
2366 }
2367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2368 + sizeof(tHalCfg) + tlvStruct->length) ;
2369
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302370 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2371 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2372 tlvStruct->length = sizeof(tANI_U32);
2373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2374
2375 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2376 configDataValue ) != eSIR_SUCCESS)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2379 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2380 goto handle_failure;
2381 }
2382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2383 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302384
2385 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2386 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2387 tlvStruct->length = sizeof(tANI_U32);
2388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2389
2390 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2391 configDataValue ) != eSIR_SUCCESS)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2394 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2395 goto handle_failure;
2396 }
2397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2398 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302399 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2400 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2401 tlvStruct->length = sizeof(tANI_U32);
2402 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2403
2404 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2405 configDataValue ) != eSIR_SUCCESS)
2406 {
2407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2408 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2409 goto handle_failure;
2410 }
2411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2412 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302413
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302415
2416 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2417 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2418 tlvStruct->length = sizeof(tANI_U32);
2419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2420
2421 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2422 configDataValue ) != eSIR_SUCCESS)
2423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2425 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2426 goto handle_failure;
2427 }
2428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2429 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302430
2431 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2432 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2433 tlvStruct->length = sizeof(tANI_U32);
2434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2435 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2436 != eSIR_SUCCESS)
2437 {
2438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2439 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2440 goto handle_failure;
2441 }
2442
2443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2444 + sizeof(tHalCfg) + tlvStruct->length);
2445
2446 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2447 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2448 tlvStruct->length = sizeof(tANI_U32);
2449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2450 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2451 != eSIR_SUCCESS)
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2455 goto handle_failure;
2456 }
2457
2458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2459 + sizeof(tHalCfg) + tlvStruct->length);
2460
Jeff Johnson295189b2012-06-20 16:38:30 -07002461#ifdef WLAN_DEBUG
2462 {
2463 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2465 "****** Dumping CFG TLV ***** ");
2466 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2469 "%02x %02x %02x %02x %02x %02x %02x %02x",
2470 tlvStructStart[i],
2471 tlvStructStart[i+1],
2472 tlvStructStart[i+2],
2473 tlvStructStart[i+3],
2474 tlvStructStart[i+4],
2475 tlvStructStart[i+5],
2476 tlvStructStart[i+6],
2477 tlvStructStart[i+7]);
2478 }
2479 /* Dump the bytes in the last line*/
2480 for (; i < wdiStartParams->usConfigBufferLen; i++)
2481 {
2482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2483 "%02x ",tlvStructStart[i]);
2484 }
2485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2486 "**************************** ");
2487 }
2488#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490handle_failure:
2491 vos_mem_free(configParam);
2492 return VOS_STATUS_E_FAILURE;
2493}
Anurag Chouhan83026002016-12-13 22:46:21 +05302494
2495#ifdef DHCP_SERVER_OFFLOAD
2496/**
2497 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2498 * @wdi_rsp: pointer to the dhcp server offload response
2499 * @user_data: pointer to user data
2500 *
2501 * Return: None
2502 */
2503void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2504 wdi_rsp,
2505 void* user_data)
2506{
2507 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2508 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2509 VOS_STATUS status;
2510
2511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2512 "<------ %s " ,__func__);
2513
2514 if(NULL == wda_params)
2515 {
2516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2517 "%s: pWdaParams received NULL", __func__);
2518 VOS_ASSERT(0);
2519 return;
2520 }
2521
2522 if(NULL == wda_params->wdaMsgParam)
2523 {
2524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2525 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2526 VOS_ASSERT(0);
2527 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2528 vos_mem_free(wda_params);
2529 return;
2530 }
2531
2532 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2533 wda_params->wdaMsgParam;
2534
2535 if(dhcp_srv_offload_info->dhcp_offload_callback)
2536 {
2537 dhcp_srv_offload_info->dhcp_offload_callback(
2538 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2539 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2540 }
2541 else
2542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2544 "%s: pFWLoggingInitParams callback is NULL", __func__);
2545 }
2546
2547 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2548 if (status)
2549 {
2550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2551 "%s: DHCP server offload failed with status=%d", __func__, status);
2552 VOS_ASSERT(0);
2553 }
2554
2555 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2556 vos_mem_free(wda_params->wdaMsgParam);
2557 vos_mem_free(wda_params);
2558 return;
2559}
2560#endif /* DHCP_SERVER_OFFLOAD */
2561
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302562#ifdef MDNS_OFFLOAD
2563/**
2564 * wda_mdns_enable_rsp_callback() - response to the mdns enable server offload
2565 * @wdi_rsp: pointer to the mdns enable offload response
2566 * @user_data: pointer to user data
2567 *
2568 * Return: None
2569 */
2570void wda_mdns_enable_rsp_callback(wdi_mdns_enable_offload_rsp_param_t*
2571 wdi_rsp,
2572 void* user_data)
2573{
2574 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2575 sir_mdns_offload_info_t *mdns_offload_info;
2576 VOS_STATUS status;
2577
2578 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2579 "<------ %s " ,__func__);
2580
2581 if(NULL == wda_params)
2582 {
2583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2584 "%s: pWdaParams received NULL", __func__);
2585 VOS_ASSERT(0);
2586 return ;
2587 }
2588
2589 if(NULL == wda_params->wdaMsgParam)
2590 {
2591 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2592 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2593 VOS_ASSERT(0);
2594 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2595 vos_mem_free(wda_params);
2596 return ;
2597 }
2598
2599 mdns_offload_info = (sir_mdns_offload_info_t *)
2600 wda_params->wdaMsgParam;
2601
2602 if(mdns_offload_info->mdns_enable_callback)
2603 {
2604 mdns_offload_info->mdns_enable_callback(mdns_offload_info->
2605 mdns_enable_cb_context,
2606 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2607 status));
2608 }
2609 else
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2612 "%s: mdns_enable callback is NULL", __func__);
2613 }
2614
2615 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2616 if (status)
2617 {
2618 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2619 "%s: MDNS offload failed with status=%d", __func__, status);
2620 VOS_ASSERT(0);
2621 }
2622
2623 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2624 vos_mem_free(wda_params->wdaMsgParam);
2625 vos_mem_free(wda_params);
2626
2627 return;
2628}
2629
2630/**
2631 * wda_mdns_fqdn_rsp_callback() - response to the mdns fqdn offload
2632 * @wdi_rsp: pointer to the mdns fqdn offload response
2633 * @user_data: pointer to user data
2634 *
2635 * Return: None
2636 */
2637void wda_mdns_fqdn_rsp_callback(wdi_mdns_set_fqdn_rsp_param_t*
2638 wdi_rsp,
2639 void* user_data)
2640{
2641 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2642 sir_mdns_fqdn_info_t *mdns_fqdn_info;
2643 VOS_STATUS status;
2644
2645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2646 "<------ %s " ,__func__);
2647
2648 if(NULL == wda_params)
2649 {
2650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2651 "%s: pWdaParams received NULL", __func__);
2652 VOS_ASSERT(0);
2653 return ;
2654 }
2655
2656 if(NULL == wda_params->wdaMsgParam)
2657 {
2658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2659 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2660 VOS_ASSERT(0);
2661 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2662 vos_mem_free(wda_params);
2663 return ;
2664 }
2665
2666 mdns_fqdn_info = (sir_mdns_fqdn_info_t *)
2667 wda_params->wdaMsgParam;
2668
2669 if(mdns_fqdn_info->mdns_fqdn_callback)
2670 {
2671 mdns_fqdn_info->mdns_fqdn_callback(mdns_fqdn_info->
2672 mdns_fqdn_cb_context,
2673 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2674 status));
2675 }
2676 else
2677 {
2678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2679 "%s: mdns_fqdn callback is NULL", __func__);
2680 }
2681
2682 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2683 if (status)
2684 {
2685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2686 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2687 VOS_ASSERT(0);
2688 }
2689
2690 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2691 vos_mem_free(wda_params->wdaMsgParam);
2692 vos_mem_free(wda_params);
2693
2694 return;
2695}
2696
2697/**
2698 * wda_mdns_resp_rsp_callback() - response to the mdns resp offload
2699 * @wdi_rsp: pointer to the mdns fqdn offload response
2700 * @user_data: pointer to user data
2701 *
2702 * Return: None
2703 */
2704void wda_mdns_resp_rsp_callback
2705(
2706 wdi_mdns_set_rsp_param_t*
2707 wdi_rsp,
2708 void* user_data)
2709{
2710 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2711 sir_mdns_resp_info_t *mdns_resp_info;
2712 VOS_STATUS status;
2713
2714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2715 "<------ %s " ,__func__);
2716
2717 if(NULL == wda_params)
2718 {
2719 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2720 "%s: pWdaParams received NULL", __func__);
2721 VOS_ASSERT(0);
2722 return ;
2723 }
2724
2725 if(NULL == wda_params->wdaMsgParam)
2726 {
2727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2728 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2729 VOS_ASSERT(0);
2730 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2731 vos_mem_free(wda_params);
2732 return ;
2733 }
2734
2735 mdns_resp_info = (sir_mdns_resp_info_t *)
2736 wda_params->wdaMsgParam;
2737
2738 if(mdns_resp_info->mdns_resp_callback)
2739 {
2740 mdns_resp_info->mdns_resp_callback(mdns_resp_info->
2741 mdns_resp_cb_context,
2742 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2743 status));
2744 }
2745 else
2746 {
2747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2748 "%s: mdns_fqdn callback is NULL", __func__);
2749 }
2750
2751 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2752 if (status)
2753 {
2754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2755 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2756 VOS_ASSERT(0);
2757 }
2758
2759 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2760 vos_mem_free(wda_params->wdaMsgParam);
2761 vos_mem_free(wda_params);
2762
2763 return;
2764}
2765
2766/**
2767 * wda_get_stats_rsp_callback() - response to the mdns stats offload
2768 * @wdi_rsp: pointer to the mdns fqdn offload response
2769 * @user_data: pointer to user data
2770 *
2771 * Return: None
2772 */
2773void wda_get_stats_rsp_callback
2774(
2775 wdi_mdns_stats_rsp_param_t*
2776 wdi_rsp,
2777 void* user_data)
2778{
2779 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2780 sir_get_mdns_stats_info_t *mdns_stats_info;
2781 VOS_STATUS status;
2782
2783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2784 "<------ %s " ,__func__);
2785
2786 if(NULL == wda_params)
2787 {
2788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2789 "%s: pWdaParams received NULL", __func__);
2790 VOS_ASSERT(0);
2791 return ;
2792 }
2793
2794 if(NULL == wda_params->wdaMsgParam)
2795 {
2796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2797 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2798 VOS_ASSERT(0);
2799 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2800 vos_mem_free(wda_params);
2801 return ;
2802 }
2803
2804 mdns_stats_info = (sir_get_mdns_stats_info_t *)
2805 wda_params->wdaMsgParam;
2806
2807 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2808 if (status)
2809 {
2810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2811 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2812 VOS_ASSERT(0);
2813 }
2814
2815 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2816 vos_mem_free(wda_params->wdaMsgParam);
2817 vos_mem_free(wda_params);
2818
2819 return;
2820}
2821#endif /* MDNS_OFFLOAD */
2822
Jeff Johnson295189b2012-06-20 16:38:30 -07002823/*
2824 * FUNCTION: WDA_wdiCompleteCB
2825 * call the voss call back function
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302826 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002827void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002828{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002829 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2830 tWDA_CbContext *wdaContext;
2831
2832 if(NULL == pWdaParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002836 VOS_ASSERT(0) ;
2837 return ;
2838 }
2839
2840 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2841
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 if (NULL == wdaContext)
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 wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 return ;
2847 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002850 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002854 vos_mem_free(pWdaParams);
2855
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 if(WDI_STATUS_SUCCESS != status)
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2859 "WDI stop callback returned failure" );
2860 VOS_ASSERT(0) ;
2861 }
2862 else
2863 {
2864 wdaContext->wdaState = WDA_STOP_STATE;
2865 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002866
Leo Chang9d76f622013-08-23 16:34:52 -07002867 /* FTM Driver stop procedure should be synced.
2868 * Stop and Close will happen on same context */
2869 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2870 {
2871 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2872 {
2873 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2874 "%s: FTM Stop Event Set Fail", __func__);
2875 VOS_ASSERT(0);
2876 }
2877 }
2878
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002880 vos_WDAComplete_cback(wdaContext->pVosContext);
2881
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 return ;
2883}
Jeff Johnson295189b2012-06-20 16:38:30 -07002884/*
2885 * FUNCTION: WDA_stop
2886 * call WDI_stop
2887 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002888VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2889{
2890 WDI_Status wdiStatus;
2891 VOS_STATUS status = VOS_STATUS_SUCCESS;
2892 WDI_StopReqParamsType *wdiStopReq;
2893 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002894 tWDA_ReqParams *pWdaParams ;
2895
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 if (NULL == pWDA)
2897 {
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 VOS_ASSERT(0);
2901 return VOS_STATUS_E_FAILURE;
2902 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002903 if (pWDA->wdiFailed == true)
2904 {
2905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002907 return VOS_STATUS_E_ALREADY;
2908 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002909
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 /* FTM mode stay START_STATE */
2911 if( (WDA_READY_STATE != pWDA->wdaState) &&
2912 (WDA_INIT_STATE != pWDA->wdaState) &&
2913 (WDA_START_STATE != pWDA->wdaState) )
2914 {
2915 VOS_ASSERT(0);
2916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 wdiStopReq = (WDI_StopReqParamsType *)
2918 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2919 if(NULL == wdiStopReq)
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0);
2924 return VOS_STATUS_E_NOMEM;
2925 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002926
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 wdiStopReq->wdiStopReason = reason;
2928 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302929
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002930 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2931 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 {
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 VOS_ASSERT(0);
2936 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002937 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002939
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002940 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2941 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 {
2943 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002944 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002946
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002947 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2948 pWdaParams->wdaMsgParam = NULL;
2949 pWdaParams->pWdaContext = pWDA;
2950
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 /* call WDI stop */
2952 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002953 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2954
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2956 {
2957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2958 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2960 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 status = VOS_STATUS_E_FAILURE;
2962 }
Leo Chang9d76f622013-08-23 16:34:52 -07002963
2964 /* FTM Driver stop procedure should be synced.
2965 * Stop and Close will happen on same context */
2966 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2967 {
2968 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2969 WDI_RESPONSE_TIMEOUT);
2970 if (status != VOS_STATUS_SUCCESS)
2971 {
2972 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2973 "%s: FTM Stop Timepoout", __func__);
2974 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002975 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302976 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 return status;
2979}
Jeff Johnson295189b2012-06-20 16:38:30 -07002980/*
2981 * FUNCTION: WDA_close
2982 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302983 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002984VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2985{
Jeff Johnson43971f52012-07-17 12:26:56 -07002986 VOS_STATUS status = VOS_STATUS_SUCCESS;
2987 WDI_Status wstatus;
2988 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 if (NULL == wdaContext)
2991 {
2992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002993 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 return VOS_STATUS_E_FAILURE;
2995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2997 (WDA_STOP_STATE != wdaContext->wdaState))
2998 {
2999 VOS_ASSERT(0);
3000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07003002 wstatus = WDI_Close();
3003 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 {
3005 status = VOS_STATUS_E_FAILURE;
3006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07003009 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
3010 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 {
3012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003013 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 status = VOS_STATUS_E_FAILURE;
3015 }
3016
Jeff Johnson43971f52012-07-17 12:26:56 -07003017 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003018 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 {
3020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003021 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 status = VOS_STATUS_E_FAILURE;
3023 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003024 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003025 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003028 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 status = VOS_STATUS_E_FAILURE;
3030 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003031 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07003032 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 {
3034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003035 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 status = VOS_STATUS_E_FAILURE;
3037 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303038
3039 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
3040
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07003042 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07003043 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 {
3045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3046 "error in WDA close " );
3047 status = VOS_STATUS_E_FAILURE;
3048 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303049
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 return status;
3051}
Jeff Johnson295189b2012-06-20 16:38:30 -07003052/*
3053 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
3054 * returns 1 if the compiled version is greater than or equal to the input version
3055 */
3056
3057uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3058{
3059 VOS_STATUS status = VOS_STATUS_SUCCESS;
3060 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3061 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
3064 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
3065 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
3066 (compiledVersion.revision >= revision)))
3067 return 1;
3068 else
3069 return 0;
3070}
Jeff Johnson295189b2012-06-20 16:38:30 -07003071/*
3072 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
3073 * returns 1 if the compiled version is greater than or equal to the input version
3074 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003075uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3076{
3077 VOS_STATUS status = VOS_STATUS_SUCCESS;
3078 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3079 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
3082 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
3083 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
3084 (reportedVersion.revision >= revision)))
3085 return 1;
3086 else
3087 return 0;
3088}
Jeff Johnson295189b2012-06-20 16:38:30 -07003089/*
3090 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
3091 * Returns the version of the WCNSS WLAN API with which the HOST
3092 * device driver was compiled
3093 */
3094VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
3095 tSirVersionType *pVersion)
3096{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303097 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 if ((NULL == pvosGCtx) || (NULL == pVersion))
3099 {
3100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003101 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 VOS_ASSERT(0);
3103 return VOS_STATUS_E_FAILURE;
3104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3106 if (NULL == pWDA )
3107 {
3108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0);
3111 return VOS_STATUS_E_FAILURE;
3112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 *pVersion = pWDA->wcnssWlanCompiledVersion;
3114 return VOS_STATUS_SUCCESS;
3115}
Jeff Johnson295189b2012-06-20 16:38:30 -07003116/*
3117 * FUNCTION: WDA_GetWcnssWlanReportedVersion
3118 * Returns the version of the WCNSS WLAN API with which the WCNSS
3119 * device driver was compiled
3120 */
3121VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
3122 tSirVersionType *pVersion)
3123{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303124 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if ((NULL == pvosGCtx) || (NULL == pVersion))
3126 {
3127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 VOS_ASSERT(0);
3130 return VOS_STATUS_E_FAILURE;
3131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3133 if (NULL == pWDA )
3134 {
3135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003136 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 VOS_ASSERT(0);
3138 return VOS_STATUS_E_FAILURE;
3139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 *pVersion = pWDA->wcnssWlanReportedVersion;
3141 return VOS_STATUS_SUCCESS;
3142}
Jeff Johnson295189b2012-06-20 16:38:30 -07003143/*
3144 * FUNCTION: WDA_GetWcnssSoftwareVersion
3145 * Returns the WCNSS Software version string
3146 */
3147VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
3148 tANI_U8 *pVersion,
3149 tANI_U32 versionBufferSize)
3150{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303151 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003153 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if ((NULL == pvosGCtx) || (NULL == pVersion))
3155 {
3156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0);
3159 return VOS_STATUS_E_FAILURE;
3160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3162 if (NULL == pWDA )
3163 {
3164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003165 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 VOS_ASSERT(0);
3167 return VOS_STATUS_E_FAILURE;
3168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
3170 return VOS_STATUS_SUCCESS;
3171}
Jeff Johnson295189b2012-06-20 16:38:30 -07003172/*
3173 * FUNCTION: WDA_GetWcnssHardwareVersion
3174 * Returns the WCNSS Hardware version string
3175 */
3176VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
3177 tANI_U8 *pVersion,
3178 tANI_U32 versionBufferSize)
3179{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303180 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003182 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 if ((NULL == pvosGCtx) || (NULL == pVersion))
3184 {
3185 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 VOS_ASSERT(0);
3188 return VOS_STATUS_E_FAILURE;
3189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3191 if (NULL == pWDA )
3192 {
3193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003194 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 VOS_ASSERT(0);
3196 return VOS_STATUS_E_FAILURE;
3197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
3199 return VOS_STATUS_SUCCESS;
3200}
Jeff Johnson295189b2012-06-20 16:38:30 -07003201/*
3202 * FUNCTION: WDA_WniCfgDnld
3203 * Trigger CFG Download
3204 */
3205VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
3206{
3207 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303208 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07003209
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 if (NULL == pMac )
3211 {
3212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 VOS_ASSERT(0);
3215 return VOS_STATUS_E_FAILURE;
3216 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303217 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 return vosStatus;
3219}
Jeff Johnson295189b2012-06-20 16:38:30 -07003220/* -----------------------------------------------------------------
3221 * WDI interface
3222 * -----------------------------------------------------------------
3223 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003224/*
3225 * FUNCTION: WDA_suspendDataTxCallback
3226 * call back function called from TL after suspend Transmission
3227 */
3228VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
3229 v_U8_t* ucSTAId,
3230 VOS_STATUS vosStatus)
3231{
3232 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003234 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 if (NULL == pWDA )
3236 {
3237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003238 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 VOS_ASSERT(0);
3240 return VOS_STATUS_E_FAILURE;
3241 }
3242 if(VOS_IS_STATUS_SUCCESS(vosStatus))
3243 {
3244 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
3245 }
3246 else
3247 {
3248 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
3249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 /* Trigger the event to bring the WDA TL suspend function to come
3251 * out of wait*/
3252 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
3253 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003256 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 /* If TL suspended had timedout before this callback was called, resume back
3259 * TL.*/
3260 if (pWDA->txSuspendTimedOut)
3261 {
3262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003263 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 WDA_ResumeDataTx(pWDA);
3265 pWDA->txSuspendTimedOut = FALSE;
3266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 return VOS_STATUS_SUCCESS;
3268}
Jeff Johnson295189b2012-06-20 16:38:30 -07003269/*
3270 * FUNCTION: WDA_suspendDataTx
3271 * Update TL to suspend the data Transmission
3272 */
3273VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3274{
3275 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3276 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003277
3278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003279 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 if (pWDA->txSuspendTimedOut)
3282 {
3283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003284 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 return status;
3286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 /* Reset the event to be not signalled */
3288 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3289 if(!VOS_IS_STATUS_SUCCESS(status))
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003292 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return VOS_STATUS_E_FAILURE;
3294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003296 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 WDA_SuspendDataTxCallback);
3298 if(status != VOS_STATUS_SUCCESS)
3299 {
3300 return status;
3301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 /* Wait for the event to be set by the TL, to get the response of
3303 * suspending the TX queues, this event should be set by the Callback
3304 * function called by TL*/
3305 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3306 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3307 if(!VOS_IS_STATUS_SUCCESS(status))
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3310 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 /* Set this flag to true when TL suspend times out, so that when TL
3313 * suspend eventually happens and calls the callback, TL can be resumed
3314 * right away by looking at this flag when true.*/
3315 pWDA->txSuspendTimedOut = TRUE;
3316 }
3317 else
3318 {
3319 pWDA->txSuspendTimedOut = FALSE;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3322 {
3323 status = VOS_STATUS_SUCCESS;
3324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 return status;
3326}
Jeff Johnson295189b2012-06-20 16:38:30 -07003327/*
3328 * FUNCTION: WDA_resumeDataTx
3329 * Update TL to resume the data Transmission
3330 */
3331VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3332{
3333 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334
3335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003336 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003337
3338 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 return status;
3340}
Jeff Johnson295189b2012-06-20 16:38:30 -07003341/*
3342 * FUNCTION: WDA_InitScanReqCallback
3343 * Trigger Init SCAN callback
3344 */
3345void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3346{
3347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3348 tWDA_CbContext *pWDA;
3349 tInitScanParams *pWDA_ScanParam ;
3350 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 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 == pWdaParams)
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003356 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_ASSERT(0) ;
3358 return ;
3359 }
3360 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3361 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 if(NULL == pWDA_ScanParam)
3363 {
3364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003365 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003366 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3368 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 return ;
3370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 if(WDI_STATUS_SUCCESS != wdiStatus)
3372 {
3373 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 if(VOS_STATUS_SUCCESS != status)
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003377 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003378 }
3379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 /* free WDI command buffer */
3381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303383
3384
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003386 /* without converting the Status to Failure or Success Just
3387 pass the same status to lim */
3388 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 /* send SCAN RSP message back to PE */
3390 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 return ;
3392}
3393
3394/*
3395 * FUNCTION: WDA_ProcessInitScanReq
3396 * Trigger Init SCAN in DAL
3397 */
3398VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3399 tInitScanParams *initScanParams)
3400{
3401 WDI_Status status = WDI_STATUS_SUCCESS ;
3402 WDI_InitScanReqParamsType *wdiInitScanParam =
3403 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3404 sizeof(WDI_InitScanReqParamsType)) ;
3405 tWDA_ReqParams *pWdaParams;
3406 tANI_U8 i = 0;
3407
3408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 if(NULL == wdiInitScanParam)
3411 {
3412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003413 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 VOS_ASSERT(0);
3415 return VOS_STATUS_E_NOMEM;
3416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3418 if(NULL == pWdaParams)
3419 {
3420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 VOS_ASSERT(0);
3423 vos_mem_free(wdiInitScanParam);
3424 return VOS_STATUS_E_NOMEM;
3425 }
3426
3427 /* Copy init Scan params to WDI structure */
3428 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3429 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3430 sizeof(tSirMacAddr)) ;
3431 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3432 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3433 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3435 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3437 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3439 {
3440 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3441 initScanParams->scanEntry.bssIdx[i] ;
3442 }
3443
3444 /* if Frame length, copy macMgmtHdr or WDI structure */
3445 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3446 {
3447 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3448 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3449 }
3450 wdiInitScanParam->wdiReqStatusCB = NULL ;
3451
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 /* Store Init Req pointer, as this will be used for response */
3453 pWdaParams->pWdaContext = pWDA;
3454 pWdaParams->wdaMsgParam = initScanParams;
3455 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 /* first try to suspend TX */
3457 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 if(WDI_STATUS_SUCCESS != status)
3459 {
3460 goto handleWdiFailure;
3461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 /* call DAL API to pass init scan request to DAL */
3463 status = WDI_InitScanReq(wdiInitScanParam,
3464 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 if(IS_WDI_STATUS_FAILURE(status))
3466 {
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3468 "error in WDA Init Scan, Resume Tx " );
3469 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 VOS_ASSERT(0) ;
3471
3472 goto handleWdiFailure;
3473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475handleWdiFailure:
3476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3477 "Failure in WDI Api, free all the memory " );
3478 /* free WDI command buffer */
3479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3480 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 /* send Failure to PE */
3482 initScanParams->status = eSIR_FAILURE ;
3483 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 return CONVERT_WDI2VOS_STATUS(status) ;
3485}
3486
Jeff Johnson295189b2012-06-20 16:38:30 -07003487/*
3488 * FUNCTION: WDA_StartScanReqCallback
3489 * send Start SCAN RSP back to PE
3490 */
3491void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3492 void* pUserData)
3493{
3494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3495 tWDA_CbContext *pWDA;
3496 tStartScanParams *pWDA_ScanParam;
3497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 if(NULL == pWdaParams)
3500 {
3501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003502 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 VOS_ASSERT(0) ;
3504 return ;
3505 }
3506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3507 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 if(NULL == pWDA_ScanParam)
3509 {
3510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003511 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003513 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 return ;
3515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3517 {
3518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003519 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003521 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 return ;
3523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3525 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003526
Jeff Johnson295189b2012-06-20 16:38:30 -07003527
3528 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003529 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 /* send SCAN RSP message back to PE */
3531 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 return ;
3533}
3534
Jeff Johnson295189b2012-06-20 16:38:30 -07003535/*
3536 * FUNCTION: WDA_ProcessStartScanReq
3537 * Trigger start SCAN in WDI
3538 */
3539VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3540 tStartScanParams *startScanParams)
3541{
3542 WDI_Status status = WDI_STATUS_SUCCESS;
3543 WDI_StartScanReqParamsType *wdiStartScanParams =
3544 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3545 sizeof(WDI_StartScanReqParamsType)) ;
3546 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003548 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 if(NULL == wdiStartScanParams)
3550 {
3551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 VOS_ASSERT(0);
3554 return VOS_STATUS_E_NOMEM;
3555 }
3556 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3557 if(NULL == pWdaParams)
3558 {
3559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 VOS_ASSERT(0);
3562 vos_mem_free(wdiStartScanParams);
3563 return VOS_STATUS_E_NOMEM;
3564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 /* Copy init Scan params to WDI structure */
3566 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3567 wdiStartScanParams->wdiReqStatusCB = NULL ;
3568
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 /* Store Init Req pointer, as this will be used for response */
3570 /* store Params pass it to WDI */
3571 pWdaParams->pWdaContext = pWDA;
3572 pWdaParams->wdaMsgParam = startScanParams;
3573 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 /* call DAL API to pass init scan request to DAL */
3575 status = WDI_StartScanReq(wdiStartScanParams,
3576 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 /* failure returned by WDI API */
3578 if(IS_WDI_STATUS_FAILURE(status))
3579 {
3580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3581 "Failure in Start Scan WDI API, free all the memory "
3582 "It should be due to previous abort scan." );
3583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3584 vos_mem_free(pWdaParams) ;
3585 startScanParams->status = eSIR_FAILURE ;
3586 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 return CONVERT_WDI2VOS_STATUS(status) ;
3589}
Jeff Johnson295189b2012-06-20 16:38:30 -07003590/*
3591 * FUNCTION: WDA_EndScanReqCallback
3592 * END SCAN callback
3593 */
3594void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3595{
3596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3597 tWDA_CbContext *pWDA;
3598 tEndScanParams *endScanParam;
3599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003600 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 if(NULL == pWdaParams)
3602 {
3603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003604 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 VOS_ASSERT(0) ;
3606 return ;
3607 }
3608 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3609 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 if(NULL == endScanParam)
3611 {
3612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003613 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3616 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 return ;
3618 }
3619
3620 /* Free WDI command buffer */
3621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3622 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003624 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 /* send response back to PE */
3626 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3627 return ;
3628}
3629
Jeff Johnson295189b2012-06-20 16:38:30 -07003630/*
3631 * FUNCTION: WDA_ProcessEndScanReq
3632 * Trigger END SCAN in WDI
3633 */
3634VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3635 tEndScanParams *endScanParams)
3636{
3637 WDI_Status status = WDI_STATUS_SUCCESS;
3638 WDI_EndScanReqParamsType *wdiEndScanParams =
3639 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3640 sizeof(WDI_EndScanReqParamsType)) ;
3641 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003643 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 if(NULL == wdiEndScanParams)
3645 {
3646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 VOS_ASSERT(0);
3649 return VOS_STATUS_E_NOMEM;
3650 }
3651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3652 if(NULL == pWdaParams)
3653 {
3654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 VOS_ASSERT(0);
3657 vos_mem_free(wdiEndScanParams);
3658 return VOS_STATUS_E_NOMEM;
3659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 /* Copy init Scan params to WDI structure */
3661 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3662 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 /* Store Init Req pointer, as this will be used for response */
3664 /* store Params pass it to WDI */
3665 pWdaParams->pWdaContext = pWDA;
3666 pWdaParams->wdaMsgParam = endScanParams;
3667 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 /* call DAL API to pass init scan request to DAL */
3669 status = WDI_EndScanReq(wdiEndScanParams,
3670 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 if(IS_WDI_STATUS_FAILURE(status))
3672 {
3673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3674 "Failure in End Scan WDI API, free all the memory "
3675 "It should be due to previous abort scan." );
3676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3677 vos_mem_free(pWdaParams) ;
3678 endScanParams->status = eSIR_FAILURE ;
3679 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 return CONVERT_WDI2VOS_STATUS(status) ;
3682}
Jeff Johnson295189b2012-06-20 16:38:30 -07003683/*
3684 * FUNCTION: WDA_FinishScanReqCallback
3685 * Trigger Finish SCAN callback
3686 */
3687void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3688{
3689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3690 tWDA_CbContext *pWDA;
3691 tFinishScanParams *finishScanParam;
3692 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 if(NULL == pWdaParams)
3696 {
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003698 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 VOS_ASSERT(0) ;
3700 return ;
3701 }
3702
3703 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3704 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 if(NULL == finishScanParam)
3706 {
3707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003708 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3711 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return ;
3713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3715 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 /*
3717 * Now Resume TX, if we reached here means, TX is already suspended, we
3718 * have to resume it unconditionaly
3719 */
3720 status = WDA_ResumeDataTx(pWDA) ;
3721
3722 if(VOS_STATUS_SUCCESS != status)
3723 {
3724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003725 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003727 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3729 return ;
3730}
Jeff Johnson295189b2012-06-20 16:38:30 -07003731/*
3732 * FUNCTION: WDA_ProcessFinshScanReq
3733 * Trigger Finish SCAN in WDI
3734 */
3735VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3736 tFinishScanParams *finishScanParams)
3737{
3738 WDI_Status status = WDI_STATUS_SUCCESS;
3739 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3740 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3741 sizeof(WDI_FinishScanReqParamsType)) ;
3742 tWDA_ReqParams *pWdaParams ;
3743 tANI_U8 i = 0;
3744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 if(NULL == wdiFinishScanParams)
3747 {
3748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 VOS_ASSERT(0);
3751 return VOS_STATUS_E_NOMEM;
3752 }
3753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3754 if(NULL == pWdaParams)
3755 {
3756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 VOS_ASSERT(0);
3759 vos_mem_free(wdiFinishScanParams);
3760 return VOS_STATUS_E_NOMEM;
3761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 /* Copy init Scan params to WDI structure */
3763 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3764 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3765 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3767 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3768 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3769 finishScanParams->frameLength ;
3770 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3771 finishScanParams->currentOperChannel ;
3772 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3773 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3774 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3776 {
3777 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3778 finishScanParams->scanEntry.bssIdx[i] ;
3779 }
3780
3781
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 /* if Frame length, copy macMgmtHdr ro WDI structure */
3783 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3784 {
3785 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3786 &finishScanParams->macMgmtHdr,
3787 sizeof(WDI_MacMgmtHdr)) ;
3788 }
3789 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 /* Store Init Req pointer, as this will be used for response */
3791 /* store Params pass it to WDI */
3792 pWdaParams->pWdaContext = pWDA;
3793 pWdaParams->wdaMsgParam = finishScanParams;
3794 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 /* call DAL API to pass init scan request to DAL */
3796 status = WDI_FinishScanReq(wdiFinishScanParams,
3797 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003798
Jeff Johnson295189b2012-06-20 16:38:30 -07003799
3800 /*
3801 * WDI API returns failure..
3802 */
3803 if(IS_WDI_STATUS_FAILURE( status))
3804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3806 "Failure in Finish Scan WDI API, free all the memory " );
3807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3808 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 finishScanParams->status = eSIR_FAILURE ;
3810 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 return CONVERT_WDI2VOS_STATUS(status) ;
3813}
Jeff Johnson295189b2012-06-20 16:38:30 -07003814/*---------------------------------------------------------------------
3815 * ASSOC API's
3816 *---------------------------------------------------------------------
3817 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003818/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303819 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 * Trigger Init SCAN callback
3821 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303822void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003823{
3824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3825 tWDA_CbContext *pWDA;
3826 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003828 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 if(NULL == pWdaParams)
3830 {
3831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003832 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 VOS_ASSERT(0) ;
3834 return ;
3835 }
3836 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3837 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3839 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003840 /* reset macBSSID */
3841 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 /* reset macSTASelf */
3843 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003844 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 return ;
3847}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303848
3849/*
3850 * FUNCTION: WDA_JoinReqCallback
3851 * Free memory and send SWITCH CHANNEL RSP back to PE.
3852 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3853 */
3854void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3855{
3856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3857 tWDA_CbContext *pWDA;
3858 tSwitchChannelParams *joinReqParam;
3859
3860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3862
3863 if(NULL == pWdaParams)
3864 {
3865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3866 "%s: pWdaParams received NULL", __func__);
3867 VOS_ASSERT(0);
3868 return;
3869 }
3870
3871 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3872 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3873 joinReqParam->status = wdiStatus;
3874
3875 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3876 {
3877 /* reset macBSSID */
3878 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3879 /* reset macSTASelf */
3880 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3881
3882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3883 vos_mem_free(pWdaParams);
3884 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3885 }
3886
3887 return;
3888}
3889
Jeff Johnson295189b2012-06-20 16:38:30 -07003890/*
3891 * FUNCTION: WDA_ProcessJoinReq
3892 * Trigger Join REQ in WDI
3893 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003894VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3895 tSwitchChannelParams* joinReqParam)
3896{
3897 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 WDI_JoinReqParamsType *wdiJoinReqParam =
3899 (WDI_JoinReqParamsType *)vos_mem_malloc(
3900 sizeof(WDI_JoinReqParamsType)) ;
3901 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 if(NULL == wdiJoinReqParam)
3905 {
3906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003909 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 return VOS_STATUS_E_NOMEM;
3911 }
3912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3913 if(NULL == pWdaParams)
3914 {
3915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 VOS_ASSERT(0);
3918 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003919 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 return VOS_STATUS_E_NOMEM;
3921 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003922
3923 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3924 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3925 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3926 {
3927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3928 "%s: received join request when BSSID or self-STA is NULL "
3929 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003930 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003931 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3932 VOS_ASSERT(0);
3933 vos_mem_free(wdiJoinReqParam);
3934 vos_mem_free(pWdaParams);
3935 joinReqParam->status = eSIR_FAILURE ;
3936 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3937 return VOS_STATUS_E_INVAL;
3938 }
3939
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 /* copy the BSSID for pWDA */
3941 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3942 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3944 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3946 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003947#ifdef WLAN_FEATURE_VOWIFI
3948 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3949 joinReqParam->maxTxPower ;
3950#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3952 joinReqParam->localPowerConstraint ;
3953#endif
3954 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3955 joinReqParam->secondaryChannelOffset ;
3956 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3957
Sachin Ahuja935eda782014-07-30 14:57:41 +05303958 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3959 wdiJoinReqParam->pUserData = pWdaParams;
3960
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 /* Store Init Req pointer, as this will be used for response */
3962 /* store Params pass it to WDI */
3963 pWdaParams->pWdaContext = pWDA;
3964 pWdaParams->wdaMsgParam = joinReqParam;
3965 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303967 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 if(IS_WDI_STATUS_FAILURE(status))
3969 {
3970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3971 "Failure in Join WDI API, free all the memory " );
3972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3973 vos_mem_free(pWdaParams) ;
3974 joinReqParam->status = eSIR_FAILURE ;
3975 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 return CONVERT_WDI2VOS_STATUS(status) ;
3978}
Jeff Johnson295189b2012-06-20 16:38:30 -07003979/*
3980 * FUNCTION: WDA_SwitchChannelReqCallback
3981 * send Switch channel RSP back to PE
3982 */
3983void WDA_SwitchChannelReqCallback(
3984 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3985{
3986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3987 tWDA_CbContext *pWDA;
3988 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003990 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 if(NULL == pWdaParams)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0) ;
3996 return ;
3997 }
3998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3999 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4000
4001#ifdef WLAN_FEATURE_VOWIFI
4002 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
4003#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4005 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004007 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 return ;
4010}
Jeff Johnson295189b2012-06-20 16:38:30 -07004011/*
4012 * FUNCTION: WDA_ProcessChannelSwitchReq
4013 * Request to WDI to switch channel REQ params.
4014 */
4015VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
4016 tSwitchChannelParams *pSwitchChanParams)
4017{
4018 WDI_Status status = WDI_STATUS_SUCCESS ;
4019 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
4020 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
4021 sizeof(WDI_SwitchChReqParamsType)) ;
4022 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(NULL == wdiSwitchChanParam)
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 VOS_ASSERT(0);
4030 return VOS_STATUS_E_NOMEM;
4031 }
4032 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4033 if(NULL == pWdaParams)
4034 {
4035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 VOS_ASSERT(0);
4038 vos_mem_free(wdiSwitchChanParam);
4039 return VOS_STATUS_E_NOMEM;
4040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
4042#ifndef WLAN_FEATURE_VOWIFI
4043 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4044 pSwitchChanParams->localPowerConstraint;
4045#endif
4046 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4047 pSwitchChanParams->secondaryChannelOffset;
4048 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 /* Store req pointer, as this will be used for response */
4050 /* store Params pass it to WDI */
4051 pWdaParams->pWdaContext = pWDA;
4052 pWdaParams->wdaMsgParam = pSwitchChanParams;
4053 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054#ifdef WLAN_FEATURE_VOWIFI
4055 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
4056 = pSwitchChanParams->maxTxPower;
4057 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4058 pSwitchChanParams ->selfStaMacAddr,
4059 sizeof(tSirMacAddr));
4060#endif
4061 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4062 pSwitchChanParams->bssId,
4063 sizeof(tSirMacAddr));
4064
4065 status = WDI_SwitchChReq(wdiSwitchChanParam,
4066 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 if(IS_WDI_STATUS_FAILURE(status))
4068 {
4069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4070 "Failure in process channel switch Req WDI API, free all the memory " );
4071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4072 vos_mem_free(pWdaParams) ;
4073 pSwitchChanParams->status = eSIR_FAILURE ;
4074 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
4075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 return CONVERT_WDI2VOS_STATUS(status) ;
4077}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08004078
4079/*
4080 * FUNCTION: WDA_SwitchChannelReqCallback_V1
4081 * send Switch channel RSP back to PE
4082 */
4083void WDA_SwitchChannelReqCallback_V1(
4084 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
4085 void* pUserData)
4086{
4087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4088 tWDA_CbContext *pWDA;
4089 tSwitchChannelParams *pSwitchChanParams;
4090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4091 "<------ %s " ,__func__);
4092
4093 if (NULL == pWdaParams)
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4096 "%s: pWdaParams received NULL", __func__);
4097 VOS_ASSERT(0);
4098 return ;
4099 }
4100 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4101 pSwitchChanParams =
4102 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4103 pSwitchChanParams->channelSwitchSrc =
4104 wdiSwitchChanRsp->channelSwitchSrc;
4105#ifdef WLAN_FEATURE_VOWIFI
4106 pSwitchChanParams->txMgmtPower =
4107 wdiSwitchChanRsp->ucTxMgmtPower;
4108#endif
4109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4110 vos_mem_free(pWdaParams);
4111 pSwitchChanParams->status =
4112 wdiSwitchChanRsp->wdiStatus ;
4113 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4114 (void *)pSwitchChanParams , 0);
4115 return;
4116}
4117
4118/*
4119 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
4120 * Request to WDI to switch channel REQ params.
4121 */
4122VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
4123 tSwitchChannelParams *pSwitchChanParams)
4124{
4125 WDI_Status status = WDI_STATUS_SUCCESS ;
4126 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
4127 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
4128 sizeof(WDI_SwitchChReqParamsType_V1)) ;
4129 tWDA_ReqParams *pWdaParams ;
4130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4131 "------> %s " ,__func__);
4132 if (NULL == wdiSwitchChanParam)
4133 {
4134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4135 "%s: VOS MEM Alloc Failure", __func__);
4136 VOS_ASSERT(0);
4137 return VOS_STATUS_E_NOMEM;
4138 }
4139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4140 if (NULL == pWdaParams)
4141 {
4142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4143 "%s: VOS MEM Alloc Failure", __func__);
4144 VOS_ASSERT(0);
4145 vos_mem_free(wdiSwitchChanParam);
4146 return VOS_STATUS_E_NOMEM;
4147 }
4148 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
4149 pSwitchChanParams->channelSwitchSrc;
4150
4151 wdiSwitchChanParam->wdiChInfo.ucChannel =
4152 pSwitchChanParams->channelNumber;
4153#ifndef WLAN_FEATURE_VOWIFI
4154 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4155 pSwitchChanParams->localPowerConstraint;
4156#endif
4157 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4158 pSwitchChanParams->secondaryChannelOffset;
4159 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
4160 /* Store req pointer, as this will be used for response */
4161 /* store Params pass it to WDI */
4162 pWdaParams->pWdaContext = pWDA;
4163 pWdaParams->wdaMsgParam = pSwitchChanParams;
4164 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
4165#ifdef WLAN_FEATURE_VOWIFI
4166 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
4167 pSwitchChanParams->maxTxPower;
4168 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4169 pSwitchChanParams ->selfStaMacAddr,
4170 sizeof(tSirMacAddr));
4171#endif
4172 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4173 pSwitchChanParams->bssId,
4174 sizeof(tSirMacAddr));
4175
4176 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
4177 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
4178 pWdaParams);
4179 if (IS_WDI_STATUS_FAILURE(status))
4180 {
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4182 "Failure in process channel switch Req WDI "
4183 "API, free all the memory " );
4184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4185 vos_mem_free(pWdaParams) ;
4186 pSwitchChanParams->status = eSIR_FAILURE ;
4187 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4188 (void *)pSwitchChanParams, 0) ;
4189 }
4190 return CONVERT_WDI2VOS_STATUS(status) ;
4191}
4192
Jeff Johnson295189b2012-06-20 16:38:30 -07004193/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304194 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 * config BSS Req Callback, called by WDI
4196 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304197void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 ,void* pUserData)
4199{
4200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4201 tWDA_CbContext *pWDA;
4202 tAddBssParams *configBssReqParam;
4203 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 if(NULL == pWdaParams)
4207 {
4208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 VOS_ASSERT(0) ;
4211 return ;
4212 }
4213 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4214 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
4215 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004217 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
4219 {
4220 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
4221 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
4223 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
4224 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
4225
4226 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
4227 {
4228 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
4229 {
4230 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
4231 staConfigBssParam->staType = STA_ENTRY_BSSID;
4232 }
4233 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
4234 (staConfigBssParam->staType == STA_ENTRY_SELF))
4235 {
4236 /* This is the 1st add BSS Req for the BTAMP STA */
4237 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4238 staConfigBssParam->staType = STA_ENTRY_BSSID;
4239 }
4240 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4241 (staConfigBssParam->staType == STA_ENTRY_PEER))
4242 {
4243 /* This is the 2nd ADD BSS Request that is sent
4244 * on the BTAMP STA side. The Sta type is
4245 * set to STA_ENTRY_PEER here.*/
4246 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4247 }
4248 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4249 (staConfigBssParam->staType == STA_ENTRY_SELF))
4250 {
4251 /* statype is already set by PE.
4252 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
4253 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
4254 staConfigBssParam->staType = STA_ENTRY_BSSID;
4255 }
4256 else
4257 {
4258 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
4259 staConfigBssParam->staType = STA_ENTRY_PEER;
4260 }
4261 }
4262 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4263 {
4264 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4265 staConfigBssParam->staType = STA_ENTRY_SELF;
4266 }
4267 else
4268 {
4269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4270 "Invalid operation mode specified");
4271 VOS_ASSERT(0);
4272 }
4273
4274 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4279 sizeof(tSirMacAddr));
4280 staConfigBssParam->txChannelWidthSet =
4281 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4283 staConfigBssParam->htCapable)
4284 {
4285 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4286 wdiConfigBssRsp->ucBSSIdx;
4287 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4288 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304289 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4290 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4293 wdiConfigBssRsp->ucBSSIdx,
4294 wdiConfigBssRsp->ucSTAIdx))
4295 {
4296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004297 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 VOS_ASSERT(0) ;
4299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4301 {
4302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004303 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 VOS_ASSERT(0) ;
4305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004306#ifdef WLAN_FEATURE_VOWIFI
4307 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4308#endif
4309 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304310 else
4311 {
4312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4313 "%s: Failure with status %d", __func__,
4314 wdiConfigBssRsp->wdiStatus);
4315 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4316 WLAN_LOG_INDICATOR_HOST_DRIVER,
4317 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4318 FALSE, TRUE);
4319 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304320 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4321 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4323 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 return ;
4326}
Jeff Johnson295189b2012-06-20 16:38:30 -07004327/*
4328 * FUNCTION: WDA_UpdateEdcaParamsForAC
4329 * Update WDI EDCA params with PE edca params
4330 */
4331void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4332 WDI_EdcaParamRecord *wdiEdcaParam,
4333 tSirMacEdcaParamRecord *macEdcaParam)
4334{
4335 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4336 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4337 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4338 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4339 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4340 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4341}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304342void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4343 void* pUserData)
4344{
4345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4346 tWDA_CbContext *pWDA;
4347 tAddBssParams *addBssParams;
4348
4349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4350 "<------ %s, wdiStatus: %d",
4351 __func__, wdiStatus);
4352
4353 if (NULL == pWdaParams)
4354 {
4355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4356 "%s: Invalid pWdaParams pointer", __func__);
4357 VOS_ASSERT(0);
4358 return;
4359 }
4360
4361 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4362 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4363
4364 addBssParams->status = wdiStatus;
4365
4366 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4367 {
4368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4369 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304370 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4371 WLAN_LOG_INDICATOR_HOST_DRIVER,
4372 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4373 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304374 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4375 }
4376
4377 return ;
4378}
4379
Jeff Johnson295189b2012-06-20 16:38:30 -07004380/*
4381 * FUNCTION: WDA_ProcessConfigBssReq
4382 * Configure BSS before starting Assoc with AP
4383 */
4384VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4385 tAddBssParams* configBssReqParam)
4386{
4387 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304388 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004391 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304392 if (NULL == configBssReqParam)
4393 {
4394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4395 "%s: configBssReqParam is NULL", __func__);
4396 return VOS_STATUS_E_INVAL;
4397 }
4398
4399 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4400 sizeof(WDI_ConfigBSSReqParamsType)) ;
4401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 if(NULL == wdiConfigBssReqParam)
4403 {
4404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 VOS_ASSERT(0);
4407 return VOS_STATUS_E_NOMEM;
4408 }
4409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4410 if(NULL == pWdaParams)
4411 {
4412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 VOS_ASSERT(0);
4415 vos_mem_free(wdiConfigBssReqParam);
4416 return VOS_STATUS_E_NOMEM;
4417 }
Kiran4a17ebe2013-01-31 10:43:43 -08004418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4419 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4422 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304423 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4424 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 /* Store Init Req pointer, as this will be used for response */
4426 /* store Params pass it to WDI */
4427 pWdaParams->pWdaContext = pWDA;
4428 pWdaParams->wdaMsgParam = configBssReqParam;
4429 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304431 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 if(IS_WDI_STATUS_FAILURE(status))
4433 {
4434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4435 "Failure in Config BSS WDI API, free all the memory " );
4436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4437 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 return CONVERT_WDI2VOS_STATUS(status) ;
4442}
Jeff Johnson295189b2012-06-20 16:38:30 -07004443#ifdef ENABLE_HAL_COMBINED_MESSAGES
4444/*
4445 * FUNCTION: WDA_PostAssocReqCallback
4446 * Post ASSOC req callback, send RSP back to PE
4447 */
4448void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4449 void* pUserData)
4450{
4451 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4452 tPostAssocParams *postAssocReqParam =
4453 (tPostAssocParams *)pWDA->wdaMsgParam ;
4454 /*STA context within the BSS Params*/
4455 tAddStaParams *staPostAssocParam =
4456 &postAssocReqParam->addBssParams.staContext ;
4457 /*STA Params for self STA*/
4458 tAddStaParams *selfStaPostAssocParam =
4459 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004461 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004463 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4465 {
4466 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4467 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4468 sizeof(tSirMacAddr)) ;
4469 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4470 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4471 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4473 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304474 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4476 pWDA->wdaWdiApiMsgParam = NULL;
4477 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 return ;
4480}
Jeff Johnson295189b2012-06-20 16:38:30 -07004481/*
4482 * FUNCTION: WDA_ProcessPostAssocReq
4483 * Trigger POST ASSOC processing in WDI
4484 */
4485VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4486 tPostAssocParams *postAssocReqParam)
4487{
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 WDI_Status status = WDI_STATUS_SUCCESS ;
4489
4490 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4491 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4492 sizeof(WDI_PostAssocReqParamsType)) ;
4493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004494 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004495
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 if(NULL == wdiPostAssocReqParam)
4497 {
4498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 VOS_ASSERT(0);
4501 return VOS_STATUS_E_NOMEM;
4502 }
4503
4504 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4505 {
4506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 VOS_ASSERT(0);
4509 return VOS_STATUS_E_FAILURE;
4510 }
4511
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 /* update BSS params into WDI structure */
4513 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4514 &postAssocReqParam->addBssParams) ;
4515 /* update STA params into WDI structure */
4516 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4517 &postAssocReqParam->addStaParams) ;
4518
4519 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4520 postAssocReqParam->addBssParams.highPerformance;
4521 WDA_UpdateEdcaParamsForAC(pWDA,
4522 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4523 &postAssocReqParam->addBssParams.acbe);
4524 WDA_UpdateEdcaParamsForAC(pWDA,
4525 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4526 &postAssocReqParam->addBssParams.acbk);
4527 WDA_UpdateEdcaParamsForAC(pWDA,
4528 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4529 &postAssocReqParam->addBssParams.acvi);
4530 WDA_UpdateEdcaParamsForAC(pWDA,
4531 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4532 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 /* Store Init Req pointer, as this will be used for response */
4534 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 /* store Params pass it to WDI */
4536 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4538 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 if(IS_WDI_STATUS_FAILURE(status))
4540 {
4541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4542 "Failure in Post Assoc WDI API, free all the memory " );
4543 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4544 pWDA->wdaWdiApiMsgParam = NULL;
4545 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 return CONVERT_WDI2VOS_STATUS(status) ;
4550}
4551#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004552/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304553 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 * ADD STA req callback, send RSP back to PE
4555 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304556void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 void* pUserData)
4558{
4559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4560 tWDA_CbContext *pWDA;
4561 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004563 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 if(NULL == pWdaParams)
4565 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 VOS_ASSERT(0) ;
4568 return ;
4569 }
4570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4571 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004573 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4575 {
4576 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4577 /*TODO: UMAC structure doesn't have these fields*/
4578 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4579 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4580 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4581 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4582 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4583 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004584#ifdef FEATURE_WLAN_TDLS
4585 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4586 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4587#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004589#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 {
4591 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4592 wdiConfigStaRsp->ucBssIdx;
4593 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4594 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304595 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4596 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 }
4598 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4599 {
4600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004601 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 VOS_ASSERT(0) ;
4603 return ;
4604 }
4605 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304606 else
4607 {
4608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4609 "%s: Failure with status %d", __func__,
4610 wdiConfigStaRsp->wdiStatus);
4611 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4612 WLAN_LOG_INDICATOR_HOST_DRIVER,
4613 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4614 FALSE, TRUE);
4615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4617 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 return ;
4620}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304621void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4622 void* pUserData)
4623{
4624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4625 tWDA_CbContext *pWDA;
4626 tAddStaParams *addStaParams;
4627
4628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4629 "<------ %s, wdiStatus: %d",
4630 __func__, wdiStatus);
4631
4632 if (NULL == pWdaParams)
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4635 "%s: Invalid pWdaParams pointer", __func__);
4636 VOS_ASSERT(0);
4637 return;
4638 }
4639
4640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4641 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4642
4643 addStaParams->status = wdiStatus;
4644
4645 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4646 {
4647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4648 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304649 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4650 WLAN_LOG_INDICATOR_HOST_DRIVER,
4651 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4652 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304653 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4654 }
4655
4656 return ;
4657}
4658
Jeff Johnson295189b2012-06-20 16:38:30 -07004659/*
4660 * FUNCTION: WDA_ConfigStaReq
4661 * Trigger Config STA processing in WDI
4662 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304663VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 tAddStaParams *addStaReqParam)
4665{
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004667 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4668 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4669 sizeof(WDI_ConfigSTAReqParamsType)) ;
4670 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(NULL == wdiConfigStaReqParam)
4674 {
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 VOS_ASSERT(0);
4678 return VOS_STATUS_E_NOMEM;
4679 }
4680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4681 if(NULL == pWdaParams)
4682 {
4683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 VOS_ASSERT(0);
4686 vos_mem_free(wdiConfigStaReqParam);
4687 return VOS_STATUS_E_NOMEM;
4688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 /* update STA params into WDI structure */
4691 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4692 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304693 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4694 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 /* Store Init Req pointer, as this will be used for response */
4696 /* store Params pass it to WDI */
4697 pWdaParams->pWdaContext = pWDA;
4698 pWdaParams->wdaMsgParam = addStaReqParam;
4699 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304700
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304702 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 if(IS_WDI_STATUS_FAILURE(status))
4704 {
4705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4706 "Failure in Config STA WDI API, free all the memory " );
4707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4708 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 return CONVERT_WDI2VOS_STATUS(status) ;
4713}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304714#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304715
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304716/**
4717 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4718 *
4719 * @pWDA: WDA Call back context
4720 * @addStaReqParam: Add sta request params
4721 *
4722 * This function process sta params and store them to WDA layer.
4723 * It will register station entry to mempool as well.
4724 * As station is already in associated state in firmware this
4725 * function doesnt send any request to firmware and wait for response,
4726 * instead of that this function will send response from here.
4727 *
4728 * Return: Return VOS_STATUS
4729 */
4730VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4731 tAddStaParams *addStaReqParam)
4732{
4733 WDI_Status status = WDI_STATUS_SUCCESS ;
4734 WDI_AddStaParams wdiAddSTAParam = {0};
4735 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4736 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4737 sizeof(WDI_ConfigSTAReqParamsType)) ;
4738
4739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4740 "------> %s " ,__func__);
4741
4742 if (NULL == wdiConfigStaReqParam)
4743 {
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4745 "%s: VOS MEM Alloc Failure", __func__);
4746 VOS_ASSERT(0);
4747 return VOS_STATUS_E_NOMEM;
4748 }
4749
4750 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4751 /* update STA params into WDI structure */
4752 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4753 addStaReqParam);
4754 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4755 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4756 /* MAC Address of STA */
4757 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4758 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4759 WDI_MAC_ADDR_LEN);
4760
4761 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4762 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4763 WDI_MAC_ADDR_LEN);
4764
4765 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4766 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4767 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4768 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4769 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4770 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
Agrawal Ashishedd0f622016-12-19 20:27:02 +05304771 wdiAddSTAParam.ucWmmEnabled = addStaReqParam->wmmEnabled;
4772 wdiAddSTAParam.ucRmfEnabled = addStaReqParam->rmfEnabled;
4773 wdiAddSTAParam.ucBSSIdx = addStaReqParam->bssIdx;
4774 wdiAddSTAParam.ucHTCapable = addStaReqParam->htCapable;
4775
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304776
4777 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4778 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4779 WDA_VALID_STA_INDEX;
4780 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4781 addStaReqParam->currentOperChan;
4782
4783 if (WDI_STATUS_SUCCESS !=
4784 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4785 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4786 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4787 {
4788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4789 "%s: Failed to get selfStaIdx!", __func__);
4790 }
4791 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4792 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4793 {
4794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4795 "%s: add STA into mempool fail", __func__);
4796 VOS_ASSERT(0) ;
4797 }
4798 vos_mem_free(wdiConfigStaReqParam);
4799 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4800 return status;
4801}
4802#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004803/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304804 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304806 */
4807void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 void* pUserData)
4809{
4810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4811 tWDA_CbContext *pWDA;
4812 tDeleteBssParams *delBssReqParam;
4813 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004815 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 if(NULL == pWdaParams)
4817 {
4818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 VOS_ASSERT(0) ;
4821 return ;
4822 }
4823 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4824 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004825 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4827 {
4828 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4829 sizeof(tSirMacAddr)) ;
4830 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304831 else
4832 {
4833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4834 "%s: Failure with status %d", __func__,
4835 wdiDelBssRsp->wdiStatus);
4836 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4837 WLAN_LOG_INDICATOR_HOST_DRIVER,
4838 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4839 FALSE, TRUE);
4840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4842 {
4843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004844 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 VOS_ASSERT(0) ;
4846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4848 {
4849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004850 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_ASSERT(0) ;
4852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 VOS_ASSERT(0) ;
4858 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304859
4860 WLANTL_StartForwarding(staIdx,0,0);
4861
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4863 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 /* reset the the system role*/
4865 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4866
4867 /* Reset the BA related information */
4868 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4869 {
4870 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4871 {
4872 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4873 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304874 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 /* Reset framesTxed counters here */
4876 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4877 {
4878 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4879 }
4880 }
4881 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304882
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 return ;
4885}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304886void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4887 void* pUserData)
4888{
4889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4890 tWDA_CbContext *pWDA;
4891 tDeleteBssParams *delbssParams;
4892
4893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4894 "<------ %s, wdiStatus: %d",
4895 __func__, wdiStatus);
4896
4897 if (NULL == pWdaParams)
4898 {
4899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4900 "%s: Invalid pWdaParams pointer", __func__);
4901 VOS_ASSERT(0);
4902 return;
4903 }
4904
4905 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4906 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4907
4908 delbssParams->status = wdiStatus ;
4909
4910 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4911 {
4912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4913 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304914 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4915 WLAN_LOG_INDICATOR_HOST_DRIVER,
4916 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4917 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304918 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4919 }
4920
4921 return ;
4922}
Jeff Johnson295189b2012-06-20 16:38:30 -07004923
Jeff Johnson295189b2012-06-20 16:38:30 -07004924/*
4925 * FUNCTION: WDA_ProcessDelBssReq
4926 * Init DEL BSS req with WDI
4927 */
4928VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4929 tDeleteBssParams *delBssParam)
4930{
4931 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4933 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4934 sizeof(WDI_DelBSSReqParamsType)) ;
4935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 if(NULL == wdiDelBssReqParam)
4939 {
4940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 VOS_ASSERT(0);
4943 return VOS_STATUS_E_NOMEM;
4944 }
4945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4946 if(NULL == pWdaParams)
4947 {
4948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_ASSERT(0);
4951 vos_mem_free(wdiDelBssReqParam);
4952 return VOS_STATUS_E_NOMEM;
4953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304955 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4956 wdiDelBssReqParam->pUserData = pWdaParams;
4957
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 /* Store Init Req pointer, as this will be used for response */
4959 /* store Params pass it to WDI */
4960 pWdaParams->pWdaContext = pWDA;
4961 pWdaParams->wdaMsgParam = delBssParam;
4962 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304963
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304965 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(IS_WDI_STATUS_FAILURE(status))
4967 {
4968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4969 "Failure in Del BSS WDI API, free all the memory " );
4970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4971 vos_mem_free(pWdaParams) ;
4972 delBssParam->status = eSIR_FAILURE ;
4973 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 return CONVERT_WDI2VOS_STATUS(status) ;
4976}
Jeff Johnson295189b2012-06-20 16:38:30 -07004977/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304978 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304980 */
4981void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 void* pUserData)
4983{
4984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4985 tWDA_CbContext *pWDA;
4986 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004988 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 if(NULL == pWdaParams)
4990 {
4991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004992 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304993 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 return ;
4995 }
4996 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4997 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004998 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
5000 {
5001 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
5002 {
5003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005004 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 VOS_ASSERT(0) ;
5006 }
5007 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05305008 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 }
Abhishek Singh837adf22015-10-01 17:37:37 +05305010 else
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "%s: Failure with status %d", __func__,
5014 wdiDelStaRsp->wdiStatus);
5015 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5016 WLAN_LOG_INDICATOR_HOST_DRIVER,
5017 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5018 FALSE, TRUE);
5019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5021 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 /*Reset the BA information corresponding to this STAIdx */
5023 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
5024 WDA_INVALID_STA_INDEX;
5025 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05305026 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 return ;
5029}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305030void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
5031 void* pUserData)
5032{
5033 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5034 tWDA_CbContext *pWDA;
5035 tDeleteStaParams *delStaParams;
5036
5037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5038 "<------ %s, wdiStatus: %d",
5039 __func__, wdiStatus);
5040
5041 if (NULL == pWdaParams)
5042 {
5043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5044 "%s: Invalid pWdaParams pointer", __func__);
5045 VOS_ASSERT(0);
5046 return;
5047 }
5048
5049 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5050 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
5051
5052 delStaParams->status = wdiStatus ;
5053
5054 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5055 {
5056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5057 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305058 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5059 WLAN_LOG_INDICATOR_HOST_DRIVER,
5060 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5061 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305062 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
5063 }
5064
5065 return ;
5066}
5067
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305068#ifdef SAP_AUTH_OFFLOAD
5069/**
5070 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
5071 *
5072 * @pWDA: WDA Call back context
5073 * @delStaParam: Del sta request params
5074 *
5075 * This function process sta params and remove entry from WDA layer.
5076 * It will unregister station entry from mempool as well.
5077 * As station is already in disassociated state in firmware this
5078 * function doesn't send any request to firmware and wait for response,
5079 * instead of that this function will send response from here.
5080 *
5081 * Return: Return VOS_STATUS
5082 */
5083void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
5084 tDeleteStaParams *delStaParam)
5085
5086{
5087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5088 "------> %s " ,__func__);
5089
5090 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
5091 {
5092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5093 "%s: DEL STA from MemPool Fail", __func__);
5094 // VOS_ASSERT(0) ;
5095 }
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305096 WLANTL_StartForwarding(delStaParam->staIdx, 0, 0);
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305097 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
5098 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
5099 WDA_INVALID_STA_INDEX;
5100 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305101 pWDA->wdaStaInfo[delStaParam->staIdx].ucUseBaBitmap = 0;
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305102 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
5103 return ;
5104}
5105#endif
5106
Jeff Johnson295189b2012-06-20 16:38:30 -07005107/*
5108 * FUNCTION: WDA_ProcessDelStaReq
5109 * Init DEL STA req with WDI
5110 */
5111VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
5112 tDeleteStaParams *delStaParam)
5113{
5114 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
5116 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
5117 sizeof(WDI_DelSTAReqParamsType)) ;
5118 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 if(NULL == wdiDelStaReqParam)
5122 {
5123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 VOS_ASSERT(0);
5126 return VOS_STATUS_E_NOMEM;
5127 }
5128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5129 if(NULL == pWdaParams)
5130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 VOS_ASSERT(0);
5134 vos_mem_free(wdiDelStaReqParam);
5135 return VOS_STATUS_E_NOMEM;
5136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305138 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
5139 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005140 /* Store Init Req pointer, as this will be used for response */
5141 /* store Params pass it to WDI */
5142 pWdaParams->pWdaContext = pWDA;
5143 pWdaParams->wdaMsgParam = delStaParam;
5144 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305145
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305147 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 if(IS_WDI_STATUS_FAILURE(status))
5149 {
5150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5151 "Failure in Del STA WDI API, free all the memory status = %d",
5152 status );
5153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5154 vos_mem_free(pWdaParams) ;
5155 delStaParam->status = eSIR_FAILURE ;
5156 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
5157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 return CONVERT_WDI2VOS_STATUS(status) ;
5159}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305160void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07005161{
5162 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5163 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305164 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 if(NULL == pWdaParams)
5168 {
5169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 VOS_ASSERT(0) ;
5172 return ;
5173 }
5174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5175 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5177 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
5179 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
5180 pwdiAddSTASelfRsp->macSelfSta,
5181 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305182 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
5183 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
5184 if (pAddStaSelfRsp->status == eSIR_FAILURE)
5185 {
5186 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
5187 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5189 "%s: Failure with status %d failcnter %d", __func__,
5190 pwdiAddSTASelfRsp->wdiStatus,
5191 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5192 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5193 WLAN_LOG_INDICATOR_HOST_DRIVER,
5194 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5195 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 return ;
5199}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305200void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
5201 void* pUserData)
5202{
5203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5204 tWDA_CbContext *pWDA;
5205 tAddStaSelfParams *addStaSelfParams;
5206
5207 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5208 "<------ %s, wdiStatus: %d",
5209 __func__, wdiStatus);
5210
5211 if (NULL == pWdaParams)
5212 {
5213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5214 "%s: Invalid pWdaParams pointer", __func__);
5215 VOS_ASSERT(0);
5216 return;
5217 }
5218
5219 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5220 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
5221
5222 addStaSelfParams->status = wdiStatus ;
5223
5224 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5225 {
5226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5227 vos_mem_free(pWdaParams) ;
5228 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
5229 = WDA_ADDSTA_REQ_WDI_FAIL;
5230 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5232 "%s: Failure with status %d failcnter %d", __func__,
5233 wdiStatus,
5234 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5235 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5236 WLAN_LOG_INDICATOR_HOST_DRIVER,
5237 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5238 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305239 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
5240 }
5241
5242 return ;
5243}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305244
Jeff Johnson295189b2012-06-20 16:38:30 -07005245/*
5246 * FUNCTION: WDA_ProcessAddStaSelfReq
5247 *
5248 */
5249VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
5250{
5251 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005252 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
5254 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
5255 sizeof(WDI_AddSTASelfReqParamsType)) ;
5256 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005258 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305259 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 if( NULL == wdiAddStaSelfReq )
5261 {
5262 VOS_ASSERT( 0 );
5263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005264 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305265 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5266 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005267 return( VOS_STATUS_E_NOMEM );
5268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 if( NULL == pWdaParams )
5271 {
5272 VOS_ASSERT( 0 );
5273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005274 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305275 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5276 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 vos_mem_free(wdiAddStaSelfReq) ;
5278 return( VOS_STATUS_E_NOMEM );
5279 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305280 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5281 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005283 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 /* Store Init Req pointer, as this will be used for response */
5285 /* store Params pass it to WDI */
5286 pWdaParams->pWdaContext = pWDA;
5287 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305288 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5289
5290 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5291 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005292
Jeff Johnson43971f52012-07-17 12:26:56 -07005293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5296 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005297 wstatus );
5298 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5300 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305301 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5302 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 pAddStaSelfReq->status = eSIR_FAILURE ;
5304 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5305 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005306 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307}
Jeff Johnson295189b2012-06-20 16:38:30 -07005308/*
5309 * FUNCTION: WDA_DelSTASelfRespCallback
5310 *
5311 */
5312void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5313 wdiDelStaSelfRspParams , void* pUserData)
5314{
5315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5316 tWDA_CbContext *pWDA;
5317 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005319 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 if (NULL == pWdaParams)
5321 {
5322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005323 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 VOS_ASSERT(0);
5325 return;
5326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5328 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005330 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331
5332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5333 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305334 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305335 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5337 "%s: Failure with status %d", __func__,
5338 wdiDelStaSelfRspParams->wdiStatus);
5339 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5340 WLAN_LOG_INDICATOR_HOST_DRIVER,
5341 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5342 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 return ;
5346}
Jeff Johnson295189b2012-06-20 16:38:30 -07005347/*
5348 * FUNCTION: WDA_DelSTASelfReqCallback
5349 *
5350 */
5351void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5352 void* pUserData)
5353{
5354 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5355 tWDA_CbContext *pWDA;
5356 tDelStaSelfParams *delStaSelfParams;
5357
5358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05305359 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005360 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005361
5362 if (NULL == pWdaParams)
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005365 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 VOS_ASSERT(0);
5367 return;
5368 }
5369
5370 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5371 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5372
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005373 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005374
5375 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5376 {
5377 VOS_ASSERT(0);
5378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5379 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305380 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5381 WLAN_LOG_INDICATOR_HOST_DRIVER,
5382 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5383 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5385 }
5386
5387 return ;
5388}
5389
5390/*
5391 * FUNCTION: WDA_DelSTASelfReq
5392 * Trigger Config STA processing in WDI
5393 */
5394VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5395 tDelStaSelfParams* pDelStaSelfReqParam)
5396{
5397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005398 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 tWDA_ReqParams *pWdaParams = NULL;
5400 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5401 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5402 sizeof(WDI_DelSTASelfReqParamsType)) ;
5403
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005405 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 if( NULL == wdiDelStaSelfReq )
5407 {
5408 VOS_ASSERT( 0 );
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 return( VOS_STATUS_E_NOMEM );
5412 }
5413
5414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5415 if( NULL == pWdaParams )
5416 {
5417 VOS_ASSERT( 0 );
5418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005419 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 vos_mem_free(wdiDelStaSelfReq) ;
5421 return( VOS_STATUS_E_NOMEM );
5422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 pWdaParams->pWdaContext = pWDA;
5424 /* Store param pointer as passed in by caller */
5425 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5426 /* store Params pass it to WDI */
5427 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5429 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5430
5431 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5432 wdiDelStaSelfReq->pUserData = pWdaParams;
5433
Jeff Johnson43971f52012-07-17 12:26:56 -07005434 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5436
Jeff Johnson43971f52012-07-17 12:26:56 -07005437 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 {
5439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5440 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5441 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005442 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5444 vos_mem_free(pWdaParams) ;
5445 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5446 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5447 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005448 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449}
5450
Jeff Johnson295189b2012-06-20 16:38:30 -07005451/*
5452 * FUNCTION: WDA_SendMsg
5453 * Send Message back to PE
5454 */
5455void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5456 void *pBodyptr, tANI_U32 bodyVal)
5457{
5458 tSirMsgQ msg = {0} ;
5459 tANI_U32 status = VOS_STATUS_SUCCESS ;
5460 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 msg.type = msgType;
5462 msg.bodyval = bodyVal;
5463 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 if (VOS_STATUS_SUCCESS != status)
5466 {
5467 if(NULL != pBodyptr)
5468 {
5469 vos_mem_free(pBodyptr);
5470 }
5471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005472 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 VOS_ASSERT(0) ;
5474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 return ;
5476}
Jeff Johnson295189b2012-06-20 16:38:30 -07005477/*
5478 * FUNCTION: WDA_UpdateBSSParams
5479 * Translated WDA/PE BSS info into WDI BSS info..
5480 */
5481void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5482 WDI_ConfigBSSReqInfoType *wdiBssParams,
5483 tAddBssParams *wdaBssParams)
5484{
5485 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305486 v_U8_t i = 0;
5487
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 /* copy bssReq Params to WDI structure */
5489 vos_mem_copy(wdiBssParams->macBSSID,
5490 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5491 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5492 sizeof(tSirMacAddr)) ;
5493 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5494 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5495 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 wdiBssParams->ucShortSlotTimeSupported =
5497 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5499 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5500 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5501 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5502 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5503
5504 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5505 wdiBssParams->ucTXOPProtectionFullSupport =
5506 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5508 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5511 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5512 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5513 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5514
Chet Lanctot186b5732013-03-18 10:26:30 -07005515 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5516
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 /* copy SSID into WDI structure */
5518 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5519 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5520 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5522 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524#ifdef WLAN_FEATURE_VOWIFI
5525 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5526#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529#ifdef WLAN_FEATURE_VOWIFI_11R
5530 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 if(wdiBssParams->bExtSetStaKeyParamValid)
5532 {
5533 /* copy set STA key params to WDI structure */
5534 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5535 wdaBssParams->extSetStaKeyParam.staIdx;
5536 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5537 wdaBssParams->extSetStaKeyParam.encType;
5538 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5539 wdaBssParams->extSetStaKeyParam.wepType;
5540 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5541 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5543 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005544 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5546 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5547 {
5548 WDA_GetWepKeysFromCfg( pWDA,
5549 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5550 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5551 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5552 }
5553 else
5554 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5556 keyIndex++)
5557 {
5558 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5559 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5560 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5561 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5562 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5563 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305564
5565 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5566 {
5567 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5568 {
5569 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5570 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5571 }
5572
5573 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5574 {
5575 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5576 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5577 }
5578 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5579 FL("%s: Negated Keys"), __func__);
5580 }
5581 else
5582 {
5583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5584 FL("%s: No change in Keys "), __func__);
5585 vos_mem_copy(
5586 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5587 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5588 WLAN_MAX_KEY_RSC_LEN);
5589 vos_mem_copy(
5590 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5591 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5592 SIR_MAC_MAX_KEY_LENGTH);
5593 }
5594
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5596 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5597 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5598 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305600 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 }
5603 }
5604 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5605 }
5606 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5607 {
5608 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5609 sizeof(wdaBssParams->extSetStaKeyParam) );
5610 }
5611#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005612#ifdef WLAN_FEATURE_11AC
5613 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5614 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5615#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005616
5617 return ;
5618}
Jeff Johnson295189b2012-06-20 16:38:30 -07005619/*
5620 * FUNCTION: WDA_UpdateSTAParams
5621 * Translated WDA/PE BSS info into WDI BSS info..
5622 */
5623void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5624 WDI_ConfigStaReqInfoType *wdiStaParams,
5625 tAddStaParams *wdaStaParams)
5626{
5627 tANI_U8 i = 0;
5628 /* Update STA params */
5629 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5630 sizeof(tSirMacAddr)) ;
5631 wdiStaParams->usAssocId = wdaStaParams->assocId;
5632 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005633 wdiStaParams->staIdx = wdaStaParams->staIdx;
5634
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 wdiStaParams->ucShortPreambleSupported =
5636 wdaStaParams->shortPreambleSupported;
5637 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5638 sizeof(tSirMacAddr)) ;
5639 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5640
5641 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5642
5643 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5644 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5645 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5646 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5647 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5648 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5649 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5650
5651 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5652 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 wdiStaParams->wdiSupportedRates.opRateMode =
5654 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5656 {
5657 wdiStaParams->wdiSupportedRates.llbRates[i] =
5658 wdaStaParams->supportedRates.llbRates[i];
5659 }
5660 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5661 {
5662 wdiStaParams->wdiSupportedRates.llaRates[i] =
5663 wdaStaParams->supportedRates.llaRates[i];
5664 }
5665 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5666 {
5667 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5668 wdaStaParams->supportedRates.aniLegacyRates[i];
5669 }
5670 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5671 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005672#ifdef WLAN_FEATURE_11AC
5673 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5674 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5675 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5676 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5677#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5679 {
5680 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5681 wdaStaParams->supportedRates.supportedMCSSet[i];
5682 }
5683 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5684 wdaStaParams->supportedRates.rxHighestDataRate;
5685
5686 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5687
5688 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5689
5690 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5691 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5692 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5693
5694 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5695 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5696 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5697 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005699#ifdef WLAN_FEATURE_11AC
5700 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5701 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005702 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305703 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5704 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5705 * must be set by default */
5706 if ( wdiStaParams->vhtTxMUBformeeCapable )
5707 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005708#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005709 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5710 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 return ;
5712}
Jeff Johnson295189b2012-06-20 16:38:30 -07005713/*
5714 * -------------------------------------------------------------------------
5715 * CFG update to WDI
5716 * -------------------------------------------------------------------------
5717 */
5718
5719 /*
5720 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5721 * Convert the WNI CFG ID to HAL CFG ID
5722 */
mukul sharma6b53e202016-11-23 19:29:18 +05305723static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005724{
5725 switch(wniCfgId)
5726 {
5727 case WNI_CFG_STA_ID:
5728 return QWLAN_HAL_CFG_STA_ID;
5729 case WNI_CFG_CURRENT_TX_ANTENNA:
5730 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5731 case WNI_CFG_CURRENT_RX_ANTENNA:
5732 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5733 case WNI_CFG_LOW_GAIN_OVERRIDE:
5734 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5735 case WNI_CFG_POWER_STATE_PER_CHAIN:
5736 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5737 case WNI_CFG_CAL_PERIOD:
5738 return QWLAN_HAL_CFG_CAL_PERIOD;
5739 case WNI_CFG_CAL_CONTROL:
5740 return QWLAN_HAL_CFG_CAL_CONTROL;
5741 case WNI_CFG_PROXIMITY:
5742 return QWLAN_HAL_CFG_PROXIMITY;
5743 case WNI_CFG_NETWORK_DENSITY:
5744 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5745 case WNI_CFG_MAX_MEDIUM_TIME:
5746 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5747 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5748 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5749 case WNI_CFG_RTS_THRESHOLD:
5750 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5751 case WNI_CFG_SHORT_RETRY_LIMIT:
5752 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5753 case WNI_CFG_LONG_RETRY_LIMIT:
5754 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5755 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5756 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5757 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5758 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5759 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5760 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5761 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5762 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5763 case WNI_CFG_FIXED_RATE:
5764 return QWLAN_HAL_CFG_FIXED_RATE;
5765 case WNI_CFG_RETRYRATE_POLICY:
5766 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5767 case WNI_CFG_RETRYRATE_SECONDARY:
5768 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5769 case WNI_CFG_RETRYRATE_TERTIARY:
5770 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5771 case WNI_CFG_FORCE_POLICY_PROTECTION:
5772 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5773 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5774 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5775 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5776 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5777 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5778 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5779 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5780 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5781 case WNI_CFG_MAX_BA_SESSIONS:
5782 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5783 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5784 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5785 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5786 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5787 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5788 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5789 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5790 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5791 case WNI_CFG_STATS_PERIOD:
5792 return QWLAN_HAL_CFG_STATS_PERIOD;
5793 case WNI_CFG_CFP_MAX_DURATION:
5794 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5795#if 0 /*This is not part of CFG*/
5796 case WNI_CFG_FRAME_TRANS_ENABLED:
5797 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5798#endif
5799 case WNI_CFG_DTIM_PERIOD:
5800 return QWLAN_HAL_CFG_DTIM_PERIOD;
5801 case WNI_CFG_EDCA_WME_ACBK:
5802 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5803 case WNI_CFG_EDCA_WME_ACBE:
5804 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5805 case WNI_CFG_EDCA_WME_ACVI:
5806 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5807 case WNI_CFG_EDCA_WME_ACVO:
5808 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5809#if 0
5810 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5811 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5812 case WNI_CFG_TELE_BCN_TRANS_LI:
5813 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5814 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5815 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5816 case WNI_CFG_TELE_BCN_MAX_LI:
5817 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5818 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5819 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5820#endif
5821 case WNI_CFG_ENABLE_CLOSE_LOOP:
5822 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005823 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5824 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305825 case WNI_CFG_ENABLE_CONC_BMISS:
5826 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5827 case WNI_CFG_ENABLE_UNITS_BWAIT:
5828 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305829 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5830 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305831 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5832 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Ravi Kumar bokka7d032762016-12-12 23:33:01 +05305833 case WNI_CFG_HEART_BEAT_THRESHOLD:
5834 return QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
5835
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 default:
5837 {
5838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005839 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305841 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 }
5843 }
5844}
Jeff Johnson295189b2012-06-20 16:38:30 -07005845/*
5846 * FUNCTION: WDA_UpdateCfgCallback
5847 *
5848 */
5849void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5850{
5851 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5852 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5853 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 /*
5857 * currently there is no response message is expected between PE and
5858 * WDA, Failure return from WDI is a ASSERT condition
5859 */
5860 if(WDI_STATUS_SUCCESS != wdiStatus)
5861 {
5862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005863 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5865 }
5866
5867 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5868 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5869 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 return ;
5871}
Jeff Johnson295189b2012-06-20 16:38:30 -07005872/*
5873 * FUNCTION: WDA_UpdateCfg
5874 *
5875 */
5876VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5877{
5878
5879 WDI_Status status = WDI_STATUS_SUCCESS ;
5880 tANI_U32 val =0;
5881 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5882 tHalCfg *configData;
5883 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5884 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 if (NULL == pMac )
5888 {
5889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005890 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 return VOS_STATUS_E_FAILURE;
5892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 if(WDA_START_STATE != pWDA->wdaState)
5894 {
5895 return VOS_STATUS_E_FAILURE;
5896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5898 {
5899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005900 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005901 VOS_ASSERT(0);
5902 return VOS_STATUS_E_FAILURE;
5903 }
mukul sharma6b53e202016-11-23 19:29:18 +05305904
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5906 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 if(NULL == wdiCfgReqParam)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_ASSERT(0);
5912 return VOS_STATUS_E_NOMEM;
5913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5915 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(NULL == wdiCfgReqParam->pConfigBuffer)
5917 {
5918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 vos_mem_free(wdiCfgReqParam);
5921 VOS_ASSERT(0);
5922 return VOS_STATUS_E_NOMEM;
5923 }
mukul sharma6b53e202016-11-23 19:29:18 +05305924
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 /*convert the WNI CFG Id to HAL CFG Id*/
5926 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5927 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5928
5929 /*TODO: revisit this for handling string parameters */
5930 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5931 &val) != eSIR_SUCCESS)
5932 {
5933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005934 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5936 vos_mem_free(wdiCfgReqParam);
5937 return eSIR_FAILURE;
5938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5940 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5941 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5942 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5943 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5944
5945 /* store Params pass it to WDI */
5946 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5948 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5949 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 if(IS_WDI_STATUS_FAILURE(status))
5951 {
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5953 "Failure in Update CFG WDI API, free all the memory " );
5954 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5955 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5956 pWDA->wdaWdiCfgApiMsgParam = NULL;
5957 /* Failure is not expected */
5958 VOS_ASSERT(0) ;
5959 }
5960#else
5961 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5962 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5963 pWDA->wdaWdiCfgApiMsgParam = NULL;
5964#endif
5965 return CONVERT_WDI2VOS_STATUS(status) ;
5966}
5967
mukul sharma6b53e202016-11-23 19:29:18 +05305968/*
5969 * FUNCTION: WDA_UpdateCfgIntParamCb
5970 *
5971 */
5972void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5973{
5974 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5975 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5976 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
5977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5978 "<------ %s " ,__func__);
5979 /*
5980 * currently there is no response message is expected between PE and
5981 * WDA, Failure return from WDI is a ASSERT condition
5982 */
5983 if (WDI_STATUS_SUCCESS != wdiStatus)
5984 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5985 "%s: CFG (%d) config failure", __func__,
5986 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5987
5988 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
5989 {
5990 vos_mem_free(wdiCfgParam->pConfigBuffer);
5991 wdiCfgParam->pConfigBuffer = NULL;
5992 }
5993
5994 if (pWDA->wdaWdiCfgUpdateIntMsg)
5995 {
5996 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5997 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
5998 }
5999
6000 return ;
6001}
6002
6003/*
6004 * FUNCTION: WDA_UpdateCfgIntParam
6005 *
6006 */
6007VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
6008 tSirUpdateCfgIntParam *cfgParam)
6009{
6010
6011 WDI_Status status = WDI_STATUS_SUCCESS ;
6012 tANI_U32 val =0;
6013 tpAniSirGlobal pMac;
6014 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
6015 tHalCfg *tlvStruct = NULL ;
6016 tANI_U8 *tlvStructStart = NULL ;
6017 v_PVOID_t *configParam;
6018 tANI_U32 configParamSize;
6019 tANI_U32 *configDataValue;
6020 tANI_U32 cfgId;
6021 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
6022
6023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6024 " ------> %s " ,__func__);
6025
6026 if (cfgParam)
6027 {
6028 cfgId = cfgParam->cfgId;
6029 }
6030 else
6031 {
6032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6033 FL("Invoked with NULL cfgParam"));
6034 return VOS_STATUS_E_FAILURE;
6035 }
6036
6037 if (!pWDA)
6038 {
6039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6040 FL("Invoked with invalid WDA context"));
6041 return VOS_STATUS_E_FAILURE;
6042 }
6043
6044 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
6045 {
6046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6047 FL("wdaWdiCfgApiMsgParam is not NULL"));
6048
6049 return VOS_STATUS_E_FAILURE;
6050 }
6051
6052 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
6053 if (NULL == pMac)
6054 {
6055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6056 FL("Invoked with invalid MAC context "));
6057 return VOS_STATUS_E_FAILURE;
6058 }
6059
6060 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
6061 {
6062 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6063 FL("Fail to cfg get id %d"), cfgId);
6064 return VOS_STATUS_E_FAILURE;
6065 }
6066
6067 /* Get TLV type */
6068 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
6069 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
6070 {
6071 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6072 "Failed to Convert cfg to hal id %d", cfgId);
6073 return VOS_STATUS_E_FAILURE;
6074 }
6075
6076 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
6077 sizeof(WDI_UpdateCfgReqParamsType)) ;
6078 if (NULL == wdiCfgReqParam)
6079 {
6080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6081 "%s: VOS MEM Alloc Failure", __func__);
6082 return VOS_STATUS_E_NOMEM;
6083 }
6084
6085 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
6086 configParam = vos_mem_malloc(configParamSize);
6087 if (NULL == configParam)
6088 {
6089 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6090 "%s: VOS MEM Alloc Failure", __func__);
6091 vos_mem_free(wdiCfgReqParam);
6092 return VOS_STATUS_E_NOMEM;
6093 }
6094
6095 vos_mem_set(configParam, configParamSize, 0);
6096 wdiCfgReqParam->pConfigBuffer = configParam;
6097 tlvStruct = (tHalCfg *)configParam;
6098 tlvStructStart = (tANI_U8 *)configParam;
6099 /* Set TLV type */
6100 tlvStruct->type = tlv_type;
6101 tlvStruct->length = sizeof(tANI_U32);
6102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6103 *configDataValue = (tANI_U32)val;
6104 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6105 "cfg_id %d tlv_type %d tlv_value %d \n",
6106 cfgId, tlvStruct->type, val);
6107 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6108 + sizeof(tHalCfg) + tlvStruct->length)) ;
6109 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
6110 wdiCfgReqParam->wdiReqStatusCB = NULL;
6111 /* store Params pass it to WDI */
6112 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
6113 status = WDI_UpdateCfgReq(wdiCfgReqParam,
6114 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
6115 if (IS_WDI_STATUS_FAILURE(status))
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6118 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
6119 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
6120 wdiCfgReqParam->pConfigBuffer = NULL;
6121 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6122 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6123 }
6124
6125 return CONVERT_WDI2VOS_STATUS(status);
6126}
6127
Jeff Johnson295189b2012-06-20 16:38:30 -07006128VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
6129 v_U8_t *pDefaultKeyId,
6130 v_U8_t *pNumKeys,
6131 WDI_KeysType *pWdiKeys )
6132{
6133 v_U32_t i, j, defKeyId = 0;
6134 v_U32_t val = SIR_MAC_KEY_LENGTH;
6135 VOS_STATUS status = WDI_STATUS_SUCCESS;
6136 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 if (NULL == pMac )
6138 {
6139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006140 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07006141 return VOS_STATUS_E_FAILURE;
6142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
6144 &defKeyId ))
6145 {
6146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6147 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
6148 }
6149
6150 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 /* Need to extract ALL of the configured WEP Keys */
6152 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
6153 {
6154 val = SIR_MAC_KEY_LENGTH;
6155 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
6156 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
6157 pWdiKeys[j].key,
6158 &val ))
6159 {
6160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006161 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 }
6163 else
6164 {
6165 pWdiKeys[j].keyId = (tANI_U8) i;
6166 /*
6167 * Actually, a DC (Don't Care) because
6168 * this is determined (and set) by PE/MLME
6169 */
6170 pWdiKeys[j].unicast = 0;
6171 /*
6172 * Another DC (Don't Care)
6173 */
6174 pWdiKeys[j].keyDirection = eSIR_TX_RX;
6175 /* Another DC (Don't Care). Unused for WEP */
6176 pWdiKeys[j].paeRole = 0;
6177 /* Determined from wlan_cfgGetStr() above.*/
6178 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 j++;
6180 *pNumKeys = (tANI_U8) j;
6181 }
6182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 return status;
6184}
Jeff Johnson295189b2012-06-20 16:38:30 -07006185/*
6186 * FUNCTION: WDA_SetBssKeyReqCallback
6187 * send SET BSS key RSP back to PE
6188 */
6189void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
6190{
6191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6192 tWDA_CbContext *pWDA;
6193 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006195 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if(NULL == pWdaParams)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT(0) ;
6201 return ;
6202 }
6203 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6204 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306205 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6206 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6208 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006209 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 return ;
6212}
Jeff Johnson295189b2012-06-20 16:38:30 -07006213/*
6214 * FUNCTION: WDA_ProcessSetBssKeyReq
6215 * Request to WDI for programming the BSS key( key for
6216 * broadcast/multicast frames Encryption)
6217 */
6218VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
6219 tSetBssKeyParams *setBssKeyParams )
6220{
6221 WDI_Status status = WDI_STATUS_SUCCESS ;
6222 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
6223 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
6224 sizeof(WDI_SetBSSKeyReqParamsType)) ;
6225 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006228 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 if(NULL == wdiSetBssKeyParam)
6230 {
6231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 VOS_ASSERT(0);
6234 return VOS_STATUS_E_NOMEM;
6235 }
6236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6237 if(NULL == pWdaParams)
6238 {
6239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 VOS_ASSERT(0);
6242 vos_mem_free(wdiSetBssKeyParam);
6243 return VOS_STATUS_E_NOMEM;
6244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 /* copy set BSS params to WDI structure */
6247 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
6248 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
6249 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(setBssKeyParams->encType != eSIR_ED_NONE)
6251 {
6252 if( setBssKeyParams->numKeys == 0 &&
6253 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
6254 setBssKeyParams->encType == eSIR_ED_WEP104))
6255 {
6256 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
6258 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
6259 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
6260 }
6261 else
6262 {
6263 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
6264 {
6265 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
6266 setBssKeyParams->key[keyIndex].keyId;
6267 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
6268 setBssKeyParams->key[keyIndex].unicast;
6269 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
6270 setBssKeyParams->key[keyIndex].keyDirection;
6271 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6272 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6273 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6274 setBssKeyParams->key[keyIndex].paeRole;
6275 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6276 setBssKeyParams->key[keyIndex].keyLength;
6277 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6278 setBssKeyParams->key[keyIndex].key,
6279 SIR_MAC_MAX_KEY_LENGTH);
6280 }
6281 }
6282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6284 setBssKeyParams->singleTidRc;
6285 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 /* Store set key pointer, as this will be used for response */
6287 /* store Params pass it to WDI */
6288 pWdaParams->pWdaContext = pWDA;
6289 pWdaParams->wdaMsgParam = setBssKeyParams;
6290 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6292 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6293
6294 if(IS_WDI_STATUS_FAILURE(status))
6295 {
6296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6297 "Failure in Set BSS Key Req WDI API, free all the memory " );
6298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6299 vos_mem_free(pWdaParams) ;
6300 setBssKeyParams->status = eSIR_FAILURE ;
6301 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 return CONVERT_WDI2VOS_STATUS(status) ;
6304}
Jeff Johnson295189b2012-06-20 16:38:30 -07006305/*
6306 * FUNCTION: WDA_RemoveBssKeyReqCallback
6307 * send SET BSS key RSP back to PE
6308 */
6309void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6310{
6311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6312 tWDA_CbContext *pWDA;
6313 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 if(NULL == pWdaParams)
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_ASSERT(0) ;
6321 return ;
6322 }
6323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6324 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6326 vos_mem_free(pWdaParams) ;
6327
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006328 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 return ;
6331}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306332
6333/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306334 * FUNCTION: WDA_GetFrameLogRspCallback
6335 * recieves get frame log response from FW
6336 */
6337void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6338 void* pUserData)
6339{
6340 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6341 tWDA_CbContext *pWDA = NULL;
6342 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6343
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6345 "<------ Entering: %s " ,__func__);
6346 if(NULL == pWdaParams)
6347 {
6348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6349 "%s: pWdaParams received NULL", __func__);
6350 VOS_ASSERT(0) ;
6351 return ;
6352 }
6353
6354 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6355 if (NULL == pWDA)
6356 {
6357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6358 "%s:pWDA is NULL", __func__);
6359 VOS_ASSERT(0);
6360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6361 vos_mem_free(pWdaParams);
6362 return ;
6363 }
6364
6365 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6366 if(NULL == pGetFrameLogReqParams)
6367 {
6368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6369 "%s: pGetFrameLogReqParams received NULL", __func__);
6370 VOS_ASSERT(0);
6371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6372 vos_mem_free(pWdaParams);
6373 return;
6374 }
6375
Siddharth Bhal64246172015-02-27 01:04:37 +05306376 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306378 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6379 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306380 }
6381
6382 /* free WDI command buffer only */
6383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6384 vos_mem_free(pWdaParams->wdaMsgParam);
6385 vos_mem_free(pWdaParams);
6386
6387 return ;
6388
6389}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306390
6391/*
6392 * FUNCTION: WDA_RssiMonitorStopRspCallback
6393 * recieves Rssi Monitor stop response from FW
6394 */
6395void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6396 void* pUserData)
6397{
6398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6399 tSirRssiMonitorReq *pRssiMonitorReqParams;
6400
6401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6402 "<------ %s " ,__func__);
6403
6404 if(NULL == pWdaParams)
6405 {
6406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6407 "%s: pWdaParams received NULL", __func__);
6408 VOS_ASSERT(0);
6409 return ;
6410 }
6411
6412 if(NULL == pWdaParams->wdaMsgParam)
6413 {
6414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6415 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6416 VOS_ASSERT(0);
6417 vos_mem_free(pWdaParams);
6418 return ;
6419 }
6420
6421 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6422
6423 if(pRssiMonitorReqParams->rssiMonitorCallback)
6424 {
6425 pRssiMonitorReqParams->rssiMonitorCallback(
6426 pRssiMonitorReqParams->rssiMonitorCbContext,
6427 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6428 }
6429 else
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6432 "%s: pFWLoggingInitParams callback is NULL", __func__);
6433 }
6434
6435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6436 vos_mem_free(pWdaParams->wdaMsgParam);
6437 vos_mem_free(pWdaParams);
6438
6439 return;
6440}
6441
6442/*
6443 * FUNCTION: WDA_RssiMonitorStartRspCallback
6444 * recieves Rssi Monitor start response from FW
6445 */
6446void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6447 void* pUserData)
6448{
6449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6450 tSirRssiMonitorReq *pRssiMonitorReqParams;
6451
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6453 "<------ %s " ,__func__);
6454
6455 if(NULL == pWdaParams)
6456 {
6457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6458 "%s: pWdaParams received NULL", __func__);
6459 VOS_ASSERT(0);
6460 return ;
6461 }
6462
6463 if(NULL == pWdaParams->wdaMsgParam)
6464 {
6465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6466 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6467 VOS_ASSERT(0);
6468 vos_mem_free(pWdaParams);
6469 return ;
6470 }
6471
6472 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6473
6474 if(pRssiMonitorReqParams->rssiMonitorCallback)
6475 {
6476 pRssiMonitorReqParams->rssiMonitorCallback(
6477 pRssiMonitorReqParams->rssiMonitorCbContext,
6478 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6479 }
6480 else
6481 {
6482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6483 "%s: pFWLoggingInitParams callback is NULL", __func__);
6484 }
6485
6486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6487 vos_mem_free(pWdaParams->wdaMsgParam);
6488 vos_mem_free(pWdaParams);
6489
6490 return;
6491}
6492
Siddharth Bhal64246172015-02-27 01:04:37 +05306493/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306494 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306495 * recieves Mgmt Logging init response from FW
6496 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306497void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306498 void* pUserData)
6499{
6500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306501 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306502 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306503
6504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6505 "<------ %s " ,__func__);
6506
6507 if(NULL == pWdaParams)
6508 {
6509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6510 "%s: pWdaParams received NULL", __func__);
6511 VOS_ASSERT(0);
6512 return ;
6513 }
6514
6515 if(NULL == pWdaParams->wdaMsgParam)
6516 {
6517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6518 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6519 VOS_ASSERT(0);
6520 vos_mem_free(pWdaParams);
6521 return ;
6522 }
6523
c_manjeecfd1efb2015-09-25 19:32:34 +05306524 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6525 if(NULL == pWdaParams)
6526 {
6527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6528 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6529 VOS_ASSERT(0);
6530 vos_mem_free(pWdaParams);
6531 return;
6532 }
6533
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306534 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306535 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306536
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306537 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306538 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306539 pFWLoggingInitParams->fwlogInitCallback(
6540 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306541 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306542 }
6543 else
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306546 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306547 }
6548
c_manjeecfd1efb2015-09-25 19:32:34 +05306549 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6551 vos_mem_free(pWdaParams->wdaMsgParam);
6552 vos_mem_free(pWdaParams);
6553
6554 return;
6555}
6556
6557/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306558 * FUNCTION: WDA_SpoofMacAddrRspCallback
6559 * recieves spoof mac addr response from FW
6560 */
6561void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6562{
6563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6564 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306565
Siddharth Bhal171788a2014-09-29 21:02:40 +05306566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6567 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306568
Siddharth Bhal171788a2014-09-29 21:02:40 +05306569 if(NULL == pWdaParams)
6570 {
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6572 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306573 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306574 return ;
6575 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306576 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306577
Siddharth Bhal029d6732014-10-09 21:31:23 +05306578 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306580 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306581 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306582 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6583 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306584
Siddharth Bhal171788a2014-09-29 21:02:40 +05306585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306586 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306587 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306588
6589 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306590}
6591
Jeff Johnson295189b2012-06-20 16:38:30 -07006592/*
6593 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6594 * Request to WDI to remove the BSS key( key for broadcast/multicast
6595 * frames Encryption)
6596 */
6597VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6598 tRemoveBssKeyParams *removeBssKeyParams )
6599{
6600 WDI_Status status = WDI_STATUS_SUCCESS ;
6601 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6602 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6603 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6604 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006606 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 if(NULL == wdiRemoveBssKeyParam)
6608 {
6609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 VOS_ASSERT(0);
6612 return VOS_STATUS_E_NOMEM;
6613 }
6614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6615 if(NULL == pWdaParams)
6616 {
6617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 VOS_ASSERT(0);
6620 vos_mem_free(wdiRemoveBssKeyParam);
6621 return VOS_STATUS_E_NOMEM;
6622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 /* copy Remove BSS key params to WDI structure*/
6624 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6625 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6626 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6627 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6628 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006629 /* Store remove key pointer, as this will be used for response */
6630 /* store Params pass it to WDI */
6631 pWdaParams->pWdaContext = pWDA;
6632 pWdaParams->wdaMsgParam = removeBssKeyParams;
6633 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6635 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 if(IS_WDI_STATUS_FAILURE(status))
6637 {
6638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6639 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6641 vos_mem_free(pWdaParams) ;
6642 removeBssKeyParams->status = eSIR_FAILURE ;
6643 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 return CONVERT_WDI2VOS_STATUS(status) ;
6646}
Jeff Johnson295189b2012-06-20 16:38:30 -07006647/*
6648 * FUNCTION: WDA_SetBssKeyReqCallback
6649 * send SET BSS key RSP back to PE
6650 */
6651void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6652{
6653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6654 tWDA_CbContext *pWDA;
6655 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 if(NULL == pWdaParams)
6659 {
6660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006661 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 VOS_ASSERT(0) ;
6663 return ;
6664 }
6665 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6666 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306667 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6668 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6670 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006671 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006673 return ;
6674}
Jeff Johnson295189b2012-06-20 16:38:30 -07006675/*
6676 * FUNCTION: WDA_ProcessSetStaKeyReq
6677 * Request to WDI for programming the STA key( key for Unicast frames
6678 * Encryption)
6679 */
6680VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6681 tSetStaKeyParams *setStaKeyParams )
6682{
6683 WDI_Status status = WDI_STATUS_SUCCESS ;
6684 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6685 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6686 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6687 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 if(NULL == wdiSetStaKeyParam)
6692 {
6693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 VOS_ASSERT(0);
6696 return VOS_STATUS_E_NOMEM;
6697 }
6698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6699 if(NULL == pWdaParams)
6700 {
6701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 VOS_ASSERT(0);
6704 vos_mem_free(wdiSetStaKeyParam);
6705 return VOS_STATUS_E_NOMEM;
6706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 /* copy set STA key params to WDI structure */
6710 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6711 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6712 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6713 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 if(setStaKeyParams->encType != eSIR_ED_NONE)
6715 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006716 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6718 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6719 {
6720 WDA_GetWepKeysFromCfg( pWDA,
6721 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6722 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6723 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6724 }
6725 else
6726 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6728 keyIndex++)
6729 {
6730 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6731 setStaKeyParams->key[keyIndex].keyId;
6732 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6733 setStaKeyParams->key[keyIndex].unicast;
6734 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6735 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6737 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6738 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6739 setStaKeyParams->key[keyIndex].paeRole;
6740 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6741 setStaKeyParams->key[keyIndex].keyLength;
6742 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6743 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6744 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6745 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6746 {
6747 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6748 }
6749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6751 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 }
6753 }
6754 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6755 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 /* Store set key pointer, as this will be used for response */
6757 /* store Params pass it to WDI */
6758 pWdaParams->pWdaContext = pWDA;
6759 pWdaParams->wdaMsgParam = setStaKeyParams;
6760 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6762 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 if(IS_WDI_STATUS_FAILURE(status))
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6766 "Failure in set STA Key Req WDI API, free all the memory " );
6767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6768 vos_mem_free(pWdaParams) ;
6769 setStaKeyParams->status = eSIR_FAILURE ;
6770 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 return CONVERT_WDI2VOS_STATUS(status) ;
6773}
Jeff Johnson295189b2012-06-20 16:38:30 -07006774/*
6775 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6776 * send SET Bcast STA key RSP back to PE
6777 */
6778void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6779{
6780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6781 tWDA_CbContext *pWDA;
6782 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006784 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 if(NULL == pWdaParams)
6786 {
6787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006788 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 VOS_ASSERT(0) ;
6790 return ;
6791 }
6792 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6793 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6795 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006796 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return ;
6799}
6800
Jeff Johnson295189b2012-06-20 16:38:30 -07006801/*
6802 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6803 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6804 * Encryption)
6805 */
6806VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6807 tSetStaKeyParams *setStaKeyParams )
6808{
6809 WDI_Status status = WDI_STATUS_SUCCESS ;
6810 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6811 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6812 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6813 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006816 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 if(NULL == wdiSetStaKeyParam)
6818 {
6819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006820 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 VOS_ASSERT(0);
6822 return VOS_STATUS_E_NOMEM;
6823 }
6824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6825 if(NULL == pWdaParams)
6826 {
6827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 VOS_ASSERT(0);
6830 vos_mem_free(wdiSetStaKeyParam);
6831 return VOS_STATUS_E_NOMEM;
6832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 /* copy set STA key params to WDI structure */
6836 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6837 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6838 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6839 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 if(setStaKeyParams->encType != eSIR_ED_NONE)
6841 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6843 keyIndex++)
6844 {
6845 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6846 setStaKeyParams->key[keyIndex].keyId;
6847 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6848 setStaKeyParams->key[keyIndex].unicast;
6849 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6850 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6852 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6853 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6854 setStaKeyParams->key[keyIndex].paeRole;
6855 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6856 setStaKeyParams->key[keyIndex].keyLength;
6857 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6858 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6861 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 }
6863 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 /* Store set key pointer, as this will be used for response */
6865 /* store Params pass it to WDI */
6866 pWdaParams->pWdaContext = pWDA;
6867 pWdaParams->wdaMsgParam = setStaKeyParams;
6868 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6870 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 if(IS_WDI_STATUS_FAILURE(status))
6872 {
6873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6874 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6876 vos_mem_free(pWdaParams) ;
6877 setStaKeyParams->status = eSIR_FAILURE ;
6878 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 return CONVERT_WDI2VOS_STATUS(status) ;
6881}
Jeff Johnson295189b2012-06-20 16:38:30 -07006882/*
6883 * FUNCTION: WDA_RemoveStaKeyReqCallback
6884 * send SET BSS key RSP back to PE
6885 */
6886void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6887{
6888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6889 tWDA_CbContext *pWDA;
6890 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 if(NULL == pWdaParams)
6894 {
6895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006896 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 VOS_ASSERT(0) ;
6898 return ;
6899 }
6900 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6901 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6903 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006904 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 return ;
6907}
6908
Jeff Johnson295189b2012-06-20 16:38:30 -07006909/*
6910 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6911 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6912 */
6913VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6914 tRemoveStaKeyParams *removeStaKeyParams )
6915{
6916 WDI_Status status = WDI_STATUS_SUCCESS ;
6917 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6918 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6919 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6920 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 if(NULL == wdiRemoveStaKeyParam)
6924 {
6925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 VOS_ASSERT(0);
6928 return VOS_STATUS_E_NOMEM;
6929 }
6930 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6931 if(NULL == pWdaParams)
6932 {
6933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 VOS_ASSERT(0);
6936 vos_mem_free(wdiRemoveStaKeyParam);
6937 return VOS_STATUS_E_NOMEM;
6938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 /* copy remove STA key params to WDI structure*/
6940 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6941 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6942 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6943 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6944 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 /* Store remove key pointer, as this will be used for response */
6946 /* store Params pass it to WDI */
6947 pWdaParams->pWdaContext = pWDA;
6948 pWdaParams->wdaMsgParam = removeStaKeyParams;
6949 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6951 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 if(IS_WDI_STATUS_FAILURE(status))
6953 {
6954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6955 "Failure in remove STA Key Req WDI API, free all the memory " );
6956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6957 vos_mem_free(pWdaParams) ;
6958 removeStaKeyParams->status = eSIR_FAILURE ;
6959 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 return CONVERT_WDI2VOS_STATUS(status) ;
6962}
Jeff Johnson295189b2012-06-20 16:38:30 -07006963/*
6964 * FUNCTION: WDA_IsHandleSetLinkStateReq
6965 * Update the WDA state and return the status to handle this message or not
6966 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006967WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6968 tWDA_CbContext *pWDA,
6969 tLinkStateParams *linkStateParams)
6970{
6971 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 switch(linkStateParams->state)
6973 {
6974 case eSIR_LINK_PREASSOC_STATE:
6975 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6976 /*
6977 * set the WDA state to PRE ASSOC
6978 * copy the BSSID into pWDA to use it in join request and return,
6979 * No need to handle these messages.
6980 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006981 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6982 {
6983 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006985 }
6986 else
6987 {
6988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006989 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006990 VOS_ASSERT(0);
6991 }
6992
6993 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6994 {
6995 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006997 }
6998 else
6999 {
7000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007001 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007002 VOS_ASSERT(0);
7003 }
7004
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 /* UMAC is issuing the setlink state with PREASSOC twice (before set
7006 *channel and after ) so reset the WDA state to ready when the second
7007 * time UMAC issue the link state with PREASSOC
7008 */
7009 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
7010 {
7011 /* RESET WDA state back to WDA_READY_STATE */
7012 pWDA->wdaState = WDA_READY_STATE;
7013 }
7014 else
7015 {
7016 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
7017 }
7018 //populate linkState info in WDACbCtxt
7019 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 default:
7022 if(pWDA->wdaState != WDA_READY_STATE)
7023 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007024 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
7025 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
7026 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
7027 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
7028 *the ASSERT in WDA_Stop during module unload.*/
7029 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
7030 {
7031 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007032 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007033 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007034 else
7035 {
7036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007037 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007038 status = WDA_IGNORE_SET_LINK_STATE;
7039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 }
7041 break;
7042 }
7043
7044 return status;
7045}
Jeff Johnson295189b2012-06-20 16:38:30 -07007046/*
7047 * FUNCTION: WDA_SetLinkStateCallback
7048 * call back function for set link state from WDI
7049 */
7050void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
7051{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307052 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 tLinkStateParams *linkStateParams;
7054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307057 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 {
7059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007060 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 VOS_ASSERT(0) ;
7062 return ;
7063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307065 if (NULL == pWDA)
7066 {
7067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7068 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7070 vos_mem_free(pWdaParams->wdaMsgParam);
7071 vos_mem_free(pWdaParams);
7072
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307073 VOS_ASSERT(0);
7074 return ;
7075 }
7076
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 /*
7079 * In STA mode start the BA activity check timer after association
7080 * and in AP mode start BA activity check timer after BSS start */
7081 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
7082 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07007083 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
7084 ((status == WDI_STATUS_SUCCESS) &&
7085 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 {
7087 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 /*
7091 * No respone required for WDA_SET_LINK_STATE so free the request
7092 * param here
7093 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7095 vos_mem_free(pWdaParams);
7096
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 return ;
7098}
Jeff Johnson295189b2012-06-20 16:38:30 -07007099/*
7100 * FUNCTION: WDA_ProcessSetLinkState
7101 * Request to WDI to set the link status.
7102 */
7103VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
7104 tLinkStateParams *linkStateParams)
7105{
7106 WDI_Status status = WDI_STATUS_SUCCESS ;
7107 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
7108 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
7109 sizeof(WDI_SetLinkReqParamsType)) ;
7110 tWDA_ReqParams *pWdaParams ;
7111 tpAniSirGlobal pMac;
7112 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
7113
7114 if(NULL == pMac)
7115 {
7116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007117 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007119 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 return VOS_STATUS_E_FAILURE;
7121 }
7122
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 if(NULL == wdiSetLinkStateParam)
7126 {
7127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 VOS_ASSERT(0);
7130 return VOS_STATUS_E_NOMEM;
7131 }
7132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7133 if(NULL == pWdaParams)
7134 {
7135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 VOS_ASSERT(0);
7138 vos_mem_free(wdiSetLinkStateParam);
7139 return VOS_STATUS_E_NOMEM;
7140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 if(WDA_IGNORE_SET_LINK_STATE ==
7142 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
7143 {
7144 status = WDI_STATUS_E_FAILURE;
7145 }
7146 else
7147 {
7148 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
7149 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
7151 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
7153 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 pWdaParams->pWdaContext = pWDA;
7155 /* Store remove key pointer, as this will be used for response */
7156 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 /* store Params pass it to WDI */
7158 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
7159 /* Stop Timer only other than GO role and concurrent session */
7160 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07007161 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
7163 {
7164 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
7167 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 if(IS_WDI_STATUS_FAILURE(status))
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7171 "Failure in set link state Req WDI API, free all the memory " );
7172 }
7173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007174 if(IS_WDI_STATUS_FAILURE(status))
7175 {
7176 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007177 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 vos_mem_free(pWdaParams);
7179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 return CONVERT_WDI2VOS_STATUS(status) ;
7181}
Jeff Johnson295189b2012-06-20 16:38:30 -07007182/*
7183 * FUNCTION: WDA_GetStatsReqParamsCallback
7184 * send the response to PE with Stats received from WDI
7185 */
7186void WDA_GetStatsReqParamsCallback(
7187 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
7188 void* pUserData)
7189{
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307191 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007192
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 pGetPEStatsRspParams =
7196 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
7197 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
7198
7199 if(NULL == pGetPEStatsRspParams)
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 return;
7205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307207 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
7209 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007210
7211 //Fill the Session Id Properly in PE
7212 pGetPEStatsRspParams->sessionId = 0;
7213 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007214 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
7216 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 vos_mem_copy( pGetPEStatsRspParams + 1,
7218 wdiGetStatsRsp + 1,
7219 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307220
7221 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7222 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7223 vosMsg.bodyval = 0;
7224 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7225 (vos_msg_t*)&vosMsg))
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7229 vos_mem_free(pGetPEStatsRspParams);
7230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007231
7232 return;
7233}
7234
Jeff Johnson295189b2012-06-20 16:38:30 -07007235/*
7236 * FUNCTION: WDA_ProcessGetStatsReq
7237 * Request to WDI to get the statistics
7238 */
7239VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
7240 tAniGetPEStatsReq *pGetStatsParams)
7241{
7242 WDI_Status status = WDI_STATUS_SUCCESS ;
7243 WDI_GetStatsReqParamsType wdiGetStatsParam;
7244 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307245 vos_msg_t vosMsg;
7246
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
7250 pGetStatsParams->staId;
7251 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
7252 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 status = WDI_GetStatsReq(&wdiGetStatsParam,
7255 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 if(IS_WDI_STATUS_FAILURE(status))
7257 {
7258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7259 "Failure in Get Stats Req WDI API, free all the memory " );
7260 pGetPEStatsRspParams =
7261 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
7262 if(NULL == pGetPEStatsRspParams)
7263 {
7264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007267 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 return VOS_STATUS_E_NOMEM;
7269 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307270 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007271 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7272 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7273 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307274
7275 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7276 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7277 vosMsg.bodyval = 0;
7278 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7279 (vos_msg_t*)&vosMsg))
7280 {
7281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7282 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7283 vos_mem_free(pGetPEStatsRspParams);
7284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007286 /* Free the request message */
7287 vos_mem_free(pGetStatsParams);
7288 return CONVERT_WDI2VOS_STATUS(status);
7289}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007290
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007291#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007292/*
7293 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7294 * send the response to PE with roam Rssi received from WDI
7295 */
7296void WDA_GetRoamRssiReqParamsCallback(
7297 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7298 void* pUserData)
7299{
7300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7301 tWDA_CbContext *pWDA = NULL;
7302 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7303 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7305 "<------ %s " ,__func__);
7306 if(NULL == pWdaParams)
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "%s: pWdaParams received NULL", __func__);
7310 VOS_ASSERT(0) ;
7311 return ;
7312 }
7313 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7314 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7315
7316 if(NULL == pGetRoamRssiReqParams)
7317 {
7318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7319 "%s: pGetRoamRssiReqParams received NULL", __func__);
7320 VOS_ASSERT(0);
7321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7322 vos_mem_free(pWdaParams);
7323 return ;
7324 }
7325 pGetRoamRssiRspParams =
7326 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7327
7328 if(NULL == pGetRoamRssiRspParams)
7329 {
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7331 "%s: VOS MEM Alloc Failure", __func__);
7332 VOS_ASSERT(0);
7333 return;
7334 }
7335 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7336 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007337 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007338 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7339 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7340
7341 /* Assign get roam rssi req (backup) in to the response */
7342 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7343
7344 /* free WDI command buffer */
7345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7346 vos_mem_free(pWdaParams) ;
7347
7348 /* send response to UMAC*/
7349 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7350
7351 return;
7352}
7353
7354
7355
7356/*
7357 * FUNCTION: WDA_ProcessGetRoamRssiReq
7358 * Request to WDI to get the statistics
7359 */
7360VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7361 tAniGetRssiReq *pGetRoamRssiParams)
7362{
7363 WDI_Status status = WDI_STATUS_SUCCESS ;
7364 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7365 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7366 tWDA_ReqParams *pWdaParams = NULL;
7367
7368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7369 "------> %s " ,__func__);
7370 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7371 pGetRoamRssiParams->staId;
7372 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7373
7374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7375 if(NULL == pWdaParams)
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307379 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007380 VOS_ASSERT(0);
7381 return VOS_STATUS_E_NOMEM;
7382 }
7383
7384 /* Store Init Req pointer, as this will be used for response */
7385 pWdaParams->pWdaContext = pWDA;
7386
7387 /* Take Get roam Rssi req backup as it stores the callback to be called after
7388 receiving the response */
7389 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7390 pWdaParams->wdaWdiApiMsgParam = NULL;
7391
7392 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7393 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7394 if(IS_WDI_STATUS_FAILURE(status))
7395 {
7396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7397 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7398 pGetRoamRssiRspParams =
7399 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7400 if(NULL == pGetRoamRssiRspParams)
7401 {
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7403 "%s: VOS MEM Alloc Failure", __func__);
7404 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307405 vos_mem_free(pGetRoamRssiParams);
7406 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007407 return VOS_STATUS_E_NOMEM;
7408 }
7409 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7410 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7411 pGetRoamRssiRspParams->rssi = 0;
7412 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7413 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7414 (void *)pGetRoamRssiRspParams, 0) ;
7415 }
7416 return CONVERT_WDI2VOS_STATUS(status);
7417}
7418#endif
7419
7420
Jeff Johnson295189b2012-06-20 16:38:30 -07007421/*
7422 * FUNCTION: WDA_UpdateEDCAParamCallback
7423 * call back function for Update EDCA params from WDI
7424 */
7425void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7426{
7427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7428 tEdcaParams *pEdcaParams;
7429
7430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007431 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 if(NULL == pWdaParams)
7433 {
7434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007435 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 VOS_ASSERT(0) ;
7437 return ;
7438 }
7439 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7441 vos_mem_free(pWdaParams);
7442 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 return ;
7444}
Jeff Johnson295189b2012-06-20 16:38:30 -07007445/*
7446 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7447 * Request to WDI to Update the EDCA params.
7448 */
7449VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7450 tEdcaParams *pEdcaParams)
7451{
7452 WDI_Status status = WDI_STATUS_SUCCESS ;
7453 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7454 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7455 sizeof(WDI_UpdateEDCAParamsType)) ;
7456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 if(NULL == wdiEdcaParam)
7460 {
7461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007464 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 return VOS_STATUS_E_NOMEM;
7466 }
7467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7468 if(NULL == pWdaParams)
7469 {
7470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 VOS_ASSERT(0);
7473 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007474 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 return VOS_STATUS_E_NOMEM;
7476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007478 /*
7479 Since firmware is not using highperformance flag, we have removed
7480 this flag from wdiEDCAInfo structure to match sizeof the structure
7481 between host and firmware.In future if we are planning to use
7482 highperformance flag then Please define this flag in wdiEDCAInfo
7483 structure, update it here and send it to firmware. i.e.
7484 Following is the original line which we removed as part of the fix
7485 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7486 pEdcaParams->highPerformance;
7487 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7489 &pEdcaParams->acbe);
7490 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7491 &pEdcaParams->acbk);
7492 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7493 &pEdcaParams->acvi);
7494 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7495 &pEdcaParams->acvo);
7496 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 pWdaParams->pWdaContext = pWDA;
7498 /* Store remove key pointer, as this will be used for response */
7499 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 /* store Params pass it to WDI */
7501 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7503 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 if(IS_WDI_STATUS_FAILURE(status))
7505 {
7506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7507 "Failure in Update EDCA Params WDI API, free all the memory " );
7508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7509 vos_mem_free(pWdaParams);
7510 vos_mem_free(pEdcaParams);
7511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 return CONVERT_WDI2VOS_STATUS(status) ;
7513}
Jeff Johnson295189b2012-06-20 16:38:30 -07007514/*
7515 * FUNCTION: WDA_AddBAReqCallback
7516 * send ADD BA RSP back to PE
7517 */
7518void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7519 void* pUserData)
7520{
7521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7522 tWDA_CbContext *pWDA;
7523 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007525 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307526 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 {
7528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007529 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 VOS_ASSERT(0) ;
7531 return ;
7532 }
7533 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307534 if (NULL == pWDA)
7535 {
7536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7537 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7539 vos_mem_free(pWdaParams->wdaMsgParam);
7540 vos_mem_free(pWdaParams);
7541
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307542 VOS_ASSERT(0);
7543 return ;
7544 }
7545
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7548 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007549 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 return ;
7552}
7553
Jeff Johnson295189b2012-06-20 16:38:30 -07007554/*
7555 * FUNCTION: WDA_ProcessAddBAReq
7556 * Request to WDI to Update the ADDBA REQ params.
7557 */
7558VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307559 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007560{
Jeff Johnson43971f52012-07-17 12:26:56 -07007561 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7563 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7564 sizeof(WDI_AddBAReqParamsType)) ;
7565 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007567 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 if(NULL == wdiAddBAReqParam)
7569 {
7570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 VOS_ASSERT(0);
7573 return VOS_STATUS_E_NOMEM;
7574 }
7575 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7576 if(NULL == pWdaParams)
7577 {
7578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 VOS_ASSERT(0);
7581 vos_mem_free(wdiAddBAReqParam);
7582 return VOS_STATUS_E_NOMEM;
7583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007584 do
7585 {
7586 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 wdiAddBaInfo->ucSTAIdx = staIdx ;
7588 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307589 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 } while(0) ;
7591 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 pWdaParams->pWdaContext = pWDA;
7593 /* store Params pass it to WDI */
7594 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7595 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007596 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7597 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598
Jeff Johnson43971f52012-07-17 12:26:56 -07007599 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 {
7601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007602 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7603 status = CONVERT_WDI2VOS_STATUS(wstatus);
7604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007605 vos_mem_free(pWdaParams);
7606 pAddBAReqParams->status = eSIR_FAILURE;
7607 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7608 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007609 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007610}
Jeff Johnson295189b2012-06-20 16:38:30 -07007611/*
7612 * FUNCTION: WDA_AddBASessionReqCallback
7613 * send ADD BA SESSION RSP back to PE/(or TL)
7614 */
7615void WDA_AddBASessionReqCallback(
7616 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7617{
7618 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307620 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007623 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 if(NULL == pWdaParams)
7625 {
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007627 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 VOS_ASSERT(0) ;
7629 return ;
7630 }
7631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307632 if (NULL == pWDA)
7633 {
7634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7635 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7637 vos_mem_free(pWdaParams->wdaMsgParam);
7638 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307639 VOS_ASSERT(0);
7640 return ;
7641 }
7642
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 if( NULL == pAddBAReqParams )
7645 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007647 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7650 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 return ;
7652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7654 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307656 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 * another request to HAL(/WDI) (ADD_BA_REQ)
7658 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 if((VOS_STATUS_SUCCESS ==
7660 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307661 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 {
7663 /* Update TL with BA info received from HAL/WDI */
7664 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7665 wdiAddBaSession->usBaSessionID,
7666 wdiAddBaSession->ucSTAIdx,
7667 wdiAddBaSession->ucBaTID,
7668 wdiAddBaSession->ucBaBufferSize,
7669 wdiAddBaSession->ucWinSize,
7670 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307672 wdiAddBaSession->ucSTAIdx,
7673 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 }
7675 else
7676 {
7677 pAddBAReqParams->status =
7678 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7679
7680 /* Setting Flag to indicate that Set BA is success */
7681 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7682 {
7683 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7684 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7685 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 /*Reset the WDA state to READY */
7690 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 return ;
7692}
7693
Jeff Johnson295189b2012-06-20 16:38:30 -07007694/*
7695 * FUNCTION: WDA_ProcessAddBASessionReq
7696 * Request to WDI to Update the ADDBA REQ params.
7697 */
7698VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7699 tAddBAParams *pAddBAReqParams)
7700{
7701 WDI_Status status = WDI_STATUS_SUCCESS ;
7702 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7703 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7704 sizeof(WDI_AddBASessionReqParamsType)) ;
7705 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007706 WLANTL_STAStateType tlSTAState = 0;
7707
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007709 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 if(NULL == wdiAddBASessionReqParam)
7711 {
7712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 VOS_ASSERT(0);
7715 return VOS_STATUS_E_NOMEM;
7716 }
7717 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7718 if(NULL == pWdaParams)
7719 {
7720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 VOS_ASSERT(0);
7723 vos_mem_free(wdiAddBASessionReqParam);
7724 return VOS_STATUS_E_NOMEM;
7725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 /*
7727 * Populate ADD BA parameters and pass these paarmeters to WDI.
7728 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7729 * the state to track if these is BA recipient case or BA initiator
7730 * case.
7731 */
7732 do
7733 {
7734 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7735 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7736 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7737 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7738 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7739 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7740 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7743 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7744 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7745 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7746 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307747
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 }while(0) ;
7749 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 pWdaParams->pWdaContext = pWDA;
7751 /* Store ADD BA pointer, as this will be used for response */
7752 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7753 /* store Params pass it to WDI */
7754 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007755
7756 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7757 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7758 */
7759 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7760 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7761 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007763 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007764 status = WDI_STATUS_E_NOT_ALLOWED;
7765 pAddBAReqParams->status =
7766 CONVERT_WDI2SIR_STATUS(status) ;
7767 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7768 /*Reset the WDA state to READY */
7769 pWDA->wdaState = WDA_READY_STATE;
7770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7771 vos_mem_free(pWdaParams);
7772
7773 return CONVERT_WDI2VOS_STATUS(status) ;
7774 }
7775
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7777 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 if(IS_WDI_STATUS_FAILURE(status))
7779 {
7780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007781 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007783 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007784 pAddBAReqParams->status =
7785 CONVERT_WDI2SIR_STATUS(status) ;
7786 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007787 /*Reset the WDA state to READY */
7788 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 vos_mem_free(pWdaParams);
7791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793}
Jeff Johnson295189b2012-06-20 16:38:30 -07007794/*
7795 * FUNCTION: WDA_DelBANotifyTL
7796 * send DEL BA IND to TL
7797 */
7798void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7799 tDelBAParams *pDelBAReqParams)
7800{
7801 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7802 //tSirMsgQ msg;
7803 vos_msg_t vosMsg;
7804 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 if(NULL == pDelBAInd)
7806 {
7807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 VOS_ASSERT(0) ;
7810 return;
7811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7813 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7814 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7815 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007816
Jeff Johnson295189b2012-06-20 16:38:30 -07007817
7818 vosMsg.type = WDA_DELETEBA_IND;
7819 vosMsg.bodyptr = pDelBAInd;
7820 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7821 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7822 {
7823 vosStatus = VOS_STATUS_E_BADMSG;
7824 }
7825}
Jeff Johnson295189b2012-06-20 16:38:30 -07007826/*
7827 * FUNCTION: WDA_DelBAReqCallback
7828 * send DEL BA RSP back to PE
7829 */
7830void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7831{
7832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7833 tWDA_CbContext *pWDA;
7834 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 if(NULL == pWdaParams)
7838 {
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 VOS_ASSERT(0) ;
7842 return ;
7843 }
7844 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307845
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 /* Notify TL about DEL BA in case of recipinet */
7848 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7849 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7850 {
7851 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 /*
7854 * No respone required for WDA_DELBA_IND so just free the request
7855 * param here
7856 */
7857 vos_mem_free(pDelBAReqParams);
7858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7859 vos_mem_free(pWdaParams);
7860 return ;
7861}
7862
Jeff Johnson295189b2012-06-20 16:38:30 -07007863/*
7864 * FUNCTION: WDA_ProcessDelBAReq
7865 * Request to WDI to Update the DELBA REQ params.
7866 */
7867VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7868 tDelBAParams *pDelBAReqParams)
7869{
7870 WDI_Status status = WDI_STATUS_SUCCESS ;
7871 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7872 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7873 sizeof(WDI_DelBAReqParamsType)) ;
7874 tWDA_ReqParams *pWdaParams ;
7875 tANI_U16 staIdx = 0;
7876 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007878 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 if(NULL == wdiDelBAReqParam)
7880 {
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 VOS_ASSERT(0);
7884 return VOS_STATUS_E_NOMEM;
7885 }
7886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7887 if(NULL == pWdaParams)
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 VOS_ASSERT(0);
7892 vos_mem_free(wdiDelBAReqParam);
7893 return VOS_STATUS_E_NOMEM;
7894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7896 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7897 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7898 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 pWdaParams->pWdaContext = pWDA;
7900 /* Store DEL BA pointer, as this will be used for response */
7901 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 /* store Params pass it to WDI */
7903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7905 * maintained in WDA, so that WDA can retry for another BA session
7906 */
7907 staIdx = pDelBAReqParams->staIdx;
7908 tid = pDelBAReqParams->baTID;
7909 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007910 status = WDI_DelBAReq(wdiDelBAReqParam,
7911 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 if(IS_WDI_STATUS_FAILURE(status))
7913 {
7914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7915 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7917 vos_mem_free(pWdaParams->wdaMsgParam);
7918 vos_mem_free(pWdaParams);
7919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007921}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007922
7923/*
7924 * FUNCTION: WDA_UpdateChReqCallback
7925 *
7926 */
7927void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7928{
Siddharth Bhala006c122014-05-03 12:13:27 +05307929 tWDA_ReqParams *pWdaParams;
7930 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7931 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7932 WDI_UpdateChannelReqinfoType *pChanInfoType;
7933 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007934
7935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7936 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307937 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007938 {
7939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307940 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007941 VOS_ASSERT(0);
7942 return;
7943 }
7944
Siddharth Bhala006c122014-05-03 12:13:27 +05307945 pWdaParams = (tWDA_ReqParams *)pUserData;
7946 pwdiUpdateChReqParam =
7947 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7948 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7949 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7950 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007951 /*
7952 * currently there is no response message is expected between PE and
7953 * WDA, Failure return from WDI is a ASSERT condition
7954 */
7955 vos_mem_free(pChanInfoType);
7956 vos_mem_free(pChanList);
7957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7958 vos_mem_free(pWdaParams);
7959
7960 return;
7961}
7962
7963/*
7964 * FUNCTION: WDA_ProcessUpdateChannelList
7965 * Request to WDI to Update the ChannelList params.
7966 */
7967VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7968 tSirUpdateChanList *pChanList)
7969{
7970 WDI_Status status = WDI_STATUS_SUCCESS;
7971 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7972 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7973 WDI_UpdateChannelReqinfoType *pChanInfoType;
7974 tWDA_ReqParams *pWdaParams;
7975 wpt_uint8 i;
7976
7977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7978 "------> %s " ,__func__);
7979 if(NULL == pChanList)
7980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "%s: NULL pChanList", __func__);
7983 VOS_ASSERT(0);
7984 return VOS_STATUS_E_INVAL;
7985 }
7986
7987 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7988 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307989 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007990 "Update channel list capability Not Supported");
7991 vos_mem_free(pChanList);
7992 return VOS_STATUS_E_INVAL;
7993 }
7994
7995 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7996 sizeof(WDI_UpdateChReqParamsType));
7997 if(NULL == pwdiUpdateChReqParam)
7998 {
7999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8000 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
8001 __func__);
8002 VOS_ASSERT(0);
8003 vos_mem_free(pChanList);
8004 return VOS_STATUS_E_NOMEM;
8005 }
8006 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
8007 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
8008 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
8009 pChanList->numChan);
8010 if(NULL == pChanInfoType)
8011 {
8012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8013 "%s: VOS MEM Alloc Failure", __func__);
8014 VOS_ASSERT(0);
8015 vos_mem_free(pChanList);
8016 vos_mem_free(pwdiUpdateChReqParam);
8017 return VOS_STATUS_E_NOMEM;
8018 }
8019 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
8020 * pChanList->numChan);
8021 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
8022
8023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8024 if(NULL == pWdaParams)
8025 {
8026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8027 "%s: VOS MEM Alloc Failure", __func__);
8028 VOS_ASSERT(0);
8029 vos_mem_free(pChanList);
8030 vos_mem_free(pChanInfoType);
8031 vos_mem_free(pwdiUpdateChReqParam);
8032 return VOS_STATUS_E_NOMEM;
8033 }
8034 pwdiUpdateChanReqType->numchan = pChanList->numChan;
8035
8036 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
8037 {
8038 pChanInfoType->mhz =
8039 vos_chan_to_freq(pChanList->chanParam[i].chanId);
8040
8041 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
8042 pChanInfoType->band_center_freq2 = 0;
8043
8044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8045 "chan[%d] = %u", i, pChanInfoType->mhz);
8046 if (pChanList->chanParam[i].dfsSet)
8047 {
8048 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
8049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8050 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
8051 pChanList->chanParam[i].dfsSet);
8052 }
8053
8054 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
8055 {
8056 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
8057 }
8058 else
8059 {
8060 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
8061 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
8062 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
8063 }
8064
8065 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
8066 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05308067 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008068 pChanInfoType++;
8069 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008070 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
8071 pWdaParams->pWdaContext = pWDA;
8072 pWdaParams->wdaMsgParam = (void *)pChanList;
8073 /* store Params pass it to WDI */
8074 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
8075 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
8076 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
8077 if(IS_WDI_STATUS_FAILURE(status))
8078 {
8079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8080 "Failure in Update Channel REQ Params WDI API, free all the memory");
8081 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
8082 vos_mem_free(pwdiUpdateChReqParam);
8083 vos_mem_free(pWdaParams->wdaMsgParam);
8084 vos_mem_free(pWdaParams);
8085 }
8086 return CONVERT_WDI2VOS_STATUS(status);
8087}
8088
Jeff Johnson295189b2012-06-20 16:38:30 -07008089/*
8090 * FUNCTION: WDA_AddTSReqCallback
8091 * send ADD TS RSP back to PE
8092 */
8093void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
8094{
8095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308096 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 tAddTsParams *pAddTsReqParams;
8098
8099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 if(NULL == pWdaParams)
8102 {
8103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 VOS_ASSERT(0) ;
8106 return ;
8107 }
8108 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308109 if (NULL == pWDA)
8110 {
8111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8112 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8114 vos_mem_free(pWdaParams->wdaMsgParam);
8115 vos_mem_free(pWdaParams);
8116
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308117 VOS_ASSERT(0);
8118 return ;
8119 }
8120
Jeff Johnson295189b2012-06-20 16:38:30 -07008121 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
8122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8123 vos_mem_free(pWdaParams);
8124
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008125 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 return ;
8128}
8129
Jeff Johnson295189b2012-06-20 16:38:30 -07008130/*
8131 * FUNCTION: WDA_ProcessAddTSReq
8132 * Request to WDI to Update the ADD TS REQ params.
8133 */
8134VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
8135 tAddTsParams *pAddTsReqParams)
8136{
8137 WDI_Status status = WDI_STATUS_SUCCESS ;
8138 WDI_AddTSReqParamsType *wdiAddTSReqParam =
8139 (WDI_AddTSReqParamsType *)vos_mem_malloc(
8140 sizeof(WDI_AddTSReqParamsType)) ;
8141 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 if(NULL == wdiAddTSReqParam)
8145 {
8146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 VOS_ASSERT(0);
8149 return VOS_STATUS_E_NOMEM;
8150 }
8151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8152 if(NULL == pWdaParams)
8153 {
8154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 VOS_ASSERT(0);
8157 vos_mem_free(wdiAddTSReqParam);
8158 return VOS_STATUS_E_NOMEM;
8159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
8161 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 //TS IE
8163 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
8164 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
8165 pAddTsReqParams->tspec.length;
8166
8167 //TS IE : TS INFO : TRAFFIC
8168 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
8169 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
8170 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
8171 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
8172 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
8173 pAddTsReqParams->tspec.tsinfo.traffic.psb;
8174 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
8175 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
8176 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
8177 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
8178 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
8179 pAddTsReqParams->tspec.tsinfo.traffic.direction;
8180 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
8181 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
8182 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
8183 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
8184
8185 //TS IE : TS INFO : SCHEDULE
8186 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
8187 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
8188 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
8189 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 //TS IE
8191 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
8192 pAddTsReqParams->tspec.nomMsduSz;
8193 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
8194 pAddTsReqParams->tspec.maxMsduSz;
8195 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
8196 pAddTsReqParams->tspec.minSvcInterval;
8197 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
8198 pAddTsReqParams->tspec.maxSvcInterval;
8199 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
8200 pAddTsReqParams->tspec.inactInterval;
8201 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
8202 pAddTsReqParams->tspec.suspendInterval;
8203 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
8204 pAddTsReqParams->tspec.svcStartTime;
8205 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
8206 pAddTsReqParams->tspec.minDataRate;
8207 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
8208 pAddTsReqParams->tspec.meanDataRate;
8209 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
8210 pAddTsReqParams->tspec.peakDataRate;
8211 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
8212 pAddTsReqParams->tspec.maxBurstSz;
8213 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
8214 pAddTsReqParams->tspec.delayBound;
8215 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
8216 pAddTsReqParams->tspec.minPhyRate;
8217 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
8218 pAddTsReqParams->tspec.surplusBw;
8219 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
8220 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 /* TODO: tAddTsParams doesn't have the following fields */
8222#if 0
8223 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8224 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
8225 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8226 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8227#endif
8228 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
8229
8230 pWdaParams->pWdaContext = pWDA;
8231 /* Store ADD TS pointer, as this will be used for response */
8232 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 /* store Params pass it to WDI */
8234 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 status = WDI_AddTSReq(wdiAddTSReqParam,
8236 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 if(IS_WDI_STATUS_FAILURE(status))
8238 {
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8240 "Failure in ADD TS REQ Params WDI API, free all the memory " );
8241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8242 vos_mem_free(pWdaParams);
8243 pAddTsReqParams->status = eSIR_FAILURE ;
8244 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
8245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008247}
8248
Jeff Johnson295189b2012-06-20 16:38:30 -07008249/*
8250 * FUNCTION: WDA_DelTSReqCallback
8251 * send DEL TS RSP back to PE
8252 */
8253void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
8254{
8255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008257 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8259 vos_mem_free(pWdaParams->wdaMsgParam) ;
8260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 /*
8262 * No respone required for WDA_DEL_TS_REQ so just free the request
8263 * param here
8264 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 return ;
8266}
8267
Jeff Johnson295189b2012-06-20 16:38:30 -07008268/*
8269 * FUNCTION: WDA_ProcessDelTSReq
8270 * Request to WDI to Update the DELTS REQ params.
8271 */
8272VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8273 tDelTsParams *pDelTSReqParams)
8274{
8275 WDI_Status status = WDI_STATUS_SUCCESS ;
8276 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8277 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8278 sizeof(WDI_DelTSReqParamsType)) ;
8279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 if(NULL == wdiDelTSReqParam)
8283 {
8284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 VOS_ASSERT(0);
8287 return VOS_STATUS_E_NOMEM;
8288 }
8289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8290 if(NULL == pWdaParams)
8291 {
8292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 VOS_ASSERT(0);
8295 vos_mem_free(wdiDelTSReqParam);
8296 return VOS_STATUS_E_NOMEM;
8297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8299 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8300 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8301 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8302 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 pWdaParams->pWdaContext = pWDA;
8304 /* Store DEL TS pointer, as this will be used for response */
8305 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 /* store Params pass it to WDI */
8307 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 status = WDI_DelTSReq(wdiDelTSReqParam,
8309 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 if(IS_WDI_STATUS_FAILURE(status))
8311 {
8312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8313 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8315 vos_mem_free(pWdaParams->wdaMsgParam);
8316 vos_mem_free(pWdaParams);
8317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008319}
Jeff Johnson295189b2012-06-20 16:38:30 -07008320/*
8321 * FUNCTION: WDA_UpdateBeaconParamsCallback
8322 * Free the memory. No need to send any response to PE in this case
8323 */
8324void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8325{
8326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 if(NULL == pWdaParams)
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 VOS_ASSERT(0) ;
8334 return ;
8335 }
8336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8337 vos_mem_free(pWdaParams->wdaMsgParam) ;
8338 vos_mem_free(pWdaParams);
8339 /*
8340 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8341 * param here
8342 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 return ;
8344}
Jeff Johnson295189b2012-06-20 16:38:30 -07008345/*
8346 * FUNCTION: WDA_ProcessUpdateBeaconParams
8347 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8348 */
8349VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8350 tUpdateBeaconParams *pUpdateBeaconParams)
8351{
8352 WDI_Status status = WDI_STATUS_SUCCESS ;
8353 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8354 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8355 sizeof(WDI_UpdateBeaconParamsType)) ;
8356 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 if(NULL == wdiUpdateBeaconParams)
8360 {
8361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 VOS_ASSERT(0);
8364 return VOS_STATUS_E_NOMEM;
8365 }
8366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8367 if(NULL == pWdaParams)
8368 {
8369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 VOS_ASSERT(0);
8372 vos_mem_free(wdiUpdateBeaconParams);
8373 return VOS_STATUS_E_NOMEM;
8374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8376 pUpdateBeaconParams->bssIdx;
8377 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8378 pUpdateBeaconParams->fShortPreamble;
8379 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8380 pUpdateBeaconParams->fShortSlotTime;
8381 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8382 pUpdateBeaconParams->beaconInterval;
8383 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8384 pUpdateBeaconParams->llaCoexist;
8385 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8386 pUpdateBeaconParams->llbCoexist;
8387 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8388 pUpdateBeaconParams->llgCoexist;
8389 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8390 pUpdateBeaconParams->ht20MhzCoexist;
8391 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8392 pUpdateBeaconParams->llnNonGFCoexist;
8393 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8394 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8395 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8396 pUpdateBeaconParams->fRIFSMode;
8397 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8398 pUpdateBeaconParams->paramChangeBitmap;
8399 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8400
8401 pWdaParams->pWdaContext = pWDA;
8402 /* Store UpdateBeacon Req pointer, as this will be used for response */
8403 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 /* store Params pass it to WDI */
8405 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8407 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8408 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 if(IS_WDI_STATUS_FAILURE(status))
8410 {
8411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8412 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8414 vos_mem_free(pWdaParams->wdaMsgParam);
8415 vos_mem_free(pWdaParams);
8416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008419#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008420/*
8421 * FUNCTION: WDA_TSMStatsReqCallback
8422 * send TSM Stats RSP back to PE
8423 */
8424void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8425{
8426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8427 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008428 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8429 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 if(NULL == pWdaParams)
8434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008436 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 VOS_ASSERT(0) ;
8438 return ;
8439 }
8440 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308441 if (NULL == pWDA)
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8444 "%s:pWDA is NULL", __func__);
8445 VOS_ASSERT(0);
8446 return ;
8447 }
8448
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008449 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8450
8451 if(NULL == pGetTsmStatsReqParams)
8452 {
8453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8454 "%s: pGetTsmStatsReqParams received NULL", __func__);
8455 VOS_ASSERT(0);
8456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8457 vos_mem_free(pWdaParams);
8458 return;
8459 }
8460
8461 pTsmRspParams =
8462 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 if( NULL == pTsmRspParams )
8464 {
8465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008466 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008467 VOS_ASSERT( 0 );
8468 return ;
8469 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008470 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8471 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8472 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8473
Jeff Johnson295189b2012-06-20 16:38:30 -07008474 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8475 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8476 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8477 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8478 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8479 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8480 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8481 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8482 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8483 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008484
8485 /* Assign get tsm stats req req (backup) in to the response */
8486 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8487
8488 /* free WDI command buffer */
8489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8490 vos_mem_free(pWdaParams);
8491
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 return ;
8494}
8495
8496
Jeff Johnson295189b2012-06-20 16:38:30 -07008497/*
8498 * FUNCTION: WDA_ProcessTsmStatsReq
8499 * Request to WDI to get the TSM Stats params.
8500 */
8501VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008502 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008503{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008504 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008506 tWDA_ReqParams *pWdaParams = NULL;
8507 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8508
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008510 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8512 sizeof(WDI_TSMStatsReqParamsType));
8513 if(NULL == wdiTSMReqParam)
8514 {
8515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 VOS_ASSERT(0);
8518 return VOS_STATUS_E_NOMEM;
8519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8521 if(NULL == pWdaParams)
8522 {
8523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 VOS_ASSERT(0);
8526 vos_mem_free(wdiTSMReqParam);
8527 return VOS_STATUS_E_NOMEM;
8528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008529 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8530 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8531 pTsmStats->bssId,
8532 sizeof(wpt_macAddr));
8533 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8534
8535 pWdaParams->pWdaContext = pWDA;
8536 /* Store TSM Stats pointer, as this will be used for response */
8537 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008538 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 status = WDI_TSMStatsReq(wdiTSMReqParam,
8540 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 if(IS_WDI_STATUS_FAILURE(status))
8542 {
8543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8544 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008545 vos_mem_free(pWdaParams);
8546
8547 pGetTsmStatsRspParams =
8548 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8549 if(NULL == pGetTsmStatsRspParams)
8550 {
8551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8552 "%s: VOS MEM Alloc Failure", __func__);
8553 VOS_ASSERT(0);
8554 vos_mem_free(pTsmStats);
8555 return VOS_STATUS_E_NOMEM;
8556 }
8557 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8558 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8559 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8560
8561 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008563 return CONVERT_WDI2VOS_STATUS(status) ;
8564}
8565#endif
8566/*
8567 * FUNCTION: WDA_SendBeaconParamsCallback
8568 * No need to send any response to PE in this case
8569 */
8570void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8571{
8572
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 return ;
8576}
Jeff Johnson295189b2012-06-20 16:38:30 -07008577/*
8578 * FUNCTION: WDA_ProcessSendBeacon
8579 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8580 * start beacon trasmission
8581 */
8582VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8583 tSendbeaconParams *pSendbeaconParams)
8584{
8585 WDI_Status status = WDI_STATUS_SUCCESS ;
8586 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8590 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8591 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8592 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8594 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308595 /* p2pIeOffset should be atleast greater than timIeOffset */
8596 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8597 (pSendbeaconParams->p2pIeOffset <
8598 pSendbeaconParams->timIeOffset))
8599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8601 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308602 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308603 VOS_ASSERT( 0 );
8604 return WDI_STATUS_E_FAILURE;
8605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008606 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8607 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 /* Copy the beacon template to local buffer */
8609 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8610 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8611 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8612
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8614 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 if(IS_WDI_STATUS_FAILURE(status))
8616 {
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8618 "Failure in SEND BEACON REQ Params WDI API" );
8619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 vos_mem_free(pSendbeaconParams);
8621 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622}
Jeff Johnson295189b2012-06-20 16:38:30 -07008623/*
8624 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8625 * No need to send any response to PE in this case
8626 */
8627void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8628{
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008630 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 return ;
8632}
8633
Jeff Johnson295189b2012-06-20 16:38:30 -07008634/*
8635 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8636 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8637 * send probe response
8638 */
8639VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8640 tSendProbeRespParams *pSendProbeRspParams)
8641{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008642 WDI_Status status = WDI_STATUS_SUCCESS;
8643 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8644 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008646 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008647
8648 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308649 {
8650 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008651 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308652 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008653
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008655 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008657 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 /* Copy the Probe Response template to local buffer */
8660 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008661 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 pSendProbeRspParams->pProbeRespTemplate,
8663 pSendProbeRspParams->probeRespTemplateLen);
8664 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008665 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8667 WDI_PROBE_REQ_BITMAP_IE_LEN);
8668
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008669 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008671 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 if(IS_WDI_STATUS_FAILURE(status))
8674 {
8675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8676 "Failure in SEND Probe RSP Params WDI API" );
8677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008679 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008681}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008682#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008683/*
8684 * FUNCTION: WDA_SetMaxTxPowerCallBack
8685 * send the response to PE with power value received from WDI
8686 */
8687void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8688 void* pUserData)
8689{
8690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8691 tWDA_CbContext *pWDA = NULL;
8692 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8693
8694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008695 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 if(NULL == pWdaParams)
8697 {
8698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008699 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 VOS_ASSERT(0) ;
8701 return ;
8702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308704 if (NULL == pWDA)
8705 {
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8707 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8709 vos_mem_free(pWdaParams->wdaMsgParam);
8710 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308711 VOS_ASSERT(0);
8712 return ;
8713 }
8714
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 if( NULL == pMaxTxPowerParams )
8717 {
8718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008719 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008720 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8722 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008723 return ;
8724 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008725
Jeff Johnson295189b2012-06-20 16:38:30 -07008726
8727 /*need to free memory for the pointers used in the
8728 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8730 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008732
Jeff Johnson295189b2012-06-20 16:38:30 -07008733
8734 /* send response to UMAC*/
8735 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8736
8737 return;
8738}
Jeff Johnson295189b2012-06-20 16:38:30 -07008739/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008740 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 * Request to WDI to send set Max Tx Power Request
8742 */
8743 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8744 tMaxTxPowerParams *MaxTxPowerParams)
8745{
8746 WDI_Status status = WDI_STATUS_SUCCESS;
8747 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8748 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008749
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008751 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8754 sizeof(WDI_SetMaxTxPowerParamsType));
8755 if(NULL == wdiSetMaxTxPowerParams)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 VOS_ASSERT(0);
8760 return VOS_STATUS_E_NOMEM;
8761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8763 if(NULL == pWdaParams)
8764 {
8765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 vos_mem_free(wdiSetMaxTxPowerParams);
8768 VOS_ASSERT(0);
8769 return VOS_STATUS_E_NOMEM;
8770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 /* Copy.Max.Tx.Power Params to WDI structure */
8772 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8773 MaxTxPowerParams->bssId,
8774 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8776 MaxTxPowerParams->selfStaMacAddr,
8777 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8779 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 pWdaParams->pWdaContext = pWDA;
8782 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 /* store Params pass it to WDI */
8784 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8786 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 if(IS_WDI_STATUS_FAILURE(status))
8788 {
8789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8790 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8792 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008793 /* send response to UMAC*/
8794 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 }
8796 return CONVERT_WDI2VOS_STATUS(status);
8797
8798}
Jeff Johnson295189b2012-06-20 16:38:30 -07008799#endif
schang86c22c42013-03-13 18:41:24 -07008800
8801/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008802 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8803 * send the response to PE with power value received from WDI
8804 */
8805void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8806 *pwdiSetMaxTxPowerPerBandRsp,
8807 void* pUserData)
8808{
8809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8810 tWDA_CbContext *pWDA = NULL;
8811 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8812
8813 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8814 "<------ %s ", __func__);
8815 if (NULL == pWdaParams)
8816 {
8817 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8818 "%s: pWdaParams received NULL", __func__);
8819 VOS_ASSERT(0);
8820 return ;
8821 }
8822 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308823 if (NULL == pWDA)
8824 {
8825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8826 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8828 vos_mem_free(pWdaParams->wdaMsgParam);
8829 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308830 VOS_ASSERT(0);
8831 return ;
8832 }
8833
Arif Hussaina5ebce02013-08-09 15:09:58 -07008834 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8835 if ( NULL == pMxTxPwrPerBandParams )
8836 {
8837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8838 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8839 VOS_ASSERT(0);
8840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8841 vos_mem_free(pWdaParams);
8842 return;
8843 }
8844
8845 /*need to free memory for the pointers used in the
8846 WDA Process.Set Max Tx Power Req function*/
8847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8848 vos_mem_free(pWdaParams);
8849 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8850
8851 /* send response to UMAC*/
8852 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8853 pMxTxPwrPerBandParams, 0);
8854
8855 return;
8856}
8857
8858/*
8859 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8860 * Request to WDI to send set Max Tx Power Per band Request
8861 */
8862 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8863 tMaxTxPowerPerBandParams
8864 *MaxTxPowerPerBandParams)
8865{
8866 WDI_Status status = WDI_STATUS_SUCCESS;
8867 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8868 tWDA_ReqParams *pWdaParams = NULL;
8869
8870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8871 "------> %s ", __func__);
8872
8873 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8874 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8875
8876 if (NULL == wdiSetMxTxPwrPerBandParams)
8877 {
8878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8879 "%s: VOS MEM Alloc Failure", __func__);
8880 VOS_ASSERT(0);
8881 return VOS_STATUS_E_NOMEM;
8882 }
8883 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8884 if (NULL == pWdaParams)
8885 {
8886 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8887 "%s: VOS MEM Alloc Failure", __func__);
8888 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8889 VOS_ASSERT(0);
8890 return VOS_STATUS_E_NOMEM;
8891 }
8892 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8893 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8894 MaxTxPowerPerBandParams->bandInfo;
8895 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8896 MaxTxPowerPerBandParams->power;
8897 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8898 pWdaParams->pWdaContext = pWDA;
8899 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8900 /* store Params pass it to WDI */
8901 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8902 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8903 WDA_SetMaxTxPowerPerBandCallBack,
8904 pWdaParams);
8905 if (IS_WDI_STATUS_FAILURE(status))
8906 {
8907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8908 "Failure in SET MAX TX Power REQ Params WDI API,"
8909 " free all the memory");
8910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8911 vos_mem_free(pWdaParams);
8912 /* send response to UMAC*/
8913 WDA_SendMsg(pWDA,
8914 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8915 MaxTxPowerPerBandParams, 0);
8916 }
8917 return CONVERT_WDI2VOS_STATUS(status);
8918}
8919
8920/*
schang86c22c42013-03-13 18:41:24 -07008921 * FUNCTION: WDA_SetTxPowerCallBack
8922 * send the response to PE with power value received from WDI
8923 */
8924void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8925 void* pUserData)
8926{
8927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8928 tWDA_CbContext *pWDA = NULL;
8929 tSirSetTxPowerReq *pTxPowerParams = NULL;
8930
8931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8932 "<------ %s ", __func__);
8933 if(NULL == pWdaParams)
8934 {
8935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8936 "%s: pWdaParams received NULL", __func__);
8937 VOS_ASSERT(0) ;
8938 return ;
8939 }
8940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308941 if (NULL == pWDA)
8942 {
8943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8944 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8946 vos_mem_free(pWdaParams->wdaMsgParam);
8947 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308948 VOS_ASSERT(0);
8949 return ;
8950 }
8951
schang86c22c42013-03-13 18:41:24 -07008952 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8953 if(NULL == pTxPowerParams)
8954 {
8955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8956 "%s: pTxPowerParams received NULL " ,__func__);
8957 VOS_ASSERT(0);
8958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8959 vos_mem_free(pWdaParams);
8960 return ;
8961 }
8962
8963 /*need to free memory for the pointers used in the
8964 WDA Process.Set Max Tx Power Req function*/
8965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8966 vos_mem_free(pWdaParams);
8967
8968 /* send response to UMAC*/
8969 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8970 return;
8971}
8972
8973/*
8974 * FUNCTION: WDA_ProcessSetTxPowerReq
8975 * Request to WDI to send set Tx Power Request
8976 */
8977 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8978 tSirSetTxPowerReq *txPowerParams)
8979{
8980 WDI_Status status = WDI_STATUS_SUCCESS;
8981 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8982 tWDA_ReqParams *pWdaParams = NULL;
8983
8984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8985 "------> %s ", __func__);
8986
8987 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8988 sizeof(WDI_SetTxPowerParamsType));
8989 if(NULL == wdiSetTxPowerParams)
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8992 "%s: VOS MEM Alloc Failure", __func__);
8993 VOS_ASSERT(0);
8994 return VOS_STATUS_E_NOMEM;
8995 }
8996 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8997 if(NULL == pWdaParams)
8998 {
8999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9000 "%s: VOS MEM Alloc Failure", __func__);
9001 vos_mem_free(wdiSetTxPowerParams);
9002 VOS_ASSERT(0);
9003 return VOS_STATUS_E_NOMEM;
9004 }
9005 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
9006 txPowerParams->bssIdx;
9007 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
9008 txPowerParams->mwPower;
9009 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
9010 pWdaParams->pWdaContext = pWDA;
9011 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
9012 /* store Params pass it to WDI */
9013 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
9014 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
9015 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
9016 if(IS_WDI_STATUS_FAILURE(status))
9017 {
9018 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9019 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
9020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9021 vos_mem_free(pWdaParams);
9022 /* send response to UMAC*/
9023 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
9024 }
9025 return CONVERT_WDI2VOS_STATUS(status);
9026}
9027
Jeff Johnson295189b2012-06-20 16:38:30 -07009028/*
9029 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9030 * Free the memory. No need to send any response to PE in this case
9031 */
9032void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
9033{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009034 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9035
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009037 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009038
9039 if(NULL == pWdaParams)
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009043 VOS_ASSERT(0) ;
9044 return ;
9045 }
9046
9047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9048 vos_mem_free(pWdaParams->wdaMsgParam) ;
9049 vos_mem_free(pWdaParams);
9050
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 /*
9052 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
9053 * so just free the request param here
9054 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009055 return ;
9056}
9057
Jeff Johnson295189b2012-06-20 16:38:30 -07009058/*
9059 * FUNCTION: WDA_ProcessSetP2PGONOAReq
9060 * Request to WDI to set the P2P Group Owner Notice of Absence Req
9061 */
9062VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
9063 tP2pPsParams *pP2pPsConfigParams)
9064{
9065 WDI_Status status = WDI_STATUS_SUCCESS ;
9066 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
9067 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
9068 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009069 tWDA_ReqParams *pWdaParams = NULL;
9070
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009072 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 if(NULL == wdiSetP2PGONOAReqParam)
9074 {
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009076 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309077 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 VOS_ASSERT(0);
9079 return VOS_STATUS_E_NOMEM;
9080 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009081
9082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9083 if(NULL == pWdaParams)
9084 {
9085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009086 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009087 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009088 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009089 VOS_ASSERT(0);
9090 return VOS_STATUS_E_NOMEM;
9091 }
9092
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
9094 pP2pPsConfigParams->opp_ps;
9095 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
9096 pP2pPsConfigParams->ctWindow;
9097 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
9098 pP2pPsConfigParams->count;
9099 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
9100 pP2pPsConfigParams->duration;
9101 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
9102 pP2pPsConfigParams->interval;
9103 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
9104 pP2pPsConfigParams->single_noa_duration;
9105 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
9106 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009107
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
9109 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009110 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
9111
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009113 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
9114 pWdaParams->pWdaContext = pWDA;
9115
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009117 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
9118
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 if(IS_WDI_STATUS_FAILURE(status))
9120 {
9121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9122 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9124 vos_mem_free(pWdaParams->wdaMsgParam);
9125 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 return CONVERT_WDI2VOS_STATUS(status);
9128
Jeff Johnson295189b2012-06-20 16:38:30 -07009129}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309130
9131#ifdef FEATURE_WLAN_TDLS
9132/*
9133 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9134 * Free the memory. No need to send any response to PE in this case
9135 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309136void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
9137 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309138{
9139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9140 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309141 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309142
9143
9144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9145 "<------ %s " ,__func__);
9146 if(NULL == pWdaParams)
9147 {
9148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9149 "%s: pWdaParams received NULL", __func__);
9150 VOS_ASSERT(0) ;
9151 return ;
9152 }
9153 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9154
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309155 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309156 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9158 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9160 vos_mem_free(pWdaParams->wdaMsgParam);
9161 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309162 VOS_ASSERT(0);
9163 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309164 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309165
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309166 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
9167 if( NULL == pTdlsLinkEstablishParams )
9168 {
9169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9170 "%s: pTdlsLinkEstablishParams "
9171 "received NULL " ,__func__);
9172 VOS_ASSERT(0);
9173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9174 vos_mem_free(pWdaParams);
9175 return ;
9176 }
9177 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
9178 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309180 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309181 /* send response to UMAC*/
9182 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
9183
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309184 return ;
9185}
9186
9187VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
9188 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
9189{
9190 WDI_Status status = WDI_STATUS_SUCCESS ;
9191 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
9192 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
9193 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
9194 tWDA_ReqParams *pWdaParams = NULL;
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9196 "------> %s " ,__func__);
9197 if(NULL == wdiSetTDLSLinkEstablishReqParam)
9198 {
9199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9200 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309201 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309202 VOS_ASSERT(0);
9203 return VOS_STATUS_E_NOMEM;
9204 }
9205 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9206 if(NULL == pWdaParams)
9207 {
9208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9209 "%s: VOS MEM Alloc Failure", __func__);
9210 vos_mem_free(pTdlsLinkEstablishParams);
9211 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
9212 VOS_ASSERT(0);
9213 return VOS_STATUS_E_NOMEM;
9214 }
9215 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309216 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309217 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309218 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309219 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309220 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309221 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309222 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309223 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309224 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05309225 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
9226 pTdlsLinkEstablishParams->isOffChannelSupported;
9227
9228 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
9229 pTdlsLinkEstablishParams->validChannels,
9230 pTdlsLinkEstablishParams->validChannelsLen);
9231
9232 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
9233 pTdlsLinkEstablishParams->validChannelsLen;
9234
9235 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
9236 pTdlsLinkEstablishParams->validOperClasses,
9237 pTdlsLinkEstablishParams->validOperClassesLen);
9238 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
9239 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309240
9241 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
9242 /* Store msg pointer from PE, as this will be used for response */
9243 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
9244 /* store Params pass it to WDI */
9245 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
9246 pWdaParams->pWdaContext = pWDA;
9247
9248 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
9249 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
9250 WDA_SetTDLSLinkEstablishReqParamsCallback,
9251 pWdaParams);
9252 if(IS_WDI_STATUS_FAILURE(status))
9253 {
9254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9255 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
9256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9257 vos_mem_free(pWdaParams->wdaMsgParam);
9258 vos_mem_free(pWdaParams);
9259 }
9260 return CONVERT_WDI2VOS_STATUS(status);
9261}
Atul Mittalc0f739f2014-07-31 13:47:47 +05309262
9263// tdlsoffchan
9264void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
9265 void* pUserData)
9266{
9267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9268 tWDA_CbContext *pWDA = NULL;
9269 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
9270
9271
9272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9273 "<------ %s " ,__func__);
9274 if(NULL == pWdaParams)
9275 {
9276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9277 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309278 VOS_ASSERT(0) ;
9279 return ;
9280 }
9281 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9282
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309283 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309284 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9286 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9288 vos_mem_free(pWdaParams->wdaMsgParam);
9289 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309290 VOS_ASSERT(0);
9291 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309292 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309293
Atul Mittalc0f739f2014-07-31 13:47:47 +05309294 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309295 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309296 {
9297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9298 "%s: pTdlsChanSwitchParams "
9299 "received NULL " ,__func__);
9300 VOS_ASSERT(0);
9301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9302 vos_mem_free(pWdaParams);
9303 return ;
9304 }
9305 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9306 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9308 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309309 /* send response to UMAC*/
9310 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309311
9312 return ;
9313}
9314VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9315 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9316{
9317 WDI_Status status = WDI_STATUS_SUCCESS ;
9318 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9319 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9320 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9321 tWDA_ReqParams *pWdaParams = NULL;
9322
9323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9324 "Enter: %s ",__func__);
9325 if(NULL == wdiSetTDLSChanSwitchReqParam)
9326 {
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9328 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309329 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309330 VOS_ASSERT(0);
9331 return VOS_STATUS_E_NOMEM;
9332 }
9333
9334 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9335 if(NULL == pWdaParams)
9336 {
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9338 "%s: VOS MEM Alloc Failure", __func__);
9339 vos_mem_free(pTdlsChanSwitchParams);
9340 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9341 VOS_ASSERT(0);
9342 return VOS_STATUS_E_NOMEM;
9343 }
9344 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9345 pTdlsChanSwitchParams->staIdx;
9346 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9347 pTdlsChanSwitchParams->tdlsSwMode;
9348 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9349 pTdlsChanSwitchParams->operClass;
9350 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9351 pTdlsChanSwitchParams->tdlsOffCh;
9352 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9353 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9354
9355
9356 /* Store msg pointer from PE, as this will be used for response */
9357 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9358 /* store Params pass it to WDI */
9359 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9360 pWdaParams->pWdaContext = pWDA;
9361 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9362 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9363 WDA_SetTDLSChanSwitchReqParamsCallback,
9364 pWdaParams);
9365 if(IS_WDI_STATUS_FAILURE(status))
9366 {
9367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9368 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9370 vos_mem_free(pWdaParams->wdaMsgParam);
9371 vos_mem_free(pWdaParams);
9372 }
9373 return CONVERT_WDI2VOS_STATUS(status);
9374}
9375#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309376
9377
Jeff Johnson295189b2012-06-20 16:38:30 -07009378#ifdef WLAN_FEATURE_VOWIFI_11R
9379/*
9380 * FUNCTION: WDA_AggrAddTSReqCallback
9381 * send ADD AGGREGATED TS RSP back to PE
9382 */
9383void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9384{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009385 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309386 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009387 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009390 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009391 if(NULL == pWdaParams)
9392 {
9393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009394 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009395 VOS_ASSERT(0) ;
9396 return ;
9397 }
9398
9399 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309400 if (NULL == pWDA)
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9403 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9405 vos_mem_free(pWdaParams->wdaMsgParam);
9406 vos_mem_free(pWdaParams);
9407
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309408 VOS_ASSERT(0);
9409 return ;
9410 }
9411
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009413
9414 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9415 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009416 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009419
9420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9421 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 return ;
9423}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009424/*
9425 * FUNCTION: WDA_ProcessAddTSReq
9426 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9427 */
9428VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9429 tAggrAddTsParams *pAggrAddTsReqParams)
9430{
9431 WDI_Status status = WDI_STATUS_SUCCESS ;
9432 int i;
9433 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009434 tWDA_ReqParams *pWdaParams = NULL;
9435
9436
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009438 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9440 sizeof(WDI_AggrAddTSReqParamsType)) ;
9441 if(NULL == wdiAggrAddTSReqParam)
9442 {
9443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009444 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309445 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 VOS_ASSERT(0);
9447 return VOS_STATUS_E_NOMEM;
9448 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009449
9450
9451 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9452 if(NULL == pWdaParams)
9453 {
9454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009455 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009456 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009457 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009458 VOS_ASSERT(0);
9459 return VOS_STATUS_E_NOMEM;
9460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9462 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9463 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9465 {
9466 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9467 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9468 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9470 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9472 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9474 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9476 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9478 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9480 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9482 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9484 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9486 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9488 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9490 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9492 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9494 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9496 pAggrAddTsReqParams->tspec[i].inactInterval;
9497 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9498 pAggrAddTsReqParams->tspec[i].suspendInterval;
9499 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9500 pAggrAddTsReqParams->tspec[i].svcStartTime;
9501 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9502 pAggrAddTsReqParams->tspec[i].minDataRate;
9503 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9504 pAggrAddTsReqParams->tspec[i].meanDataRate;
9505 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9506 pAggrAddTsReqParams->tspec[i].peakDataRate;
9507 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9508 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9509 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9510 pAggrAddTsReqParams->tspec[i].delayBound;
9511 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9512 pAggrAddTsReqParams->tspec[i].minPhyRate;
9513 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9514 pAggrAddTsReqParams->tspec[i].surplusBw;
9515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9516 pAggrAddTsReqParams->tspec[i].mediumTime;
9517 }
9518
9519 /* TODO: tAggrAddTsParams doesn't have the following fields */
9520#if 0
9521 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9522 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9523 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9524 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9525#endif
9526 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9527
9528 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009529 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009531 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9532
9533 pWdaParams->pWdaContext = pWDA;
9534
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009536 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9537
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 if(IS_WDI_STATUS_FAILURE(status))
9539 {
9540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9541 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009542
9543 /* send the failure response back to PE*/
9544 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9545 {
9546 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9547 }
9548
9549 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9550 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309551
9552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9553 vos_mem_free(pWdaParams);
9554
Jeff Johnson295189b2012-06-20 16:38:30 -07009555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 return CONVERT_WDI2VOS_STATUS(status) ;
9557}
9558#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009559/*
Mihir Shetea4306052014-03-25 00:02:54 +05309560 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 * send Enter IMPS RSP back to PE
9562 */
Mihir Shetea4306052014-03-25 00:02:54 +05309563void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009564{
Mihir Shetea4306052014-03-25 00:02:54 +05309565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309566 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309567
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309569 "<------ %s status=%d" ,__func__,status);
9570 if(NULL == pWdaParams)
9571 {
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9573 "%s: pWdaParams received NULL", __func__);
9574 VOS_ASSERT(0);
9575 return;
9576 }
9577
9578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309579 if (NULL == pWDA)
9580 {
9581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9582 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9584 vos_mem_free(pWdaParams->wdaMsgParam);
9585 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309586 VOS_ASSERT(0);
9587 return ;
9588 }
Mihir Shetea4306052014-03-25 00:02:54 +05309589
9590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9591 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309592 if (WDI_STATUS_SUCCESS != status)
9593 {
9594 pWDA->failureCounts.enterImpsFailureCount++;
9595 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9596 pWDA->failureCounts.enterImpsFailureCount)
9597 {
9598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9599 "%s: Status %d fail count %d", __func__, status,
9600 pWDA->failureCounts.enterImpsFailureCount);
9601 pWDA->failureCounts.enterImpsFailureCount = 0;
9602 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9603 WLAN_LOG_INDICATOR_HOST_DRIVER,
9604 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9605 FALSE, TRUE);
9606 }
9607 }
9608 else
9609 {
9610 pWDA->failureCounts.enterImpsFailureCount = 0;
9611 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009612 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 return ;
9614}
Mihir Shetea4306052014-03-25 00:02:54 +05309615
9616
9617/*
9618 * FUNCTION: WDA_EnterImpsReqCallback
9619 * Free memory and send Enter IMPS RSP back to PE.
9620 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9621 */
9622void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9623{
9624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309625 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309626
9627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9628 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9629
9630 if(NULL == pWdaParams)
9631 {
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9633 "%s: pWdaParams received NULL", __func__);
9634 VOS_ASSERT(0);
9635 return;
9636 }
9637
9638 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309639 if (NULL == pWDA)
9640 {
9641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9642 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9644 vos_mem_free(pWdaParams->wdaMsgParam);
9645 vos_mem_free(pWdaParams);
9646
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309647 VOS_ASSERT(0);
9648 return ;
9649 }
9650
Mihir Shetea4306052014-03-25 00:02:54 +05309651
9652 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9653 {
9654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9655 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309656 pWDA->failureCounts.enterImpsFailureCount++;
9657 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9658 pWDA->failureCounts.enterImpsFailureCount)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9661 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9662 pWDA->failureCounts.enterImpsFailureCount);
9663 pWDA->failureCounts.enterImpsFailureCount = 0;
9664 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9665 WLAN_LOG_INDICATOR_HOST_DRIVER,
9666 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9667 FALSE, TRUE);
9668 }
Mihir Shetea4306052014-03-25 00:02:54 +05309669 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9670 CONVERT_WDI2SIR_STATUS(wdiStatus));
9671 }
9672
9673 return;
9674}
Jeff Johnson295189b2012-06-20 16:38:30 -07009675/*
9676 * FUNCTION: WDA_ProcessEnterImpsReq
9677 * Request to WDI to Enter IMPS power state.
9678 */
9679VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9680{
9681 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309682 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9683 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309684 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009686 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309687
9688
9689 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9690 if (NULL == wdiEnterImpsReqParams)
9691 {
9692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9693 "%s: VOS MEM Alloc Failure", __func__);
9694 VOS_ASSERT(0);
9695 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9696 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9697 return VOS_STATUS_E_NOMEM;
9698 }
9699
9700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9701 if (NULL == pWdaParams)
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9704 "%s: VOS MEM Alloc Failure", __func__);
9705 VOS_ASSERT(0);
9706 vos_mem_free(wdiEnterImpsReqParams);
9707 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9708 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9709 return VOS_STATUS_E_NOMEM;
9710 }
9711
9712 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9713 wdiEnterImpsReqParams->pUserData = pWdaParams;
9714
9715 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9716 pWdaParams->wdaMsgParam = NULL;
9717 pWdaParams->pWdaContext = pWDA;
9718
9719 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9720 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9721 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 if(IS_WDI_STATUS_FAILURE(status))
9723 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309724 if (! (failcnt & 0xF))
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9726 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9727 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309728 vos_mem_free(wdiEnterImpsReqParams);
9729 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009730 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 return CONVERT_WDI2VOS_STATUS(status) ;
9733}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309734
9735/*
9736 * FUNCTION: WDA_ExitImpsRespCallback
9737 * send Exit IMPS RSP back to PE
9738 */
9739void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9740{
9741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9742 tWDA_CbContext *pWDA;
9743
9744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9745 "<------ %s " ,__func__);
9746
9747 if (NULL == pWdaParams)
9748 {
9749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9750 "%s: pWdaParams received NULL", __func__);
9751 VOS_ASSERT(0);
9752 return;
9753 }
9754 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9755
9756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9757 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309758 if (WDI_STATUS_SUCCESS != status)
9759 {
9760 pWDA->failureCounts.exitImpsFailureCount++;
9761 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9762 pWDA->failureCounts.exitImpsFailureCount)
9763 {
9764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9765 "%s: Status %d fail count %d", __func__,
9766 status,
9767 pWDA->failureCounts.exitImpsFailureCount);
9768 pWDA->failureCounts.exitImpsFailureCount = 0;
9769 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9770 WLAN_LOG_INDICATOR_HOST_DRIVER,
9771 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9772 FALSE, TRUE);
9773 }
9774 }
9775 else
9776 {
9777 pWDA->failureCounts.exitImpsFailureCount = 0;
9778 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309779
9780 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9781 return;
9782}
9783
Jeff Johnson295189b2012-06-20 16:38:30 -07009784/*
9785 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 */
9787void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9788{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309790 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009792 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309793 if(NULL == pWdaParams)
9794 {
9795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9796 "%s: pWdaParams received NULL", __func__);
9797 VOS_ASSERT(0);
9798 return;
9799 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309800 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309801 if (IS_WDI_STATUS_FAILURE(status))
9802 {
9803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9804 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309805
9806 pWDA->failureCounts.exitImpsFailureCount++;
9807 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9808 pWDA->failureCounts.exitImpsFailureCount)
9809 {
9810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9811 "%s: wdiStatus %d fail count %d", __func__,
9812 status,
9813 pWDA->failureCounts.exitImpsFailureCount);
9814 pWDA->failureCounts.exitImpsFailureCount = 0;
9815 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9816 WLAN_LOG_INDICATOR_HOST_DRIVER,
9817 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9818 FALSE, TRUE);
9819 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309820 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9821 {
9822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9823 FL("reload wlan driver"));
9824 wpalWlanReload();
9825 }
9826 }
9827 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009828}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309829
Jeff Johnson295189b2012-06-20 16:38:30 -07009830/*
9831 * FUNCTION: WDA_ProcessExitImpsReq
9832 * Request to WDI to Exit IMPS power state.
9833 */
9834VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9835{
9836 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309837 tWDA_ReqParams *pWdaParams;
9838 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9839
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009841 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309842 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9843 sizeof(WDI_ExitImpsReqParamsType));
9844 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9847 "%s: VOS MEM Alloc Failure", __func__);
9848 VOS_ASSERT(0);
9849 return VOS_STATUS_E_NOMEM;
9850 }
9851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9852 if(NULL == pWdaParams)
9853 {
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9855 "%s: VOS MEM Alloc Failure", __func__);
9856 VOS_ASSERT(0);
9857 vos_mem_free(wdiExitImpsReqParams);
9858 return VOS_STATUS_E_NOMEM;
9859 }
9860 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9861 wdiExitImpsReqParams->pUserData = pWdaParams;
9862
9863 /* Store param pointer as passed in by caller */
9864 /* store Params pass it to WDI */
9865 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9866 pWdaParams->pWdaContext = pWDA;
9867 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9868 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9869 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9870 pWdaParams);
9871 if (IS_WDI_STATUS_FAILURE(status))
9872 {
9873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9874 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9876 vos_mem_free(pWdaParams);
9877 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 return CONVERT_WDI2VOS_STATUS(status) ;
9880}
Jeff Johnson295189b2012-06-20 16:38:30 -07009881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009882 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 * send Enter BMPS RSP back to PE
9884 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009886{
9887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309888 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009889 tEnterBmpsParams *pEnterBmpsRspParams;
9890
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 if(NULL == pWdaParams)
9894 {
9895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009896 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 VOS_ASSERT(0) ;
9898 return ;
9899 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009900
9901 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309902 if (NULL == pWDA)
9903 {
9904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9905 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309906
9907 if(pWdaParams->wdaWdiApiMsgParam)
9908 {
9909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9910 }
9911 vos_mem_free(pWdaParams);
9912
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309913 VOS_ASSERT(0);
9914 return ;
9915 }
9916
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009917 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9918
9919 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009920 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009921
9922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309924 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9925 {
9926 pWDA->failureCounts.enterBmpsFailureCount++;
9927 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9928 pWDA->failureCounts.enterBmpsFailureCount)
9929 {
9930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9931 "%s: wdiStatus %d fail count %d", __func__,
9932 pwdiEnterBmpsRsp->wdiStatus,
9933 pWDA->failureCounts.enterBmpsFailureCount);
9934 pWDA->failureCounts.enterBmpsFailureCount = 0;
9935 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9936 WLAN_LOG_INDICATOR_HOST_DRIVER,
9937 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9938 FALSE, TRUE);
9939 }
9940 }
9941 else
9942 {
9943 pWDA->failureCounts.enterBmpsFailureCount = 0;
9944 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009945 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9946
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 return ;
9948}
Jeff Johnson295189b2012-06-20 16:38:30 -07009949/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009950 * FUNCTION: WDA_EnterBmpsReqCallback
9951 * Free memory and send Enter BMPS RSP back to PE.
9952 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9953 */
9954void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9955{
9956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309957 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009958 tEnterBmpsParams *pEnterBmpsRspParams;
9959
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9961 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9962
9963 if(NULL == pWdaParams)
9964 {
9965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9966 "%s: pWdaParams received NULL", __func__);
9967 VOS_ASSERT(0);
9968 return;
9969 }
9970
9971 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309972 if (NULL == pWDA)
9973 {
9974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9975 "%s:pWDA is NULL", __func__);
9976 VOS_ASSERT(0);
9977 return ;
9978 }
9979
Yue Ma7f44bbe2013-04-12 11:47:39 -07009980 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9981 pEnterBmpsRspParams->status = wdiStatus;
9982
9983 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9984 {
9985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9986 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309987 pWDA->failureCounts.enterBmpsFailureCount++;
9988 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9989 pWDA->failureCounts.enterBmpsFailureCount)
9990 {
9991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9992 "%s: wdiStatus %d fail count %d", __func__,
9993 wdiStatus,
9994 pWDA->failureCounts.enterBmpsFailureCount);
9995 pWDA->failureCounts.enterBmpsFailureCount = 0;
9996 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9997 WLAN_LOG_INDICATOR_HOST_DRIVER,
9998 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9999 FALSE, TRUE);
10000 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010001 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
10002 }
10003
10004 return;
10005}
10006/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 * FUNCTION: WDA_ProcessEnterBmpsReq
10008 * Request to WDI to Enter BMPS power state.
10009 */
10010VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
10011 tEnterBmpsParams *pEnterBmpsReqParams)
10012{
10013 WDI_Status status = WDI_STATUS_SUCCESS;
10014 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
10015 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
10019 {
10020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010021 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 VOS_ASSERT(0);
10023 return VOS_STATUS_E_FAILURE;
10024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
10026 if (NULL == wdiEnterBmpsReqParams)
10027 {
10028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010031 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10032 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 return VOS_STATUS_E_NOMEM;
10034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10036 if (NULL == pWdaParams)
10037 {
10038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 VOS_ASSERT(0);
10041 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010042 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10043 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 return VOS_STATUS_E_NOMEM;
10045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
10047 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
10048 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
10049 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080010050 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
10052 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
10053 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010054 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
10055 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010056
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 /* Store param pointer as passed in by caller */
10058 /* store Params pass it to WDI */
10059 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010060 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010063 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 if (IS_WDI_STATUS_FAILURE(status))
10065 {
10066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10067 "Failure in Enter BMPS REQ WDI API, free all the memory" );
10068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010069 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010070 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010071 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 return CONVERT_WDI2VOS_STATUS(status);
10074}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010075
10076
10077static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
10078 WDI_Status wdiStatus,
10079 tExitBmpsParams *pExitBmpsReqParams)
10080{
10081 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
10082
10083 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
10084}
10085
10086
Jeff Johnson295189b2012-06-20 16:38:30 -070010087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010088 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 * send Exit BMPS RSP back to PE
10090 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010091void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010092{
10093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010094 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010095 tExitBmpsParams *pExitBmpsRspParams;
10096
Jeff Johnson295189b2012-06-20 16:38:30 -070010097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 if(NULL == pWdaParams)
10100 {
10101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010102 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 VOS_ASSERT(0) ;
10104 return ;
10105 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010106
10107 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010108 if (NULL == pWDA)
10109 {
10110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10111 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010112
10113 if(pWdaParams->wdaWdiApiMsgParam)
10114 {
10115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10116 }
10117 vos_mem_free(pWdaParams);
10118
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010119 VOS_ASSERT(0);
10120 return ;
10121 }
10122
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010123 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10124
10125 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010126 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010127
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +053010129 vos_mem_free(pWdaParams);
10130
10131 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
10132 {
10133 pWDA->failureCounts.exitBmpsFailureCount++;
10134 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10135 pWDA->failureCounts.exitBmpsFailureCount)
10136 {
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10138 "%s: Status %d fail count %d", __func__,
10139 pExitBmpsRspParams->status,
10140 pWDA->failureCounts.exitBmpsFailureCount);
10141 pWDA->failureCounts.exitBmpsFailureCount = 0;
10142 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10143 WLAN_LOG_INDICATOR_HOST_DRIVER,
10144 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10145 FALSE, TRUE);
10146 }
10147 }
10148 else
10149 {
10150 pWDA->failureCounts.exitBmpsFailureCount = 0;
10151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010152
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010153 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 return ;
10155}
Jeff Johnson295189b2012-06-20 16:38:30 -070010156/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010157 * FUNCTION: WDA_ExitBmpsReqCallback
10158 * Free memory and send Exit BMPS RSP back to PE.
10159 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
10160 */
10161void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10162{
10163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010164 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010165 tExitBmpsParams *pExitBmpsRspParams;
10166
10167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10168 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10169
10170 if(NULL == pWdaParams)
10171 {
10172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10173 "%s: pWdaParams received NULL", __func__);
10174 VOS_ASSERT(0);
10175 return;
10176 }
10177
10178 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010179 if (NULL == pWDA)
10180 {
10181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10182 "%s:pWDA is NULL", __func__);
10183 VOS_ASSERT(0);
10184 return ;
10185 }
10186
Yue Ma7f44bbe2013-04-12 11:47:39 -070010187 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10188 pExitBmpsRspParams->status = wdiStatus;
10189
10190 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10191 {
10192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10193 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010194 pWDA->failureCounts.exitBmpsFailureCount++;
10195 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10196 pWDA->failureCounts.exitBmpsFailureCount)
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10199 "%s: wdiStatus %d fail count %d", __func__,
10200 wdiStatus,
10201 pWDA->failureCounts.exitBmpsFailureCount);
10202 pWDA->failureCounts.exitBmpsFailureCount = 0;
10203 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10204 WLAN_LOG_INDICATOR_HOST_DRIVER,
10205 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10206 FALSE, TRUE);
10207 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010208 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
10209 }
10210
10211 return;
10212}
10213/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 * FUNCTION: WDA_ProcessExitBmpsReq
10215 * Request to WDI to Exit BMPS power state.
10216 */
10217VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
10218 tExitBmpsParams *pExitBmpsReqParams)
10219{
10220 WDI_Status status = WDI_STATUS_SUCCESS ;
10221 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
10222 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
10223 sizeof(WDI_ExitBmpsReqParamsType)) ;
10224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 if(NULL == wdiExitBmpsReqParams)
10228 {
10229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010232 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 return VOS_STATUS_E_NOMEM;
10234 }
10235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10236 if(NULL == pWdaParams)
10237 {
10238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010240 VOS_ASSERT(0);
10241 vos_mem_free(wdiExitBmpsReqParams);
10242 return VOS_STATUS_E_NOMEM;
10243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -070010245
10246 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
10247
Yue Ma7f44bbe2013-04-12 11:47:39 -070010248 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
10249 wdiExitBmpsReqParams->pUserData = pWdaParams;
10250
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 /* Store param pointer as passed in by caller */
10252 /* store Params pass it to WDI */
10253 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
10254 pWdaParams->pWdaContext = pWDA;
10255 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010257 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 if(IS_WDI_STATUS_FAILURE(status))
10259 {
10260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10261 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10263 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010264 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 return CONVERT_WDI2VOS_STATUS(status) ;
10267}
Jeff Johnson295189b2012-06-20 16:38:30 -070010268/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010269 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 * send Enter UAPSD RSP back to PE
10271 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010272void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010273{
10274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010275 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010276 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 if(NULL == pWdaParams)
10280 {
10281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 VOS_ASSERT(0) ;
10284 return ;
10285 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010286
10287 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010288 if (NULL == pWDA)
10289 {
10290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10291 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010292
10293 if(pWdaParams->wdaWdiApiMsgParam)
10294 {
10295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10296 }
10297 vos_mem_free(pWdaParams);
10298
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010299 VOS_ASSERT(0);
10300 return ;
10301 }
10302
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010303 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10304
10305 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010306 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010307
Jeff Johnson295189b2012-06-20 16:38:30 -070010308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10309 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010310 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 return ;
10312}
Jeff Johnson295189b2012-06-20 16:38:30 -070010313/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010314 * FUNCTION: WDA_EnterUapsdReqCallback
10315 * Free memory and send Enter UAPSD RSP back to PE.
10316 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10317 */
10318void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10319{
10320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10321 tWDA_CbContext *pWDA;
10322 tUapsdParams *pEnterUapsdRsqParams;
10323
10324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10325 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10326
10327 if(NULL == pWdaParams)
10328 {
10329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10330 "%s: pWdaParams received NULL", __func__);
10331 VOS_ASSERT(0);
10332 return;
10333 }
10334
10335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010336 if (NULL == pWDA)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10339 "%s:pWDA is NULL", __func__);
10340 VOS_ASSERT(0);
10341 return ;
10342 }
10343
Yue Ma7f44bbe2013-04-12 11:47:39 -070010344 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10345 pEnterUapsdRsqParams->status = wdiStatus;
10346
10347 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10348 {
10349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10350 vos_mem_free(pWdaParams);
10351 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10352 }
10353
10354 return;
10355}
10356/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 * FUNCTION: WDA_ProcessEnterUapsdReq
10358 * Request to WDI to Enter UAPSD power state.
10359 */
10360VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10361 tUapsdParams *pEnterUapsdReqParams)
10362{
10363 WDI_Status status = WDI_STATUS_SUCCESS ;
10364 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10365 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10366 sizeof(WDI_EnterUapsdReqParamsType)) ;
10367 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010369 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 if(NULL == wdiEnterUapsdReqParams)
10371 {
10372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 VOS_ASSERT(0);
10375 return VOS_STATUS_E_NOMEM;
10376 }
10377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10378 if(NULL == pWdaParams)
10379 {
10380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 VOS_ASSERT(0);
10383 vos_mem_free(wdiEnterUapsdReqParams);
10384 return VOS_STATUS_E_NOMEM;
10385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10387 pEnterUapsdReqParams->beDeliveryEnabled;
10388 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10389 pEnterUapsdReqParams->beTriggerEnabled;
10390 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10391 pEnterUapsdReqParams->bkDeliveryEnabled;
10392 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10393 pEnterUapsdReqParams->bkTriggerEnabled;
10394 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10395 pEnterUapsdReqParams->viDeliveryEnabled;
10396 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10397 pEnterUapsdReqParams->viTriggerEnabled;
10398 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10399 pEnterUapsdReqParams->voDeliveryEnabled;
10400 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10401 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010402 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010403
Yue Ma7f44bbe2013-04-12 11:47:39 -070010404 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10405 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010406
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 /* Store param pointer as passed in by caller */
10408 /* store Params pass it to WDI */
10409 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10410 pWdaParams->pWdaContext = pWDA;
10411 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010413 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 if(IS_WDI_STATUS_FAILURE(status))
10415 {
10416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10417 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10418 vos_mem_free(pWdaParams->wdaMsgParam) ;
10419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10420 vos_mem_free(pWdaParams) ;
10421 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 return CONVERT_WDI2VOS_STATUS(status) ;
10423}
Jeff Johnson295189b2012-06-20 16:38:30 -070010424/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010425 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 * send Exit UAPSD RSP back to PE
10427 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010428void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010429{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010430
10431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10432 tWDA_CbContext *pWDA;
10433 tExitUapsdParams *pExitUapsdRspParams;
10434
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010436 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010437 if(NULL == pWdaParams)
10438 {
10439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010440 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010441 VOS_ASSERT(0);
10442 return;
10443 }
10444
10445 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10446 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10447
10448 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010449 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010450
10451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10452 vos_mem_free(pWdaParams) ;
10453
10454 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 return ;
10456}
Jeff Johnson295189b2012-06-20 16:38:30 -070010457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010458 * FUNCTION: WDA_ExitUapsdReqCallback
10459 * Free memory and send Exit UAPSD RSP back to PE.
10460 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10461 */
10462void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10463{
10464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010465 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466 tExitUapsdParams *pExitUapsdRspParams;
10467
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10470
10471 if(NULL == pWdaParams)
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10474 "%s: pWdaParams received NULL", __func__);
10475 VOS_ASSERT(0);
10476 return;
10477 }
10478
10479 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010480 if (NULL == pWDA)
10481 {
10482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10483 "%s:pWDA is NULL", __func__);
10484 VOS_ASSERT(0);
10485 return ;
10486 }
10487
Yue Ma7f44bbe2013-04-12 11:47:39 -070010488 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10489 pExitUapsdRspParams->status = wdiStatus;
10490
10491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10492 {
10493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10494 vos_mem_free(pWdaParams);
10495 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10496 }
10497
10498 return;
10499}
10500/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 * FUNCTION: WDA_ProcessExitUapsdReq
10502 * Request to WDI to Exit UAPSD power state.
10503 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010504VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10505 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010506{
10507 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010508 tWDA_ReqParams *pWdaParams ;
10509 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10510 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10511 sizeof(WDI_ExitUapsdReqParamsType)) ;
10512
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010514 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010515
10516 if(NULL == wdiExitUapsdReqParams)
10517 {
10518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010519 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010520 VOS_ASSERT(0);
10521 return VOS_STATUS_E_NOMEM;
10522 }
10523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10524 if(NULL == pWdaParams)
10525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010527 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010528 VOS_ASSERT(0);
10529 vos_mem_free(wdiExitUapsdReqParams);
10530 return VOS_STATUS_E_NOMEM;
10531 }
10532
10533 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010534 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10535 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010536
10537 /* Store param pointer as passed in by caller */
10538 /* store Params pass it to WDI */
10539 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10540 pWdaParams->pWdaContext = pWDA;
10541 pWdaParams->wdaMsgParam = pExitUapsdParams;
10542
Yue Ma7f44bbe2013-04-12 11:47:39 -070010543 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010544 if(IS_WDI_STATUS_FAILURE(status))
10545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10547 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010548 vos_mem_free(pWdaParams->wdaMsgParam) ;
10549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10550 vos_mem_free(pWdaParams) ;
10551
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010553 return CONVERT_WDI2VOS_STATUS(status) ;
10554}
10555
Jeff Johnson295189b2012-06-20 16:38:30 -070010556/*
10557 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10558 *
10559 */
10560void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10561{
10562 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 if(NULL == pWdaParams)
10566 {
10567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 VOS_ASSERT(0) ;
10570 return ;
10571 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010572 if( pWdaParams != NULL )
10573 {
10574 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10575 {
10576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10577 }
10578 if( pWdaParams->wdaMsgParam != NULL )
10579 {
10580 vos_mem_free(pWdaParams->wdaMsgParam) ;
10581 }
10582 vos_mem_free(pWdaParams) ;
10583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 return ;
10585}
Jeff Johnson295189b2012-06-20 16:38:30 -070010586/*
10587 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10588 * Request to WDI to set the power save params at start.
10589 */
10590VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10591 tSirPowerSaveCfg *pPowerSaveCfg)
10592{
10593 WDI_Status status = WDI_STATUS_SUCCESS ;
10594 tHalCfg *tlvStruct = NULL ;
10595 tANI_U8 *tlvStructStart = NULL ;
10596 v_PVOID_t *configParam;
10597 tANI_U32 configParamSize;
10598 tANI_U32 *configDataValue;
10599 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10600 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010602 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10604 {
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010606 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010607 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010608 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 return VOS_STATUS_E_FAILURE;
10610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10612 if (NULL == wdiPowerSaveCfg)
10613 {
10614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010617 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 return VOS_STATUS_E_NOMEM;
10619 }
10620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10621 if(NULL == pWdaParams)
10622 {
10623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 VOS_ASSERT(0);
10626 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010627 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010628 return VOS_STATUS_E_NOMEM;
10629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10631 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 if(NULL == configParam)
10633 {
10634 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010635 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010636 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010637 vos_mem_free(pWdaParams);
10638 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010639 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010640 return VOS_STATUS_E_NOMEM;
10641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 vos_mem_set(configParam, configParamSize, 0);
10643 wdiPowerSaveCfg->pConfigBuffer = configParam;
10644 tlvStruct = (tHalCfg *)configParam;
10645 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10647 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10648 tlvStruct->length = sizeof(tANI_U32);
10649 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10650 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10652 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10654 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10655 tlvStruct->length = sizeof(tANI_U32);
10656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10657 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10659 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10661 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10662 tlvStruct->length = sizeof(tANI_U32);
10663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10664 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10666 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10668 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10669 tlvStruct->length = sizeof(tANI_U32);
10670 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10671 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010672 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10673 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10675 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10676 tlvStruct->length = sizeof(tANI_U32);
10677 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10678 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10680 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10682 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10683 tlvStruct->length = sizeof(tANI_U32);
10684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10685 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10687 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10689 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10690 tlvStruct->length = sizeof(tANI_U32);
10691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10692 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010693 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10694 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10696 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10697 tlvStruct->length = sizeof(tANI_U32);
10698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10699 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10700 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10701 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10703 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10704 tlvStruct->length = sizeof(tANI_U32);
10705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10706 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10708 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010709 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10710 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10711 tlvStruct->length = sizeof(tANI_U32);
10712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10713 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10715 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10717 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10718 tlvStruct->length = sizeof(tANI_U32);
10719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10720 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10722 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 /* store Params pass it to WDI */
10726 pWdaParams->wdaMsgParam = configParam;
10727 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10728 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10730 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 if(IS_WDI_STATUS_FAILURE(status))
10732 {
10733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10734 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10735 vos_mem_free(pWdaParams->wdaMsgParam);
10736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10737 vos_mem_free(pWdaParams);
10738 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010739 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 return CONVERT_WDI2VOS_STATUS(status);
10741}
Jeff Johnson295189b2012-06-20 16:38:30 -070010742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010743 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 *
10745 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010746void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010747{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10749
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010751 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010752
10753 if(NULL == pWdaParams)
10754 {
10755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10756 "%s: pWdaParams received NULL", __func__);
10757 VOS_ASSERT(0);
10758 return ;
10759 }
10760
10761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 vos_mem_free(pWdaParams);
10763
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 return ;
10765}
Jeff Johnson295189b2012-06-20 16:38:30 -070010766/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010767 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10768 * Free memory.
10769 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10770 */
10771void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10772{
10773 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10774
10775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10776 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10777
10778 if(NULL == pWdaParams)
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10781 "%s: pWdaParams received NULL", __func__);
10782 VOS_ASSERT(0);
10783 return;
10784 }
10785
10786 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10787 {
10788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10789 vos_mem_free(pWdaParams);
10790 }
10791
10792 return;
10793}
10794/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010795 * FUNCTION: WDA_SetUapsdAcParamsReq
10796 * Request to WDI to set the UAPSD params for an ac (sta mode).
10797 */
10798VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10799 tUapsdInfo *pUapsdInfo)
10800{
10801 WDI_Status status = WDI_STATUS_SUCCESS;
10802 tWDA_CbContext *pWDA = NULL ;
10803 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10804 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10805 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10806 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010808 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 if(NULL == wdiUapsdParams)
10810 {
10811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 VOS_ASSERT(0);
10814 return VOS_STATUS_E_NOMEM;
10815 }
10816 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10817 if(NULL == pWdaParams)
10818 {
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010820 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 VOS_ASSERT(0);
10822 vos_mem_free(wdiUapsdParams);
10823 return VOS_STATUS_E_NOMEM;
10824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10826 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10827 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10828 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10829 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10830 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010831 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10832 wdiUapsdParams->pUserData = pWdaParams;
10833
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 pWdaParams->pWdaContext = pWDA;
10836 /* Store param pointer as passed in by caller */
10837 pWdaParams->wdaMsgParam = pUapsdInfo;
10838 /* store Params pass it to WDI */
10839 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010841 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 if(IS_WDI_STATUS_FAILURE(status))
10844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10846 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10848 vos_mem_free(pWdaParams);
10849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10851 return VOS_STATUS_SUCCESS;
10852 else
10853 return VOS_STATUS_E_FAILURE;
10854
Jeff Johnson295189b2012-06-20 16:38:30 -070010855}
10856/*
10857 * FUNCTION: WDA_ClearUapsdAcParamsReq
10858 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10859 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10860 * and again enter the UPASD with the modified params. Hence the disable
10861 * function was kept empty.
10862 *
10863 */
10864VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10865{
10866 /* do nothing */
10867 return VOS_STATUS_SUCCESS;
10868}
Jeff Johnson295189b2012-06-20 16:38:30 -070010869/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010870 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010871 *
10872 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010873void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010874{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10876
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010878 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010879
10880 if(NULL == pWdaParams)
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010883 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010884 VOS_ASSERT(0) ;
10885 return ;
10886 }
10887
10888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10889 vos_mem_free(pWdaParams->wdaMsgParam);
10890 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010891
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 //print a msg, nothing else to do
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010894 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 return ;
10896}
Jeff Johnson295189b2012-06-20 16:38:30 -070010897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010898 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10899 * Free memory.
10900 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10901 */
10902void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10903{
10904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10905
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10907 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10908
10909 if(NULL == pWdaParams)
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "%s: pWdaParams received NULL", __func__);
10913 VOS_ASSERT(0);
10914 return;
10915 }
10916
10917 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10918 {
10919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10920 vos_mem_free(pWdaParams->wdaMsgParam);
10921 vos_mem_free(pWdaParams);
10922 }
10923
10924 return;
10925}
10926/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 * FUNCTION: WDA_UpdateUapsdParamsReq
10928 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10929 */
10930VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10931 tUpdateUapsdParams* pUpdateUapsdInfo)
10932{
10933 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010934 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10936 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10937 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010938 tWDA_ReqParams *pWdaParams = NULL;
10939
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010941 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 if(NULL == wdiUpdateUapsdParams)
10943 {
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 VOS_ASSERT(0);
10947 return VOS_STATUS_E_NOMEM;
10948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010949 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10950 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10951 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010952 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10953 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010954
10955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10956 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010957 {
10958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010960 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010961 vos_mem_free(pUpdateUapsdInfo);
10962 vos_mem_free(wdiUpdateUapsdParams);
10963 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010965 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010966 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010968 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10969 pWdaParams->pWdaContext = pWDA;
10970
Jeff Johnson43971f52012-07-17 12:26:56 -070010971 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010972 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010973 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010974
Jeff Johnson43971f52012-07-17 12:26:56 -070010975 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10978 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010979 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10981 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010982 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010984 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010985}
Jeff Johnson295189b2012-06-20 16:38:30 -070010986/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010987 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 *
10989 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010990void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010991{
10992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010994 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 if(WDI_STATUS_SUCCESS != wdiStatus)
10996 {
10997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010998 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 if(NULL == pWdaParams)
11001 {
11002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 VOS_ASSERT(0) ;
11005 return ;
11006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11008 vos_mem_free(pWdaParams->wdaMsgParam);
11009 vos_mem_free(pWdaParams);
11010 return ;
11011}
Jeff Johnson295189b2012-06-20 16:38:30 -070011012/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011013 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
11014 * Free memory.
11015 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
11016 */
11017void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11018{
11019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11020
11021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11022 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11023
11024 if(NULL == pWdaParams)
11025 {
11026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11027 "%s: pWdaParams received NULL", __func__);
11028 VOS_ASSERT(0);
11029 return;
11030 }
11031
11032 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11033 {
11034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11035 vos_mem_free(pWdaParams->wdaMsgParam);
11036 vos_mem_free(pWdaParams);
11037 }
11038
11039 return;
11040}
11041/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
11043 *
11044 */
11045VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
11046 tSirWlanSetRxpFilters *pWlanSuspendParam)
11047{
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011049 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011050 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011052 /* Sanity Check
11053 * This is very unlikely and add assert to collect more info next time */
11054 if(NULL == pWlanSuspendParam)
11055 {
11056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11057 "%s: pWlanSuspendParam received NULL", __func__);
11058 VOS_ASSERT(0) ;
11059 return VOS_STATUS_E_FAULT;
11060 }
11061 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
11062 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011064 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 if(NULL == wdiRxpFilterParams)
11066 {
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 VOS_ASSERT(0);
11070 vos_mem_free(pWlanSuspendParam);
11071 return VOS_STATUS_E_NOMEM;
11072 }
11073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11074 if(NULL == pWdaParams)
11075 {
11076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 VOS_ASSERT(0);
11079 vos_mem_free(wdiRxpFilterParams);
11080 vos_mem_free(pWlanSuspendParam);
11081 return VOS_STATUS_E_NOMEM;
11082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
11084 pWlanSuspendParam->setMcstBcstFilter;
11085 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
11086 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11087
Yue Ma7f44bbe2013-04-12 11:47:39 -070011088 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
11089 wdiRxpFilterParams->pUserData = pWdaParams;
11090
Jeff Johnson295189b2012-06-20 16:38:30 -070011091 pWdaParams->pWdaContext = pWDA;
11092 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11093 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011094 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011095 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011097 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 {
11099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11100 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011101 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11103 vos_mem_free(pWdaParams->wdaMsgParam);
11104 vos_mem_free(pWdaParams);
11105 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011106 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011107}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011108
11109/*
Siddharth Bhal64246172015-02-27 01:04:37 +053011110 * FUNCTION: WDA_ProcessGetFrameLogReq
11111 * Request to WDI to get the Frame Log.
11112 */
11113VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
11114 tAniGetFrameLogReq *pGetFrameLog)
11115{
11116 VOS_STATUS status = VOS_STATUS_SUCCESS;
11117 WDI_Status wstatus;
11118 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
11119 tWDA_ReqParams *pWdaParams ;
11120
11121 /* Sanity Check*/
11122 if(NULL == pGetFrameLog)
11123 {
11124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011125 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053011126 VOS_ASSERT(0) ;
11127 return VOS_STATUS_E_FAULT;
11128 }
11129
11130 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
11131 sizeof(WDI_GetFrameLogReqInfoType));
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11133 "------> %s " ,__func__);
11134
11135 if(NULL == wdiGetFrameLogInfo)
11136 {
11137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11138 "%s: VOS MEM Alloc Failure", __func__);
11139 VOS_ASSERT(0);
11140 vos_mem_free(pGetFrameLog);
11141 return VOS_STATUS_E_NOMEM;
11142 }
11143
11144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11145 if(NULL == pWdaParams)
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "%s: VOS MEM Alloc Failure", __func__);
11149 VOS_ASSERT(0);
11150 vos_mem_free(wdiGetFrameLogInfo);
11151 vos_mem_free(pGetFrameLog);
11152 return VOS_STATUS_E_NOMEM;
11153 }
11154
11155 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
11156
11157 pWdaParams->pWdaContext = pWDA;
11158 pWdaParams->wdaMsgParam = pGetFrameLog;
11159 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
11160
11161 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
11162 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
11163 pWdaParams);
11164 if(IS_WDI_STATUS_FAILURE(wstatus))
11165 {
11166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11167 "Failure in get frame log REQ WDI API, free all the memory" );
11168 status = CONVERT_WDI2VOS_STATUS(wstatus);
11169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11170 vos_mem_free(pWdaParams->wdaMsgParam);
11171 vos_mem_free(pWdaParams);
11172 }
11173 return status;
11174}
11175
Sachin Ahuja715aafc2015-07-21 23:35:10 +053011176
11177/*
11178 * FUNCTION: WDA_FatalEventLogsRspCallback
11179 * recieves Flush Logs response from FW
11180 */
11181
11182void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
11183 void* pUserData)
11184{
11185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11186
11187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11188 "<------ %s,wdiStatus:%d " ,
11189 __func__, wdiRsp->wdiStatus);
11190 if(NULL == pWdaParams)
11191 {
11192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11193 "%s: pWdaParams received NULL", __func__);
11194 VOS_ASSERT(0);
11195 return ;
11196 }
11197
11198 if(NULL == pWdaParams->wdaMsgParam)
11199 {
11200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11201 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
11202 VOS_ASSERT(0);
11203 vos_mem_free(pWdaParams);
11204 return ;
11205 }
11206
11207 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
11208 {
11209 /*
11210 * If it is failure, it means JOb is already posted by FW
11211 * for logging, so for failure scenario also we will get the
11212 * done indication
11213 */
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11215 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
11216 __func__, wdiRsp->wdiStatus);
11217 }
11218
11219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11220 vos_mem_free(pWdaParams->wdaMsgParam);
11221 vos_mem_free(pWdaParams);
11222
11223 return;
11224
11225}
11226
11227/*
11228 * FUNCTION: WDA_ProcessFatalEventLogsReq
11229 * Request to WDI to send the fatal Event Logs Req.
11230 */
11231
11232VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
11233 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
11234{
11235 VOS_STATUS status = VOS_STATUS_SUCCESS;
11236 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
11237 tWDA_ReqParams *pWdaParams ;
11238 WDI_Status wstatus;
11239
11240
11241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11242 "------> %s " ,__func__);
11243 if (NULL == pFatalEventLogsReqParam)
11244 {
11245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11246 "%s: pMgmtLoggingInitParam received NULL", __func__);
11247 VOS_ASSERT(0) ;
11248 return VOS_STATUS_E_FAULT;
11249 }
11250 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
11251 sizeof(WDI_FatalEventLogsReqInfoType));
11252 if(NULL == wdiFatalEventLogsReqInfo)
11253 {
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "%s: VOS MEM Alloc Failure", __func__);
11256 VOS_ASSERT(0);
11257 vos_mem_free(pFatalEventLogsReqParam);
11258 return VOS_STATUS_E_NOMEM;
11259 }
11260 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11261 if(NULL == pWdaParams)
11262 {
11263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11264 "%s: VOS MEM Alloc Failure", __func__);
11265 VOS_ASSERT(0);
11266 vos_mem_free(wdiFatalEventLogsReqInfo);
11267 vos_mem_free(pFatalEventLogsReqParam);
11268 return VOS_STATUS_E_NOMEM;
11269 }
11270 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11271 pWdaParams->pWdaContext = pWDA;
11272 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11273 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11274
11275 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11276 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11277 pWdaParams);
11278 if(IS_WDI_STATUS_FAILURE(wstatus))
11279 {
11280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11281 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11282 status = CONVERT_WDI2VOS_STATUS(wstatus);
11283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11284 vos_mem_free(pWdaParams->wdaMsgParam);
11285 vos_mem_free(pWdaParams);
11286 }
11287
11288 return status;
11289
11290}
11291
Siddharth Bhal64246172015-02-27 01:04:37 +053011292/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011293 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011294 *
11295 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011296VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11297 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011298{
11299 VOS_STATUS status = VOS_STATUS_SUCCESS;
11300 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011301 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011302 tWDA_ReqParams *pWdaParams ;
11303
11304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11305 "------> %s " ,__func__);
11306
11307 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011308 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011309 {
11310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011311 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011312 VOS_ASSERT(0) ;
11313 return VOS_STATUS_E_FAULT;
11314 }
11315
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011316 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11317 sizeof(WDI_FWLoggingInitReqInfoType));
11318 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011319 {
11320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11321 "%s: VOS MEM Alloc Failure", __func__);
11322 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011323 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011324 return VOS_STATUS_E_NOMEM;
11325 }
11326
11327 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11328 if(NULL == pWdaParams)
11329 {
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11331 "%s: VOS MEM Alloc Failure", __func__);
11332 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011333 vos_mem_free(wdiFWLoggingInitInfo);
11334 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011335 return VOS_STATUS_E_NOMEM;
11336 }
11337
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011338 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11339 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11340 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11341 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11342 wdiFWLoggingInitInfo->continuousFrameLogging =
11343 pFWLoggingInitParam->continuousFrameLogging;
11344 wdiFWLoggingInitInfo->minLogBufferSize=
11345 pFWLoggingInitParam->minLogBufferSize;
11346 wdiFWLoggingInitInfo->maxLogBufferSize=
11347 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011348
11349 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011350 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11351 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011352
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011353 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11354 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011355 pWdaParams);
11356 if(IS_WDI_STATUS_FAILURE(wstatus))
11357 {
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11359 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11360 status = CONVERT_WDI2VOS_STATUS(wstatus);
11361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11362 vos_mem_free(pWdaParams->wdaMsgParam);
11363 vos_mem_free(pWdaParams);
11364 }
11365
11366 return status;
11367}
11368
Jeff Johnson295189b2012-06-20 16:38:30 -070011369/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011370 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11371 *
11372 */
11373VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11374 tSirRssiMonitorReq *pRssiMonitorReqParam)
11375{
11376 VOS_STATUS status = VOS_STATUS_SUCCESS;
11377 WDI_Status wstatus;
11378 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11379 tWDA_ReqParams *pWdaParams ;
11380
11381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11382 "------> %s " ,__func__);
11383
11384 /* Sanity Check*/
11385 if(NULL == pRssiMonitorReqParam)
11386 {
11387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11388 "%s: pRssiMonitorReqParam received NULL", __func__);
11389 VOS_ASSERT(0) ;
11390 return VOS_STATUS_E_FAULT;
11391 }
11392
11393 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11394 sizeof(WDI_RssiMonitorReqInfoType));
11395 if(NULL == wdiRssiMonitorInfo)
11396 {
11397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11398 "%s: VOS MEM Alloc Failure", __func__);
11399 VOS_ASSERT(0);
11400 vos_mem_free(pRssiMonitorReqParam);
11401 return VOS_STATUS_E_NOMEM;
11402 }
11403
11404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11405 if(NULL == pWdaParams)
11406 {
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11408 "%s: VOS MEM Alloc Failure", __func__);
11409 VOS_ASSERT(0);
11410 vos_mem_free(wdiRssiMonitorInfo);
11411 vos_mem_free(pRssiMonitorReqParam);
11412 return VOS_STATUS_E_NOMEM;
11413 }
11414
11415 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11416 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11417 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11418 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11419 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11420
11421 pWdaParams->pWdaContext = pWDA;
11422 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11423 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11424
11425 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11426 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11427 pWdaParams);
11428 if(IS_WDI_STATUS_FAILURE(wstatus))
11429 {
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11431 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11432 status = CONVERT_WDI2VOS_STATUS(wstatus);
11433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11434 vos_mem_free(pWdaParams->wdaMsgParam);
11435 vos_mem_free(pWdaParams);
11436 }
11437
11438 return status;
11439}
11440
11441/*
11442 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11443 *
11444 */
11445VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11446 tSirRssiMonitorReq *pRssiMonitorReqParam)
11447{
11448 VOS_STATUS status = VOS_STATUS_SUCCESS;
11449 WDI_Status wstatus;
11450 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11451 tWDA_ReqParams *pWdaParams ;
11452
11453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11454 "------> %s " ,__func__);
11455
11456 /* Sanity Check*/
11457 if(NULL == pRssiMonitorReqParam)
11458 {
11459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11460 "%s: pRssiMonitorReqParam received NULL", __func__);
11461 VOS_ASSERT(0) ;
11462 return VOS_STATUS_E_FAULT;
11463 }
11464
11465 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11466 sizeof(WDI_RssiMonitorReqInfoType));
11467 if(NULL == wdiRssiMonitorInfo)
11468 {
11469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11470 "%s: VOS MEM Alloc Failure", __func__);
11471 VOS_ASSERT(0);
11472 vos_mem_free(pRssiMonitorReqParam);
11473 return VOS_STATUS_E_NOMEM;
11474 }
11475
11476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11477 if(NULL == pWdaParams)
11478 {
11479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11480 "%s: VOS MEM Alloc Failure", __func__);
11481 VOS_ASSERT(0);
11482 vos_mem_free(wdiRssiMonitorInfo);
11483 vos_mem_free(pRssiMonitorReqParam);
11484 return VOS_STATUS_E_NOMEM;
11485 }
11486
11487 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11488 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11489 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11490
11491 pWdaParams->pWdaContext = pWDA;
11492 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11493 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11494
11495 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11496 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11497 pWdaParams);
11498 if(IS_WDI_STATUS_FAILURE(wstatus))
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11502 status = CONVERT_WDI2VOS_STATUS(wstatus);
11503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11504 vos_mem_free(pWdaParams->wdaMsgParam);
11505 vos_mem_free(pWdaParams);
11506 }
11507
11508 return status;
11509}
11510
11511
11512/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 * FUNCTION: WDA_WdiIndicationCallback
11514 *
11515 */
11516void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11517 void* pUserData)
11518{
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521}
Jeff Johnson295189b2012-06-20 16:38:30 -070011522/*
11523 * FUNCTION: WDA_ProcessWlanSuspendInd
11524 *
11525 */
11526VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11527 tSirWlanSuspendParam *pWlanSuspendParam)
11528{
11529 WDI_Status wdiStatus;
11530 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011532 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11534 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11535 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11536 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11539 if(WDI_STATUS_PENDING == wdiStatus)
11540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011542 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 }
11544 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11545 {
11546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011547 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 vos_mem_free(pWlanSuspendParam);
11550 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11551}
11552
Chet Lanctot186b5732013-03-18 10:26:30 -070011553#ifdef WLAN_FEATURE_11W
11554/*
11555 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11556 *
11557 */
11558VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11559 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11560{
11561 WDI_Status wdiStatus;
11562 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11564 "------> %s ", __func__);
11565
11566 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11567 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11568 sizeof(tSirMacAddr));
11569
11570 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11571 wdiExclUnencryptParams.pUserData = pWDA;
11572
11573 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11574 if(WDI_STATUS_PENDING == wdiStatus)
11575 {
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11577 "Pending received for %s:%d ", __func__, __LINE__ );
11578 }
11579 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11580 {
11581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11582 "Failure in %s:%d ", __func__, __LINE__ );
11583 }
11584 vos_mem_free(pExclUnencryptParam);
11585 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11586}
11587#endif
11588
Jeff Johnson295189b2012-06-20 16:38:30 -070011589/*
11590 * FUNCTION: WDA_ProcessWlanResumeCallback
11591 *
11592 */
11593void WDA_ProcessWlanResumeCallback(
11594 WDI_SuspendResumeRspParamsType *resumeRspParams,
11595 void* pUserData)
11596{
11597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011599 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011600 if(NULL == pWdaParams)
11601 {
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 VOS_ASSERT(0) ;
11605 return ;
11606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011607 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11608 {
11609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011610 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11613 vos_mem_free(pWdaParams->wdaMsgParam);
11614 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 return ;
11616}
Jeff Johnson295189b2012-06-20 16:38:30 -070011617/*
11618 * FUNCTION: WDA_ProcessWlanResumeReq
11619 *
11620 */
11621VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11622 tSirWlanResumeParam *pWlanResumeParam)
11623{
11624 WDI_Status wdiStatus;
11625 WDI_ResumeParamsType *wdiResumeParams =
11626 (WDI_ResumeParamsType *)vos_mem_malloc(
11627 sizeof(WDI_ResumeParamsType) ) ;
11628 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 if(NULL == wdiResumeParams)
11632 {
11633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 VOS_ASSERT(0);
11636 return VOS_STATUS_E_NOMEM;
11637 }
11638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11639 if(NULL == pWdaParams)
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011643 VOS_ASSERT(0);
11644 vos_mem_free(wdiResumeParams);
11645 return VOS_STATUS_E_NOMEM;
11646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11648 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 wdiResumeParams->wdiReqStatusCB = NULL;
11651 pWdaParams->wdaMsgParam = pWlanResumeParam;
11652 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11653 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011654 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11655 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11656 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11658 {
11659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11660 "Failure in Host Resume REQ WDI API, free all the memory " );
11661 VOS_ASSERT(0);
11662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11663 vos_mem_free(pWdaParams->wdaMsgParam);
11664 vos_mem_free(pWdaParams);
11665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011666 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11667}
11668
Jeff Johnson295189b2012-06-20 16:38:30 -070011669/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011670 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 *
11672 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011673void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011674{
11675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011677 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 if(NULL == pWdaParams)
11679 {
11680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011681 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 VOS_ASSERT(0) ;
11683 return ;
11684 }
11685
11686 vos_mem_free(pWdaParams->wdaMsgParam) ;
11687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11688 vos_mem_free(pWdaParams) ;
11689 /*
11690 * No respone required for SetBeaconFilter req so just free the request
11691 * param here
11692 */
11693
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 return ;
11695}
Jeff Johnson295189b2012-06-20 16:38:30 -070011696/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011697 * FUNCTION: WDA_SetBeaconFilterReqCallback
11698 * Free memory.
11699 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11700 */
11701void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11702{
11703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11704
11705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11706 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11707
11708 if(NULL == pWdaParams)
11709 {
11710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11711 "%s: pWdaParams received NULL", __func__);
11712 VOS_ASSERT(0);
11713 return;
11714 }
11715
11716 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11717 {
11718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11719 vos_mem_free(pWdaParams->wdaMsgParam);
11720 vos_mem_free(pWdaParams);
11721 }
11722
11723 return;
11724}
11725/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 * FUNCTION: WDA_SetBeaconFilterReq
11727 * Request to WDI to send the beacon filtering related information.
11728 */
11729VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11730 tBeaconFilterMsg* pBeaconFilterInfo)
11731{
11732 WDI_Status status = WDI_STATUS_SUCCESS;
11733 tANI_U8 *dstPtr, *srcPtr;
11734 tANI_U8 filterLength;
11735 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11736 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11737 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11738 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011740 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 if(NULL == wdiBeaconFilterInfo)
11742 {
11743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 VOS_ASSERT(0);
11746 return VOS_STATUS_E_NOMEM;
11747 }
11748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11749 if(NULL == pWdaParams)
11750 {
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 VOS_ASSERT(0);
11754 vos_mem_free(wdiBeaconFilterInfo);
11755 return VOS_STATUS_E_NOMEM;
11756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11758 pBeaconFilterInfo->beaconInterval;
11759 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11760 pBeaconFilterInfo->capabilityInfo;
11761 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11762 pBeaconFilterInfo->capabilityMask;
11763 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011764
11765 //Fill the BssIdx
11766 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11767
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 //Fill structure with info contained in the beaconFilterTable
11769 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11770 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11771 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11772 if(WDI_BEACON_FILTER_LEN < filterLength)
11773 {
11774 filterLength = WDI_BEACON_FILTER_LEN;
11775 }
11776 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011777 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11778 wdiBeaconFilterInfo->pUserData = pWdaParams;
11779
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 /* Store param pointer as passed in by caller */
11781 /* store Params pass it to WDI */
11782 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11783 pWdaParams->pWdaContext = pWDA;
11784 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11785
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011787 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 if(IS_WDI_STATUS_FAILURE(status))
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11791 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11792 vos_mem_free(pWdaParams->wdaMsgParam) ;
11793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11794 vos_mem_free(pWdaParams) ;
11795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011796 return CONVERT_WDI2VOS_STATUS(status) ;
11797}
Jeff Johnson295189b2012-06-20 16:38:30 -070011798/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011799 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 *
11801 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011802void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011803{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11805
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011807 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011808
11809 if(NULL == pWdaParams)
11810 {
11811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011812 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011813 VOS_ASSERT(0) ;
11814 return ;
11815 }
11816
11817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11818 vos_mem_free(pWdaParams->wdaMsgParam);
11819 vos_mem_free(pWdaParams);
11820
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 //print a msg, nothing else to do
11822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011823 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 return ;
11825}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011826/*
11827 * FUNCTION: WDA_RemBeaconFilterReqCallback
11828 * Free memory.
11829 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11830 */
11831void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11832{
11833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11834
11835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11836 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11837
11838 if(NULL == pWdaParams)
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11841 "%s: pWdaParams received NULL", __func__);
11842 VOS_ASSERT(0);
11843 return;
11844 }
11845
11846 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11847 {
11848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11849 vos_mem_free(pWdaParams->wdaMsgParam);
11850 vos_mem_free(pWdaParams);
11851 }
11852
11853 return;
11854}
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 // TODO: PE does not have this feature for now implemented,
11856 // but the support for removing beacon filter exists between
11857 // HAL and FW. This function can be called whenever PE defines
11858 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011859/*
11860 * FUNCTION: WDA_RemBeaconFilterReq
11861 * Request to WDI to send the removal of beacon filtering related information.
11862 */
11863VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11864 tRemBeaconFilterMsg* pBeaconFilterInfo)
11865{
11866 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011867 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11869 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11870 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011871 tWDA_ReqParams *pWdaParams ;
11872
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011874 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 if(NULL == wdiBeaconFilterInfo)
11876 {
11877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011878 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 VOS_ASSERT(0);
11880 return VOS_STATUS_E_NOMEM;
11881 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011882 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11883 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 {
11885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011887 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011888 vos_mem_free(wdiBeaconFilterInfo);
11889 vos_mem_free(pBeaconFilterInfo);
11890 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011891 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011892
11893 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11894 pBeaconFilterInfo->ucIeCount;
11895 //Fill structure with info contained in the ucRemIeId
11896 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11897 pBeaconFilterInfo->ucRemIeId,
11898 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11899 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11900 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011901
11902 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011903 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011905 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11906
11907 pWdaParams->pWdaContext = pWDA;
11908
Jeff Johnson43971f52012-07-17 12:26:56 -070011909 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011910 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011911 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 {
11913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11914 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011915 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11917 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011918 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011920 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011921}
Jeff Johnson295189b2012-06-20 16:38:30 -070011922/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011923 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011924 *
11925 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011926void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011927{
11928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 if(NULL == pWdaParams)
11932 {
11933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011934 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011935 VOS_ASSERT(0) ;
11936 return ;
11937 }
11938
11939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11940 vos_mem_free(pWdaParams) ;
11941
Jeff Johnson295189b2012-06-20 16:38:30 -070011942 return ;
11943}
Jeff Johnson295189b2012-06-20 16:38:30 -070011944/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011945 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11946 * Free memory.
11947 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11948 */
11949void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11950{
11951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11952
11953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11954 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11955
11956 if(NULL == pWdaParams)
11957 {
11958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11959 "%s: pWdaParams received NULL", __func__);
11960 VOS_ASSERT(0);
11961 return;
11962 }
11963
11964 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11965 {
11966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11967 vos_mem_free(pWdaParams);
11968 }
11969
11970 return;
11971}
11972/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 * FUNCTION: WDA_SetRSSIThresholdsReq
11974 * Request to WDI to set the RSSI thresholds (sta mode).
11975 */
11976VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11977{
11978 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011979 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 tWDA_CbContext *pWDA = NULL ;
11981 v_PVOID_t pVosContext = NULL;
11982 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11983 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11984 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11985 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011987 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 if(NULL == wdiRSSIThresholdsInfo)
11989 {
11990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 VOS_ASSERT(0);
11993 return VOS_STATUS_E_NOMEM;
11994 }
11995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11996 if(NULL == pWdaParams)
11997 {
11998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 VOS_ASSERT(0);
12001 vos_mem_free(wdiRSSIThresholdsInfo);
12002 return VOS_STATUS_E_NOMEM;
12003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012004 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
12006 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
12007 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070012008 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
12009 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
12010 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
12012 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
12013 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012014 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
12015 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
12017 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12018
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 /* Store param pointer as passed in by caller */
12020 /* store Params pass it to WDI */
12021 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
12022 pWdaParams->pWdaContext = pWDA;
12023 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070012024 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012025 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012026 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012027 {
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12029 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012030 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12032 vos_mem_free(pWdaParams) ;
12033 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012034 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012035
12036}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012037/*
Yue Madb90ac12013-04-04 13:39:13 -070012038 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 *
12040 */
Yue Madb90ac12013-04-04 13:39:13 -070012041void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012042{
12043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12044
12045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012046 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 if(NULL == pWdaParams)
12048 {
12049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012051 VOS_ASSERT(0) ;
12052 return ;
12053 }
12054
12055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12056 vos_mem_free(pWdaParams->wdaMsgParam);
12057 vos_mem_free(pWdaParams) ;
12058
12059 //print a msg, nothing else to do
12060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070012061 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012062 return ;
12063}
Jeff Johnson295189b2012-06-20 16:38:30 -070012064/*
Yue Madb90ac12013-04-04 13:39:13 -070012065 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070012066 * Free memory.
12067 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070012068 */
12069void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12070{
12071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12072
12073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12074 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12075
12076 if(NULL == pWdaParams)
12077 {
12078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12079 "%s: Invalid pWdaParams pointer", __func__);
12080 VOS_ASSERT(0);
12081 return;
12082 }
12083
12084 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12085 {
12086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12087 vos_mem_free(pWdaParams->wdaMsgParam);
12088 vos_mem_free(pWdaParams);
12089 }
12090
12091 return;
12092}
12093/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 * FUNCTION: WDA_ProcessHostOffloadReq
12095 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12096 * to broadcast traffic (sta mode).
12097 */
12098VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
12099 tSirHostOffloadReq *pHostOffloadParams)
12100{
12101 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012102 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
12104 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
12105 sizeof(WDI_HostOffloadReqParamsType)) ;
12106 tWDA_ReqParams *pWdaParams ;
12107
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012109 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070012110
12111 if(NULL == wdiHostOffloadInfo)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 VOS_ASSERT(0);
12116 return VOS_STATUS_E_NOMEM;
12117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12119 if(NULL == pWdaParams)
12120 {
12121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 VOS_ASSERT(0);
12124 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012125 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 return VOS_STATUS_E_NOMEM;
12127 }
12128
12129 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
12130 pHostOffloadParams->offloadType;
12131 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
12132 pHostOffloadParams->enableOrDisable;
12133
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012134 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
12135 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
12136
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
12138 {
12139 case SIR_IPV4_ARP_REPLY_OFFLOAD:
12140 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
12141 pHostOffloadParams->params.hostIpv4Addr,
12142 4);
12143 break;
12144 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
12145 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12146 pHostOffloadParams->params.hostIpv6Addr,
12147 16);
12148 break;
12149 case SIR_IPV6_NS_OFFLOAD:
12150 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12151 pHostOffloadParams->params.hostIpv6Addr,
12152 16);
12153
12154#ifdef WLAN_NS_OFFLOAD
12155 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
12156 {
12157 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
12158 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
12159 16);
12160 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
12161 }
12162 else
12163 {
12164 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
12165 }
12166
12167 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
12168 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
12169 16);
12170 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
12171 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
12172 6);
12173
12174 //Only two are supported so let's go through them without a loop
12175 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
12176 {
12177 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
12178 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
12179 16);
12180 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
12181 }
12182 else
12183 {
12184 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
12185 }
12186
12187 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
12188 {
12189 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
12190 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
12191 16);
12192 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
12193 }
12194 else
12195 {
12196 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
12197 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053012198 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
12199 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012200 break;
12201#endif //WLAN_NS_OFFLOAD
12202 default:
12203 {
12204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12205 "No Handling for Offload Type %x in WDA "
12206 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
12207 //WDA_VOS_ASSERT(0) ;
12208 }
12209 }
Yue Madb90ac12013-04-04 13:39:13 -070012210 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
12211 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012212
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012214 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 /* store Params pass it to WDI */
12216 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
12217 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012218
Jeff Johnson295189b2012-06-20 16:38:30 -070012219
Jeff Johnson43971f52012-07-17 12:26:56 -070012220 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070012221 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012222
Jeff Johnson43971f52012-07-17 12:26:56 -070012223 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053012225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053012226 "Failure in host offload REQ WDI API, free all the memory %d",
12227 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070012228 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12230 vos_mem_free(pWdaParams->wdaMsgParam);
12231 vos_mem_free(pWdaParams) ;
12232 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012233 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012234
12235}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012236/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012237 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 *
12239 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012240void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012241{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12243
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012245 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012246
12247 if(NULL == pWdaParams)
12248 {
12249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012250 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012251 VOS_ASSERT(0) ;
12252 return ;
12253 }
12254
12255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12256 vos_mem_free(pWdaParams->wdaMsgParam);
12257 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012258
Jeff Johnson295189b2012-06-20 16:38:30 -070012259 //print a msg, nothing else to do
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012261 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 return ;
12263}
Jeff Johnson295189b2012-06-20 16:38:30 -070012264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012265 * FUNCTION: WDA_KeepAliveReqCallback
12266 * Free memory.
12267 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
12268 */
12269void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
12270{
12271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12272
12273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12274 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12275
12276 if(NULL == pWdaParams)
12277 {
12278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12279 "%s: pWdaParams received NULL", __func__);
12280 VOS_ASSERT(0);
12281 return;
12282 }
12283
12284 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12285 {
12286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12287 vos_mem_free(pWdaParams->wdaMsgParam);
12288 vos_mem_free(pWdaParams);
12289 }
12290
12291 return;
12292}
12293/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 * FUNCTION: WDA_ProcessKeepAliveReq
12295 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12296 * wakeup due to broadcast traffic (sta mode).
12297 */
12298VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12299 tSirKeepAliveReq *pKeepAliveParams)
12300{
12301 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012302 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12304 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12305 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012306 tWDA_ReqParams *pWdaParams;
12307
Jeff Johnson295189b2012-06-20 16:38:30 -070012308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012309 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 if(NULL == wdiKeepAliveInfo)
12311 {
12312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012315 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012316 return VOS_STATUS_E_NOMEM;
12317 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012318
12319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12320 if(NULL == pWdaParams)
12321 {
12322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012323 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012324 VOS_ASSERT(0);
12325 vos_mem_free(wdiKeepAliveInfo);
12326 vos_mem_free(pKeepAliveParams);
12327 return VOS_STATUS_E_NOMEM;
12328 }
12329
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12331 pKeepAliveParams->packetType;
12332 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12333 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012334
12335 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12336 pKeepAliveParams->bssId,
12337 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012338
12339 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12340 {
12341 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12342 pKeepAliveParams->hostIpv4Addr,
12343 SIR_IPV4_ADDR_LEN);
12344 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12345 pKeepAliveParams->destIpv4Addr,
12346 SIR_IPV4_ADDR_LEN);
12347 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12348 pKeepAliveParams->destMacAddr,
12349 SIR_MAC_ADDR_LEN);
12350 }
12351 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12352 {
12353 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12354 SIR_IPV4_ADDR_LEN,
12355 0);
12356 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12357 SIR_IPV4_ADDR_LEN,
12358 0);
12359 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12360 SIR_MAC_ADDR_LEN,
12361 0);
12362 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012363 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12364 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012365
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012367 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012369 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12370 pWdaParams->pWdaContext = pWDA;
12371
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12373 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12374 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12375 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12376 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12378 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12379 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12380 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12381 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12383 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12384 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12385 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12386 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12387 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12388 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12389 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12391 "TimePeriod %d PacketType %d",
12392 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12393 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012394 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012395 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012396
Jeff Johnson43971f52012-07-17 12:26:56 -070012397 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 {
12399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12400 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012401 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12403 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012404 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012405 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012406 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012407
12408}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012409/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012410 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012411 *
12412 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012413void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012414 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12415 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012416{
12417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 if(NULL == pWdaParams)
12421 {
12422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 VOS_ASSERT(0) ;
12425 return ;
12426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12428 vos_mem_free(pWdaParams->wdaMsgParam);
12429 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012430 return ;
12431}
Jeff Johnson295189b2012-06-20 16:38:30 -070012432/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012433 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12434 * Free memory.
12435 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12436 */
12437void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12438{
12439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12440
12441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12442 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12443
12444 if(NULL == pWdaParams)
12445 {
12446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12447 "%s: pWdaParams received NULL", __func__);
12448 VOS_ASSERT(0);
12449 return;
12450 }
12451
12452 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12453 {
12454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12455 vos_mem_free(pWdaParams->wdaMsgParam);
12456 vos_mem_free(pWdaParams);
12457 }
12458
12459 return;
12460}
12461
12462/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012463 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12464 * Request to WDI to add WOWL Bcast pattern
12465 */
12466VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12467 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12468{
12469 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012470 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12472 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12473 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12474 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012476 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012477 if(NULL == wdiWowlAddBcPtrnInfo)
12478 {
12479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 VOS_ASSERT(0);
12482 return VOS_STATUS_E_NOMEM;
12483 }
12484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12485 if(NULL == pWdaParams)
12486 {
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012489 VOS_ASSERT(0);
12490 vos_mem_free(wdiWowlAddBcPtrnInfo);
12491 return VOS_STATUS_E_NOMEM;
12492 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012493 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12494 pWowlAddBcPtrnParams->ucPatternId;
12495 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12496 pWowlAddBcPtrnParams->ucPatternByteOffset;
12497 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12498 pWowlAddBcPtrnParams->ucPatternMaskSize;
12499 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12500 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12502 {
12503 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12504 pWowlAddBcPtrnParams->ucPattern,
12505 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12506 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12507 pWowlAddBcPtrnParams->ucPatternMask,
12508 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12509 }
12510 else
12511 {
12512 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12513 pWowlAddBcPtrnParams->ucPattern,
12514 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12515 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12516 pWowlAddBcPtrnParams->ucPatternMask,
12517 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12518
12519 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12520 pWowlAddBcPtrnParams->ucPatternExt,
12521 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12522 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12523 pWowlAddBcPtrnParams->ucPatternMaskExt,
12524 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12525 }
12526
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012527 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12528 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12529
Yue Ma7f44bbe2013-04-12 11:47:39 -070012530 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12531 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 /* Store param pointer as passed in by caller */
12533 /* store Params pass it to WDI */
12534 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12535 pWdaParams->pWdaContext = pWDA;
12536 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012537 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012538 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012539 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 {
12541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12542 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012543 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 vos_mem_free(pWdaParams->wdaMsgParam) ;
12545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12546 vos_mem_free(pWdaParams) ;
12547 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012548 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012549
12550}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012552 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 *
12554 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012555void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012556 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12557 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012558{
12559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012561 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 if(NULL == pWdaParams)
12563 {
12564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012565 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012566 VOS_ASSERT(0) ;
12567 return ;
12568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12570 vos_mem_free(pWdaParams->wdaMsgParam);
12571 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012572 return ;
12573}
Jeff Johnson295189b2012-06-20 16:38:30 -070012574/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012575 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12576 * Free memory.
12577 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12578 */
12579void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12580{
12581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12582
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12585
12586 if(NULL == pWdaParams)
12587 {
12588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12589 "%s: pWdaParams received NULL", __func__);
12590 VOS_ASSERT(0);
12591 return;
12592 }
12593
12594 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12595 {
12596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12597 vos_mem_free(pWdaParams->wdaMsgParam);
12598 vos_mem_free(pWdaParams);
12599 }
12600
12601 return;
12602}
12603/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012604 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12605 * Request to WDI to delete WOWL Bcast pattern
12606 */
12607VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12608 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12609{
12610 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012611 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12613 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12614 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 if(NULL == wdiWowlDelBcPtrnInfo)
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 VOS_ASSERT(0);
12623 return VOS_STATUS_E_NOMEM;
12624 }
12625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12626 if(NULL == pWdaParams)
12627 {
12628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012630 VOS_ASSERT(0);
12631 vos_mem_free(wdiWowlDelBcPtrnInfo);
12632 return VOS_STATUS_E_NOMEM;
12633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012634 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12635 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012636
12637 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12638 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12639
Yue Ma7f44bbe2013-04-12 11:47:39 -070012640 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12641 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 /* Store param pointer as passed in by caller */
12643 /* store Params pass it to WDI */
12644 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12645 pWdaParams->pWdaContext = pWDA;
12646 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012647 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012648 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012649 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 {
12651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12652 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012653 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 vos_mem_free(pWdaParams->wdaMsgParam) ;
12655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12656 vos_mem_free(pWdaParams) ;
12657 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012658 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012659
12660}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012661/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012662 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 *
12664 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012665void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012666{
12667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012668 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 if(NULL == pWdaParams)
12673 {
12674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 VOS_ASSERT(0) ;
12677 return ;
12678 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012680 if (NULL == pWDA)
12681 {
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12683 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012684
12685 if(pWdaParams->wdaWdiApiMsgParam)
12686 {
12687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12688 }
12689 vos_mem_free(pWdaParams);
12690
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012691 VOS_ASSERT(0);
12692 return ;
12693 }
12694
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12696
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012697 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12698
Jeff Johnson295189b2012-06-20 16:38:30 -070012699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12700 vos_mem_free(pWdaParams) ;
12701
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012702 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012703 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 return ;
12706}
Jeff Johnson295189b2012-06-20 16:38:30 -070012707/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012708 * FUNCTION: WDA_WowlEnterReqCallback
12709 * Free memory and send WOWL Enter RSP back to PE.
12710 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12711 */
12712void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12713{
12714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012715 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012716 tSirHalWowlEnterParams *pWowlEnterParams;
12717
12718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12719 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12720
12721 if(NULL == pWdaParams)
12722 {
12723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12724 "%s: pWdaParams received NULL", __func__);
12725 VOS_ASSERT(0);
12726 return;
12727 }
12728
12729 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012730 if (NULL == pWDA)
12731 {
12732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12733 "%s:pWDA is NULL", __func__);
12734 VOS_ASSERT(0);
12735 return ;
12736 }
12737
Yue Ma7f44bbe2013-04-12 11:47:39 -070012738 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12739 pWowlEnterParams->status = wdiStatus;
12740
12741 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12742 {
12743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12744 vos_mem_free(pWdaParams);
12745 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12746 }
12747
12748 return;
12749}
12750/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012751 * FUNCTION: WDA_ProcessWowlEnterReq
12752 * Request to WDI to enter WOWL
12753 */
12754VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12755 tSirHalWowlEnterParams *pWowlEnterParams)
12756{
12757 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012758 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012759 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12760 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12761 sizeof(WDI_WowlEnterReqParamsType)) ;
12762 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012764 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012765 if(NULL == wdiWowlEnterInfo)
12766 {
12767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012769 VOS_ASSERT(0);
12770 return VOS_STATUS_E_NOMEM;
12771 }
12772 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12773 if(NULL == pWdaParams)
12774 {
12775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012777 VOS_ASSERT(0);
12778 vos_mem_free(wdiWowlEnterInfo);
12779 return VOS_STATUS_E_NOMEM;
12780 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012781
12782 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12783
Jeff Johnson295189b2012-06-20 16:38:30 -070012784 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12785 pWowlEnterParams->magicPtrn,
12786 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12788 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012789 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12790 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012791 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12792 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012793 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12794 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012795 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12796 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012797 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12798 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012799 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12800 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012801 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12802 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012803#ifdef WLAN_WAKEUP_EVENTS
12804 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12805 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12806
12807 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12808 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12809
12810 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12811 pWowlEnterParams->ucWowNetScanOffloadMatch;
12812
12813 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12814 pWowlEnterParams->ucWowGTKRekeyError;
12815
12816 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12817 pWowlEnterParams->ucWoWBSSConnLoss;
12818#endif // WLAN_WAKEUP_EVENTS
12819
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012820 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12821 pWowlEnterParams->bssIdx;
12822
Yue Ma7f44bbe2013-04-12 11:47:39 -070012823 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12824 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012825 /* Store param pointer as passed in by caller */
12826 /* store Params pass it to WDI */
12827 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12828 pWdaParams->pWdaContext = pWDA;
12829 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012830 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012831 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012832 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012833 {
12834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12835 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012836 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012837 vos_mem_free(pWdaParams->wdaMsgParam) ;
12838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12839 vos_mem_free(pWdaParams) ;
12840 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012841 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012842
12843}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012844/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012845 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 *
12847 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012848void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012849{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012851 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012852 tSirHalWowlExitParams *pWowlExitParams;
12853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012854 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012855 if(NULL == pWdaParams)
12856 {
12857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012858 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012859 VOS_ASSERT(0) ;
12860 return ;
12861 }
12862 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012863 if (NULL == pWDA)
12864 {
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12866 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012867
12868 if(pWdaParams->wdaWdiApiMsgParam)
12869 {
12870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12871 }
12872 vos_mem_free(pWdaParams);
12873
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012874 VOS_ASSERT(0);
12875 return ;
12876 }
12877
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012878 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12879
12880 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012881 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012882
12883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12884 vos_mem_free(pWdaParams) ;
12885
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012887 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012888 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012889 return ;
12890}
Jeff Johnson295189b2012-06-20 16:38:30 -070012891/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012892 * FUNCTION: WDA_WowlExitReqCallback
12893 * Free memory and send WOWL Exit RSP back to PE.
12894 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12895 */
12896void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12897{
12898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012899 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012900 tSirHalWowlExitParams *pWowlExitParams;
12901
12902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12903 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12904
12905 if(NULL == pWdaParams)
12906 {
12907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12908 "%s: pWdaParams received NULL", __func__);
12909 VOS_ASSERT(0);
12910 return;
12911 }
12912
12913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012914 if (NULL == pWDA)
12915 {
12916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12917 "%s:pWDA is NULL", __func__);
12918 VOS_ASSERT(0);
12919 return ;
12920 }
12921
Yue Ma7f44bbe2013-04-12 11:47:39 -070012922 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12923 pWowlExitParams->status = wdiStatus;
12924
12925 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12926 {
12927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12928 vos_mem_free(pWdaParams);
12929 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12930 }
12931
12932 return;
12933}
12934/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012935 * FUNCTION: WDA_ProcessWowlExitReq
12936 * Request to WDI to add WOWL Bcast pattern
12937 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012938VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12939 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012940{
12941 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012942 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012943 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12944 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12945 sizeof(WDI_WowlExitReqParamsType)) ;
12946 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012948 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012949 if(NULL == wdiWowlExitInfo)
12950 {
12951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012952 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012953 VOS_ASSERT(0);
12954 return VOS_STATUS_E_NOMEM;
12955 }
12956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12957 if(NULL == pWdaParams)
12958 {
12959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012960 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012961 VOS_ASSERT(0);
12962 vos_mem_free(wdiWowlExitInfo);
12963 return VOS_STATUS_E_NOMEM;
12964 }
12965
12966 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12967 pWowlExitParams->bssIdx;
12968
Yue Ma7f44bbe2013-04-12 11:47:39 -070012969 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12970 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012971
12972 /* Store param pointer as passed in by caller */
12973 /* store Params pass it to WDI */
12974 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12975 pWdaParams->pWdaContext = pWDA;
12976 pWdaParams->wdaMsgParam = pWowlExitParams;
12977
12978 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012979 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012980
Jeff Johnson43971f52012-07-17 12:26:56 -070012981 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 {
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12984 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012985 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12987 vos_mem_free(pWdaParams->wdaMsgParam);
12988 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012990 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012991}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012992/*
12993 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12994 * Request to WDI to determine whether a given station is capable of
12995 * using HW-based frame translation
12996 */
12997v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12998 tANI_U8 staIdx)
12999{
13000 return WDI_IsHwFrameTxTranslationCapable(staIdx);
13001}
Katya Nigam6201c3e2014-05-27 17:51:42 +053013002
13003/*
13004 * FUNCTION: WDA_IsSelfSTA
13005 * Request to WDI to determine whether a given STAID is self station
13006 * index.
13007 */
13008v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
13009{
13010
13011 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13012
Girish Gowli05cf44e2014-06-12 21:53:37 +053013013 if (NULL != pWDA)
13014 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
13015 else
13016 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053013017}
Jeff Johnson295189b2012-06-20 16:38:30 -070013018/*
13019 * FUNCTION: WDA_NvDownloadReqCallback
13020 * send NV Download RSP back to PE
13021 */
13022void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
13023 void* pUserData)
13024{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013025
13026 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013027 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013028
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013030 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013031
13032 if(NULL == pWdaParams)
13033 {
13034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013035 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013036 VOS_ASSERT(0) ;
13037 return ;
13038 }
13039
13040 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013041 if (NULL == pWDA)
13042 {
13043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13044 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053013045
13046 if(pWdaParams->wdaWdiApiMsgParam)
13047 {
13048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13049 }
13050 vos_mem_free(pWdaParams);
13051
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013052 VOS_ASSERT(0);
13053 return ;
13054 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013055
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13058 vos_mem_free(pWdaParams);
13059
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 return ;
13062}
Jeff Johnson295189b2012-06-20 16:38:30 -070013063/*
13064 * FUNCTION: WDA_ProcessNvDownloadReq
13065 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
13066 */
13067VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
13068{
13069 /* Initialize the local Variables*/
13070 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13071 v_VOID_t *pNvBuffer=NULL;
13072 v_SIZE_t bufferSize = 0;
13073 WDI_Status status = WDI_STATUS_E_FAILURE;
13074 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013075 tWDA_ReqParams *pWdaParams ;
13076
Jeff Johnson295189b2012-06-20 16:38:30 -070013077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013078 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013079 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013080 {
13081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013082 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013083 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 return VOS_STATUS_E_FAILURE;
13085 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013086
Jeff Johnson295189b2012-06-20 16:38:30 -070013087 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070013088 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
13089
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
13091 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013092 if(NULL == wdiNvDownloadReqParam)
13093 {
13094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 VOS_ASSERT(0);
13097 return VOS_STATUS_E_NOMEM;
13098 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 /* Copy Params to wdiNvDownloadReqParam*/
13100 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
13101 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013102
13103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13104 if(NULL == pWdaParams)
13105 {
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013107 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013108 VOS_ASSERT(0);
13109 vos_mem_free(wdiNvDownloadReqParam);
13110 return VOS_STATUS_E_NOMEM;
13111 }
13112
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013114 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
13115 pWdaParams->wdaMsgParam = NULL;
13116 pWdaParams->pWdaContext = pWDA;
13117
13118
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013120
Jeff Johnson295189b2012-06-20 16:38:30 -070013121 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013122 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
13123
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 if(IS_WDI_STATUS_FAILURE(status))
13125 {
13126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13127 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13129 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013132}
13133/*
13134 * FUNCTION: WDA_FlushAcReqCallback
13135 * send Flush AC RSP back to TL
13136 */
13137void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
13138{
13139 vos_msg_t wdaMsg = {0} ;
13140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13141 tFlushACReq *pFlushACReqParams;
13142 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 if(NULL == pWdaParams)
13146 {
13147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013148 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 VOS_ASSERT(0) ;
13150 return ;
13151 }
13152
13153 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
13154 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
13155 if(NULL == pFlushACRspParams)
13156 {
13157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013160 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 return ;
13162 }
13163 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
13164 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
13165 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
13166 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
13167 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070013168 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 vos_mem_free(pWdaParams->wdaMsgParam) ;
13170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13171 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
13173 wdaMsg.bodyptr = (void *)pFlushACRspParams;
13174 // POST message to TL
13175 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
13176
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 return ;
13178}
Jeff Johnson295189b2012-06-20 16:38:30 -070013179/*
13180 * FUNCTION: WDA_ProcessFlushAcReq
13181 * Request to WDI to Update the DELBA REQ params.
13182 */
13183VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
13184 tFlushACReq *pFlushAcReqParams)
13185{
13186 WDI_Status status = WDI_STATUS_SUCCESS ;
13187 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
13188 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
13189 sizeof(WDI_FlushAcReqParamsType)) ;
13190 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 if(NULL == wdiFlushAcReqParam)
13192 {
13193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 VOS_ASSERT(0);
13196 return VOS_STATUS_E_NOMEM;
13197 }
13198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13199 if(NULL == pWdaParams)
13200 {
13201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013203 VOS_ASSERT(0);
13204 vos_mem_free(wdiFlushAcReqParam);
13205 return VOS_STATUS_E_NOMEM;
13206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013209 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
13210 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
13211 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
13212 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 /* Store Flush AC pointer, as this will be used for response */
13214 /* store Params pass it to WDI */
13215 pWdaParams->pWdaContext = pWDA;
13216 pWdaParams->wdaMsgParam = pFlushAcReqParams;
13217 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 status = WDI_FlushAcReq(wdiFlushAcReqParam,
13219 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 if(IS_WDI_STATUS_FAILURE(status))
13221 {
13222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13223 "Failure in Flush AC REQ Params WDI API, free all the memory " );
13224 vos_mem_free(pWdaParams->wdaMsgParam) ;
13225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13226 vos_mem_free(pWdaParams) ;
13227 //TODO: respond to TL with failure
13228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013229 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013230}
Jeff Johnson295189b2012-06-20 16:38:30 -070013231/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013232 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 *
13234 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013235void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013236{
13237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013238 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013239 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013240
13241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013242 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013243 if(NULL == pWdaParams)
13244 {
13245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013246 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013247 VOS_ASSERT(0) ;
13248 return ;
13249 }
13250 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013251 if (NULL == pWDA)
13252 {
13253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13254 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053013255 vos_mem_free(pWdaParams->wdaMsgParam) ;
13256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13257 vos_mem_free(pWdaParams) ;
13258
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013259 VOS_ASSERT(0);
13260 return ;
13261 }
13262
Jeff Johnson295189b2012-06-20 16:38:30 -070013263 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13264 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13265 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13266 {
13267 pWDA->wdaAmpSessionOn = VOS_FALSE;
13268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013269 vos_mem_free(pWdaParams->wdaMsgParam) ;
13270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13271 vos_mem_free(pWdaParams) ;
13272 /*
13273 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13274 * param here
13275 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 return ;
13277}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013278/*
13279 * FUNCTION: WDA_BtAmpEventReqCallback
13280 * Free memory.
13281 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13282 */
13283void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13284{
13285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013286 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013287 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013288
Yue Ma7f44bbe2013-04-12 11:47:39 -070013289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13290 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13291
13292 if(NULL == pWdaParams)
13293 {
13294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13295 "%s: pWdaParams received NULL", __func__);
13296 VOS_ASSERT(0);
13297 return;
13298 }
13299
13300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013301 if (NULL == pWDA)
13302 {
13303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13304 "%s:pWDA is NULL", __func__);
13305 VOS_ASSERT(0);
13306 return ;
13307 }
13308
Yue Ma7f44bbe2013-04-12 11:47:39 -070013309 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13310
13311 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13312 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13313 {
13314 pWDA->wdaAmpSessionOn = VOS_FALSE;
13315 }
13316
13317 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13318 {
13319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13320 vos_mem_free(pWdaParams->wdaMsgParam);
13321 vos_mem_free(pWdaParams);
13322 }
13323
13324 return;
13325}
Jeff Johnson295189b2012-06-20 16:38:30 -070013326/*
13327 * FUNCTION: WDA_ProcessBtAmpEventReq
13328 * Request to WDI to Update with BT AMP events.
13329 */
13330VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13331 tSmeBtAmpEvent *pBtAmpEventParams)
13332{
13333 WDI_Status status = WDI_STATUS_SUCCESS ;
13334 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13335 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13336 sizeof(WDI_BtAmpEventParamsType)) ;
13337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 if(NULL == wdiBtAmpEventParam)
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_ASSERT(0);
13345 return VOS_STATUS_E_NOMEM;
13346 }
13347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13348 if(NULL == pWdaParams)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 VOS_ASSERT(0);
13353 vos_mem_free(wdiBtAmpEventParam);
13354 return VOS_STATUS_E_NOMEM;
13355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13357 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013358 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13359 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 /* Store BT AMP event pointer, as this will be used for response */
13361 /* store Params pass it to WDI */
13362 pWdaParams->pWdaContext = pWDA;
13363 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13364 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013366 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 if(IS_WDI_STATUS_FAILURE(status))
13368 {
13369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13370 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13371 vos_mem_free(pWdaParams->wdaMsgParam) ;
13372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13373 vos_mem_free(pWdaParams) ;
13374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013375 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13376 {
13377 pWDA->wdaAmpSessionOn = VOS_TRUE;
13378 }
13379 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013380}
13381
Jeff Johnson295189b2012-06-20 16:38:30 -070013382/*
13383 * FUNCTION: WDA_FTMCommandReqCallback
13384 * Handle FTM CMD response came from HAL
13385 * Route responce to HDD FTM
13386 */
13387void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13388 void *usrData)
13389{
13390 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013391 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13392 {
13393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013394 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 return;
13396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013397 /* Release Current FTM Command Request */
13398 vos_mem_free(pWDA->wdaFTMCmdReq);
13399 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 /* Post FTM Responce to HDD FTM */
13401 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013402 return;
13403}
Jeff Johnson295189b2012-06-20 16:38:30 -070013404/*
13405 * FUNCTION: WDA_ProcessFTMCommand
13406 * Send FTM command to WDI
13407 */
13408VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13409 tPttMsgbuffer *pPTTFtmCmd)
13410{
13411 WDI_Status status = WDI_STATUS_SUCCESS;
13412 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 ftmCMDReq = (WDI_FTMCommandReqType *)
13414 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13415 if(NULL == ftmCMDReq)
13416 {
13417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13418 "WDA FTM Command buffer alloc fail");
13419 return VOS_STATUS_E_NOMEM;
13420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013421 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13422 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013423 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013424 /* Send command to WDI */
13425 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 return status;
13427}
Jeff Johnsone7245742012-09-05 17:12:55 -070013428#ifdef FEATURE_OEM_DATA_SUPPORT
13429/*
13430 * FUNCTION: WDA_StartOemDataReqCallback
13431 *
13432 */
13433void WDA_StartOemDataReqCallback(
13434 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13435 void* pUserData)
13436{
13437 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013439 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013440 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013441
Jeff Johnsone7245742012-09-05 17:12:55 -070013442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013443 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013444
13445 if(NULL == pWdaParams)
13446 {
13447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013448 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013449 VOS_ASSERT(0) ;
13450 return ;
13451 }
13452 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13453
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013454 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013455 {
13456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013457 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013458 VOS_ASSERT(0);
13459 return ;
13460 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013461
Jeff Johnsone7245742012-09-05 17:12:55 -070013462 /*
13463 * Allocate memory for response params sent to PE
13464 */
13465 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13466
13467 // Check if memory is allocated for OemdataMeasRsp Params.
13468 if(NULL == pOemDataRspParams)
13469 {
13470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13471 "OEM DATA WDA callback alloc fail");
13472 VOS_ASSERT(0) ;
13473 return;
13474 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013475
Jeff Johnsone7245742012-09-05 17:12:55 -070013476 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13478 vos_mem_free(pWdaParams->wdaMsgParam);
13479 vos_mem_free(pWdaParams) ;
13480
Jeff Johnsone7245742012-09-05 17:12:55 -070013481 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013482 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013483 * Also, here success always means that we have atleast one BSSID.
13484 */
13485 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13486
13487 //enable Tx
13488 status = WDA_ResumeDataTx(pWDA);
13489 if(status != VOS_STATUS_SUCCESS)
13490 {
13491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13492 }
13493 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13494 return ;
13495}
13496/*
13497 * FUNCTION: WDA_ProcessStartOemDataReq
13498 * Send Start Oem Data Req to WDI
13499 */
13500VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13501 tStartOemDataReq *pOemDataReqParams)
13502{
13503 WDI_Status status = WDI_STATUS_SUCCESS;
13504 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013505 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013506
13507 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13508
13509 if(NULL == wdiOemDataReqParams)
13510 {
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013513 VOS_ASSERT(0);
13514 return VOS_STATUS_E_NOMEM;
13515 }
13516
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013517 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13518 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13519 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13520 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013521
13522 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13523
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13525 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013526 {
13527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013529 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013530 vos_mem_free(pOemDataReqParams);
13531 VOS_ASSERT(0);
13532 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013533 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013534
Bernald44a1ae2013-01-09 08:30:39 -080013535 pWdaParams->pWdaContext = (void*)pWDA;
13536 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13537 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013538
13539 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13540 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013541
13542 if(IS_WDI_STATUS_FAILURE(status))
13543 {
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13545 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13547 vos_mem_free(pWdaParams->wdaMsgParam);
13548 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013549 }
13550 return CONVERT_WDI2VOS_STATUS(status) ;
13551}
13552#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013553/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013554 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 *
13556 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013557void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013558{
13559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013561 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 if(NULL == pWdaParams)
13563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013565 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013566 VOS_ASSERT(0) ;
13567 return ;
13568 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013569
13570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13571 vos_mem_free(pWdaParams->wdaMsgParam);
13572 vos_mem_free(pWdaParams);
13573
13574 return ;
13575}
13576/*
13577 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13578 * Free memory.
13579 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13580 */
13581void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13582{
13583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13584
13585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13586 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13587
13588 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013589 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13591 "%s: pWdaParams received NULL", __func__);
13592 VOS_ASSERT(0);
13593 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013594 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013595
13596 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013597 {
13598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013599 vos_mem_free(pWdaParams->wdaMsgParam);
13600 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013602
13603 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013604}
Jeff Johnson295189b2012-06-20 16:38:30 -070013605#ifdef WLAN_FEATURE_GTK_OFFLOAD
13606/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013607 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013608 *
13609 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013610void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013611 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013612{
13613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13614
13615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013616 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013617 if(NULL == pWdaParams)
13618 {
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13620 "%s: pWdaParams received NULL", __func__);
13621 VOS_ASSERT(0);
13622 return;
13623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013624
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 vos_mem_free(pWdaParams->wdaMsgParam) ;
13626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13627 vos_mem_free(pWdaParams) ;
13628
13629 //print a msg, nothing else to do
13630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013631 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013632
13633 return ;
13634}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013635/*
13636 * FUNCTION: WDA_GTKOffloadReqCallback
13637 * Free memory.
13638 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13639 */
13640void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13641{
13642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013643
Yue Ma7f44bbe2013-04-12 11:47:39 -070013644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13645 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13646
13647 if(NULL == pWdaParams)
13648 {
13649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13650 "%s: pWdaParams received NULL", __func__);
13651 VOS_ASSERT(0);
13652 return;
13653 }
13654
13655 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13656 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013657 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13658 sizeof(WDI_GtkOffloadReqMsg));
13659 vos_mem_zero(pWdaParams->wdaMsgParam,
13660 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13662 vos_mem_free(pWdaParams->wdaMsgParam);
13663 vos_mem_free(pWdaParams);
13664 }
13665
13666 return;
13667}
Jeff Johnson295189b2012-06-20 16:38:30 -070013668/*
13669 * FUNCTION: WDA_ProcessGTKOffloadReq
13670 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13671 * to broadcast traffic (sta mode).
13672 */
13673VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13674 tpSirGtkOffloadParams pGtkOffloadParams)
13675{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013676 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13678 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13679 sizeof(WDI_GtkOffloadReqMsg)) ;
13680 tWDA_ReqParams *pWdaParams ;
13681
13682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013684
13685 if(NULL == wdiGtkOffloadReqMsg)
13686 {
13687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013689 VOS_ASSERT(0);
13690 return VOS_STATUS_E_NOMEM;
13691 }
13692
13693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13694 if(NULL == pWdaParams)
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 VOS_ASSERT(0);
13699 vos_mem_free(wdiGtkOffloadReqMsg);
13700 return VOS_STATUS_E_NOMEM;
13701 }
13702
13703 //
13704 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13705 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013706
13707 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013708 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013709
Jeff Johnson295189b2012-06-20 16:38:30 -070013710 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13711 // Copy KCK
13712 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13713 // Copy KEK
13714 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13715 // Copy KeyReplayCounter
13716 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13717 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13718
Yue Ma7f44bbe2013-04-12 11:47:39 -070013719 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13720 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013721
Jeff Johnson295189b2012-06-20 16:38:30 -070013722
13723 /* Store Params pass it to WDI */
13724 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13725 pWdaParams->pWdaContext = pWDA;
13726 /* Store param pointer as passed in by caller */
13727 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13728
Yue Ma7f44bbe2013-04-12 11:47:39 -070013729 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013730
13731 if(IS_WDI_STATUS_FAILURE(status))
13732 {
13733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13734 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013735 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13736 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13738 vos_mem_free(pWdaParams->wdaMsgParam);
13739 vos_mem_free(pWdaParams);
13740 }
13741
13742 return CONVERT_WDI2VOS_STATUS(status) ;
13743}
13744
13745/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013746 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013747 *
13748 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013749void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013750 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013751{
13752 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13753 tWDA_CbContext *pWDA;
13754 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013755 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 vos_msg_t vosMsg;
13757
13758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013759 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013760
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013761 if(NULL == pWdaParams)
13762 {
13763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13764 "%s: pWdaParams received NULL", __func__);
13765 VOS_ASSERT(0);
13766 return;
13767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013768
Nirav Shah374de6e2014-02-13 16:40:01 +053013769 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13770 if(NULL == pGtkOffloadGetInfoRsp)
13771 {
13772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13773 "%s: vos_mem_malloc failed ", __func__);
13774 VOS_ASSERT(0);
13775 return;
13776 }
13777
Jeff Johnson295189b2012-06-20 16:38:30 -070013778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13779 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13780
13781 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13782 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13783
13784 /* Message Header */
13785 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013786 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013787
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013788 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13789 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13790 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13791 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13792 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013793
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013794 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13795 pwdiGtkOffloadGetInfoRsparams->bssId,
13796 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 /* VOS message wrapper */
13798 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13799 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13800 vosMsg.bodyval = 0;
13801
13802 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13803 {
13804 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013805 vos_mem_zero(pGtkOffloadGetInfoRsp,
13806 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013807 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13808 }
13809
13810 vos_mem_free(pWdaParams->wdaMsgParam) ;
13811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13812 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013813
13814 return;
13815}
13816/*
13817 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13818 * Free memory and send RSP back to SME.
13819 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13820 */
13821void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13822{
13823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13824 vos_msg_t vosMsg;
13825
13826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13827 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13828
13829 if(NULL == pWdaParams)
13830 {
13831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13832 "%s: pWdaParams received NULL", __func__);
13833 VOS_ASSERT(0);
13834 return;
13835 }
13836
13837 /* VOS message wrapper */
13838 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13839 vosMsg.bodyptr = NULL;
13840 vosMsg.bodyval = 0;
13841
13842 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13843 {
13844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13845 vos_mem_free(pWdaParams->wdaMsgParam);
13846 vos_mem_free(pWdaParams);
13847 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13848 }
13849
13850 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013851}
13852#endif
13853
13854/*
13855 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13856 * Request to WDI to set Tx Per Tracking configurations
13857 */
13858VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13859{
13860 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013861 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013862 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13863 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13864 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13865 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013867 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 if(NULL == pwdiSetTxPerTrackingReqParams)
13869 {
13870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 vos_mem_free(pTxPerTrackingParams);
13873 VOS_ASSERT(0);
13874 return VOS_STATUS_E_NOMEM;
13875 }
13876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13877 if(NULL == pWdaParams)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013881 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13882 vos_mem_free(pTxPerTrackingParams);
13883 VOS_ASSERT(0);
13884 return VOS_STATUS_E_NOMEM;
13885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13887 pTxPerTrackingParams->ucTxPerTrackingEnable;
13888 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13889 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13890 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13891 pTxPerTrackingParams->ucTxPerTrackingRatio;
13892 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13893 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013894 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13895 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013896 /* Store param pointer as passed in by caller */
13897 /* store Params pass it to WDI
13898 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13899 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13900 pWdaParams->pWdaContext = pWDA;
13901 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013902 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013903 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013904 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013905 {
13906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13907 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013908 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013909 vos_mem_free(pWdaParams->wdaMsgParam) ;
13910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13911 vos_mem_free(pWdaParams) ;
13912 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013913 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013914
13915}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013916/*
13917 * FUNCTION: WDA_HALDumpCmdCallback
13918 * Send the VOS complete .
13919 */
13920void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13921 void* pUserData)
13922{
13923 tANI_U8 *buffer = NULL;
13924 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013925 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013926 if(NULL == pWdaParams)
13927 {
13928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 VOS_ASSERT(0) ;
13931 return ;
13932 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013933
13934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13935 "%s: WDA HAL DUMP Resp Received",__func__);
13936
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 pWDA = pWdaParams->pWdaContext;
13938 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013939 if(wdiRspParams->usBufferLen > 0)
13940 {
13941 /*Copy the Resp data to UMAC supplied buffer*/
13942 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13943 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013944
13945 if (!pWdaParams->wdaHALDumpAsync)
13946 {/* Indicate VOSS about the start complete */
13947 vos_WDAComplete_cback(pWDA->pVosContext);
13948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13950 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013951 return ;
13952}
13953
Jeff Johnson295189b2012-06-20 16:38:30 -070013954/*
13955 * FUNCTION: WDA_ProcessHALDumpCmdReq
13956 * Send Dump command to WDI
13957 */
13958VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13959 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013960 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013961{
13962 WDI_Status status = WDI_STATUS_SUCCESS;
13963 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13964 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013965 tWDA_HalDumpReqParams *pWdaParams ;
13966
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 pVosContextType pVosContext = NULL;
13968 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013969 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13970 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013971 if(pVosContext)
13972 {
13973 if (pVosContext->isLogpInProgress)
13974 {
13975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13976 "%s:LOGP in Progress. Ignore!!!", __func__);
13977 return VOS_STATUS_E_BUSY;
13978 }
13979 }
13980 else
13981 {
13982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13983 "%s: VOS Context Null", __func__);
13984 return VOS_STATUS_E_RESOURCES;
13985 }
13986
Siddharth Bhal68115602015-01-18 20:44:55 +053013987 if (NULL == pVosContext->pWDAContext)
13988 {
13989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13990 "%s: WDA Context Null", __func__);
13991 return VOS_STATUS_E_RESOURCES;
13992 }
13993 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 if(NULL == pWdaParams)
13995 {
13996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 return VOS_STATUS_E_NOMEM;
13999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014000 /* Allocate memory WDI request structure*/
14001 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
14002 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
14003 if(NULL == wdiHALDumpCmdReqParam)
14004 {
14005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14006 "WDA HAL DUMP Command buffer alloc fail");
14007 vos_mem_free(pWdaParams);
14008 return WDI_STATUS_E_FAILURE;
14009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070014011 /* Extract the arguments */
14012 wdiHalDumpCmdInfo->command = cmd;
14013 wdiHalDumpCmdInfo->argument1 = arg1;
14014 wdiHalDumpCmdInfo->argument2 = arg2;
14015 wdiHalDumpCmdInfo->argument3 = arg3;
14016 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014018 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053014019 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070014020
14021 /* Response message will be passed through the buffer */
14022 pWdaParams->wdaMsgParam = (void *)pBuffer;
14023
14024 /* store Params pass it to WDI */
14025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014026
14027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14028 "%s: WDA HAL DUMP Command sent",__func__);
14029
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053014031 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
14032 pWdaParams);
14033 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
14034 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014036 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
14037 WDA_DUMPCMD_WAIT_TIMEOUT );
14038 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014040 if ( vStatus == VOS_STATUS_E_TIMEOUT )
14041 {
14042 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14043 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
14044 }
14045 else
14046 {
14047 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14048 "%s: WDA_HALDUMP reporting other error",__func__);
14049 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053014050 if (!(vos_isLoadUnloadInProgress() ||
14051 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
14052 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 }
14055 return status;
14056}
Jeff Johnson295189b2012-06-20 16:38:30 -070014057#ifdef WLAN_FEATURE_GTK_OFFLOAD
14058/*
14059 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
14060 * Request to WDI to get GTK Offload Information
14061 */
14062VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
14063 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
14064{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014065 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014066 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
14067 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
14068 tWDA_ReqParams *pWdaParams ;
14069
14070 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
14071 {
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014074 VOS_ASSERT(0);
14075 return VOS_STATUS_E_NOMEM;
14076 }
14077
14078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14079 if(NULL == pWdaParams)
14080 {
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014083 VOS_ASSERT(0);
14084 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
14085 return VOS_STATUS_E_NOMEM;
14086 }
14087
Yue Ma7f44bbe2013-04-12 11:47:39 -070014088 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
14089 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014090
Jeff Johnson295189b2012-06-20 16:38:30 -070014091 /* Store Params pass it to WDI */
14092 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
14093 pWdaParams->pWdaContext = pWDA;
14094 /* Store param pointer as passed in by caller */
14095 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
14096
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014097 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014098 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014099
Yue Ma7f44bbe2013-04-12 11:47:39 -070014100 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014101
14102 if(IS_WDI_STATUS_FAILURE(status))
14103 {
14104 /* failure returned by WDI API */
14105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14106 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
14107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14108 vos_mem_free(pWdaParams) ;
14109 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
14110 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
14111 }
14112
14113 return CONVERT_WDI2VOS_STATUS(status) ;
14114}
14115#endif // WLAN_FEATURE_GTK_OFFLOAD
14116
14117/*
Yue Mab9c86f42013-08-14 15:59:08 -070014118 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
14119 *
14120 */
14121VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14122 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
14123{
14124 WDI_Status wdiStatus;
14125 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
14126
14127 addPeriodicTxPtrnParams =
14128 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
14129
14130 if (NULL == addPeriodicTxPtrnParams)
14131 {
14132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14133 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
14134 __func__);
14135
14136 return VOS_STATUS_E_NOMEM;
14137 }
14138
14139 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
14140 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
14141
14142 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14143 addPeriodicTxPtrnParams->pUserData = pWDA;
14144
14145 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
14146
14147 if (WDI_STATUS_PENDING == wdiStatus)
14148 {
14149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14150 "Pending received for %s:%d", __func__, __LINE__ );
14151 }
14152 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14153 {
14154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14155 "Failure in %s:%d", __func__, __LINE__ );
14156 }
14157
14158 vos_mem_free(addPeriodicTxPtrnParams);
14159
14160 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14161}
14162
14163/*
14164 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
14165 *
14166 */
14167VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14168 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
14169{
14170 WDI_Status wdiStatus;
14171 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
14172
14173 delPeriodicTxPtrnParams =
14174 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
14175
14176 if (NULL == delPeriodicTxPtrnParams)
14177 {
14178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14179 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
14180 __func__);
14181
14182 return VOS_STATUS_E_NOMEM;
14183 }
14184
14185 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
14186 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
14187
14188 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14189 delPeriodicTxPtrnParams->pUserData = pWDA;
14190
14191 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
14192
14193 if (WDI_STATUS_PENDING == wdiStatus)
14194 {
14195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14196 "Pending received for %s:%d", __func__, __LINE__ );
14197 }
14198 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14199 {
14200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14201 "Failure in %s:%d", __func__, __LINE__ );
14202 }
14203
14204 vos_mem_free(delPeriodicTxPtrnParams);
14205
14206 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14207}
14208
Abhishek Singh00b71972016-01-07 10:51:04 +053014209/*
14210 * FUNCTION: WDA_ProcessRateUpdateInd
14211 *
14212 */
14213VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
14214 tSirRateUpdateInd *pRateUpdateParams)
14215{
14216 WDI_Status wdiStatus;
14217 WDI_RateUpdateIndParams rateUpdateParams;
14218
14219 vos_mem_copy(rateUpdateParams.bssid,
14220 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
14221
14222 rateUpdateParams.ucastDataRateTxFlag =
14223 pRateUpdateParams->ucastDataRateTxFlag;
14224 rateUpdateParams.rmcDataRateTxFlag =
14225 pRateUpdateParams->rmcDataRateTxFlag;
14226 rateUpdateParams.mcastDataRate24GHzTxFlag =
14227 pRateUpdateParams->mcastDataRate24GHzTxFlag;
14228 rateUpdateParams.mcastDataRate5GHzTxFlag =
14229 pRateUpdateParams->mcastDataRate5GHzTxFlag;
14230
14231 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
14232 rateUpdateParams.rmcDataRate =
14233 pRateUpdateParams->rmcDataRate;
14234 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
14235 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
14236
14237 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14238 rateUpdateParams.pUserData = pWDA;
14239
14240 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
14241
14242 if (WDI_STATUS_PENDING == wdiStatus)
14243 {
14244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14245 "Pending received for %s:%d", __func__, __LINE__ );
14246 }
14247 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14248 {
14249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14250 "Failure in %s:%d", __func__, __LINE__ );
14251 }
14252
14253 vos_mem_free(pRateUpdateParams);
14254
14255 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14256}
14257
14258
Rajeev79dbe4c2013-10-05 11:03:42 +053014259#ifdef FEATURE_WLAN_BATCH_SCAN
14260/*
14261 * FUNCTION: WDA_ProcessStopBatchScanInd
14262 *
14263 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
14264 *
14265 * PARAM:
14266 * pWDA: pointer to WDA context
14267 * pReq: pointer to stop batch scan request
14268 */
14269VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
14270 tSirStopBatchScanInd *pReq)
14271{
14272 WDI_Status wdiStatus;
14273 WDI_StopBatchScanIndType wdiReq;
14274
14275 wdiReq.param = pReq->param;
14276
14277 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14278
14279 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14280 {
14281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14282 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14283 }
14284
14285 vos_mem_free(pReq);
14286
14287 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14288}
14289/*==========================================================================
14290 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14291
14292 DESCRIPTION
14293 API to pull batch scan result from FW
14294
14295 PARAMETERS
14296 pWDA: Pointer to WDA context
14297 pGetBatchScanReq: Pointer to get batch scan result indication
14298
14299 RETURN VALUE
14300 NONE
14301
14302===========================================================================*/
14303VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14304 tSirTriggerBatchScanResultInd *pReq)
14305{
14306 WDI_Status wdiStatus;
14307 WDI_TriggerBatchScanResultIndType wdiReq;
14308
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14310 "------> %s " ,__func__);
14311
14312 wdiReq.param = pReq->param;
14313
14314 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14315
14316 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14317 {
14318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14319 "Trigger batch scan result ind failed %s:%d",
14320 __func__, wdiStatus);
14321 }
14322
14323 vos_mem_free(pReq);
14324
14325 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14326}
14327
14328/*==========================================================================
14329 FUNCTION WDA_SetBatchScanRespCallback
14330
14331 DESCRIPTION
14332 API to process set batch scan response from FW
14333
14334 PARAMETERS
14335 pRsp: Pointer to set batch scan response
14336 pUserData: Pointer to user data
14337
14338 RETURN VALUE
14339 NONE
14340
14341===========================================================================*/
14342void WDA_SetBatchScanRespCallback
14343(
14344 WDI_SetBatchScanRspType *pRsp,
14345 void* pUserData
14346)
14347{
14348 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14349 tpAniSirGlobal pMac;
14350 void *pCallbackContext;
14351 tWDA_CbContext *pWDA = NULL ;
14352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14353
14354
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14356 "<------ %s " ,__func__);
14357 if (NULL == pWdaParams)
14358 {
14359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14360 "%s: pWdaParams received NULL", __func__);
14361 VOS_ASSERT(0) ;
14362 return ;
14363 }
14364
14365 /*extract WDA context*/
14366 pWDA = pWdaParams->pWdaContext;
14367 if (NULL == pWDA)
14368 {
14369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14370 "%s:pWDA is NULL can't invole HDD callback",
14371 __func__);
14372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14373 vos_mem_free(pWdaParams->wdaMsgParam);
14374 vos_mem_free(pWdaParams);
14375 VOS_ASSERT(0);
14376 return;
14377 }
14378
14379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14380 vos_mem_free(pWdaParams->wdaMsgParam);
14381 vos_mem_free(pWdaParams);
14382
14383 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14384 if (NULL == pMac)
14385 {
14386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14387 "%s:pMac is NULL", __func__);
14388 VOS_ASSERT(0);
14389 return;
14390 }
14391
14392 pHddSetBatchScanRsp =
14393 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14394 if (NULL == pHddSetBatchScanRsp)
14395 {
14396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14397 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14398 VOS_ASSERT(0);
14399 return;
14400 }
14401
14402 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14403
14404 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14405 /*call hdd callback with set batch scan response data*/
14406 if(pMac->pmc.setBatchScanReqCallback)
14407 {
14408 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14409 }
14410 else
14411 {
14412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14413 "%s:HDD callback is null", __func__);
14414 VOS_ASSERT(0);
14415 }
14416
14417 vos_mem_free(pHddSetBatchScanRsp);
14418 return ;
14419}
14420
14421/*==========================================================================
14422 FUNCTION WDA_ProcessSetBatchScanReq
14423
14424 DESCRIPTION
14425 API to send set batch scan request to WDI
14426
14427 PARAMETERS
14428 pWDA: Pointer to WDA context
14429 pSetBatchScanReq: Pointer to set batch scan req
14430
14431 RETURN VALUE
14432 NONE
14433
14434===========================================================================*/
14435VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14436 tSirSetBatchScanReq *pSetBatchScanReq)
14437{
14438 WDI_Status status;
14439 tWDA_ReqParams *pWdaParams ;
14440 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14441
14442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14443 "------> %s " ,__func__);
14444
14445 pWdiSetBatchScanReq =
14446 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14447 if (NULL == pWdiSetBatchScanReq)
14448 {
14449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14450 "%s: VOS MEM Alloc Failure", __func__);
14451 vos_mem_free(pSetBatchScanReq);
14452 VOS_ASSERT(0);
14453 return VOS_STATUS_E_NOMEM;
14454 }
14455
14456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14457 if (NULL == pWdaParams)
14458 {
14459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14460 "%s: VOS MEM Alloc Failure", __func__);
14461 VOS_ASSERT(0);
14462 vos_mem_free(pSetBatchScanReq);
14463 vos_mem_free(pWdiSetBatchScanReq);
14464 return VOS_STATUS_E_NOMEM;
14465 }
14466
14467 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14468 pWdiSetBatchScanReq->numberOfScansToBatch =
14469 pSetBatchScanReq->numberOfScansToBatch;
14470 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14471 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14472 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14473
14474 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14475 pWdaParams->pWdaContext = pWDA;
14476 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14477
14478 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14479 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14480 if (IS_WDI_STATUS_FAILURE(status))
14481 {
14482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14483 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14485 vos_mem_free(pWdaParams->wdaMsgParam);
14486 vos_mem_free(pWdaParams);
14487 }
14488 return CONVERT_WDI2VOS_STATUS(status);
14489}
14490
14491#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014492/*
14493 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14494 *
14495 * DESCRIPTION: This function sends start/update OBSS scan
14496 * inidcation message to WDI
14497 *
14498 * PARAM:
14499 * pWDA: pointer to WDA context
14500 * pReq: pointer to start OBSS scan request
14501 */
14502VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14503 tSirHT40OBSSScanInd *pReq)
14504{
14505 WDI_Status status;
14506 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14507 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014508
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14510 "------> %s " ,__func__);
14511 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14512 wdiOBSSScanParams.pUserData = pWDA;
14513
14514 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14515 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14516 pWdiOBSSScanInd->scanType = pReq->scanType;
14517 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14518 pReq->OBSSScanActiveDwellTime;
14519 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14520 pReq->OBSSScanPassiveDwellTime;
14521 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14522 pReq->BSSChannelWidthTriggerScanInterval;
14523 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14524 pReq->BSSWidthChannelTransitionDelayFactor;
14525 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14526 pReq->OBSSScanActiveTotalPerChannel;
14527 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14528 pReq->OBSSScanPassiveTotalPerChannel;
14529 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14530 pReq->OBSSScanActivityThreshold;
14531 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14532 vos_mem_copy(pWdiOBSSScanInd->channels,
14533 pReq->channels,
14534 pReq->channelCount);
14535 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14536 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14537 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14538 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14539 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14540
14541 vos_mem_copy(pWdiOBSSScanInd->ieField,
14542 pReq->ieField,
14543 pReq->ieFieldLen);
14544
14545 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14546 if (WDI_STATUS_PENDING == status)
14547 {
14548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14549 "Pending received for %s:%d ",__func__,__LINE__ );
14550 }
14551 else if (WDI_STATUS_SUCCESS_SYNC != status)
14552 {
14553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14554 "Failure in %s:%d ",__func__,__LINE__ );
14555 }
14556 return CONVERT_WDI2VOS_STATUS(status) ;
14557}
14558/*
14559 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14560 *
14561 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14562 *
14563 * PARAM:
14564 * pWDA: pointer to WDA context
14565 * pReq: pointer to stop batch scan request
14566 */
14567VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14568 tANI_U8 *bssIdx)
14569{
14570 WDI_Status status;
14571
14572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14573 "------> %s " ,__func__);
14574
14575 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14576 if (WDI_STATUS_PENDING == status)
14577 {
14578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14579 "Pending received for %s:%d ",__func__,__LINE__ );
14580 }
14581 else if (WDI_STATUS_SUCCESS_SYNC != status)
14582 {
14583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14584 "Failure in %s:%d ",__func__,__LINE__ );
14585 }
14586 return CONVERT_WDI2VOS_STATUS(status) ;
14587}
Yue Mab9c86f42013-08-14 15:59:08 -070014588/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014589 * -------------------------------------------------------------------------
14590 * DATA interface with WDI for Mgmt Frames
14591 * -------------------------------------------------------------------------
14592 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014593/*
14594 * FUNCTION: WDA_TxComplete
14595 * Callback function for the WDA_TxPacket
14596 */
14597VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14598 VOS_STATUS status )
14599{
14600
14601 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14602 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014603 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014604
Mihir Shete63341222015-03-24 15:39:18 +053014605 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14606
Jeff Johnson295189b2012-06-20 16:38:30 -070014607 if(NULL == wdaContext)
14608 {
14609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14610 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014611 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014613 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 return VOS_STATUS_E_FAILURE;
14615 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014616
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014617 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014618 /*Check if frame was timed out or not*/
14619 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14620 (v_PVOID_t)&uUserData);
14621
14622 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14623 {
14624 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14626 "%s: MGMT Frame Tx timed out",
14627 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014628 vos_pkt_return_packet(pData);
14629 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014630 return VOS_STATUS_SUCCESS;
14631 }
14632
Jeff Johnson295189b2012-06-20 16:38:30 -070014633 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14634 if( NULL!=wdaContext->pTxCbFunc)
14635 {
14636 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014637 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014638 {
14639 wdaContext->pTxCbFunc(pMac, pData);
14640 }
14641 else
14642 {
14643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014644 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014645 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014647 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014648 return status;
14649 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014651 else {
14652 wdaContext->mgmt_pktfree_fail++;
14653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14654 "%s:packet (%p) userData (%lx) is not freed",
14655 __func__, pData, uUserData);
14656 }
14657 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014658
14659 /*
14660 * Trigger the event to bring the HAL TL Tx complete function to come
14661 * out of wait
14662 * Let the coe above to complete the packet first. When this event is set,
14663 * the thread waiting for the event may run and set Vospacket_freed causing the original
14664 * packet not being freed.
14665 */
14666 status = vos_event_set(&wdaContext->txFrameEvent);
14667 if(!VOS_IS_STATUS_SUCCESS(status))
14668 {
14669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014670 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014672 return status;
14673}
Jeff Johnson295189b2012-06-20 16:38:30 -070014674/*
14675 * FUNCTION: WDA_TxPacket
14676 * Forward TX management frame to WDI
14677 */
14678VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14679 void *pFrmBuf,
14680 tANI_U16 frmLen,
14681 eFrameType frmType,
14682 eFrameTxDir txDir,
14683 tANI_U8 tid,
14684 pWDATxRxCompFunc pCompFunc,
14685 void *pData,
14686 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014687 tANI_U32 txFlag,
14688 tANI_U32 txBdToken
14689 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014690{
14691 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14692 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14693 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14694 tANI_U8 eventIdx = 0;
14695 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14696 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014697 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014698 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014699
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 if((NULL == pWDA)||(NULL == pFrmBuf))
14701 {
14702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014703 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014704 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014705 VOS_ASSERT(0);
14706 return VOS_STATUS_E_FAILURE;
14707 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014708
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014710 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14711 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014712 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14713 if(NULL == pMac)
14714 {
14715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014716 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014717 VOS_ASSERT(0);
14718 return VOS_STATUS_E_FAILURE;
14719 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014720
Jeff Johnson295189b2012-06-20 16:38:30 -070014721 /* store the call back function in WDA context */
14722 pWDA->pTxCbFunc = pCompFunc;
14723 /* store the call back for the function of ackTxComplete */
14724 if( pAckTxComp )
14725 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014726 if( NULL != pWDA->pAckTxCbFunc )
14727 {
14728 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014730 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014731 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014732 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014733
Jeff Johnsone7245742012-09-05 17:12:55 -070014734 if( VOS_STATUS_SUCCESS !=
14735 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "Tx Complete timeout Timer Stop Failed ");
14739 }
14740 else
14741 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014743 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014744 }
14745 }
14746
14747 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14748 pWDA->pAckTxCbFunc = pAckTxComp;
14749 if( VOS_STATUS_SUCCESS !=
14750 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14751 {
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14753 "Tx Complete Timer Start Failed ");
14754 pWDA->pAckTxCbFunc = NULL;
14755 return eHAL_STATUS_FAILURE;
14756 }
14757 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014758 /* Reset the event to be not signalled */
14759 status = vos_event_reset(&pWDA->txFrameEvent);
14760 if(!VOS_IS_STATUS_SUCCESS(status))
14761 {
14762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014763 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014764 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14765 if( pAckTxComp )
14766 {
14767 pWDA->pAckTxCbFunc = NULL;
14768 if( VOS_STATUS_SUCCESS !=
14769 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14770 {
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14772 "Tx Complete timeout Timer Stop Failed ");
14773 }
14774 }
14775 return VOS_STATUS_E_FAILURE;
14776 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014777
14778 /* If Peer Sta mask is set don't overwrite to self sta */
14779 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014780 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014781 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014783 else
14784 {
Ganesh K08bce952012-12-13 15:04:41 -080014785 /* Get system role, use the self station if in unknown role or STA role */
14786 systemRole = wdaGetGlobalSystemRole(pMac);
14787 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14788 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014789#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014790 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014791#endif
Ganesh K08bce952012-12-13 15:04:41 -080014792 ))
14793 {
14794 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14795 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014797
Jeff Johnsone7245742012-09-05 17:12:55 -070014798 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14799 disassoc frame reaches the HW, HAL has already deleted the peer station */
14800 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014801 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014802 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014803 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014804 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014805 /*Send Probe request frames on self sta idx*/
14806 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014808 /* Since we donot want probe responses to be retried, send probe responses
14809 through the NO_ACK queues */
14810 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14811 {
14812 //probe response is sent out using self station and no retries options.
14813 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14814 }
14815 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14816 {
14817 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14818 }
14819 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014820#ifdef FEATURE_WLAN_TDLS
14821 /* TDLS Management frames are sent using Peer Sta mask */
14822 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14823 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14824 {
14825 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14826
14827 }
14828#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014829 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014830
14831 /*Set frame tag to 0
14832 We will use the WDA user data in order to tag a frame as expired*/
14833 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14834 (v_PVOID_t)0);
14835
14836
14837 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014838 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14839 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014840 {
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014842 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014844 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 -070014845 if( pAckTxComp )
14846 {
14847 pWDA->pAckTxCbFunc = NULL;
14848 if( VOS_STATUS_SUCCESS !=
14849 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14850 {
14851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14852 "Tx Complete timeout Timer Stop Failed ");
14853 }
14854 }
14855 return VOS_STATUS_E_FAILURE;
14856 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014857 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014858 /*
14859 * Wait for the event to be set by the TL, to get the response of TX
14860 * complete, this event should be set by the Callback function called by TL
14861 */
14862 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14863 &eventIdx);
14864 if(!VOS_IS_STATUS_SUCCESS(status))
14865 {
14866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14867 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014868 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014869 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014870 /*Tag Frame as timed out for later deletion*/
14871 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14872 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014873 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14874 after the packet gets completed(packet freed once)*/
14875
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014876 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14877
14878 /*
14879 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14880 * TX completion call back
14881 */
14882 VOS_SMP_MB;
14883 vos_lock_release(&pWDA->mgmt_pkt_lock);
14884
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014885 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014886 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014887
Abhishek Singh837adf22015-10-01 17:37:37 +053014888 if (vos_isFatalEventEnabled())
14889 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14890 WLAN_LOG_INDICATOR_HOST_DRIVER,
14891 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14892 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014893
Jeff Johnson295189b2012-06-20 16:38:30 -070014894 if( pAckTxComp )
14895 {
14896 pWDA->pAckTxCbFunc = NULL;
14897 if( VOS_STATUS_SUCCESS !=
14898 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14899 {
14900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14901 "Tx Complete timeout Timer Stop Failed ");
14902 }
14903 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014904 pWDA->mgmtTxfailureCnt++;
14905
14906 /* SSR if timeout continously for
14907 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14908 */
14909 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14910 pWDA->mgmtTxfailureCnt)
14911 {
14912 vos_wlanRestart();
14913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014914 status = VOS_STATUS_E_FAILURE;
14915 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014916
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014917#ifdef WLAN_DUMP_MGMTFRAMES
14918 if (VOS_IS_STATUS_SUCCESS(status))
14919 {
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14921 "%s() TX packet : SubType %d", __func__,pFc->subType);
14922 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14923 pData, frmLen);
14924 }
14925#endif
14926
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014927 if (VOS_IS_STATUS_SUCCESS(status))
14928 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014929 pWDA->mgmtTxfailureCnt = 0;
14930 if ((vos_timer_get_system_time() - time_snapshot) >=
14931 WDA_TX_TIME_THRESHOLD)
14932 {
14933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14934 "Tx Complete took %lu ms",
14935 vos_timer_get_system_time() - time_snapshot);
14936 }
14937
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014938 if (pMac->fEnableDebugLog & 0x1)
14939 {
14940 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14941 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14942 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14943 {
14944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14945 pFc->type, pFc->subType);
14946 }
14947 }
14948 }
14949
14950
Jeff Johnson295189b2012-06-20 16:38:30 -070014951 return status;
14952}
Jeff Johnson295189b2012-06-20 16:38:30 -070014953/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014954 * FUNCTION: WDA_ProcessDHCPStartInd
14955 * Forward DHCP Start to WDI
14956 */
14957static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14958 tAniDHCPInd *dhcpStartInd)
14959{
14960 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014961 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014962
c_hpothu0b0cab72014-02-13 21:52:40 +053014963 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14964 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014965 sizeof(tSirMacAddr));
14966
c_hpothu0b0cab72014-02-13 21:52:40 +053014967 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014968
c_hpothu0b0cab72014-02-13 21:52:40 +053014969 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014970 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14972 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014973 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014974 else if (WDI_STATUS_SUCCESS_SYNC != status)
14975 {
14976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14977 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14978 }
14979
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014980 vos_mem_free(dhcpStartInd);
14981 return CONVERT_WDI2VOS_STATUS(status) ;
14982}
14983
14984 /*
14985 * FUNCTION: WDA_ProcessDHCPStopInd
14986 * Forward DHCP Stop to WDI
14987 */
14988 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14989 tAniDHCPInd *dhcpStopInd)
14990 {
14991 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014992 WDI_DHCPInd wdiDHCPInd;
14993
14994 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14995 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14996
14997 status = WDI_dhcpStopInd(&wdiDHCPInd);
14998
14999 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015000 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15002 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015003 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015004 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015005 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15007 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015008 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015009
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015010 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053015011
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015012 return CONVERT_WDI2VOS_STATUS(status) ;
15013 }
15014
Abhishek Singh00b71972016-01-07 10:51:04 +053015015#ifdef WLAN_FEATURE_RMC
15016
15017void
15018WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
15019{
15020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15021 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
15022
15023 switch (wdiRmcResponse->cmd)
15024 {
15025 case eWDI_BECOME_RULER_CMD :
15026 {
15027 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
15028
15029 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
15030 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
15031
15032 if (NULL == pRmcBecomeRulerInd)
15033 {
15034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15035 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
15036 break;
15037 }
15038
15039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15040 "Received eWDI_BECOME_RULER_CMD from WDI");
15041
15042 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
15043
15044 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
15045 wdiRmcResponse->mcastTransmitter,
15046 sizeof(tSirMacAddr));
15047 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
15048 wdiRmcResponse->mcastGroup,
15049 sizeof(tSirMacAddr));
15050
15051 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
15052 (void *)pRmcBecomeRulerInd, 0) ;
15053 break;
15054 }
15055 case eWDI_SUGGEST_RULER_CMD :
15056 {
15057 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
15058
15059 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
15060 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
15061
15062 if (NULL == pRmcRulerSelectInd)
15063 {
15064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15065 "%s: unable to allocate pRmcRulerSelectInd", __func__);
15066 break;
15067 }
15068
15069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15070 "Received eWDI_SUGGEST_RULER_CMD from WDI");
15071
15072 pRmcRulerSelectInd->status = wdiRmcResponse->status;
15073
15074 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
15075 wdiRmcResponse->mcastTransmitter,
15076 sizeof(tSirMacAddr));
15077 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
15078 wdiRmcResponse->mcastGroup,
15079 sizeof(tSirMacAddr));
15080 vos_mem_copy(pRmcRulerSelectInd->ruler,
15081 wdiRmcResponse->ruler,
15082 sizeof(pRmcRulerSelectInd->ruler));
15083
15084 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
15085 (void *)pRmcRulerSelectInd, 0) ;
15086 break;
15087 }
15088 }
15089
15090 /* free the config structure */
15091 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15092 {
15093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15094 }
15095 vos_mem_free(pWdaParams->wdaMsgParam);
15096 vos_mem_free(pWdaParams);
15097
15098}
15099
15100void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
15101{
15102 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15103
15104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15105 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15106
15107 if (NULL == pWdaParams)
15108 {
15109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15110 "%s: pWdaParams received NULL", __func__);
15111 VOS_ASSERT(0);
15112 return;
15113 }
15114
15115 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15116 {
15117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15118 vos_mem_free(pWdaParams->wdaMsgParam);
15119 vos_mem_free(pWdaParams);
15120 }
15121
15122 return;
15123}
15124
15125static VOS_STATUS
15126WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15127 tSirRmcRulerReq *rmcRulerReq)
15128{
15129 WDI_Status status;
15130 WDI_RmcRulerReqParams *wdiRulerReq;
15131 tWDA_ReqParams *pWdaParams;
15132
15133 wdiRulerReq = (WDI_RmcRulerReqParams *)
15134 vos_mem_malloc(sizeof(*wdiRulerReq));
15135
15136 if (NULL == wdiRulerReq)
15137 {
15138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15139 "%s: VOS MEM Alloc Failure", __func__);
15140 VOS_ASSERT(0);
15141 vos_mem_free(rmcRulerReq);
15142 return VOS_STATUS_E_NOMEM;
15143 }
15144
15145 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15146 if (NULL == pWdaParams)
15147 {
15148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15149 "%s: VOS MEM Alloc Failure", __func__);
15150 VOS_ASSERT(0);
15151 vos_mem_free(rmcRulerReq);
15152 vos_mem_free(wdiRulerReq);
15153 return VOS_STATUS_E_NOMEM;
15154 }
15155
15156 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15157 /* Store param pointer as passed in by caller */
15158 pWdaParams->wdaMsgParam = rmcRulerReq;
15159 pWdaParams->pWdaContext = pWDA;
15160
15161 wdiRulerReq->cmd = rmcRulerReq->cmd;
15162
15163 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15164 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15165 vos_mem_copy(wdiRulerReq->mcastGroup,
15166 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15167 vos_mem_copy(wdiRulerReq->blacklist,
15168 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15169
15170 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15171
15172 status = WDI_RmcRulerReq(wdiRulerReq,
15173 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15174 (void *)pWdaParams);
15175 if (IS_WDI_STATUS_FAILURE(status))
15176 {
15177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15178 vos_mem_free(pWdaParams->wdaMsgParam);
15179 vos_mem_free(pWdaParams) ;
15180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15181 "Ruler Request failed");
15182 }
15183 return CONVERT_WDI2VOS_STATUS(status) ;
15184}
15185
15186/*
15187 * FUNCTION: WDA_ProcessRMCUpdateInd
15188 * Forward Update Indication to WDI
15189*/
15190static VOS_STATUS
15191WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15192 tSirRmcUpdateInd *rmcUpdateInd)
15193{
15194 WDI_Status status;
15195 WDI_RmcUpdateIndParams wdiUpdateInd;
15196
15197 /* Copy the paramters for Update_Ind */
15198
15199 wdiUpdateInd.indication = rmcUpdateInd->indication;
15200 wdiUpdateInd.role = rmcUpdateInd->role;
15201
15202 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15203 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15204
15205 vos_mem_copy(wdiUpdateInd.mcastGroup,
15206 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15207
15208 vos_mem_copy(wdiUpdateInd.mcastRuler,
15209 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15210
15211 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15212 wdiUpdateInd.pUserData = pWDA;
15213 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15214
15215 if (WDI_STATUS_PENDING == status)
15216 {
15217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15218 "Pending received for %s:%d ",__func__,__LINE__ );
15219 }
15220 else if (WDI_STATUS_SUCCESS_SYNC != status)
15221 {
15222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15223 "Failure in %s:%d ",__func__,__LINE__ );
15224 }
15225
15226 vos_mem_free(rmcUpdateInd);
15227
15228 return CONVERT_WDI2VOS_STATUS(status) ;
15229}
15230
15231void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15232 ,void* pUserData)
15233{
15234
15235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15236 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15237 tWDA_CbContext *pWDA;
15238 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15239 vos_msg_t vosMsg;
15240 v_U32_t wdaCnt = 0;
15241
15242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15243 "<------ %s " ,__func__);
15244 if (NULL == pWdaParams)
15245 {
15246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15247 "%s: pWdaParams received NULL", __func__);
15248 VOS_ASSERT(0);
15249 return;
15250 }
15251
15252 if (NULL == peerInfoRspParams)
15253 {
15254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15255 "%s: peerInfoRspParams received NULL", __func__);
15256 if(pWdaParams->wdaMsgParam)
15257 vos_mem_free(pWdaParams->wdaMsgParam);
15258 if(pWdaParams->wdaWdiApiMsgParam)
15259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15260 vos_mem_free(pWdaParams);
15261
15262 VOS_ASSERT(0);
15263 return;
15264 }
15265
15266 pIbssPeerInfoParams =
15267 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15268
15269 pIbssGetPeerInfoRsp =
15270 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15271
15272 if(NULL == pIbssGetPeerInfoRsp)
15273 {
15274 if(pWdaParams->wdaMsgParam)
15275 vos_mem_free(pWdaParams->wdaMsgParam);
15276 if(pWdaParams->wdaWdiApiMsgParam)
15277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15278 vos_mem_free(pWdaParams);
15279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15280 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15281 __func__);
15282 VOS_ASSERT(0);
15283 return;
15284
15285 }
15286
15287 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15288
15289
15290 if (peerInfoRspParams->wdiNumPeers > 32)
15291 {
15292 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15293 /* free the mem and return */
15294 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15295 if(pWdaParams->wdaMsgParam)
15296 vos_mem_free(pWdaParams->wdaMsgParam);
15297 if(pWdaParams->wdaWdiApiMsgParam)
15298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15299 vos_mem_free(pWdaParams);
15300
15301 return;
15302 }
15303
15304 /* Message Header */
15305 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15306 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15307 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15308 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15309
15310 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15311 {
15312 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15313 tSirIbssPeerInfoParams *pSmeTmp =
15314 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15315
15316 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15317 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15318 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15319 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15320 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15321 }
15322
15323 /* VOS message wrapper */
15324 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15325 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15326 vosMsg.bodyval = 0;
15327
15328 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15329 {
15330 /* free the mem and return */
15331 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15332 }
15333
15334 if(NULL != pWdaParams)
15335 {
15336 if(pWdaParams->wdaMsgParam)
15337 vos_mem_free(pWdaParams->wdaMsgParam);
15338 if(pWdaParams->wdaWdiApiMsgParam)
15339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15340 vos_mem_free(pWdaParams);
15341 }
15342
15343 return;
15344}
15345
15346static VOS_STATUS
15347WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15348 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15349{
15350 WDI_Status status;
15351 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15352 tWDA_ReqParams *pWdaParams;
15353
15354 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15355 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15356 if (NULL == wdiPeerInfoReq)
15357 {
15358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15359 "%s: VOS MEM Alloc Failure", __func__);
15360 VOS_ASSERT(0);
15361 vos_mem_free(ibssPeerInfoReqParams);
15362 return VOS_STATUS_E_NOMEM;
15363 }
15364
15365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15366 if (NULL == pWdaParams)
15367 {
15368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15369 "%s: VOS MEM Alloc Failure", __func__);
15370 VOS_ASSERT(0);
15371 vos_mem_free(wdiPeerInfoReq);
15372 vos_mem_free(ibssPeerInfoReqParams);
15373 return VOS_STATUS_E_NOMEM;
15374 }
15375
15376 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15377 /* Store param pointer as passed in by caller */
15378 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15379 pWdaParams->pWdaContext = pWDA;
15380
15381 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15382 ibssPeerInfoReqParams->allPeerInfoReqd;
15383 wdiPeerInfoReq->wdiStaIdx =
15384 ibssPeerInfoReqParams->staIdx;
15385
15386 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15387 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15388 (void *)pWdaParams);
15389 if (IS_WDI_STATUS_FAILURE(status))
15390 {
15391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15392 vos_mem_free(pWdaParams->wdaMsgParam);
15393 vos_mem_free(pWdaParams) ;
15394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15395 "IBSS Peer Info Request failed");
15396 }
15397 return CONVERT_WDI2VOS_STATUS(status) ;
15398
15399}
15400
Kapil Gupta3d923fb2016-12-20 18:59:27 +053015401#ifdef WLAN_FEATURE_APFIND
15402/*
15403 * FUNCTION: WDA_Process_apfind_set_cmd
15404 * Forward AP find config request to WDI
15405 */
15406VOS_STATUS WDA_Process_apfind_set_cmd(tWDA_CbContext *pWDA,
15407 struct hal_apfind_request *ap_find_req)
15408{
15409 WDI_Status status;
15410 struct WDI_APFind_cmd *wdi_ap_find_cmd;
15411
15412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15413 "------> %s " ,__func__);
15414 if (NULL == ap_find_req)
15415 {
15416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15417 "%s: apfind_req info received NULL", __func__);
15418 VOS_ASSERT(0) ;
15419 return VOS_STATUS_E_FAULT;
15420 }
15421
15422 wdi_ap_find_cmd = (struct WDI_APFind_cmd *)vos_mem_malloc(
15423 sizeof(struct hal_apfind_request) + ap_find_req->request_data_len);
15424
15425 wdi_ap_find_cmd->data_len = ap_find_req->request_data_len;
15426 vos_mem_copy(wdi_ap_find_cmd->data, ap_find_req->request_data,
15427 ap_find_req->request_data_len);
15428
15429 status = WDI_process_ap_find_cmd(wdi_ap_find_cmd);
15430 if (WDI_STATUS_PENDING == status) {
15431 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15432 FL("pending status received"));
15433 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15434 (WDI_STATUS_SUCCESS != status)) {
15435
15436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15437 FL("Failure in process_sap_auth_offload API %d"), status);
15438
15439 }
15440 vos_mem_free(wdi_ap_find_cmd);
15441 return CONVERT_WDI2VOS_STATUS(status) ;
15442}
15443#endif
15444
Abhishek Singh00b71972016-01-07 10:51:04 +053015445/*
15446 * FUNCTION: WDA_ProcessTXFailMonitorInd
15447 * Forward TX Fail Monitor to WDI
15448 */
15449static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15450 tWDA_CbContext *pWDA,
15451 tAniTXFailMonitorInd *txFailMonitorInd)
15452{
15453 WDI_Status status;
15454 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15455 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15456
15457 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15458 "<------ %s " ,__func__);
15459
15460 if (NULL == wdiTXFailMonitorInd)
15461 {
15462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15463 "%s: VOS MEM Alloc Failure", __func__);
15464 VOS_ASSERT(0);
15465 vos_mem_free(txFailMonitorInd);
15466 return VOS_STATUS_E_NOMEM;
15467 }
15468
15469 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15470
15471 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15472 wdiTXFailMonitorInd->pUserData = pWDA;
15473
15474 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15475
15476 if (WDI_STATUS_PENDING == status)
15477 {
15478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15479 "TX Fail Monitor Indication Pending");
15480 }
15481 else if (WDI_STATUS_SUCCESS_SYNC == status)
15482 {
15483 if (0 == txFailMonitorInd->tx_fail_count)
15484 pWDA->txFailIndCallback = NULL;
15485 else
15486 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15487 }
15488 else
15489 {
15490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15491 "TX Fail Monitor Indication Failed");
15492 }
15493
15494 vos_mem_free(wdiTXFailMonitorInd);
15495 vos_mem_free(txFailMonitorInd);
15496
15497 return CONVERT_WDI2VOS_STATUS(status) ;
15498}
15499#endif /* WLAN_FEATURE_RMC */
15500
Kapil Gupta04ab1992016-06-26 13:36:51 +053015501#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15502VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15503 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15504{
15505 WDI_Status status;
15506 tWDA_ReqParams *pWdaParams ;
15507 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15508 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15509 sizeof(WDI_PERRoamTriggerScanInfo));
15510
15511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15512 "------> %s " ,__func__);
15513
15514 if (NULL == pwdiPERRoamTriggerScanInfo)
15515 {
15516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15517 "%s: VOS MEM Alloc Failure", __func__);
15518 VOS_ASSERT(0);
15519 return VOS_STATUS_E_NOMEM;
15520 }
15521
15522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15523 if (NULL == pWdaParams)
15524 {
15525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15526 "%s: VOS MEM Alloc Failure", __func__);
15527 VOS_ASSERT(0);
15528 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15529 return VOS_STATUS_E_NOMEM;
15530 }
15531
15532 pwdiPERRoamTriggerScanInfo->roamScanReq =
15533 pPERRoamTriggerScanReqParams->start;
15534
15535 /* Store Params pass it to WDI */
15536 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15537 pWdaParams->pWdaContext = pWDA;
15538
15539 /* Store param pointer as passed in by caller */
15540 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15541 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15542 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15543 pWdaParams);
15544
15545 if(IS_WDI_STATUS_FAILURE(status))
15546 {
15547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15548 "Failure in Start Roam Candidate trigger Req WDI API" );
15549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15550 vos_mem_free(pWdaParams->wdaMsgParam);
15551 pWdaParams->wdaWdiApiMsgParam = NULL;
15552 pWdaParams->wdaMsgParam = NULL;
15553 }
15554 return CONVERT_WDI2VOS_STATUS(status) ;
15555}
15556#endif
15557
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015558/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015559 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15560 *
15561 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15562 *
15563 * PARAM:
15564 * pWDA: pointer to WDA context
15565 * pReq: pointer to stop batch scan request
15566 */
15567VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15568 tpSpoofMacAddrReqParams pReq)
15569{
15570 WDI_Status wdiStatus;
15571 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15572 tWDA_ReqParams *pWdaParams;
15573
15574 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15575 sizeof(WDI_SpoofMacAddrInfoType));
15576 if(NULL == WDI_SpoofMacAddrInfoParams) {
15577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15578 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15579 VOS_ASSERT(0);
15580 return VOS_STATUS_E_NOMEM;
15581 }
15582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15583 if(NULL == pWdaParams) {
15584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15585 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015586 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015587 VOS_ASSERT(0);
15588 return VOS_STATUS_E_NOMEM;
15589 }
15590
15591 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15592 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15593
15594 pWdaParams->pWdaContext = pWDA;
15595 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015596 pWdaParams->wdaMsgParam = (void *)pReq;
15597
15598 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15599 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15600
Siddharth Bhal171788a2014-09-29 21:02:40 +053015601 /* store Params pass it to WDI */
15602 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15603
15604 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015605 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15606 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015607
15608 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15609 {
15610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15611 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15613 vos_mem_free(pWdaParams->wdaMsgParam);
15614 vos_mem_free(pWdaParams);
15615 }
15616
15617 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15618}
15619
c_manjeecfd1efb2015-09-25 19:32:34 +053015620
15621/*
15622 * FUNCTION: WDA_FwrMemDumpRespCallback
15623 * recieves Mgmt Logging init response from FW
15624 */
15625 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15626 void* pUserData)
15627{
15628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15629 tAniFwrDumpReq *pFwrMemDumpReq;
15630 tAniFwrDumpRsp *pFwrMemDumpRsp;
15631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15632 "<------ %s " ,__func__);
15633
15634 if(NULL == pWdaParams)
15635 {
15636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15637 "%s: pWdaParams received NULL", __func__);
15638 VOS_ASSERT(0);
15639 return ;
15640 }
15641
15642 if(NULL == pWdaParams->wdaMsgParam)
15643 {
15644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15645 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15646 VOS_ASSERT(0);
15647 vos_mem_free(pWdaParams);
15648 return ;
15649 }
15650
15651 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15652 if(pFwrMemDumpRsp == NULL)
15653 {
15654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15655 "%s: pFwrMemDumpRsp is NULL", __func__);
15656 VOS_ASSERT(0);
15657 vos_mem_free(pWdaParams);
15658 return ;
15659 }
15660
15661 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15662 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15663
15664 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15665 {
15666 pFwrMemDumpReq->fwMemDumpReqCallback(
15667 pFwrMemDumpReq->fwMemDumpReqContext,
15668 pFwrMemDumpRsp);
15669 }
15670 else
15671 {
15672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15673 "%s: FwrMemDump callback is NULL", __func__);
15674 }
15675
15676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15677 vos_mem_free(pWdaParams->wdaMsgParam);
15678 vos_mem_free(pWdaParams);
15679 vos_mem_free(pFwrMemDumpRsp);
15680
15681 return ;
15682}
15683
15684VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15685 tAniFwrDumpReq* pFwrMemDumpReq)
15686{
15687 VOS_STATUS status = VOS_STATUS_SUCCESS;
15688 WDI_Status wstatus;
15689 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15690 tWDA_ReqParams *pWdaParams ;
15691
15692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15693 "------> %s " ,__func__);
15694 /* Sanity Check*/
15695 if(NULL == pFwrMemDumpReq)
15696 {
15697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15698 "%s: pFwrMemDumpReq received NULL", __func__);
15699 VOS_ASSERT(0) ;
15700 return VOS_STATUS_E_FAULT;
15701 }
15702
15703 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15704 if(NULL == pWdiFwrMemDumpReq)
15705 {
15706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15707 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15708 VOS_ASSERT(0);
15709 return VOS_STATUS_E_NOMEM;
15710 }
15711
15712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15713 if(NULL == pWdaParams)
15714 {
15715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15716 "%s: pWdaParams Alloc Failure", __func__);
15717 VOS_ASSERT(0);
15718 vos_mem_free(pWdiFwrMemDumpReq);
15719 return VOS_STATUS_E_NOMEM;
15720 }
15721
15722 /* Store Params pass it to WDI */
15723 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15724 pWdaParams->pWdaContext = pWDA;
15725 /* Store param pointer as passed in by caller */
15726 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15727
15728 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15729 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15730 pWdaParams);
15731
15732 if(IS_WDI_STATUS_FAILURE(wstatus))
15733 {
15734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15735 FL("Fwr Mem Dump Req failed, free all the memory"));
15736 status = CONVERT_WDI2VOS_STATUS(wstatus);
15737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015738 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015739 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015740 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015741 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015742 }
15743
15744 return status;
15745
15746}
15747
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015748/**
15749 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15750 *
15751 * @pWDA: WDA Call back context
15752 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15753 * that holds allowed action frames bitmask
15754 *
15755 * This function sets the allowed action frames that the FW needs to
15756 * handover to host.The Action frames other than the requested ones
15757 * can be dropped in FW
15758 *
15759 * Return: VOS_STATUS enumeration
15760 */
15761VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15762 struct sir_allowed_action_frames *allowed_action_frames)
15763{
15764 WDI_Status status;
15765 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15767 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015768
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015769 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15770 vos_mem_malloc(sizeof
15771 (*wdi_allowed_action_frames));
15772 if (!wdi_allowed_action_frames) {
15773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15774 "%s: VOS MEM Alloc Failure", __func__);
15775 vos_mem_free(allowed_action_frames);
15776 return VOS_STATUS_E_NOMEM;
15777 }
15778
15779 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15780 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15781
15782 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15783 if (WDI_STATUS_PENDING == status) {
15784 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15785 FL("pending status received"));
15786 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15787 (WDI_STATUS_SUCCESS != status)) {
15788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15789 FL("Failure in allowed_action_frames API %d"), status);
15790 }
15791
15792 vos_mem_free(wdi_allowed_action_frames);
15793 vos_mem_free(allowed_action_frames);
15794 return CONVERT_WDI2VOS_STATUS(status) ;
15795}
c_manjeecfd1efb2015-09-25 19:32:34 +053015796
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015797#ifdef SAP_AUTH_OFFLOAD
15798VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15799 struct tSirSapOffloadInfo *sap_auth_offload_info)
15800{
15801 WDI_Status status = WDI_STATUS_SUCCESS;
15802 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15803 v_U16_t psk_len, psk_len_padded;
15804
15805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15806 "------> %s " ,__func__);
15807
15808 if(NULL == sap_auth_offload_info)
15809 {
15810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15811 "%s: sap_auth_offload_info received NULL", __func__);
15812 VOS_ASSERT(0) ;
15813 return VOS_STATUS_E_FAULT;
15814 }
15815 psk_len = sap_auth_offload_info->key_len;
15816 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15817
15818 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15819 vos_mem_malloc(sizeof
15820 (*sap_ofl_enable_cmd));
15821 if (!sap_ofl_enable_cmd) {
15822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15823 "%s: VOS MEM Alloc Failure", __func__);
15824 vos_mem_free(sap_auth_offload_info);
15825 return VOS_STATUS_E_NOMEM;
15826 }
15827 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15828 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15829 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15830
15831 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15832 sap_ofl_enable_cmd->psk_len = psk_len;
15833 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15834 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15835 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15836 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15837 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15838 break;
15839 case eSIR_OFFLOAD_NONE:
15840 default:
15841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15842 "Set SAP AP Auth offload with none support security type\n");
15843 break;
15844 }
15845 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15846
15847 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15848
15849 if (WDI_STATUS_PENDING == status) {
15850 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15851 FL("pending status received"));
15852 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15853 (WDI_STATUS_SUCCESS != status)) {
15854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15855 FL("Failure in process_sap_auth_offload API %d"), status);
15856 }
15857
15858 vos_mem_free(sap_ofl_enable_cmd);
15859 vos_mem_free(sap_auth_offload_info);
15860 return CONVERT_WDI2VOS_STATUS(status) ;
15861
15862}
15863#endif
15864
Siddharth Bhal171788a2014-09-29 21:02:40 +053015865/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015866 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15867 * Request to WDI.
15868 */
15869VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15870{
15871 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015872 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015873
15874 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15875
15876 staId = (v_U8_t)params;
15877
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015878 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15879 if ( NULL == pTLCb )
15880 {
15881 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15882 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15883 return VOS_STATUS_E_FAULT;
15884 }
15885
15886
15887 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015888 /* Pause TL for Sta ID */
15889 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15890}
15891
Anurag Chouhan83026002016-12-13 22:46:21 +053015892#ifdef DHCP_SERVER_OFFLOAD
15893/**
15894 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
15895 * @wda_handle: pointer to wda handle
15896 * @dhcp_server_offload_info: dhcp server offload info
15897 *
15898 * Return: status
15899 * 0 - success or else failure
15900 */
15901static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
15902 sir_dhcp_srv_offload_info_t
15903 *dhcp_server_offload_info)
15904{
15905 wdi_set_dhcp_server_offload_t *dhcp_info;
15906 tWDA_ReqParams *wda_params;
15907 WDI_Status wstatus;
15908 VOS_STATUS status = VOS_STATUS_SUCCESS;
15909
15910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15911 FL("---> %s"), __func__);
15912
15913 if(NULL == dhcp_server_offload_info)
15914 {
15915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15916 "%s: dhcp_server_offload_info received NULL",
15917 __func__);
15918 VOS_ASSERT(0) ;
15919 return VOS_STATUS_E_FAULT;
15920 }
15921
15922 dhcp_info = (wdi_set_dhcp_server_offload_t *)
15923 vos_mem_malloc(sizeof(*dhcp_info));
15924 if (!dhcp_info) {
15925 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15926 "Failed to allocate buffer to send "
15927 "set_dhcp_server_offload cmd");
15928 vos_mem_free(dhcp_server_offload_info);
15929 return VOS_STATUS_E_NOMEM;
15930 }
15931
15932 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
15933
15934 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15935 if(NULL == wda_params)
15936 {
15937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15938 "%s: VOS MEM Alloc Failure", __func__);
15939 VOS_ASSERT(0);
15940 vos_mem_free(dhcp_info);
15941 vos_mem_free(dhcp_server_offload_info);
15942 return VOS_STATUS_E_NOMEM;
15943 }
15944
15945 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
15946 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
15947 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
15948 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
15949 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
15950
15951 wda_params->pWdaContext = wda_handle;
15952 wda_params->wdaMsgParam = dhcp_server_offload_info;
15953 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
15954
15955 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
15956 (wdi_dhcp_srv_offload_rsp_cb)
15957 wda_dhcp_server_offload_rsp_callback,
15958 wda_params);
15959 if(IS_WDI_STATUS_FAILURE(wstatus))
15960 {
15961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15962 "Failed to send set_dhcp_server_offload cmd" );
15963 status = CONVERT_WDI2VOS_STATUS(wstatus);
15964 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
15965 vos_mem_free(wda_params->wdaMsgParam);
15966 vos_mem_free(wda_params);
15967 }
15968
15969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15970 "Set dhcp server offload");
15971 return status;
15972}
15973#endif /* DHCP_SERVER_OFFLOAD */
15974
Anurag Chouhan0b29de02016-12-16 13:18:40 +053015975#ifdef MDNS_OFFLOAD
15976/**
15977 * wda_set_mdns_offload_req() - wda api to set mdns offload
15978 * @wda_handle: wda handle
15979 * @mdns_offload_info: mdns offload info
15980 *
15981 * Return - 0 for success or else failure
15982 */
15983static int
15984wda_set_mdns_offload_req(tWDA_CbContext *wda_handle,
15985 sir_mdns_offload_info_t *mdns_offload_info)
15986{
15987 wdi_mdns_enable_offload_cmd_req *mdns_info;
15988 tWDA_ReqParams *wda_params;
15989 WDI_Status wstatus;
15990 VOS_STATUS status = VOS_STATUS_SUCCESS;
15991
15992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15993 FL("---> %s"), __func__);
15994
15995 if(NULL == mdns_offload_info)
15996 {
15997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15998 "%s: set_mdns_offload received NULL",
15999 __func__);
16000 VOS_ASSERT(0) ;
16001 return VOS_STATUS_E_FAULT;
16002 }
16003
16004 mdns_info = (wdi_mdns_enable_offload_cmd_req *)
16005 vos_mem_malloc(sizeof(*mdns_info));
16006 if (!mdns_info) {
16007 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16008 "Failed to allocate buffer to send "
16009 "set_mdns_offload cmd");
16010 vos_mem_free(mdns_offload_info);
16011 return VOS_STATUS_E_NOMEM;
16012 }
16013
16014 vos_mem_zero(mdns_info, sizeof(*mdns_info));
16015
16016 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16017 if(NULL == wda_params)
16018 {
16019 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16020 "%s: VOS MEM Alloc Failure", __func__);
16021 VOS_ASSERT(0);
16022 vos_mem_free(mdns_info);
16023 vos_mem_free(mdns_offload_info);
16024 return VOS_STATUS_E_NOMEM;
16025 }
16026
16027 mdns_info->bss_idx = mdns_offload_info->bss_idx;
16028 mdns_info->enable = mdns_offload_info->enable;
16029
16030 wda_params->pWdaContext = wda_handle;
16031 wda_params->wdaMsgParam = mdns_offload_info;
16032 wda_params->wdaWdiApiMsgParam = (void *)mdns_info;
16033
16034 wstatus = wdi_set_mdns_offload_req(mdns_info,
16035 (wdi_mdns_enable_rsp_cb)
16036 wda_mdns_enable_rsp_callback,
16037 wda_params);
16038 if(IS_WDI_STATUS_FAILURE(wstatus))
16039 {
16040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16041 "Failed to send wdi_set_mdns_offload_req cmd" );
16042 status = CONVERT_WDI2VOS_STATUS(wstatus);
16043 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16044 vos_mem_free(wda_params->wdaMsgParam);
16045 vos_mem_free(wda_params);
16046 }
16047
16048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16049 "mdns enabled!");
16050 return status;
16051
16052}
16053
16054/**
16055 * wda_set_mdns_fqdn_req() - wda api to set mdns fqdn offload
16056 * @wda_handle: wda handle
16057 * @mdns_fqdn_info: mdns fqdn offload info
16058 *
16059 * Return - 0 for success or else failure
16060 */
16061static int
16062wda_set_mdns_fqdn_req(tWDA_CbContext *wda_handle,
16063 sir_mdns_fqdn_info_t *mdns_fqdn_info)
16064{
16065 wdi_mdns_set_fqdn_cmd_req *fqdn_info;
16066 tWDA_ReqParams *wda_params;
16067 WDI_Status wstatus;
16068 VOS_STATUS status = VOS_STATUS_SUCCESS;
16069
16070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16071 FL("---> %s"), __func__);
16072
16073 if(NULL == mdns_fqdn_info)
16074 {
16075 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16076 "%s: set_mdns_fqdn received NULL",
16077 __func__);
16078 VOS_ASSERT(0) ;
16079 return VOS_STATUS_E_FAULT;
16080 }
16081
16082 fqdn_info = (wdi_mdns_set_fqdn_cmd_req *)
16083 vos_mem_malloc(sizeof(*fqdn_info));
16084 if (!fqdn_info) {
16085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16086 "Failed to allocate buffer to send "
16087 "set_mdns_fqdn cmd");
16088 vos_mem_free(mdns_fqdn_info);
16089 return VOS_STATUS_E_NOMEM;
16090 }
16091
16092 vos_mem_zero(fqdn_info, sizeof(*fqdn_info));
16093
16094 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16095 if(NULL == wda_params)
16096 {
16097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16098 "%s: VOS MEM Alloc Failure", __func__);
16099 VOS_ASSERT(0);
16100 vos_mem_free(fqdn_info);
16101 vos_mem_free(mdns_fqdn_info);
16102 return VOS_STATUS_E_NOMEM;
16103 }
16104
16105 fqdn_info->bss_idx = mdns_fqdn_info->bss_idx;
16106 fqdn_info->type = mdns_fqdn_info->fqdn_type;
16107 fqdn_info->fqdn_len = mdns_fqdn_info->fqdn_len;
16108 vos_mem_copy(fqdn_info->fqdn_data, mdns_fqdn_info->fqdn_data,
16109 mdns_fqdn_info->fqdn_len);
16110 fqdn_info->fqdn_data[mdns_fqdn_info->fqdn_len] = '\0';
16111
16112 wda_params->pWdaContext = wda_handle;
16113 wda_params->wdaMsgParam = mdns_fqdn_info;
16114 wda_params->wdaWdiApiMsgParam = (void *)fqdn_info;
16115
16116 wstatus = wdi_set_mdns_fqdn_req(fqdn_info,
16117 (wdi_mdns_fqdn_rsp_cb)
16118 wda_mdns_fqdn_rsp_callback,
16119 wda_params);
16120 if(IS_WDI_STATUS_FAILURE(wstatus))
16121 {
16122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16123 "Failed to send wdi_set_mdns_fqdn_req cmd" );
16124 status = CONVERT_WDI2VOS_STATUS(wstatus);
16125 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16126 vos_mem_free(wda_params->wdaMsgParam);
16127 vos_mem_free(wda_params);
16128 }
16129
16130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16131 "mDNS FQDN set");
16132 return status;
16133}
16134
16135/**
16136 * wda_set_mdns_response_req() - wda api to set mdns resp offload
16137 * @wda_handle: wda handle
16138 * @mdns_rsp_info: mdns resp offload info
16139 *
16140 * Return - 0 for success or else failure
16141 */
16142static int
16143wda_set_mdns_response_req(tWDA_CbContext *wda_handle,
16144 sir_mdns_resp_info_t *mdns_rsp_info)
16145{
16146 wdi_mdns_set_resp_req *rsp_info;
16147 tWDA_ReqParams *wda_params;
16148 WDI_Status wstatus;
16149 VOS_STATUS status = VOS_STATUS_SUCCESS;
16150
16151 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16152 FL("---> %s"), __func__);
16153
16154 if(NULL == mdns_rsp_info)
16155 {
16156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16157 "%s: dhcp_server_offload_info received NULL",
16158 __func__);
16159 VOS_ASSERT(0) ;
16160 return VOS_STATUS_E_FAULT;
16161 }
16162
16163 rsp_info = (wdi_mdns_set_resp_req *)
16164 vos_mem_malloc(sizeof(*rsp_info));
16165 if (!rsp_info) {
16166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16167 "Failed to allocate buffer to send "
16168 "wdi_set_mdns_response_req cmd");
16169 vos_mem_free(mdns_rsp_info);
16170 return VOS_STATUS_E_NOMEM;
16171 }
16172
16173 vos_mem_zero(rsp_info, sizeof(*rsp_info));
16174
16175 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16176 if(NULL == wda_params)
16177 {
16178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16179 "%s: VOS MEM Alloc Failure", __func__);
16180 VOS_ASSERT(0);
16181 vos_mem_free(rsp_info);
16182 vos_mem_free(mdns_rsp_info);
16183 return VOS_STATUS_E_NOMEM;
16184 }
16185
16186 rsp_info->bss_idx = mdns_rsp_info->bss_idx;
16187 rsp_info->ar_count = mdns_rsp_info->resourceRecord_count;
16188 rsp_info->resp_len = mdns_rsp_info->resp_len;
16189 vos_mem_copy(rsp_info->resp_data, mdns_rsp_info->resp_data,
16190 mdns_rsp_info->resp_len);
16191 rsp_info->resp_data[mdns_rsp_info->resp_len] = '\0';
16192
16193 wda_params->pWdaContext = wda_handle;
16194 wda_params->wdaMsgParam = mdns_rsp_info;
16195 wda_params->wdaWdiApiMsgParam = (void *)rsp_info;
16196
16197 wstatus = wdi_set_mdns_response_req(rsp_info,
16198 (wdi_mdns_resp_rsp_cb)
16199 wda_mdns_resp_rsp_callback,
16200 wda_params);
16201 if(IS_WDI_STATUS_FAILURE(wstatus))
16202 {
16203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16204 "Failed to send wdi_set_mdns_response_req cmd" );
16205 status = CONVERT_WDI2VOS_STATUS(wstatus);
16206 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16207 vos_mem_free(wda_params->wdaMsgParam);
16208 vos_mem_free(wda_params);
16209 }
16210
16211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16212 "mDNS Response set!");
16213 return status;
16214}
16215
16216/**
16217 * wda_get_mdns_stats_req() - wda api to get mdns stats
16218 * @wda_handle: wda handle
16219 * @mdns_info: mdns info
16220 *
16221 * Return - 0 for success or else failure
16222 */
16223static int
16224wda_get_mdns_stats_req(tWDA_CbContext *wda_handle,
16225 sir_get_mdns_stats_info_t *mdns_info)
16226{
16227 wdi_mdns_get_stats_req *status_info;
16228 tWDA_ReqParams *wda_params;
16229 WDI_Status wstatus;
16230
16231 VOS_STATUS status = VOS_STATUS_SUCCESS;
16232
16233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16234 FL("---> %s"), __func__);
16235
16236 if(NULL == mdns_info)
16237 {
16238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16239 "%s: dhcp_server_offload_info received NULL",
16240 __func__);
16241 VOS_ASSERT(0) ;
16242 return VOS_STATUS_E_FAULT;
16243 }
16244
16245 status_info = (wdi_mdns_get_stats_req *)
16246 vos_mem_malloc(sizeof(*status_info));
16247 if (!status_info) {
16248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16249 "Failed to allocate buffer to send "
16250 "wdi_set_mdns_response_req cmd");
16251 vos_mem_free(mdns_info);
16252 return VOS_STATUS_E_NOMEM;
16253 }
16254
16255 vos_mem_zero(status_info, sizeof(*status_info));
16256
16257 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16258 if(NULL == wda_params)
16259 {
16260 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16261 "%s: VOS MEM Alloc Failure", __func__);
16262 VOS_ASSERT(0);
16263 vos_mem_free(status_info);
16264 vos_mem_free(mdns_info);
16265 return VOS_STATUS_E_NOMEM;
16266 }
16267
16268 status_info->bss_idx = mdns_info->bss_idx;
16269
16270 wda_params->pWdaContext = wda_handle;
16271 wda_params->wdaMsgParam = mdns_info;
16272 wda_params->wdaWdiApiMsgParam = (void *)status_info;
16273
16274 wstatus = wdi_get_mdns_stats_req(status_info,
16275 (wdi_get_stats_rsp_cb)
16276 wda_get_stats_rsp_callback,
16277 wda_params);
16278 if(IS_WDI_STATUS_FAILURE(wstatus))
16279 {
16280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16281 "Failed to send wdi_set_mdns_response_req cmd" );
16282 status = CONVERT_WDI2VOS_STATUS(wstatus);
16283 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16284 vos_mem_free(wda_params->wdaMsgParam);
16285 vos_mem_free(wda_params);
16286 }
16287
16288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16289 "Get mDNS stats");
16290 return status;
16291}
16292#endif /* MDNS_OFFLOAD */
Anurag Chouhan83026002016-12-13 22:46:21 +053016293
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016294/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016295 * FUNCTION: WDA_McProcessMsg
16296 * Trigger DAL-AL to start CFG download
16297 */
16298VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
16299{
16300 VOS_STATUS status = VOS_STATUS_SUCCESS;
16301 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016302 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070016303 {
16304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016305 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016306 VOS_ASSERT(0);
16307 return VOS_STATUS_E_FAILURE;
16308 }
16309
16310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016311 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070016312
16313 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
16314 if(NULL == pWDA )
16315 {
16316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016317 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016318 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016319 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016320 return VOS_STATUS_E_FAILURE;
16321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 /* Process all the WDA messages.. */
16323 switch( pMsg->type )
16324 {
16325 case WNI_CFG_DNLD_REQ:
16326 {
16327 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070016328 /* call WDA complete event if config download success */
16329 if( VOS_IS_STATUS_SUCCESS(status) )
16330 {
16331 vos_WDAComplete_cback(pVosContext);
16332 }
16333 else
16334 {
16335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16336 "WDA Config Download failure" );
16337 }
16338 break ;
16339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016340 /*
16341 * Init SCAN request from PE, convert it into DAL format
16342 * and send it to DAL
16343 */
16344 case WDA_INIT_SCAN_REQ:
16345 {
16346 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
16347 break ;
16348 }
16349 /* start SCAN request from PE */
16350 case WDA_START_SCAN_REQ:
16351 {
16352 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
16353 break ;
16354 }
16355 /* end SCAN request from PE */
16356 case WDA_END_SCAN_REQ:
16357 {
16358 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
16359 break ;
16360 }
16361 /* end SCAN request from PE */
16362 case WDA_FINISH_SCAN_REQ:
16363 {
16364 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
16365 break ;
16366 }
16367 /* join request from PE */
16368 case WDA_CHNL_SWITCH_REQ:
16369 {
16370 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
16371 {
16372 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
16373 }
16374 else
16375 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080016376 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
16377 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
16378 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
16379 {
16380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16381 "call ProcessChannelSwitchReq_V1" );
16382 WDA_ProcessChannelSwitchReq_V1(pWDA,
16383 (tSwitchChannelParams*)pMsg->bodyptr) ;
16384 }
16385 else
16386 {
16387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16388 "call ProcessChannelSwitchReq" );
16389 WDA_ProcessChannelSwitchReq(pWDA,
16390 (tSwitchChannelParams*)pMsg->bodyptr) ;
16391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016392 }
16393 break ;
16394 }
16395 /* ADD BSS request from PE */
16396 case WDA_ADD_BSS_REQ:
16397 {
16398 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
16399 break ;
16400 }
16401 case WDA_ADD_STA_REQ:
16402 {
16403 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
16404 break ;
16405 }
16406 case WDA_DELETE_BSS_REQ:
16407 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016408 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
16409 break ;
16410 }
16411 case WDA_DELETE_STA_REQ:
16412 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016413 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
16414 break ;
16415 }
16416 case WDA_CONFIG_PARAM_UPDATE_REQ:
16417 {
16418 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
16419 break ;
16420 }
16421 case WDA_SET_BSSKEY_REQ:
16422 {
16423 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
16424 break ;
16425 }
16426 case WDA_SET_STAKEY_REQ:
16427 {
16428 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16429 break ;
16430 }
16431 case WDA_SET_STA_BCASTKEY_REQ:
16432 {
16433 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16434 break ;
16435 }
16436 case WDA_REMOVE_BSSKEY_REQ:
16437 {
16438 WDA_ProcessRemoveBssKeyReq(pWDA,
16439 (tRemoveBssKeyParams *)pMsg->bodyptr);
16440 break ;
16441 }
16442 case WDA_REMOVE_STAKEY_REQ:
16443 {
16444 WDA_ProcessRemoveStaKeyReq(pWDA,
16445 (tRemoveStaKeyParams *)pMsg->bodyptr);
16446 break ;
16447 }
16448 case WDA_REMOVE_STA_BCASTKEY_REQ:
16449 {
16450 /* TODO: currently UMAC is not sending this request, Add the code for
16451 handling this request when UMAC supports */
16452 break;
16453 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016454#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070016455 case WDA_TSM_STATS_REQ:
16456 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070016457 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016458 break;
16459 }
16460#endif
16461 case WDA_UPDATE_EDCA_PROFILE_IND:
16462 {
16463 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
16464 break;
16465 }
16466 case WDA_ADD_TS_REQ:
16467 {
16468 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
16469 break;
16470 }
16471 case WDA_DEL_TS_REQ:
16472 {
16473 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
16474 break;
16475 }
16476 case WDA_ADDBA_REQ:
16477 {
16478 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
16479 break;
16480 }
16481 case WDA_DELBA_IND:
16482 {
16483 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
16484 break;
16485 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080016486 case WDA_UPDATE_CHAN_LIST_REQ:
16487 {
16488 WDA_ProcessUpdateChannelList(pWDA,
16489 (tSirUpdateChanList *)pMsg->bodyptr);
16490 break;
16491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016492 case WDA_SET_LINK_STATE:
16493 {
16494 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
16495 break;
16496 }
16497 case WDA_GET_STATISTICS_REQ:
16498 {
16499 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
16500 break;
16501 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016502#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080016503 case WDA_GET_ROAM_RSSI_REQ:
16504 {
16505 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
16506 break;
16507 }
16508#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016509 case WDA_PWR_SAVE_CFG:
16510 {
16511 if(pWDA->wdaState == WDA_READY_STATE)
16512 {
16513 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
16514 }
16515 else
16516 {
16517 if(NULL != pMsg->bodyptr)
16518 {
16519 vos_mem_free(pMsg->bodyptr);
16520 }
16521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16522 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
16523 }
16524 break;
16525 }
mukul sharma6b53e202016-11-23 19:29:18 +053016526 case WDA_UPDATE_CFG_INT_PARAM:
16527 {
16528 if(pWDA->wdaState == WDA_READY_STATE)
16529 {
16530 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
16531 vos_mem_free(pMsg->bodyptr);
16532 }
16533 else
16534 {
16535 if(NULL != pMsg->bodyptr)
16536 {
16537 vos_mem_free(pMsg->bodyptr);
16538 }
16539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16540 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
16541 pWDA->wdaState );
16542 }
16543 break;
16544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016545 case WDA_ENTER_IMPS_REQ:
16546 {
16547 if(pWDA->wdaState == WDA_READY_STATE)
16548 {
16549 WDA_ProcessEnterImpsReq(pWDA);
16550 }
16551 else
16552 {
16553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16554 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16555 }
16556 break;
16557 }
16558 case WDA_EXIT_IMPS_REQ:
16559 {
16560 if(pWDA->wdaState == WDA_READY_STATE)
16561 {
16562 WDA_ProcessExitImpsReq(pWDA);
16563 }
16564 else
16565 {
16566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16567 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16568 }
16569 break;
16570 }
16571 case WDA_ENTER_BMPS_REQ:
16572 {
16573 if(pWDA->wdaState == WDA_READY_STATE)
16574 {
16575 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
16576 }
16577 else
16578 {
16579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16580 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16581 }
16582 break;
16583 }
16584 case WDA_EXIT_BMPS_REQ:
16585 {
16586 if(pWDA->wdaState == WDA_READY_STATE)
16587 {
16588 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
16589 }
16590 else
16591 {
16592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16593 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16594 }
16595 break;
16596 }
16597 case WDA_ENTER_UAPSD_REQ:
16598 {
16599 if(pWDA->wdaState == WDA_READY_STATE)
16600 {
16601 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
16602 }
16603 else
16604 {
16605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16606 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16607 }
16608 break;
16609 }
16610 case WDA_EXIT_UAPSD_REQ:
16611 {
16612 if(pWDA->wdaState == WDA_READY_STATE)
16613 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016614 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016615 }
16616 else
16617 {
16618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16619 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16620 }
16621 break;
16622 }
16623 case WDA_UPDATE_UAPSD_IND:
16624 {
16625 if(pWDA->wdaState == WDA_READY_STATE)
16626 {
16627 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
16628 }
16629 else
16630 {
16631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16632 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
16633 }
16634 break;
16635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016636 case WDA_REGISTER_PE_CALLBACK :
16637 {
16638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16639 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
16640 /*TODO: store the PE callback */
16641 /* Do Nothing? MSG Body should be freed at here */
16642 if(NULL != pMsg->bodyptr)
16643 {
16644 vos_mem_free(pMsg->bodyptr);
16645 }
16646 break;
16647 }
16648 case WDA_SYS_READY_IND :
16649 {
16650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16651 "Handling msg type WDA_SYS_READY_IND " );
16652 pWDA->wdaState = WDA_READY_STATE;
16653 if(NULL != pMsg->bodyptr)
16654 {
16655 vos_mem_free(pMsg->bodyptr);
16656 }
16657 break;
16658 }
16659 case WDA_BEACON_FILTER_IND :
16660 {
16661 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
16662 break;
16663 }
16664 case WDA_BTC_SET_CFG:
16665 {
16666 /*TODO: handle this while dealing with BTC */
16667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16668 "Handling msg type WDA_BTC_SET_CFG " );
16669 /* Do Nothing? MSG Body should be freed at here */
16670 if(NULL != pMsg->bodyptr)
16671 {
16672 vos_mem_free(pMsg->bodyptr);
16673 }
16674 break;
16675 }
16676 case WDA_SIGNAL_BT_EVENT:
16677 {
16678 /*TODO: handle this while dealing with BTC */
16679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16680 "Handling msg type WDA_SIGNAL_BT_EVENT " );
16681 /* Do Nothing? MSG Body should be freed at here */
16682 if(NULL != pMsg->bodyptr)
16683 {
16684 vos_mem_free(pMsg->bodyptr);
16685 }
16686 break;
16687 }
16688 case WDA_CFG_RXP_FILTER_REQ:
16689 {
16690 WDA_ProcessConfigureRxpFilterReq(pWDA,
16691 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
16692 break;
16693 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016694 case WDA_MGMT_LOGGING_INIT_REQ:
16695 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053016696 WDA_ProcessFWLoggingInitReq(pWDA,
16697 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016698 break;
16699 }
Siddharth Bhal64246172015-02-27 01:04:37 +053016700 case WDA_GET_FRAME_LOG_REQ:
16701 {
16702 WDA_ProcessGetFrameLogReq(pWDA,
16703 (tAniGetFrameLogReq *)pMsg->bodyptr);
16704 break;
16705 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016706 case WDA_START_RSSI_MONITOR_REQ:
16707 {
16708 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16709 break;
16710 }
16711 case WDA_STOP_RSSI_MONITOR_REQ:
16712 {
16713 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16714 break;
16715 }
Karthick Sa35b0692015-08-21 15:57:05 +053016716 case WDA_SEND_LOG_DONE_IND:
16717 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053016718 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053016719 break;
16720 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053016721 case WDA_FATAL_EVENT_LOGS_REQ:
16722 {
16723 WDA_ProcessFatalEventLogsReq(pWDA,
16724 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
16725 break;
16726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016727 case WDA_SET_HOST_OFFLOAD:
16728 {
16729 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16730 break;
16731 }
16732 case WDA_SET_KEEP_ALIVE:
16733 {
16734 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
16735 break;
16736 }
16737#ifdef WLAN_NS_OFFLOAD
16738 case WDA_SET_NS_OFFLOAD:
16739 {
16740 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16741 break;
16742 }
16743#endif //WLAN_NS_OFFLOAD
16744 case WDA_ADD_STA_SELF_REQ:
16745 {
16746 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
16747 break;
16748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016749 case WDA_DEL_STA_SELF_REQ:
16750 {
16751 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
16752 break;
16753 }
16754 case WDA_WOWL_ADD_BCAST_PTRN:
16755 {
16756 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
16757 break;
16758 }
16759 case WDA_WOWL_DEL_BCAST_PTRN:
16760 {
16761 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
16762 break;
16763 }
16764 case WDA_WOWL_ENTER_REQ:
16765 {
16766 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
16767 break;
16768 }
16769 case WDA_WOWL_EXIT_REQ:
16770 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016771 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016772 break;
16773 }
16774 case WDA_TL_FLUSH_AC_REQ:
16775 {
16776 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
16777 break;
16778 }
16779 case WDA_SIGNAL_BTAMP_EVENT:
16780 {
16781 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
16782 break;
16783 }
Abhishek Singh85b74712014-10-08 11:38:19 +053016784 case WDA_FW_STATS_GET_REQ:
16785 {
16786 WDA_ProcessFWStatsGetReq(pWDA,
16787 (tSirFWStatsGetReq *)pMsg->bodyptr);
16788 break;
16789 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053016790#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16791 case WDA_LINK_LAYER_STATS_SET_REQ:
16792 {
16793 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
16794 break;
16795 }
16796 case WDA_LINK_LAYER_STATS_GET_REQ:
16797 {
16798 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
16799 break;
16800 }
16801 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
16802 {
16803 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
16804 break;
16805 }
16806#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053016807#ifdef WLAN_FEATURE_EXTSCAN
16808 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
16809 {
16810 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
16811 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
16812 break;
16813 }
16814 case WDA_EXTSCAN_START_REQ:
16815 {
16816 WDA_ProcessEXTScanStartReq(pWDA,
16817 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
16818 break;
16819 }
16820 case WDA_EXTSCAN_STOP_REQ:
16821 {
16822 WDA_ProcessEXTScanStopReq(pWDA,
16823 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
16824 break;
16825 }
16826 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
16827 {
16828 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
16829 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
16830 break;
16831 }
16832 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
16833 {
16834 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
16835 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
16836 break;
16837 }
16838 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
16839 {
16840 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
16841 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
16842 break;
16843 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016844 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
16845 {
16846 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
16847 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
16848 break;
16849 }
16850 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
16851 {
16852 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
16853 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
16854 break;
16855 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053016856 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
16857 {
16858 WDA_ProcessHighPriorityDataInfoInd(pWDA,
16859 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
16860 break;
16861 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016862#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070016863#ifdef WDA_UT
16864 case WDA_WDI_EVENT_MSG:
16865 {
16866 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
16867 break ;
16868 }
16869#endif
16870 case WDA_UPDATE_BEACON_IND:
16871 {
16872 WDA_ProcessUpdateBeaconParams(pWDA,
16873 (tUpdateBeaconParams *)pMsg->bodyptr);
16874 break;
16875 }
16876 case WDA_SEND_BEACON_REQ:
16877 {
16878 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
16879 break;
16880 }
16881 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
16882 {
16883 WDA_ProcessUpdateProbeRspTemplate(pWDA,
16884 (tSendProbeRespParams *)pMsg->bodyptr);
16885 break;
16886 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016887#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070016888 case WDA_SET_MAX_TX_POWER_REQ:
16889 {
16890 WDA_ProcessSetMaxTxPowerReq(pWDA,
16891 (tMaxTxPowerParams *)pMsg->bodyptr);
16892 break;
16893 }
16894#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070016895 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
16896 {
16897 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
16898 pMsg->bodyptr);
16899 break;
16900 }
schang86c22c42013-03-13 18:41:24 -070016901 case WDA_SET_TX_POWER_REQ:
16902 {
16903 WDA_ProcessSetTxPowerReq(pWDA,
16904 (tSirSetTxPowerReq *)pMsg->bodyptr);
16905 break;
16906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016907 case WDA_SET_P2P_GO_NOA_REQ:
16908 {
16909 WDA_ProcessSetP2PGONOAReq(pWDA,
16910 (tP2pPsParams *)pMsg->bodyptr);
16911 break;
16912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016913 /* timer related messages */
16914 case WDA_TIMER_BA_ACTIVITY_REQ:
16915 {
16916 WDA_BaCheckActivity(pWDA) ;
16917 break ;
16918 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016919
16920 /* timer related messages */
16921 case WDA_TIMER_TRAFFIC_STATS_IND:
16922 {
16923 WDA_TimerTrafficStatsInd(pWDA);
16924 break;
16925 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016926#ifdef WLAN_FEATURE_VOWIFI_11R
16927 case WDA_AGGR_QOS_REQ:
16928 {
16929 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
16930 break;
16931 }
16932#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070016933 case WDA_FTM_CMD_REQ:
16934 {
16935 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
16936 break ;
16937 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016938#ifdef FEATURE_OEM_DATA_SUPPORT
16939 case WDA_START_OEM_DATA_REQ:
16940 {
16941 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
16942 break;
16943 }
16944#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070016945 /* Tx Complete Time out Indication */
16946 case WDA_TX_COMPLETE_TIMEOUT_IND:
16947 {
16948 WDA_ProcessTxCompleteTimeOutInd(pWDA);
16949 break;
16950 }
16951 case WDA_WLAN_SUSPEND_IND:
16952 {
16953 WDA_ProcessWlanSuspendInd(pWDA,
16954 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
16955 break;
16956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016957 case WDA_WLAN_RESUME_REQ:
16958 {
16959 WDA_ProcessWlanResumeReq(pWDA,
16960 (tSirWlanResumeParam *)pMsg->bodyptr) ;
16961 break;
16962 }
16963
16964 case WDA_UPDATE_CF_IND:
16965 {
16966 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
16967 pMsg->bodyptr = NULL;
16968 break;
16969 }
16970#ifdef FEATURE_WLAN_SCAN_PNO
16971 case WDA_SET_PNO_REQ:
16972 {
16973 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
16974 break;
16975 }
16976 case WDA_UPDATE_SCAN_PARAMS_REQ:
16977 {
16978 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
16979 break;
16980 }
16981 case WDA_SET_RSSI_FILTER_REQ:
16982 {
16983 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
16984 break;
16985 }
16986#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016987#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016988 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016989 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016990 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016991 break;
16992 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053016993 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
16994 {
16995 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
16996 break;
16997 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016998#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 case WDA_SET_TX_PER_TRACKING_REQ:
17000 {
17001 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
17002 break;
17003 }
17004
17005#ifdef WLAN_FEATURE_PACKET_FILTERING
17006 case WDA_8023_MULTICAST_LIST_REQ:
17007 {
17008 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
17009 break;
17010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017011 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
17012 {
17013 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
17014 break;
17015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017016 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
17017 {
17018 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
17019 break;
17020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017021 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
17022 {
17023 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
17024 break;
17025 }
17026#endif // WLAN_FEATURE_PACKET_FILTERING
17027
17028
17029 case WDA_TRANSMISSION_CONTROL_IND:
17030 {
17031 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
17032 break;
17033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017034 case WDA_SET_POWER_PARAMS_REQ:
17035 {
17036 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
17037 break;
17038 }
c_manjeecfd1efb2015-09-25 19:32:34 +053017039 case WDA_FW_MEM_DUMP_REQ:
17040 {
17041 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
17042 break;
17043 }
17044
Jeff Johnson295189b2012-06-20 16:38:30 -070017045#ifdef WLAN_FEATURE_GTK_OFFLOAD
17046 case WDA_GTK_OFFLOAD_REQ:
17047 {
17048 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
17049 break;
17050 }
17051
17052 case WDA_GTK_OFFLOAD_GETINFO_REQ:
17053 {
17054 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
17055 break;
17056 }
17057#endif //WLAN_FEATURE_GTK_OFFLOAD
17058
17059 case WDA_SET_TM_LEVEL_REQ:
17060 {
17061 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
17062 break;
17063 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053017064
Mohit Khanna4a70d262012-09-11 16:30:12 -070017065 case WDA_UPDATE_OP_MODE:
17066 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053017067 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
17068 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
17069 {
17070 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17071 }
17072 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070017073 {
17074 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
17075 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17076 else
17077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017078 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017079 }
17080 else
17081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017082 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017083 break;
17084 }
Chet Lanctot186b5732013-03-18 10:26:30 -070017085#ifdef WLAN_FEATURE_11W
17086 case WDA_EXCLUDE_UNENCRYPTED_IND:
17087 {
17088 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
17089 break;
17090 }
17091#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017092#ifdef FEATURE_WLAN_TDLS
17093 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
17094 {
17095 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
17096 break;
17097 }
17098#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017099 case WDA_DHCP_START_IND:
17100 {
17101 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17102 break;
17103 }
17104 case WDA_DHCP_STOP_IND:
17105 {
17106 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17107 break;
17108 }
Leo Chang9056f462013-08-01 19:21:11 -070017109#ifdef FEATURE_WLAN_LPHB
17110 case WDA_LPHB_CONF_REQ:
17111 {
17112 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
17113 break;
17114 }
17115#endif
Yue Mab9c86f42013-08-14 15:59:08 -070017116 case WDA_ADD_PERIODIC_TX_PTRN_IND:
17117 {
17118 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
17119 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
17120 break;
17121 }
17122 case WDA_DEL_PERIODIC_TX_PTRN_IND:
17123 {
17124 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
17125 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
17126 break;
17127 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017128 case WDA_RATE_UPDATE_IND:
17129 {
17130 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
17131 break;
17132 }
17133#ifdef WLAN_FEATURE_RMC
17134 case WDA_RMC_RULER_REQ:
17135 {
17136 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
17137 break;
17138 }
17139 case WDA_RMC_UPDATE_IND:
17140 {
17141 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
17142 break;
17143 }
17144 case WDA_GET_IBSS_PEER_INFO_REQ:
17145 {
17146 WDA_ProcessIbssPeerInfoReq(pWDA,
17147 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
17148 break;
17149 }
17150 case WDA_TX_FAIL_MONITOR_IND:
17151 {
17152 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
17153 break;
17154 }
17155#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053017156#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17157 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
17158 {
17159 WDA_ProcessPERRoamScanTriggerReq(pWDA,
17160 (tPERRoamScanStart *)pMsg->bodyptr);
17161 break;
17162 }
17163#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053017164#ifdef FEATURE_WLAN_BATCH_SCAN
17165 case WDA_SET_BATCH_SCAN_REQ:
17166 {
17167 WDA_ProcessSetBatchScanReq(pWDA,
17168 (tSirSetBatchScanReq *)pMsg->bodyptr);
17169 break;
17170 }
17171 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
17172 {
17173 WDA_ProcessTriggerBatchScanResultInd(pWDA,
17174 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
17175 break;
17176 }
17177 case WDA_STOP_BATCH_SCAN_IND:
17178 {
17179 WDA_ProcessStopBatchScanInd(pWDA,
17180 (tSirStopBatchScanInd *)pMsg->bodyptr);
17181 break;
17182 }
c_hpothu92367912014-05-01 15:18:17 +053017183 case WDA_GET_BCN_MISS_RATE_REQ:
17184 WDA_ProcessGetBcnMissRateReq(pWDA,
17185 (tSirBcnMissRateReq *)pMsg->bodyptr);
17186 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053017187#endif
17188
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053017189 case WDA_HT40_OBSS_SCAN_IND:
17190 {
17191 WDA_ProcessHT40OBSSScanInd(pWDA,
17192 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
17193 break;
17194 }
17195 case WDA_HT40_OBSS_STOP_SCAN_IND:
17196 {
17197 WDA_ProcessHT40OBSSStopScanInd(pWDA,
17198 (tANI_U8*)pMsg->bodyptr);
17199 break;
17200 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053017201// tdlsoffchan
17202#ifdef FEATURE_WLAN_TDLS
17203 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
17204 {
17205 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
17206 break;
17207 }
17208#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053017209 case WDA_SPOOF_MAC_ADDR_REQ:
17210 {
17211 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
17212 break;
17213 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053017214 case WDA_ENCRYPT_MSG_REQ:
17215 {
17216 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
17217 break;
17218 }
Anurag Chouhan83026002016-12-13 22:46:21 +053017219#ifdef DHCP_SERVER_OFFLOAD
17220 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
17221 {
17222 wda_process_dhcpserver_offload_req(pWDA,
17223 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
17224 break;
17225 }
17226#endif /* DHCP_SERVER_OFFLOAD */
Anurag Chouhan0b29de02016-12-16 13:18:40 +053017227#ifdef MDNS_OFFLOAD
17228 case WDA_SET_MDNS_OFFLOAD_CMD:
17229 wda_set_mdns_offload_req(pWDA,
17230 (sir_mdns_offload_info_t *)pMsg->bodyptr);
17231 break;
17232 case WDA_SET_MDNS_FQDN_CMD:
17233 wda_set_mdns_fqdn_req(pWDA,
17234 (sir_mdns_fqdn_info_t *)pMsg->bodyptr);
17235 break;
17236 case WDA_SET_MDNS_RESPONSE_CMD:
17237 wda_set_mdns_response_req(pWDA,
17238 (sir_mdns_resp_info_t *)pMsg->bodyptr);
17239 break;
17240 case WDA_GET_MDNS_STATUS_CMD:
17241 wda_get_mdns_stats_req(pWDA,
17242 (sir_get_mdns_stats_info_t *) pMsg->bodyptr);
17243 break;
17244#endif /* MDNS_OFFLOAD */
Srinivas Dasari32a79262015-02-19 13:04:49 +053017245 case WDA_NAN_REQUEST:
17246 {
17247 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
17248 break;
17249 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053017250 case WDA_SET_RTS_CTS_HTVHT:
17251 {
17252 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
17253 break;
17254 }
Katya Nigamf0511f62015-05-05 16:40:57 +053017255
17256 case WDA_MON_START_REQ:
17257 {
17258 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
17259 break;
17260 }
17261 case WDA_MON_STOP_REQ:
17262 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053017263 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053017264 break;
17265 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053017266 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
17267 {
17268 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
17269 break;
17270 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053017271 case WDA_WIFI_CONFIG_REQ:
17272 {
17273 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
17274 break;
17275 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017276#ifdef FEATURE_OEM_DATA_SUPPORT
17277 case WDA_START_OEM_DATA_REQ_IND_NEW:
17278 {
17279 WDA_ProcessStartOemDataReqIndNew(pWDA,
17280 (tOemDataReqNewConfig *)pMsg->bodyptr);
17281 break;
17282 }
17283#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053017284 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
17285 {
17286 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
17287 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
17288 break;
17289 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053017290 case WDA_MODIFY_ROAM_PARAMS_IND:
17291 {
17292 WDA_ProcessBcnMissPenaltyCount(pWDA,
17293 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
17294 break;
17295 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053017296
17297 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
17298 wda_process_set_allowed_action_frames_ind(pWDA,
17299 (struct sir_allowed_action_frames*)pMsg->bodyptr);
17300 break;
17301
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053017302 case WDA_PAUSE_TL_IND:
17303 {
17304 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
17305 break;
17306 }
Kapil Gupta3d923fb2016-12-20 18:59:27 +053017307#ifdef WLAN_FEATURE_APFIND
17308 case WDA_APFIND_SET_CMD:
17309 {
17310 WDA_Process_apfind_set_cmd(pWDA,
17311 (struct hal_apfind_request *)pMsg->bodyptr);
17312 }
17313#endif
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017314#ifdef SAP_AUTH_OFFLOAD
17315 case WDA_SET_SAP_AUTH_OFL:
17316 {
17317 wda_process_sap_auth_offload(pWDA,
17318 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
17319 break;
17320 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053017321 case WDA_SAP_OFL_ADD_STA:
17322 {
17323 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
17324 (tAddStaParams *)pMsg->bodyptr);
17325 break;
17326 }
17327 case WDA_SAP_OFL_DEL_STA:
17328 {
17329 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
17330 (tDeleteStaParams *)pMsg->bodyptr);
17331 break;
17332 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017333#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017334 default:
17335 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053017336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017337 "No Handling for msg type %x in WDA "
17338 ,pMsg->type);
17339 /* Do Nothing? MSG Body should be freed at here */
17340 if(NULL != pMsg->bodyptr)
17341 {
17342 vos_mem_free(pMsg->bodyptr);
17343 }
17344 //WDA_VOS_ASSERT(0) ;
17345 }
17346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017347 return status ;
17348}
17349
Jeff Johnson295189b2012-06-20 16:38:30 -070017350/*
17351 * FUNCTION: WDA_LowLevelIndCallback
17352 * IND API callback from WDI, send Ind to PE
17353 */
17354void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
17355 void* pUserData )
17356{
17357 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
17358#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17359 tSirRSSINotification rssiNotification;
17360#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017361 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017362 {
17363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017364 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017365 VOS_ASSERT(0);
17366 return ;
17367 }
17368
17369 switch(wdiLowLevelInd->wdiIndicationType)
17370 {
17371 case WDI_RSSI_NOTIFICATION_IND:
17372 {
17373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17374 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017375#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17376 rssiNotification.bReserved =
17377 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
17378 rssiNotification.bRssiThres1NegCross =
17379 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
17380 rssiNotification.bRssiThres1PosCross =
17381 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
17382 rssiNotification.bRssiThres2NegCross =
17383 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
17384 rssiNotification.bRssiThres2PosCross =
17385 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
17386 rssiNotification.bRssiThres3NegCross =
17387 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
17388 rssiNotification.bRssiThres3PosCross =
17389 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080017390 rssiNotification.avgRssi = (v_S7_t)
17391 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070017392 WLANTL_BMPSRSSIRegionChangedNotification(
17393 pWDA->pVosContext,
17394 &rssiNotification);
17395#endif
17396 break ;
17397 }
17398 case WDI_MISSED_BEACON_IND:
17399 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017400 tpSirSmeMissedBeaconInd pMissBeacInd =
17401 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17403 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017404 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017405 if(NULL == pMissBeacInd)
17406 {
17407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17408 "%s: VOS MEM Alloc Failure", __func__);
17409 break;
17410 }
17411 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
17412 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
17413 pMissBeacInd->bssIdx =
17414 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
17415 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017416 break ;
17417 }
17418 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
17419 {
17420 /* TODO: Decode Ind and send Ind to PE */
17421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17422 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
17423 break ;
17424 }
17425
17426 case WDI_MIC_FAILURE_IND:
17427 {
17428 tpSirSmeMicFailureInd pMicInd =
17429 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
17430
17431 if(NULL == pMicInd)
17432 {
17433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017435 break;
17436 }
17437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17438 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017439 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
17440 pMicInd->length = sizeof(tSirSmeMicFailureInd);
17441 vos_mem_copy(pMicInd->bssId,
17442 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
17443 sizeof(tSirMacAddr));
17444 vos_mem_copy(pMicInd->info.srcMacAddr,
17445 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
17446 sizeof(tSirMacAddr));
17447 vos_mem_copy(pMicInd->info.taMacAddr,
17448 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
17449 sizeof(tSirMacAddr));
17450 vos_mem_copy(pMicInd->info.dstMacAddr,
17451 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
17452 sizeof(tSirMacAddr));
17453 vos_mem_copy(pMicInd->info.rxMacAddr,
17454 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
17455 sizeof(tSirMacAddr));
17456 pMicInd->info.multicast =
17457 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
17458 pMicInd->info.keyId=
17459 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
17460 pMicInd->info.IV1=
17461 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
17462 vos_mem_copy(pMicInd->info.TSC,
17463 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070017464 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
17465 (void *)pMicInd , 0) ;
17466 break ;
17467 }
17468 case WDI_FATAL_ERROR_IND:
17469 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070017470 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070017471 /* TODO: Decode Ind and send Ind to PE */
17472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17473 "Received WDI_FATAL_ERROR_IND from WDI ");
17474 break ;
17475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017476 case WDI_DEL_STA_IND:
17477 {
Jeff Johnson295189b2012-06-20 16:38:30 -070017478 tpDeleteStaContext pDelSTACtx =
17479 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
17480
17481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17482 "Received WDI_DEL_STA_IND from WDI ");
17483 if(NULL == pDelSTACtx)
17484 {
17485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017487 break;
17488 }
17489 vos_mem_copy(pDelSTACtx->addr2,
17490 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
17491 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017492 vos_mem_copy(pDelSTACtx->bssId,
17493 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
17494 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017495 pDelSTACtx->assocId =
17496 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
17497 pDelSTACtx->reasonCode =
17498 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
17499 pDelSTACtx->staId =
17500 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070017501 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
17502 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017503 break ;
17504 }
17505 case WDI_COEX_IND:
17506 {
17507 tANI_U32 index;
17508 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053017509 tSirSmeCoexInd *pSmeCoexInd;
17510
17511 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
17512 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
17513 {
17514 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
17515 {
17516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17517 FL("Coex state: 0x%x coex feature: 0x%x"),
17518 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
17519 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
17520
17521 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
17522 {
17523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
17524 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
17525 }
17526 }
17527 break;
17528 }
17529
17530 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017531 if(NULL == pSmeCoexInd)
17532 {
17533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017534 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017535 break;
17536 }
17537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17538 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017539 /* Message Header */
17540 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
17541 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017542 /* Info from WDI Indication */
17543 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
17544 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
17545 {
17546 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
17547 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017548 /* VOS message wrapper */
17549 vosMsg.type = eWNI_SME_COEX_IND;
17550 vosMsg.bodyptr = (void *)pSmeCoexInd;
17551 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017552 /* Send message to SME */
17553 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17554 {
17555 /* free the mem and return */
17556 vos_mem_free((v_VOID_t *)pSmeCoexInd);
17557 }
17558 else
17559 {
17560 /* DEBUG */
17561 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17562 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
17563 pSmeCoexInd->coexIndType,
17564 pSmeCoexInd->coexIndData[0],
17565 pSmeCoexInd->coexIndData[1],
17566 pSmeCoexInd->coexIndData[2],
17567 pSmeCoexInd->coexIndData[3]);
17568 }
17569 break;
17570 }
17571 case WDI_TX_COMPLETE_IND:
17572 {
17573 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
17574 /* Calling TxCompleteAck Indication from wda context*/
17575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17576 "Complete Indication received from HAL");
17577 if( pWDA->pAckTxCbFunc )
17578 {
17579 if( VOS_STATUS_SUCCESS !=
17580 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
17581 {
17582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17583 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017584 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053017585 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017586 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
17587 else
17588 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017589 pWDA->pAckTxCbFunc = NULL;
17590 }
17591 else
17592 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053017593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017594 "Tx Complete Indication is received after timeout ");
17595 }
17596 break;
17597 }
Viral Modid86bde22012-12-10 13:09:21 -080017598 case WDI_P2P_NOA_START_IND :
17599 {
17600 tSirP2PNoaStart *pP2pNoaStart =
17601 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
17602
17603 if (NULL == pP2pNoaStart)
17604 {
17605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17606 "Memory allocation failure, "
17607 "WDI_P2P_NOA_START_IND not forwarded");
17608 break;
17609 }
17610 pP2pNoaStart->status =
17611 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
17612 pP2pNoaStart->bssIdx =
17613 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
17614 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
17615 (void *)pP2pNoaStart , 0) ;
17616 break;
17617 }
17618
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017619#ifdef FEATURE_WLAN_TDLS
17620 case WDI_TDLS_IND :
17621 {
17622 tSirTdlsInd *pTdlsInd =
17623 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
17624
17625 if (NULL == pTdlsInd)
17626 {
17627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17628 "Memory allocation failure, "
17629 "WDI_TDLS_IND not forwarded");
17630 break;
17631 }
17632 pTdlsInd->status =
17633 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
17634 pTdlsInd->assocId =
17635 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
17636 pTdlsInd->staIdx =
17637 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
17638 pTdlsInd->reasonCode =
17639 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
17640 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
17641 (void *)pTdlsInd , 0) ;
17642 break;
17643 }
17644#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017645 case WDI_P2P_NOA_ATTR_IND :
17646 {
17647 tSirP2PNoaAttr *pP2pNoaAttr =
17648 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17650 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017651 if (NULL == pP2pNoaAttr)
17652 {
17653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17654 "Memory allocation failure, "
17655 "WDI_P2P_NOA_ATTR_IND not forwarded");
17656 break;
17657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017658 pP2pNoaAttr->index =
17659 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
17660 pP2pNoaAttr->oppPsFlag =
17661 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
17662 pP2pNoaAttr->ctWin =
17663 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
17664
17665 pP2pNoaAttr->uNoa1IntervalCnt =
17666 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
17667 pP2pNoaAttr->uNoa1Duration =
17668 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
17669 pP2pNoaAttr->uNoa1Interval =
17670 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
17671 pP2pNoaAttr->uNoa1StartTime =
17672 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017673 pP2pNoaAttr->uNoa2IntervalCnt =
17674 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
17675 pP2pNoaAttr->uNoa2Duration =
17676 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
17677 pP2pNoaAttr->uNoa2Interval =
17678 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
17679 pP2pNoaAttr->uNoa2StartTime =
17680 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017681 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
17682 (void *)pP2pNoaAttr , 0) ;
17683 break;
17684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017685#ifdef FEATURE_WLAN_SCAN_PNO
17686 case WDI_PREF_NETWORK_FOUND_IND:
17687 {
17688 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017689 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
17690 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17691 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
17692 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
17693
Jeff Johnson295189b2012-06-20 16:38:30 -070017694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17695 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017696 if (NULL == pPrefNetworkFoundInd)
17697 {
17698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17699 "Memory allocation failure, "
17700 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053017701 if (NULL !=
17702 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17703 {
17704 wpalMemoryFree(
17705 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
17706 );
17707 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017709 break;
17710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017711 /* Message Header */
17712 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017713 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070017714
17715 /* Info from WDI Indication */
17716 pPrefNetworkFoundInd->ssId.length =
17717 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070017718 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017719 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
17720 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
17721 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070017722 if (NULL !=
17723 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17724 {
17725 pPrefNetworkFoundInd->frameLength =
17726 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17727 vos_mem_copy( pPrefNetworkFoundInd->data,
17728 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
17729 pPrefNetworkFoundInd->frameLength);
17730 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
17731 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17732 }
17733 else
17734 {
17735 pPrefNetworkFoundInd->frameLength = 0;
17736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070017738 /* VOS message wrapper */
17739 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
17740 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
17741 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017742 /* Send message to SME */
17743 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17744 {
17745 /* free the mem and return */
17746 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
17747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017748 break;
17749 }
17750#endif // FEATURE_WLAN_SCAN_PNO
17751
17752#ifdef WLAN_WAKEUP_EVENTS
17753 case WDI_WAKE_REASON_IND:
17754 {
17755 vos_msg_t vosMsg;
17756 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
17757 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
17758 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
17759
17760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053017761 "[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 -070017762 wdiLowLevelInd->wdiIndicationType,
17763 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
17764 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
17765 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17766
17767 if (NULL == pWakeReasonInd)
17768 {
17769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17770 "Memory allocation failure, "
17771 "WDI_WAKE_REASON_IND not forwarded");
17772 break;
17773 }
17774
17775 vos_mem_zero(pWakeReasonInd, allocSize);
17776
17777 /* Message Header */
17778 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
17779 pWakeReasonInd->mesgLen = allocSize;
17780
17781 /* Info from WDI Indication */
17782 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
17783 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
17784 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
17785 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
17786 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
17787 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
17788 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
17789 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17790
17791 /* VOS message wrapper */
17792 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
17793 vosMsg.bodyptr = (void *) pWakeReasonInd;
17794 vosMsg.bodyval = 0;
17795
17796 /* Send message to SME */
17797 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17798 {
17799 /* free the mem and return */
17800 vos_mem_free((v_VOID_t *) pWakeReasonInd);
17801 }
17802
17803 break;
17804 }
17805#endif // WLAN_WAKEUP_EVENTS
17806
17807 case WDI_TX_PER_HIT_IND:
17808 {
17809 vos_msg_t vosMsg;
17810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
17811 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
17812 /* VOS message wrapper */
17813 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
17814 vosMsg.bodyptr = NULL;
17815 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017816 /* Send message to SME */
17817 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17818 {
17819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
17820 }
17821 break;
17822 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017823#ifdef WLAN_FEATURE_RMC
17824 case WDI_TX_FAIL_IND:
17825 {
17826 if (pWDA->txFailIndCallback)
17827 {
17828 pWDA->txFailIndCallback(
17829 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
17830 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
17831 }
17832 break;
17833 }
17834#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070017835
Leo Chang9056f462013-08-01 19:21:11 -070017836#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070017837 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070017838 {
Leo Changd9df8aa2013-09-26 13:32:26 -070017839 vos_msg_t vosMsg;
17840 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017841
Leo Changd9df8aa2013-09-26 13:32:26 -070017842 lphbInd =
17843 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
17844 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070017845 {
17846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17847 "%s: LPHB IND buffer alloc Fail", __func__);
17848 return ;
17849 }
17850
Leo Changd9df8aa2013-09-26 13:32:26 -070017851 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070017852 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070017853 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070017854 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070017855 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070017856 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
17857
17858 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070017859 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070017860 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
17861
Leo Changd9df8aa2013-09-26 13:32:26 -070017862 vosMsg.type = eWNI_SME_LPHB_IND;
17863 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017864 vosMsg.bodyval = 0;
17865 /* Send message to SME */
17866 if (VOS_STATUS_SUCCESS !=
17867 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17868 {
17869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17870 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070017871 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070017872 }
17873 break;
17874 }
17875#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070017876 case WDI_PERIODIC_TX_PTRN_FW_IND:
17877 {
17878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17879 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
17880 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
17881 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
17882 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
17883 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
17884 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
17885
17886 break;
17887 }
Leo Chang9056f462013-08-01 19:21:11 -070017888
Ravi Joshid2ca7c42013-07-23 08:37:49 -070017889 case WDI_IBSS_PEER_INACTIVITY_IND:
17890 {
17891 tSirIbssPeerInactivityInd *pIbssInd =
17892 (tSirIbssPeerInactivityInd *)
17893 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
17894
17895 if (NULL == pIbssInd)
17896 {
17897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17898 "Memory allocation failure, "
17899 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
17900 break;
17901 }
17902
17903 pIbssInd->bssIdx =
17904 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
17905 pIbssInd->staIdx =
17906 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
17907 vos_mem_copy(pIbssInd->peerAddr,
17908 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
17909 sizeof(tSirMacAddr));
17910 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
17911 break;
17912 }
17913
Abhishek Singh00b71972016-01-07 10:51:04 +053017914#ifdef WLAN_FEATURE_RMC
17915 case WDI_RMC_RULER_PICK_NEW :
17916 {
17917 tSirRmcUpdateInd *pRmcUpdateInd =
17918 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
17919
17920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17921 "Received WDI_RMC_UPDATE_IND from WDI");
17922 if (NULL == pRmcUpdateInd)
17923 {
17924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17925 "Memory allocation failure, "
17926 "WDI_RMC_UPDATE_IND not forwarded");
17927 break;
17928 }
17929
17930 pRmcUpdateInd->indication =
17931 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
17932 pRmcUpdateInd->role =
17933 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
17934
17935 /* Copy the mcast transmitter which should be us */
17936 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
17937 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
17938 mcastTransmitter,
17939 sizeof(tSirMacAddr));
17940 /* Copy the mcast group address */
17941 vos_mem_copy(pRmcUpdateInd->mcastGroup,
17942 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
17943 sizeof(tSirMacAddr));
17944 vos_mem_copy(pRmcUpdateInd->mcastRuler,
17945 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
17946 sizeof(tSirMacAddr));
17947 vos_mem_copy(pRmcUpdateInd->ruler,
17948 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
17949 sizeof(pRmcUpdateInd->ruler));
17950
17951 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
17952 break;
17953 }
17954#endif /* WLAN_FEATURE_RMC */
17955
Rajeev79dbe4c2013-10-05 11:03:42 +053017956#ifdef FEATURE_WLAN_BATCH_SCAN
17957 case WDI_BATCH_SCAN_RESULT_IND:
17958 {
17959 void *pBatchScanResult;
17960 void *pCallbackContext;
17961 tpAniSirGlobal pMac;
17962
17963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17964 "Received WDI_BATCHSCAN_RESULT_IND from FW");
17965
17966 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053017967 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053017968 {
17969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17970 "%s:pWDA is NULL", __func__);
17971 VOS_ASSERT(0);
17972 return;
17973 }
17974
17975 pBatchScanResult =
17976 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
17977 if (NULL == pBatchScanResult)
17978 {
17979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17980 "%s:Batch scan result from FW is null can't invoke HDD callback",
17981 __func__);
17982 VOS_ASSERT(0);
17983 return;
17984 }
17985
17986 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17987 if (NULL == pMac)
17988 {
17989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17990 "%s:pMac is NULL", __func__);
17991 VOS_ASSERT(0);
17992 return;
17993 }
17994
17995 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
17996 /*call hdd callback with set batch scan response data*/
17997 if(pMac->pmc.batchScanResultCallback)
17998 {
17999 pMac->pmc.batchScanResultCallback(pCallbackContext,
18000 pBatchScanResult);
18001 }
18002 else
18003 {
18004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18005 "%s:HDD callback is null", __func__);
18006 VOS_ASSERT(0);
18007 }
18008 break;
18009 }
18010#endif
18011
Leo Chang0b0e45a2013-12-15 15:18:55 -080018012#ifdef FEATURE_WLAN_CH_AVOID
18013 case WDI_CH_AVOID_IND:
18014 {
18015 vos_msg_t vosMsg;
18016 tSirChAvoidIndType *chAvoidInd;
18017
18018 chAvoidInd =
18019 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
18020 if (NULL == chAvoidInd)
18021 {
18022 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18023 "%s: CH_AVOID IND buffer alloc Fail", __func__);
18024 return ;
18025 }
18026
18027 chAvoidInd->avoidRangeCount =
18028 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
18029 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
18030 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
18031 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
18032
18033 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18034 "%s : WDA CH avoid notification", __func__);
18035
18036 vosMsg.type = eWNI_SME_CH_AVOID_IND;
18037 vosMsg.bodyptr = chAvoidInd;
18038 vosMsg.bodyval = 0;
18039 /* Send message to SME */
18040 if (VOS_STATUS_SUCCESS !=
18041 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18042 {
18043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18044 "post eWNI_SME_CH_AVOID_IND to SME Failed");
18045 vos_mem_free(chAvoidInd);
18046 }
18047 break;
18048 }
18049#endif /* FEATURE_WLAN_CH_AVOID */
18050
Sunil Duttbd736ed2014-05-26 21:19:41 +053018051#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18052 case WDI_LL_STATS_RESULTS_IND:
18053 {
18054 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018055 tpAniSirGlobal pMac;
18056
18057 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18058 "Received WDI_LL_STATS_RESULTS_IND from FW");
18059
18060 /*sanity check*/
18061 if (NULL == pWDA)
18062 {
18063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18064 "%s:pWDA is NULL", __func__);
18065 VOS_ASSERT(0);
18066 return;
18067 }
18068
18069 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053018070 (void *)wdiLowLevelInd->
18071 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018072 if (NULL == pLinkLayerStatsInd)
18073 {
18074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18075 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
18076 __func__);
18077 VOS_ASSERT(0);
18078 return;
18079 }
18080
18081 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18082 if (NULL == pMac)
18083 {
18084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18085 "%s:pMac is NULL", __func__);
18086 VOS_ASSERT(0);
18087 return;
18088 }
18089
Dino Mycled3d50022014-07-07 12:58:25 +053018090 /* call hdd callback with Link Layer Statistics.
18091 * vdev_id/ifacId in link_stats_results will be
18092 * used to retrieve the correct HDD context
18093 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053018094 if (pMac->sme.pLinkLayerStatsIndCallback)
18095 {
Dino Mycled3d50022014-07-07 12:58:25 +053018096 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053018097 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053018098 pLinkLayerStatsInd,
18099 wdiLowLevelInd->
18100 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053018101 }
18102 else
18103 {
18104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18105 "%s:HDD callback is null", __func__);
18106 }
18107 break;
18108 }
18109#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
18110
Dino Mycle41bdc942014-06-10 11:30:24 +053018111#ifdef WLAN_FEATURE_EXTSCAN
18112 case WDI_EXTSCAN_PROGRESS_IND:
18113 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
18114 case WDI_EXTSCAN_SCAN_RESULT_IND:
18115 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018116 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053018117 {
18118 void *pEXTScanData;
18119 void *pCallbackContext;
18120 tpAniSirGlobal pMac;
18121 tANI_U16 indType;
18122
18123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18124 "Received WDI_EXTSCAN Indications from FW");
18125 /*sanity check*/
18126 if (NULL == pWDA)
18127 {
18128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18129 "%s:pWDA is NULL", __func__);
18130 VOS_ASSERT(0);
18131 return;
18132 }
18133 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
18134 {
18135 indType = WDA_EXTSCAN_PROGRESS_IND;
18136
18137 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18138 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
18139 }
18140 if (wdiLowLevelInd->wdiIndicationType ==
18141 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
18142 {
18143 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
18144
18145 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18146 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
18147 }
18148 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
18149 {
18150 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
18151
18152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18153 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
18154 }
18155 if (wdiLowLevelInd->wdiIndicationType ==
18156 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
18157 {
18158 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
18159
18160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18161 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
18162 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018163 if (wdiLowLevelInd->wdiIndicationType ==
18164 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
18165 {
18166 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
18167
18168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18169 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
18170 }
Dino Mycle41bdc942014-06-10 11:30:24 +053018171
18172 pEXTScanData =
18173 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
18174 if (NULL == pEXTScanData)
18175 {
18176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18177 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
18178 __func__);
18179 VOS_ASSERT(0);
18180 return;
18181 }
18182
18183 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18184 if (NULL == pMac)
18185 {
18186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18187 "%s:pMac is NULL", __func__);
18188 VOS_ASSERT(0);
18189 return;
18190 }
18191
18192 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18193
18194 if(pMac->sme.pEXTScanIndCb)
18195 {
18196 pMac->sme.pEXTScanIndCb(pCallbackContext,
18197 indType,
18198 pEXTScanData);
18199 }
18200 else
18201 {
18202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18203 "%s:HDD callback is null", __func__);
18204 }
18205 break;
18206 }
18207#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053018208 case WDI_DEL_BA_IND:
18209 {
18210 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053018211 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053018212
18213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18214 "Received WDI_DEL_BA_IND from WDI ");
18215 if(NULL == pDelBAInd)
18216 {
18217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18218 "%s: VOS MEM Alloc Failure", __func__);
18219 break;
18220 }
18221 vos_mem_copy(pDelBAInd->peerMacAddr,
18222 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
18223 sizeof(tSirMacAddr));
18224 vos_mem_copy(pDelBAInd->bssId,
18225 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
18226 sizeof(tSirMacAddr));
18227 pDelBAInd->staIdx =
18228 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
18229 pDelBAInd->baTID =
18230 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
18231 pDelBAInd->baDirection =
18232 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
18233 pDelBAInd->reasonCode =
18234 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
18235
18236 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
18237 (void *)pDelBAInd , 0) ;
18238 break;
18239 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053018240 case WDI_NAN_EVENT_IND:
18241 {
18242 vos_msg_t vosMsg;
18243 tpSirNanEvent pSirNanEvent = NULL;
18244
18245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18246 "Received WDI_NAN_EVENT");
18247
18248 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
18249 - sizeof( pSirNanEvent->event_data)
18250 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18251
18252 if (NULL == pSirNanEvent)
18253 {
18254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18255 "%s: VOS MEM Alloc Failure", __func__);
18256 VOS_ASSERT(0) ;
18257 break;
18258 }
18259
18260 pSirNanEvent->event_data_len =
18261 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
18262
18263 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
18264 {
18265 vos_mem_copy( pSirNanEvent->event_data,
18266 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
18267 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18268 }
18269
18270 /* VOS message wrapper */
18271 vosMsg.type = eWNI_SME_NAN_EVENT;
18272 vosMsg.bodyptr = pSirNanEvent;
18273 vosMsg.bodyval = 0;
18274
18275 /* Send message to SME */
18276 if (VOS_STATUS_SUCCESS
18277 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18278 {
18279 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18280 "post eWNI_SME_NAN_EVENT to SME Failed");
18281 vos_mem_free(pSirNanEvent);
18282 }
18283 break;
18284 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018285 case WDI_LOST_LINK_PARAMS_IND:
18286 {
18287 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
18288 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053018289
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018290 if (NULL == pLostLinkParamInd)
18291 {
18292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18293 "%s: VOS MEM Alloc Failure", __func__);
18294 break;
18295 }
18296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18297 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
18298
18299 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
18300 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
18301 pLostLinkParamInd->info.bssIdx =
18302 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
18303 pLostLinkParamInd->info.rssi =
18304 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
18305 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
18306 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
18307 sizeof(tSirMacAddr));
18308 pLostLinkParamInd->info.linkFlCnt =
18309 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
18310 pLostLinkParamInd->info.linkFlTx =
18311 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
18312 pLostLinkParamInd->info.lastDataRate =
18313 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
18314 pLostLinkParamInd->info.rsvd1 =
18315 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
18316 pLostLinkParamInd->info.rsvd2 =
18317 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
18318 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
18319 (void *)pLostLinkParamInd , 0) ;
18320 break;
18321 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053018322 case WDI_RSSI_BREACHED_IND:
18323 {
18324 WDI_RssiBreachedIndType *pRssiBreachedInd;
18325 tpAniSirGlobal pMac;
18326
18327 pRssiBreachedInd =
18328 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
18329 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18330 "Received WDI_RSSI_BREACHED_IND from FW");
18331
18332 vos_mem_copy(pRssiBreachedInd,
18333 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
18334 sizeof(WDI_RssiBreachedIndType));
18335
18336 /*sanity check*/
18337 if (NULL == pWDA)
18338 {
18339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18340 "%s:pWDA is NULL", __func__);
18341 vos_mem_free(pRssiBreachedInd);
18342 VOS_ASSERT(0);
18343 return;
18344 }
18345
18346 if (NULL == pRssiBreachedInd)
18347 {
18348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18349 "%s:Breach indication from FW is null can't invoke HDD callback",
18350 __func__);
18351 VOS_ASSERT(0);
18352 return;
18353 }
18354
18355 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18356 if (NULL == pMac)
18357 {
18358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18359 "%s:pMac is NULL", __func__);
18360 VOS_ASSERT(0);
18361 vos_mem_free(pRssiBreachedInd);
18362 return;
18363 }
18364
18365 if (pMac->sme.rssiThresholdBreachedCb)
18366 {
18367 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
18368 }
18369 else
18370 {
18371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18372 "%s:HDD callback is null", __func__);
18373 }
18374 vos_mem_free(pRssiBreachedInd);
18375 break;
18376 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018377#ifdef FEATURE_OEM_DATA_SUPPORT
18378 case WDI_START_OEM_DATA_RSP_IND_NEW:
18379 {
18380 void *pCallbackContext;
18381 tpAniSirGlobal pMac;
18382 tANI_U16 indType;
18383 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018384 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018385
18386 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18387 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
18388
18389 /*sanity check*/
18390 if (NULL == pWDA)
18391 {
18392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18393 "%s:pWDA is NULL", __func__);
18394 VOS_ASSERT(0);
18395 return;
18396 }
18397
18398 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
18399 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018400 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18401 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018402 if (NULL == pOemRspNewIndData)
18403 {
18404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18405 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
18406 __func__);
18407 VOS_ASSERT(0);
18408 return;
18409 }
18410
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018411 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18412 OemRspNewLen;
18413
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018414 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18415 if (NULL == pMac)
18416 {
18417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18418 "%s:pMac is NULL", __func__);
18419 VOS_ASSERT(0);
18420 return;
18421 }
18422
18423 pCallbackContext = pMac->sme.pOemDataCallbackContext;
18424
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18426 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
18427
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018428 if(pMac->sme.pOemDataIndCb)
18429 {
18430 pMac->sme.pOemDataIndCb(pCallbackContext,
18431 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018432 pOemRspNewIndData,
18433 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018434 }
18435 else
18436 {
18437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18438 "%s:HDD callback is null", __func__);
18439 }
18440 break;
18441 }
18442#endif /* FEATURE_OEM_DATA_SUPPORT */
18443
Jeff Johnson295189b2012-06-20 16:38:30 -070018444 default:
18445 {
18446 /* TODO error */
18447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18448 "Received UNKNOWN Indication from WDI ");
18449 }
18450 }
18451 return ;
18452}
18453
Jeff Johnson295189b2012-06-20 16:38:30 -070018454/*
18455 * BA related processing in WDA.
18456 */
Jeff Johnson295189b2012-06-20 16:38:30 -070018457void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
18458 void* pUserData)
18459{
18460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18461 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070018462 if(NULL == pWdaParams)
18463 {
18464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018465 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018466 VOS_ASSERT(0) ;
18467 return ;
18468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018469 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070018470 vos_mem_free(pWdaParams->wdaMsgParam) ;
18471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18472 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018475 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
18476 {
18477 tANI_U8 i = 0 ;
18478 tBaActivityInd *baActivityInd = NULL ;
18479 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
18480 tANI_U8 allocSize = sizeof(tBaActivityInd)
18481 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
18482 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
18483 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018484 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018485 if(NULL == baActivityInd)
18486 {
18487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018489 VOS_ASSERT(0) ;
18490 return;
18491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018492 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
18493 sizeof(tSirMacAddr)) ;
18494 baActivityInd->baCandidateCnt = baCandidateCount ;
18495
18496 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
18497 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
18498
18499 for(i = 0 ; i < baCandidateCount ; i++)
18500 {
18501 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018502 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
18503 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018504 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
18505 {
18506 baCandidate->baInfo[tid].fBaEnable =
18507 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
18508 baCandidate->baInfo[tid].startingSeqNum =
18509 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
18510 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018511 wdiBaCandidate++ ;
18512 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018514 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
18515 }
18516 else
18517 {
18518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18519 "BA Trigger RSP with Failure received ");
18520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018521 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018522}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018523
18524
18525/*
18526 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
18527 * during MCC
18528 */
18529void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
18530{
18531 wpt_uint32 enabled;
18532 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
18533 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
18534 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
18535
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018536 if (NULL == pMac )
18537 {
18538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18539 "%s: Invoked with invalid MAC context ", __func__ );
18540 VOS_ASSERT(0);
18541 return;
18542 }
18543
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018544 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18545 != eSIR_SUCCESS)
18546 {
18547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18548 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18549 return;
18550 }
18551
18552 if(!enabled)
18553 {
18554 return;
18555 }
18556
18557 if(NULL == pWDA)
18558 {
18559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18560 "%s:WDA context is NULL", __func__);
18561 VOS_ASSERT(0);
18562 return;
18563 }
18564
18565 if(activate)
18566 {
18567 if( VOS_STATUS_SUCCESS !=
18568 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18569 {
18570 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18571 "Traffic Stats Timer Start Failed ");
18572 return;
18573 }
18574 WDI_DS_ActivateTrafficStats();
18575 }
18576 else
18577 {
18578 WDI_DS_DeactivateTrafficStats();
18579 WDI_DS_ClearTrafficStats();
18580
18581 if( VOS_STATUS_SUCCESS !=
18582 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18583 {
18584 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18585 "Traffic Stats Timer Stop Failed ");
18586 return;
18587 }
18588 }
18589}
18590
18591/*
18592 * Traffic Stats Timer handler
18593 */
18594void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
18595{
18596 WDI_Status wdiStatus;
18597 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
18598 WDI_TrafficStatsIndType trafficStatsIndParams;
18599 wpt_uint32 length, enabled;
18600 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18601
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018602 if (NULL == pMac )
18603 {
18604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18605 "%s: Invoked with invalid MAC context ", __func__ );
18606 VOS_ASSERT(0);
18607 return;
18608 }
18609
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018610 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18611 != eSIR_SUCCESS)
18612 {
18613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18614 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18615 return;
18616 }
18617
18618 if(!enabled)
18619 {
18620 WDI_DS_DeactivateTrafficStats();
18621 return;
18622 }
18623
18624 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
18625
18626 if(pWdiTrafficStats != NULL)
18627 {
18628 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
18629 trafficStatsIndParams.length = length;
18630 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080018631 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018632 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
18633 trafficStatsIndParams.pUserData = pWDA;
18634
18635 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
18636
18637 if(WDI_STATUS_PENDING == wdiStatus)
18638 {
18639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18640 "Pending received for %s:%d ",__func__,__LINE__ );
18641 }
18642 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
18643 {
18644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18645 "Failure in %s:%d ",__func__,__LINE__ );
18646 }
18647
18648 WDI_DS_ClearTrafficStats();
18649 }
18650 else
18651 {
18652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18653 "pWdiTrafficStats is Null");
18654 }
18655
18656 if( VOS_STATUS_SUCCESS !=
18657 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18658 {
18659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18660 "Traffic Stats Timer Start Failed ");
18661 return;
18662 }
18663}
18664
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018665bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
18666{
18667 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
18668 return true;
18669 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
18670 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
18671 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
18672 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
18673 jiffies_to_msecs(jiffies)))
18674 {
18675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18676 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
18677 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
18678 return false;
18679 }
18680 return true;
18681}
18682
Jeff Johnson295189b2012-06-20 16:38:30 -070018683/*
18684 * BA Activity check timer handler
18685 */
18686void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
18687{
18688 tANI_U8 curSta = 0 ;
18689 tANI_U8 tid = 0 ;
18690 tANI_U8 size = 0 ;
18691 tANI_U8 baCandidateCount = 0 ;
18692 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018693 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070018694 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018695 tpAniSirGlobal pMac;
18696
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018697 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070018698 {
18699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018700 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018701 VOS_ASSERT(0);
18702 return ;
18703 }
18704 if(WDA_MAX_STA < pWDA->wdaMaxSta)
18705 {
18706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18707 "Inconsistent STA entries in WDA");
18708 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018709 }
18710 if(NULL == pWDA->pVosContext)
18711 {
18712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18713 "%s: pVosContext is NULL",__func__);
18714 VOS_ASSERT(0);
18715 return ;
18716 }
18717 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053018718 if(NULL == pMac)
18719 {
18720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18721 "%s: pMac is NULL",__func__);
18722 VOS_ASSERT(0);
18723 return ;
18724 }
18725
Abhishek Singh0644e482014-10-06 18:38:23 +053018726 if (wlan_cfgGetInt(pMac,
18727 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
18728 eSIR_SUCCESS)
18729 {
18730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18731 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
18732 val = 0;
18733 }
18734
Jeff Johnson295189b2012-06-20 16:38:30 -070018735 /* walk through all STA entries and find out TX packet count */
18736 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
18737 {
Abhishek Singh0644e482014-10-06 18:38:23 +053018738 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018739#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018740 // We can only do BA on "hard" STAs.
18741 if (!(IS_HWSTA_IDX(curSta)))
18742 {
18743 continue;
18744 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018745#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018746 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
18747 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018748 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018749 tANI_U32 txPktCount = 0 ;
18750 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018751 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018752 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
18753 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070018754 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
18755 curSta, tid, &txPktCount)))
18756 {
18757#if 0
18758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18759 "************* %d:%d, %d ",curSta, txPktCount,
18760 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
18761#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053018762 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
18763 (currentOperChan <= SIR_11B_CHANNEL_END)))
18764 {
18765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18766 "%s: BTC disabled aggregation - dont start "
18767 "TX ADDBA req",__func__);
18768 }
18769 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018770 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018771 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053018772 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
18773 pWDA->wdaGlobalSystemRole) && txPktCount )
18774 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
18775 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070018776 {
18777 /* get prepare for sending message to HAL */
18778 //baCandidate[baCandidateCount].staIdx = curSta ;
18779 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
18780 newBaCandidate = WDA_ENABLE_BA ;
18781 }
18782 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
18783 }
18784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018785 /* fill the entry for all the sta with given TID's */
18786 if(WDA_ENABLE_BA == newBaCandidate)
18787 {
18788 /* move to next BA candidate */
18789 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
18790 size += sizeof(WDI_TriggerBAReqCandidateType) ;
18791 baCandidateCount++ ;
18792 newBaCandidate = WDA_DISABLE_BA ;
18793 }
18794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018795 /* prepare and send message to hal */
18796 if( 0 < baCandidateCount)
18797 {
18798 WDI_Status status = WDI_STATUS_SUCCESS ;
18799 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
18800 tWDA_ReqParams *pWdaParams =
18801 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018802 if(NULL == pWdaParams)
18803 {
18804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018806 VOS_ASSERT(0) ;
18807 return;
18808 }
18809 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
18810 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
18811 if(NULL == wdiTriggerBaReq)
18812 {
18813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018815 VOS_ASSERT(0) ;
18816 vos_mem_free(pWdaParams);
18817 return;
18818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018819 do
18820 {
18821 WDI_TriggerBAReqinfoType *triggerBaInfo =
18822 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
18823 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
18824 /* TEMP_FIX: Need to see if WDI need check for assoc session for
18825 * for each request */
18826 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
18827 triggerBaInfo->ucBASessionID = 0;
18828 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
18829 } while(0) ;
18830 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
18831 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 pWdaParams->pWdaContext = pWDA;
18834 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
18835 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053018836 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070018837 WDA_TriggerBaReqCallback, pWdaParams) ;
18838 if(IS_WDI_STATUS_FAILURE(status))
18839 {
18840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18841 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
18842 vos_mem_free(pWdaParams->wdaMsgParam) ;
18843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18844 vos_mem_free(pWdaParams) ;
18845 }
18846 }
18847 else
18848 {
18849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18850 "There is no TID for initiating BA");
18851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018852 if( VOS_STATUS_SUCCESS !=
18853 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18854 {
18855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18856 "BA Activity Timer Stop Failed ");
18857 return ;
18858 }
18859 if( VOS_STATUS_SUCCESS !=
18860 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18861 {
18862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18863 "BA Activity Timer Start Failed ");
18864 return;
18865 }
18866 return ;
18867}
Jeff Johnson295189b2012-06-20 16:38:30 -070018868/*
18869 * WDA common routine to create timer used by WDA.
18870 */
18871static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
18872{
Jeff Johnson295189b2012-06-20 16:38:30 -070018873 VOS_STATUS status = VOS_STATUS_SUCCESS ;
18874 tANI_U32 val = 0 ;
18875 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18876
18877 if(NULL == pMac)
18878 {
18879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018880 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018881 VOS_ASSERT(0);
18882 return VOS_STATUS_E_FAILURE;
18883 }
18884 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
18885 != eSIR_SUCCESS)
18886 {
18887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18888 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
18889 return VOS_STATUS_E_FAILURE;
18890 }
18891 val = SYS_MS_TO_TICKS(val) ;
18892
18893 /* BA activity check timer */
18894 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
18895 "BA Activity Check timer", WDA_TimerHandler,
18896 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
18897 if(status != TX_SUCCESS)
18898 {
18899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18900 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018901 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018903 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018904 /* Tx Complete Timeout timer */
18905 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
18906 "Tx Complete Check timer", WDA_TimerHandler,
18907 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018908 if(status != TX_SUCCESS)
18909 {
18910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18911 "Unable to create Tx Complete Timeout timer");
18912 /* Destroy timer of BA activity check timer */
18913 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18914 if(status != TX_SUCCESS)
18915 {
18916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18917 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018918 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018919 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018920 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018921 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018922
18923 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
18924
18925 /* Traffic Stats timer */
18926 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
18927 "Traffic Stats timer", WDA_TimerHandler,
18928 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
18929 if(status != TX_SUCCESS)
18930 {
18931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18932 "Unable to create traffic stats timer");
18933 /* Destroy timer of BA activity check timer */
18934 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18935 if(status != TX_SUCCESS)
18936 {
18937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18938 "Unable to Destroy BA activity timer");
18939 }
18940 /* Destroy timer of tx complete timer */
18941 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18942 if(status != TX_SUCCESS)
18943 {
18944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18945 "Unable to Tx complete timer");
18946 }
18947 return VOS_STATUS_E_FAILURE ;
18948 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018949 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018950}
Jeff Johnson295189b2012-06-20 16:38:30 -070018951/*
18952 * WDA common routine to destroy timer used by WDA.
18953 */
18954static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
18955{
18956 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018957 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18958 if(status != TX_SUCCESS)
18959 {
18960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18961 "Unable to Destroy Tx Complete Timeout timer");
18962 return eSIR_FAILURE ;
18963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018964 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18965 if(status != TX_SUCCESS)
18966 {
18967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18968 "Unable to Destroy BA activity timer");
18969 return eSIR_FAILURE ;
18970 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018971 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
18972 if(status != TX_SUCCESS)
18973 {
18974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18975 "Unable to Destroy traffic stats timer");
18976 return eSIR_FAILURE ;
18977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018978 return eSIR_SUCCESS ;
18979}
Jeff Johnson295189b2012-06-20 16:38:30 -070018980/*
18981 * WDA timer handler.
18982 */
18983void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
18984{
18985 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
18986 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018987 /*
18988 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
18989 */
18990 wdaMsg.type = timerInfo ;
18991 wdaMsg.bodyptr = NULL;
18992 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018993 /* post the message.. */
18994 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
18995 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
18996 {
18997 vosStatus = VOS_STATUS_E_BADMSG;
18998 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018999}
Jeff Johnson295189b2012-06-20 16:38:30 -070019000/*
19001 * WDA Tx Complete timeout Indication.
19002 */
19003void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
19004{
19005 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019006 tpSirTxBdStatus txBdStatus = {0};
19007
Jeff Johnson295189b2012-06-20 16:38:30 -070019008 if( pWDA->pAckTxCbFunc )
19009 {
19010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019011 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019012 /*Indicate failure*/
19013 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070019014 pWDA->pAckTxCbFunc = NULL;
19015 }
19016 else
19017 {
19018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019019 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070019020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019021}
Jeff Johnson295189b2012-06-20 16:38:30 -070019022/*
19023 * WDA Set REG Domain to VOS NV
19024 */
Abhishek Singha306a442013-11-07 18:39:01 +053019025eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
19026 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070019027{
Abhishek Singha306a442013-11-07 18:39:01 +053019028 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070019029 {
19030 return eHAL_STATUS_INVALID_PARAMETER;
19031 }
19032 return eHAL_STATUS_SUCCESS;
19033}
Jeff Johnson295189b2012-06-20 16:38:30 -070019034
Jeff Johnson295189b2012-06-20 16:38:30 -070019035#ifdef FEATURE_WLAN_SCAN_PNO
19036/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019037 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019038 *
19039 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019040void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019041{
19042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019043 tSirPNOScanReq *pPNOScanReqParams;
19044
Jeff Johnson295189b2012-06-20 16:38:30 -070019045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019046 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019047 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019048 {
19049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019051 VOS_ASSERT(0) ;
19052 return ;
19053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019054
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019055 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19056 if(pPNOScanReqParams->statusCallback)
19057 {
19058 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19059 (status == WDI_STATUS_SUCCESS) ?
19060 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
19061 }
19062
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019063 if (pPNOScanReqParams->enable == 1)
19064 {
19065 if (pPNOScanReqParams->aNetworks)
19066 vos_mem_free(pPNOScanReqParams->aNetworks);
19067 if (pPNOScanReqParams->p24GProbeTemplate)
19068 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19069 if (pPNOScanReqParams->p5GProbeTemplate)
19070 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19071 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19073 vos_mem_free(pWdaParams->wdaMsgParam);
19074 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019075
19076 return ;
19077}
Jeff Johnson295189b2012-06-20 16:38:30 -070019078/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019079 * FUNCTION: WDA_PNOScanReqCallback
19080 * Free memory.
19081 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
19082 */
19083void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019084{
Yue Ma7f44bbe2013-04-12 11:47:39 -070019085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019086 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019087
19088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19090
19091 if(NULL == pWdaParams)
19092 {
19093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19094 "%s: pWdaParams received NULL", __func__);
19095 VOS_ASSERT(0);
19096 return;
19097 }
19098
19099 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19100 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019101 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19102 if(pPNOScanReqParams->statusCallback)
19103 {
19104 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19105 VOS_STATUS_E_FAILURE);
19106 }
19107
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053019108 if (pPNOScanReqParams->enable == 1)
19109 {
19110 if (pPNOScanReqParams->aNetworks)
19111 vos_mem_free(pPNOScanReqParams->aNetworks);
19112 if (pPNOScanReqParams->p24GProbeTemplate)
19113 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19114 if (pPNOScanReqParams->p5GProbeTemplate)
19115 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19116 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19118 vos_mem_free(pWdaParams->wdaMsgParam);
19119 vos_mem_free(pWdaParams);
19120 }
19121
19122 return;
19123}
19124/*
19125 * FUNCTION: WDA_UpdateScanParamsRespCallback
19126 *
19127 */
19128void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
19129{
19130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019132 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019133 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019134 {
19135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019137 VOS_ASSERT(0) ;
19138 return ;
19139 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019140
19141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19142 vos_mem_free(pWdaParams->wdaMsgParam);
19143 vos_mem_free(pWdaParams);
19144
Jeff Johnson295189b2012-06-20 16:38:30 -070019145 return ;
19146}
Jeff Johnson295189b2012-06-20 16:38:30 -070019147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019148 * FUNCTION: WDA_UpdateScanParamsReqCallback
19149 * Free memory.
19150 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
19151 */
19152void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19153{
19154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19155
19156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19157 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19158
19159 if(NULL == pWdaParams)
19160 {
19161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19162 "%s: pWdaParams received NULL", __func__);
19163 VOS_ASSERT(0);
19164 return;
19165 }
19166
19167 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19168 {
19169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19170 vos_mem_free(pWdaParams->wdaMsgParam);
19171 vos_mem_free(pWdaParams);
19172 }
19173
19174 return;
19175}
19176/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019177 * FUNCTION: WDA_ProcessSetPreferredNetworkList
19178 * Request to WDI to set Preferred Network List.Offload
19179 */
19180VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
19181 tSirPNOScanReq *pPNOScanReqParams)
19182{
Jeff Johnson43971f52012-07-17 12:26:56 -070019183 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019184 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
19185 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
19186 tWDA_ReqParams *pWdaParams ;
19187 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019190 if(NULL == pwdiPNOScanReqInfo)
19191 {
19192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019194 VOS_ASSERT(0);
19195 return VOS_STATUS_E_NOMEM;
19196 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19198 if(NULL == pWdaParams)
19199 {
19200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019202 VOS_ASSERT(0);
19203 vos_mem_free(pwdiPNOScanReqInfo);
19204 return VOS_STATUS_E_NOMEM;
19205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019206 //
19207 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
19208 //
19209 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
19210 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070019211 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
19212 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
19213 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019214 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
19215 {
19216 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
19217 &pPNOScanReqParams->aNetworks[i],
19218 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
19219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019220 /*Scan timer intervals*/
19221 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
19222 &pPNOScanReqParams->scanTimers,
19223 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 /*Probe template for 2.4GHz band*/
19225 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
19226 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19227 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019228 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
19229 pPNOScanReqParams->p24GProbeTemplate,
19230 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070019231 /*Probe template for 5GHz band*/
19232 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
19233 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19234 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019235 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
19236 pPNOScanReqParams->p5GProbeTemplate,
19237 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019238 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
19239 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019240
Jeff Johnson295189b2012-06-20 16:38:30 -070019241 /* Store Params pass it to WDI */
19242 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
19243 pWdaParams->pWdaContext = pWDA;
19244 /* Store param pointer as passed in by caller */
19245 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019246 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019247 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019248 if(IS_WDI_STATUS_FAILURE(status))
19249 {
19250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19251 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019252 if(pPNOScanReqParams->statusCallback)
19253 {
19254 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19255 VOS_STATUS_E_FAILURE);
19256 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019257 if (pPNOScanReqParams->enable == 1)
19258 {
19259 if (pPNOScanReqParams->aNetworks)
19260 vos_mem_free(pPNOScanReqParams->aNetworks);
19261 if (pPNOScanReqParams->p24GProbeTemplate)
19262 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19263 if (pPNOScanReqParams->p5GProbeTemplate)
19264 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19267 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019268
Jeff Johnson295189b2012-06-20 16:38:30 -070019269 pWdaParams->wdaWdiApiMsgParam = NULL;
19270 pWdaParams->wdaMsgParam = NULL;
19271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019272 return CONVERT_WDI2VOS_STATUS(status) ;
19273}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019274
19275#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19276
19277void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
19278{
19279 /*Convert the CSR Auth types to WDI Auth types */
19280 switch (csrAuthType)
19281 {
19282 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
19283 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19284 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019285#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019286 case eCSR_AUTH_TYPE_CCKM_WPA:
19287 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
19288 break;
19289#endif
19290 case eCSR_AUTH_TYPE_WPA:
19291 *AuthType = eWDA_AUTH_TYPE_WPA;
19292 break;
19293 case eCSR_AUTH_TYPE_WPA_PSK:
19294 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
19295 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019296#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019297 case eCSR_AUTH_TYPE_CCKM_RSN:
19298 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
19299 break;
19300#endif
19301 case eCSR_AUTH_TYPE_RSN:
19302 *AuthType = eWDA_AUTH_TYPE_RSN;
19303 break;
19304 case eCSR_AUTH_TYPE_RSN_PSK:
19305 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
19306 break;
19307#if defined WLAN_FEATURE_VOWIFI_11R
19308 case eCSR_AUTH_TYPE_FT_RSN:
19309 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
19310 break;
19311 case eCSR_AUTH_TYPE_FT_RSN_PSK:
19312 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
19313 break;
19314#endif
19315#ifdef FEATURE_WLAN_WAPI
19316 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
19317 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
19318 break;
19319 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
19320 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
19321 break;
19322#endif /* FEATURE_WLAN_WAPI */
19323 case eCSR_AUTH_TYPE_SHARED_KEY:
19324 case eCSR_AUTH_TYPE_AUTOSWITCH:
19325 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19326 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019327#ifdef WLAN_FEATURE_11W
19328 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
19329 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019330 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019331 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
19332 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
19333 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019334#endif
19335 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053019336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019337 "%s: Unknown Auth Type", __func__);
19338 break;
19339 }
19340}
19341void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
19342{
19343 switch (csrEncrType)
19344 {
19345 case eCSR_ENCRYPT_TYPE_NONE:
19346 *EncrType = WDI_ED_NONE;
19347 break;
19348 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
19349 case eCSR_ENCRYPT_TYPE_WEP40:
19350 *EncrType = WDI_ED_WEP40;
19351 break;
19352 case eCSR_ENCRYPT_TYPE_WEP104:
19353 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
19354 *EncrType = WDI_ED_WEP104;
19355 break;
19356 case eCSR_ENCRYPT_TYPE_TKIP:
19357 *EncrType = WDI_ED_TKIP;
19358 break;
19359 case eCSR_ENCRYPT_TYPE_AES:
19360 *EncrType = WDI_ED_CCMP;
19361 break;
19362#ifdef WLAN_FEATURE_11W
19363 case eCSR_ENCRYPT_TYPE_AES_CMAC:
19364 *EncrType = WDI_ED_AES_128_CMAC;
19365 break;
19366#endif
19367#ifdef FEATURE_WLAN_WAPI
19368 case eCSR_ENCRYPT_TYPE_WPI:
19369 *EncrType = WDI_ED_WPI;
19370 break;
19371#endif
19372 case eCSR_ENCRYPT_TYPE_ANY:
19373 *EncrType = WDI_ED_ANY;
19374 break;
19375
19376 default:
19377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19378 "%s: Unknown Encryption Type", __func__);
19379 break;
19380 }
19381}
19382
Kapil Gupta04ab1992016-06-26 13:36:51 +053019383#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19384VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
19385 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
19386{
19387 WDI_Status status;
19388 tWDA_ReqParams *pWdaParams ;
19389 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
19390
19391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19392 "------> %s " ,__func__);
19393
19394 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
19395 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
19396 if (NULL == pwdiPERRoamOffloadScanInfo) {
19397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19398 "%s: VOS MEM Alloc Failure", __func__);
19399 VOS_ASSERT(0);
19400 return VOS_STATUS_E_NOMEM;
19401 }
19402
19403 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19404 if (NULL == pWdaParams) {
19405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19406 "%s: VOS MEM Alloc Failure", __func__);
19407 VOS_ASSERT(0);
19408 vos_mem_free(pwdiPERRoamOffloadScanInfo);
19409 return VOS_STATUS_E_NOMEM;
19410 }
19411
19412 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
19413 pPERRoamOffloadScanReqParams->rateUpThreshold;
19414 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
19415 pPERRoamOffloadScanReqParams->rateDownThreshold;
19416 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
19417 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
19418 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
19419 pPERRoamOffloadScanReqParams->PERtimerThreshold;
19420 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
19421 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053019422 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
19423 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053019424 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
19425 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
19426
19427 /* Store Params pass it to WDI */
19428 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
19429 pWdaParams->pWdaContext = pWDA;
19430
19431 /* Store param pointer as passed in by caller */
19432 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
19433 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
19434 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
19435 pWdaParams);
19436
19437 if(IS_WDI_STATUS_FAILURE(status)) {
19438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19439 "Failure in Send config PER roam params");
19440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19441 vos_mem_free(pWdaParams->wdaMsgParam);
19442 vos_mem_free(pWdaParams);
19443 }
19444 return CONVERT_WDI2VOS_STATUS(status) ;
19445}
19446#endif
19447
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019448/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019449 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019450 * Request to WDI to set Roam Offload Scan
19451 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019452VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019453 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
19454{
19455 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019456 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
19457 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019458 tWDA_ReqParams *pWdaParams ;
19459 v_U8_t csrAuthType;
19460 WDI_RoamNetworkType *pwdiRoamNetworkType;
19461 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
19462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19463 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019464 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019465 {
19466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19467 "%s: VOS MEM Alloc Failure", __func__);
19468 VOS_ASSERT(0);
19469 return VOS_STATUS_E_NOMEM;
19470 }
19471 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19472 if (NULL == pWdaParams)
19473 {
19474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19475 "%s: VOS MEM Alloc Failure", __func__);
19476 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019477 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019478 return VOS_STATUS_E_NOMEM;
19479 }
19480
19481 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019482 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019483 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019484 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
19485 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019486 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
19487 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
19488 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
19489 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
19490 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
19491 sizeof(pwdiRoamNetworkType->currAPbssid));
19492 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
19493 csrAuthType);
19494 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
19495 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
19496 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
19497 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
19498 pwdiRoamOffloadScanInfo->LookupThreshold =
19499 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080019500 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
19501 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019502 pwdiRoamOffloadScanInfo->RoamRssiDiff =
19503 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080019504 pwdiRoamOffloadScanInfo->MAWCEnabled =
19505 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019506 pwdiRoamOffloadScanInfo->Command =
19507 pRoamOffloadScanReqParams->Command ;
19508 pwdiRoamOffloadScanInfo->StartScanReason =
19509 pRoamOffloadScanReqParams->StartScanReason ;
19510 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
19511 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
19512 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
19513 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
19514 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
19515 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
19516 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
19517 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
19518 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
19519 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019520 pwdiRoamOffloadScanInfo->IsESEEnabled =
19521 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019522 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
19523 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
19524 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
19525 pwdiRoamNetworkType->ssId.ucLength =
19526 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
19527 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
19528 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
19529 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
19530 pwdiRoamNetworkType->ChannelCount =
19531 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
19532 pwdiRoamOffloadScanInfo->ChannelCacheType =
19533 pRoamOffloadScanReqParams->ChannelCacheType;
19534 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
19535 pRoamOffloadScanReqParams->ValidChannelList,
19536 pRoamOffloadScanReqParams->ValidChannelCount);
19537 pwdiRoamOffloadScanInfo->ValidChannelCount =
19538 pRoamOffloadScanReqParams->ValidChannelCount;
19539 pwdiRoamOffloadScanInfo->us24GProbeSize =
19540 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19541 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19542 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
19543 pRoamOffloadScanReqParams->p24GProbeTemplate,
19544 pwdiRoamOffloadScanInfo->us24GProbeSize);
19545 pwdiRoamOffloadScanInfo->us5GProbeSize =
19546 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19547 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19548 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
19549 pRoamOffloadScanReqParams->p5GProbeTemplate,
19550 pwdiRoamOffloadScanInfo->us5GProbeSize);
19551 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
19552 pRoamOffloadScanReqParams->MDID.mdiePresent;
19553 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
19554 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019555 pwdiRoamOffloadScanInfo->nProbes =
19556 pRoamOffloadScanReqParams->nProbes;
19557 pwdiRoamOffloadScanInfo->HomeAwayTime =
19558 pRoamOffloadScanReqParams->HomeAwayTime;
19559 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019560 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019561 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019562 pWdaParams->pWdaContext = pWDA;
19563 /* Store param pointer as passed in by caller */
19564 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019565 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019566 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
19567 if(IS_WDI_STATUS_FAILURE(status))
19568 {
19569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19570 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
19571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19572 vos_mem_free(pWdaParams->wdaMsgParam);
19573 pWdaParams->wdaWdiApiMsgParam = NULL;
19574 pWdaParams->wdaMsgParam = NULL;
19575 }
19576 return CONVERT_WDI2VOS_STATUS(status) ;
19577}
19578#endif
19579
Jeff Johnson295189b2012-06-20 16:38:30 -070019580/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019581 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019582 *
19583 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019584void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019585{
19586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19587
19588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019589 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019590
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019591 if(NULL == pWdaParams)
19592 {
19593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019594 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019595 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019596 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019597 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019598
Jeff Johnson295189b2012-06-20 16:38:30 -070019599 vos_mem_free(pWdaParams->wdaMsgParam) ;
19600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19601 vos_mem_free(pWdaParams) ;
19602
19603 return ;
19604}
19605/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019606 * FUNCTION: WDA_RssiFilterReqCallback
19607 * Free memory.
19608 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
19609 */
19610void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19611{
19612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19613
19614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19615 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19616
19617 if(NULL == pWdaParams)
19618 {
19619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19620 "%s: pWdaParams received NULL", __func__);
19621 VOS_ASSERT(0);
19622 return;
19623 }
19624
19625 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19626 {
19627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19628 vos_mem_free(pWdaParams->wdaMsgParam);
19629 vos_mem_free(pWdaParams);
19630 }
19631
19632 return;
19633}
19634/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053019635 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070019636 * Request to WDI to set Preferred Network List.Offload
19637 */
19638VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
19639 tSirSetRSSIFilterReq* pRssiFilterParams)
19640{
Jeff Johnson43971f52012-07-17 12:26:56 -070019641 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019642 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
19643 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
19644 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019646 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019647 if(NULL == pwdiSetRssiFilterReqInfo)
19648 {
19649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019651 VOS_ASSERT(0);
19652 return VOS_STATUS_E_NOMEM;
19653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19655 if(NULL == pWdaParams)
19656 {
19657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019659 VOS_ASSERT(0);
19660 vos_mem_free(pwdiSetRssiFilterReqInfo);
19661 return VOS_STATUS_E_NOMEM;
19662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019663 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019664 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
19665 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019666
Jeff Johnson295189b2012-06-20 16:38:30 -070019667 /* Store Params pass it to WDI */
19668 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
19669 pWdaParams->pWdaContext = pWDA;
19670 /* Store param pointer as passed in by caller */
19671 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019672 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019673 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019674 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019675 if(IS_WDI_STATUS_FAILURE(status))
19676 {
19677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19678 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
19679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19680 vos_mem_free(pWdaParams->wdaMsgParam);
19681 pWdaParams->wdaWdiApiMsgParam = NULL;
19682 pWdaParams->wdaMsgParam = NULL;
19683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019684 return CONVERT_WDI2VOS_STATUS(status) ;
19685}
19686
Jeff Johnson295189b2012-06-20 16:38:30 -070019687/*
19688 * FUNCTION: WDA_ProcessUpdateScanParams
19689 * Request to WDI to update Scan Parameters
19690 */
19691VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
19692 tSirUpdateScanParams *pUpdateScanParams)
19693{
Jeff Johnson43971f52012-07-17 12:26:56 -070019694 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019695 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
19696 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
19697 sizeof(WDI_UpdateScanParamsInfoType)) ;
19698 tWDA_ReqParams *pWdaParams ;
19699 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019701 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019702 if(NULL == wdiUpdateScanParamsInfoType)
19703 {
19704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019706 VOS_ASSERT(0);
19707 return VOS_STATUS_E_NOMEM;
19708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019709 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19710 if ( NULL == pWdaParams )
19711 {
19712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019714 VOS_ASSERT(0);
19715 vos_mem_free(wdiUpdateScanParamsInfoType);
19716 return VOS_STATUS_E_NOMEM;
19717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019718 //
19719 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
19720 //
Jeff Johnson295189b2012-06-20 16:38:30 -070019721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19722 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
19723 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
19724 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080019725 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070019726 pUpdateScanParams->b11dEnabled,
19727 pUpdateScanParams->b11dResolved,
19728 pUpdateScanParams->ucChannelCount,
19729 pUpdateScanParams->usPassiveMinChTime,
19730 pUpdateScanParams->usPassiveMaxChTime,
19731 pUpdateScanParams->usActiveMinChTime,
19732 pUpdateScanParams->usActiveMaxChTime,
19733 sizeof(tSirUpdateScanParams),
19734 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
19735
Jeff Johnson295189b2012-06-20 16:38:30 -070019736 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
19737 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070019738 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
19739 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070019740 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
19741 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070019742 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
19743 pUpdateScanParams->usActiveMaxChTime;
19744 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
19745 pUpdateScanParams->usActiveMinChTime;
19746 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
19747 pUpdateScanParams->usPassiveMaxChTime;
19748 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
19749 pUpdateScanParams->usPassiveMinChTime;
19750
Jeff Johnson295189b2012-06-20 16:38:30 -070019751 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053019752 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
19753 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070019754
Jeff Johnson295189b2012-06-20 16:38:30 -070019755 for ( i = 0; i <
19756 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
19757 i++)
19758 {
19759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19760 "Update Scan Parameters channel: %d",
19761 pUpdateScanParams->aChannels[i]);
19762
19763 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
19764 pUpdateScanParams->aChannels[i];
19765 }
19766
Yue Ma7f44bbe2013-04-12 11:47:39 -070019767 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
19768 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019769
Jeff Johnson295189b2012-06-20 16:38:30 -070019770 /* Store Params pass it to WDI */
19771 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
19772 pWdaParams->pWdaContext = pWDA;
19773 /* Store param pointer as passed in by caller */
19774 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070019775
Jeff Johnson295189b2012-06-20 16:38:30 -070019776
19777
19778 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019779 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019780 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019781 if(IS_WDI_STATUS_FAILURE(status))
19782 {
19783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19784 "Failure in Update Scan Params EQ WDI API, free all the memory " );
19785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19786 vos_mem_free(pWdaParams->wdaMsgParam);
19787 vos_mem_free(pWdaParams);
19788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019789 return CONVERT_WDI2VOS_STATUS(status) ;
19790}
19791#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019792
19793#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19794/*
19795 * FUNCTION: WDA_RoamOffloadScanReqCallback
19796 *
19797 */
19798void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19799{
19800 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019801 vos_msg_t vosMsg;
19802 wpt_uint8 reason = 0;
19803
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070019804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019805 "<------ %s " ,__func__);
19806 if (NULL == pWdaParams)
19807 {
19808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19809 "%s: pWdaParams received NULL", __func__);
19810 VOS_ASSERT(0) ;
19811 return ;
19812 }
19813 if ( pWdaParams != NULL )
19814 {
19815 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
19816 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019817 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19819 }
19820 if ( pWdaParams->wdaMsgParam != NULL)
19821 {
19822 vos_mem_free(pWdaParams->wdaMsgParam);
19823 }
19824
19825 vos_mem_free(pWdaParams) ;
19826 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019827 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19828 vosMsg.bodyptr = NULL;
19829 if (WDI_STATUS_SUCCESS != status)
19830 {
19831 reason = 0;
19832 }
19833 vosMsg.bodyval = reason;
19834 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19835 {
19836 /* free the mem and return */
19837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070019838 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019839 }
19840
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019841 return ;
19842}
Kapil Gupta04ab1992016-06-26 13:36:51 +053019843
19844void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
19845{
19846 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19847 vos_msg_t vosMsg;
19848 wpt_uint8 reason = 0;
19849
19850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19851 "<------ %s " ,__func__);
19852 if (NULL == pWdaParams) {
19853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19854 "%s: pWdaParams received NULL", __func__);
19855 VOS_ASSERT(0) ;
19856 return ;
19857 }
19858 if ( pWdaParams->wdaMsgParam != NULL)
19859 vos_mem_free(pWdaParams->wdaMsgParam);
19860
19861 vos_mem_free(pWdaParams) ;
19862 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
19863 vosMsg.bodyptr = NULL;
19864 if (WDI_STATUS_SUCCESS != status)
19865 reason = 0;
19866
19867 vosMsg.bodyval = reason;
19868 if (VOS_STATUS_SUCCESS !=
19869 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19870 /* free the mem and return */
19871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19872 "%s: Failed to post the rsp to UMAC", __func__);
19873 }
19874
19875 return ;
19876}
19877
19878
19879void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19880{
19881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19882 vos_msg_t vosMsg;
19883 wpt_uint8 reason = 0;
19884
19885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19886 "<------ %s " ,__func__);
19887 if (NULL == pWdaParams) {
19888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19889 "%s: pWdaParams received NULL", __func__);
19890 VOS_ASSERT(0) ;
19891 return ;
19892 }
19893 if ( pWdaParams->wdaMsgParam != NULL)
19894 vos_mem_free(pWdaParams->wdaMsgParam);
19895
19896 vos_mem_free(pWdaParams) ;
19897 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19898 vosMsg.bodyptr = NULL;
19899 if (WDI_STATUS_SUCCESS != status)
19900 reason = 0;
19901
19902 vosMsg.bodyval = reason;
19903 if (VOS_STATUS_SUCCESS !=
19904 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19905 /* free the mem and return */
19906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19907 "%s: Failed to post the rsp to UMAC", __func__);
19908 }
19909
19910 return ;
19911}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019912#endif
19913
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019914/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019915 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019916 *
19917 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019918void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019919{
19920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19921
19922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19923 "<------ %s " ,__func__);
19924
19925 if(NULL == pWdaParams)
19926 {
19927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19928 "%s: pWdaParams received NULL", __func__);
19929 VOS_ASSERT(0);
19930 return;
19931 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019932
19933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19934 vos_mem_free(pWdaParams->wdaMsgParam);
19935 vos_mem_free(pWdaParams);
19936
19937 return;
19938}
19939/*
19940 * FUNCTION: WDA_SetPowerParamsReqCallback
19941 * Free memory.
19942 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
19943 */
19944void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19945{
19946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19947
19948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19949 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19950
19951 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019952 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070019953 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 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19960 {
19961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19962 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019963 vos_mem_free(pWdaParams);
19964 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019965
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019966 return;
19967}
19968
Jeff Johnson295189b2012-06-20 16:38:30 -070019969#ifdef WLAN_FEATURE_PACKET_FILTERING
19970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019971 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019972 *
19973 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019974void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019975 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
19976 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019977{
19978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019980 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019981 if(NULL == pWdaParams)
19982 {
19983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019984 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019985 VOS_ASSERT(0) ;
19986 return ;
19987 }
19988
19989 vos_mem_free(pWdaParams->wdaMsgParam) ;
19990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19991 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019992 //print a msg, nothing else to do
19993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019994 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019995 return ;
19996}
Jeff Johnson295189b2012-06-20 16:38:30 -070019997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019998 * FUNCTION: WDA_8023MulticastListReqCallback
19999 * Free memory.
20000 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
20001 */
20002void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
20003{
20004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20005
20006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20008
20009 if(NULL == pWdaParams)
20010 {
20011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20012 "%s: pWdaParams received NULL", __func__);
20013 VOS_ASSERT(0);
20014 return;
20015 }
20016
20017 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20018 {
20019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20020 vos_mem_free(pWdaParams->wdaMsgParam);
20021 vos_mem_free(pWdaParams);
20022 }
20023
20024 return;
20025}
20026/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020027 * FUNCTION: WDA_Process8023MulticastListReq
20028 * Request to WDI to add 8023 Multicast List
20029 */
20030VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
20031 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
20032{
Jeff Johnson43971f52012-07-17 12:26:56 -070020033 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020034 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
20035 tWDA_ReqParams *pWdaParams ;
20036 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020039 pwdiFltPktSetMcListReqParamsType =
20040 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
20041 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
20042 ) ;
20043 if(NULL == pwdiFltPktSetMcListReqParamsType)
20044 {
20045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020047 return VOS_STATUS_E_NOMEM;
20048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20050 if(NULL == pWdaParams)
20051 {
20052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020054 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
20055 return VOS_STATUS_E_NOMEM;
20056 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020057
Jeff Johnson295189b2012-06-20 16:38:30 -070020058 //
20059 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
20060 //
20061 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070020062 pRcvFltMcAddrList->ulMulticastAddrCnt;
20063
20064 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
20065 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
20066 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
20067 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
20068
Jeff Johnson295189b2012-06-20 16:38:30 -070020069 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
20070 {
20071 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
20072 &(pRcvFltMcAddrList->multicastAddr[i]),
20073 sizeof(tSirMacAddr));
20074 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020075 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
20076 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020077
Jeff Johnson295189b2012-06-20 16:38:30 -070020078 /* Store Params pass it to WDI */
20079 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
20080 pWdaParams->pWdaContext = pWDA;
20081 /* Store param pointer as passed in by caller */
20082 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070020083 status = WDI_8023MulticastListReq(
20084 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020085 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020086 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020087 if(IS_WDI_STATUS_FAILURE(status))
20088 {
20089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20090 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
20091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20092 vos_mem_free(pWdaParams->wdaMsgParam);
20093 vos_mem_free(pWdaParams);
20094 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020095 return CONVERT_WDI2VOS_STATUS(status) ;
20096}
Jeff Johnson295189b2012-06-20 16:38:30 -070020097/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020098 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020099 *
20100 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020101void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020102 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
20103 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020104{
20105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020108 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070020109 if(NULL == pWdaParams)
20110 {
20111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020112 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020113 VOS_ASSERT(0) ;
20114 return ;
20115 }
20116
20117 vos_mem_free(pWdaParams->wdaMsgParam) ;
20118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20119 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020120 //print a msg, nothing else to do
20121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020122 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020123 return ;
20124}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020125
20126/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020127 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
20128 * Free memory.
20129 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020130 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020131void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020132 void* pUserData)
20133{
20134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20135
20136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20137 "<------ %s, wdiStatus: %d",
20138 __func__, wdiStatus);
20139
20140 if (NULL == pWdaParams)
20141 {
20142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20143 "%s: Invalid pWdaParams pointer", __func__);
20144 VOS_ASSERT(0);
20145 return;
20146 }
20147
20148 if (IS_WDI_STATUS_FAILURE(wdiStatus))
20149 {
20150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20151 vos_mem_free(pWdaParams->wdaMsgParam);
20152 vos_mem_free(pWdaParams);
20153 }
20154
20155 return;
20156}
20157
Jeff Johnson295189b2012-06-20 16:38:30 -070020158/*
20159 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
20160 * Request to WDI to set Receive Filters
20161 */
20162VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
20163 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
20164{
Jeff Johnson43971f52012-07-17 12:26:56 -070020165 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020166 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
20167 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
20168 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
20169 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
20170 tWDA_ReqParams *pWdaParams ;
20171 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020173 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020174 if(NULL == pwdiSetRcvPktFilterReqParamsType)
20175 {
20176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020178 VOS_ASSERT(0);
20179 return VOS_STATUS_E_NOMEM;
20180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20182 if(NULL == pWdaParams)
20183 {
20184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020186 VOS_ASSERT(0);
20187 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
20188 return VOS_STATUS_E_NOMEM;
20189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020190 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
20191 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
20192 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
20193 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070020194 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
20195 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
20196
20197 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
20198 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020199
20200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20201 "FID %d FT %d NParams %d CT %d",
20202 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
20203 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
20204 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
20205 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070020206 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
20207 {
20208 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
20209 &pRcvPktFilterCfg->paramsData[i],
20210 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070020211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020212 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020213 pwdiSetRcvPktFilterReqParamsType->
20214 wdiPktFilterCfg.paramsData[i].protocolLayer,
20215 pwdiSetRcvPktFilterReqParamsType->
20216 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070020217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020218 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020219 pwdiSetRcvPktFilterReqParamsType->
20220 wdiPktFilterCfg.paramsData[i].dataOffset,
20221 pwdiSetRcvPktFilterReqParamsType->
20222 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070020223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020224 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020225 pwdiSetRcvPktFilterReqParamsType->
20226 wdiPktFilterCfg.paramsData[i].compareData[0],
20227 pwdiSetRcvPktFilterReqParamsType->
20228 wdiPktFilterCfg.paramsData[i].compareData[1],
20229 pwdiSetRcvPktFilterReqParamsType->
20230 wdiPktFilterCfg.paramsData[i].compareData[2],
20231 pwdiSetRcvPktFilterReqParamsType->
20232 wdiPktFilterCfg.paramsData[i].compareData[3],
20233 pwdiSetRcvPktFilterReqParamsType->
20234 wdiPktFilterCfg.paramsData[i].compareData[4],
20235 pwdiSetRcvPktFilterReqParamsType->
20236 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020238 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020239 pwdiSetRcvPktFilterReqParamsType->
20240 wdiPktFilterCfg.paramsData[i].dataMask[0],
20241 pwdiSetRcvPktFilterReqParamsType->
20242 wdiPktFilterCfg.paramsData[i].dataMask[1],
20243 pwdiSetRcvPktFilterReqParamsType->
20244 wdiPktFilterCfg.paramsData[i].dataMask[2],
20245 pwdiSetRcvPktFilterReqParamsType->
20246 wdiPktFilterCfg.paramsData[i].dataMask[3],
20247 pwdiSetRcvPktFilterReqParamsType->
20248 wdiPktFilterCfg.paramsData[i].dataMask[4],
20249 pwdiSetRcvPktFilterReqParamsType->
20250 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020251 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020252 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020253 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020254 /* Store Params pass it to WDI */
20255 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
20256 pWdaParams->pWdaContext = pWDA;
20257 /* Store param pointer as passed in by caller */
20258 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070020259 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020260 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020261 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020262 if(IS_WDI_STATUS_FAILURE(status))
20263 {
20264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20265 "Failure in SetFilter(),free all the memory,status %d ",status);
20266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20267 vos_mem_free(pWdaParams->wdaMsgParam);
20268 vos_mem_free(pWdaParams);
20269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020270 return CONVERT_WDI2VOS_STATUS(status) ;
20271}
Jeff Johnson295189b2012-06-20 16:38:30 -070020272/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020273 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020274 *
20275 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020276void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020277 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
20278 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020279{
20280 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20281 tWDA_CbContext *pWDA;
20282 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
20283 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
20284 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
20285 tANI_U8 i;
20286 vos_msg_t vosMsg;
20287
20288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020290 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
20291
Jeff Johnsone7245742012-09-05 17:12:55 -070020292 if(NULL == pRcvFltPktMatchCntRsp)
20293 {
20294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020295 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020296 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020297 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070020298 return ;
20299 }
20300
Jeff Johnson295189b2012-06-20 16:38:30 -070020301 if(NULL == pWdaParams)
20302 {
20303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020304 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020305 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020306 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070020307 return ;
20308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020309 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
20310 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020311 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
20312 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
20313
20314 /* Message Header */
20315 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20316 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
20317
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020318 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070020319
20320 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
20321 {
20322 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
20323 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
20324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020325 /* VOS message wrapper */
20326 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20327 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
20328 vosMsg.bodyval = 0;
20329 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20330 {
20331 /* free the mem and return */
20332 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
20333 }
20334
20335 vos_mem_free(pWdaParams->wdaMsgParam) ;
20336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20337 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020338
20339 return;
20340}
20341/*
20342 * FUNCTION: WDA_FilterMatchCountReqCallback
20343 * Free memory and send RSP back to SME.
20344 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
20345 */
20346void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
20347{
20348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20349 vos_msg_t vosMsg;
20350
20351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20353
20354 if(NULL == pWdaParams)
20355 {
20356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20357 "%s: pWdaParams received NULL", __func__);
20358 VOS_ASSERT(0);
20359 return;
20360 }
20361
20362 /* VOS message wrapper */
20363 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20364 vosMsg.bodyptr = NULL;
20365 vosMsg.bodyval = 0;
20366
20367 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20368 {
20369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20370 vos_mem_free(pWdaParams->wdaMsgParam);
20371 vos_mem_free(pWdaParams);
20372 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
20373 }
20374
20375 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020376}
Jeff Johnson295189b2012-06-20 16:38:30 -070020377/*
20378 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
20379 * Request to WDI to get PC Filter Match Count
20380 */
20381VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
20382{
Jeff Johnson43971f52012-07-17 12:26:56 -070020383 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020384 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
20385 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
20386 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020389 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
20390 {
20391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020393 VOS_ASSERT(0);
20394 return VOS_STATUS_E_NOMEM;
20395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20397 if(NULL == pWdaParams)
20398 {
20399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020401 VOS_ASSERT(0);
20402 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
20403 return VOS_STATUS_E_NOMEM;
20404 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020405
Yue Ma7f44bbe2013-04-12 11:47:39 -070020406 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
20407 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020408
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020409 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
20410 pRcvFltPktMatchRsp->bssId,
20411 sizeof(wpt_macAddr));
20412
Jeff Johnson295189b2012-06-20 16:38:30 -070020413 /* Store Params pass it to WDI */
20414 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
20415 pWdaParams->pWdaContext = pWDA;
20416 /* Store param pointer as passed in by caller */
20417 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070020418 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020419 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020420 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020421 if(IS_WDI_STATUS_FAILURE(status))
20422 {
20423 /* failure returned by WDI API */
20424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20425 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
20426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20427 vos_mem_free(pWdaParams) ;
20428 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
20429 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
20430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020431 return CONVERT_WDI2VOS_STATUS(status) ;
20432}
Jeff Johnson295189b2012-06-20 16:38:30 -070020433/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020434 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020435 *
20436 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020437void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020438 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
20439 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020440{
20441 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020442 tSirRcvFltPktClearParam *pktClearParam;
20443
Jeff Johnson295189b2012-06-20 16:38:30 -070020444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020445 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020446/* WDA_VOS_ASSERT(NULL != pWdaParams); */
20447 if(NULL == pWdaParams)
20448 {
20449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020451 VOS_ASSERT(0) ;
20452 return ;
20453 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020454
20455 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20456 if(pktClearParam->pktFilterCallback)
20457 {
20458 pktClearParam->pktFilterCallback(
20459 pktClearParam->cbCtx,
20460 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
20461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020462 vos_mem_free(pWdaParams->wdaMsgParam) ;
20463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20464 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020465 //print a msg, nothing else to do
20466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020467 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020468 return ;
20469}
Jeff Johnson295189b2012-06-20 16:38:30 -070020470/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020471 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
20472 * Free memory.
20473 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
20474 */
20475void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20476{
20477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020478 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020479
20480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20481 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20482
20483 if(NULL == pWdaParams)
20484 {
20485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20486 "%s: Invalid pWdaParams pointer", __func__);
20487 VOS_ASSERT(0);
20488 return;
20489 }
20490
20491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20492 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020493 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20494 if(pktClearParam->pktFilterCallback)
20495 {
20496 pktClearParam->pktFilterCallback(
20497 pktClearParam->cbCtx,
20498 CONVERT_WDI2SIR_STATUS(wdiStatus));
20499 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20501 vos_mem_free(pWdaParams->wdaMsgParam);
20502 vos_mem_free(pWdaParams);
20503 }
20504
20505 return;
20506}
20507/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020508 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
20509 * Request to WDI to clear Receive Filters
20510 */
20511VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
20512 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
20513{
Jeff Johnson43971f52012-07-17 12:26:56 -070020514 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020515 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
20516 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
20517 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020519 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020520 if(NULL == pwdiRcvFltPktClearReqParamsType)
20521 {
20522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020524 VOS_ASSERT(0);
20525 return VOS_STATUS_E_NOMEM;
20526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20528 if(NULL == pWdaParams)
20529 {
20530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020532 VOS_ASSERT(0);
20533 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
20534 return VOS_STATUS_E_NOMEM;
20535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020536 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
20537 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070020538 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
20539 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
20540 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
20541 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020542
Yue Ma7f44bbe2013-04-12 11:47:39 -070020543 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020544 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020545 /* Store Params pass it to WDI */
20546 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
20547 pWdaParams->pWdaContext = pWDA;
20548 /* Store param pointer as passed in by caller */
20549 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020550 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020551 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020552 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020553 if(IS_WDI_STATUS_FAILURE(status))
20554 {
20555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20556 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020557 if(pRcvFltPktClearParam->pktFilterCallback)
20558 {
20559 pRcvFltPktClearParam->pktFilterCallback(
20560 pRcvFltPktClearParam->cbCtx,
20561 CONVERT_WDI2SIR_STATUS(status));
20562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080020564 vos_mem_free(pWdaParams->wdaMsgParam);
20565 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020567 return CONVERT_WDI2VOS_STATUS(status) ;
20568}
20569#endif // WLAN_FEATURE_PACKET_FILTERING
20570
Jeff Johnson295189b2012-06-20 16:38:30 -070020571/*
20572 * FUNCTION: WDA_ProcessSetPowerParamsReq
20573 * Request to WDI to set power params
20574 */
20575VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
20576 tSirSetPowerParamsReq *pPowerParams)
20577{
Jeff Johnson43971f52012-07-17 12:26:56 -070020578 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020579 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
20580 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020581 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020583 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020584 if(NULL == pwdiSetPowerParamsReqInfo)
20585 {
20586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020588 VOS_ASSERT(0);
20589 return VOS_STATUS_E_NOMEM;
20590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20592 if(NULL == pWdaParams)
20593 {
20594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020596 VOS_ASSERT(0);
20597 vos_mem_free(pwdiSetPowerParamsReqInfo);
20598 return VOS_STATUS_E_NOMEM;
20599 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020600
Jeff Johnson295189b2012-06-20 16:38:30 -070020601
20602 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
20603 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070020604 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
20605 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070020606 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
20607 pPowerParams->uListenInterval;
20608 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
20609 pPowerParams->uBcastMcastFilter;
20610 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
20611 pPowerParams->uEnableBET;
20612 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
20613 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070020614 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
20615 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020616 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
20617 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020618
Jeff Johnson295189b2012-06-20 16:38:30 -070020619 /* Store Params pass it to WDI */
20620 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
20621 pWdaParams->pWdaContext = pWDA;
20622 /* Store param pointer as passed in by caller */
20623 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020624 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020625 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020626 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020627 if(IS_WDI_STATUS_FAILURE(status))
20628 {
20629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20630 "Failure in Set power params REQ WDI API, free all the memory " );
20631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20632 vos_mem_free(pWdaParams->wdaMsgParam);
20633 pWdaParams->wdaWdiApiMsgParam = NULL;
20634 pWdaParams->wdaMsgParam = NULL;
20635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020636 return CONVERT_WDI2VOS_STATUS(status) ;
20637}
20638
20639/*
20640 * FUNCTION: WDA_SetTmLevelRspCallback
20641 * Set TM Level response
20642 */
20643void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
20644{
20645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20646
20647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020648 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020649
20650 if(NULL == pWdaParams)
20651 {
20652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020654 VOS_ASSERT(0) ;
20655 return ;
20656 }
20657
20658 /* Dose not need to send notification to upper layer
20659 * Just free allocated resources */
20660 if( pWdaParams != NULL )
20661 {
20662 if( pWdaParams->wdaWdiApiMsgParam != NULL )
20663 {
20664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20665 }
20666 vos_mem_free(pWdaParams->wdaMsgParam) ;
20667 vos_mem_free(pWdaParams) ;
20668 }
20669}
20670
20671/*
20672 * FUNCTION: WDA_ProcessSetTmLevelReq
20673 * Set TM Level request
20674 */
20675VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
20676 tAniSetTmLevelReq *setTmLevelReq)
20677{
20678 WDI_Status status = WDI_STATUS_SUCCESS ;
20679 tWDA_ReqParams *pWdaParams ;
20680 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
20681 (WDI_SetTmLevelReqType *)vos_mem_malloc(
20682 sizeof(WDI_SetTmLevelReqType)) ;
20683 if(NULL == wdiSetTmLevelReq)
20684 {
20685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020687 VOS_ASSERT(0);
20688 return VOS_STATUS_E_NOMEM;
20689 }
20690
20691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20692 if(NULL == pWdaParams)
20693 {
20694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020696 VOS_ASSERT(0);
20697 vos_mem_free(wdiSetTmLevelReq);
20698 return VOS_STATUS_E_NOMEM;
20699 }
20700
20701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020703
20704 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
20705 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
20706
20707 pWdaParams->pWdaContext = pWDA;
20708 pWdaParams->wdaMsgParam = setTmLevelReq;
20709 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
20710
20711 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
20712 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
20713
20714 if(IS_WDI_STATUS_FAILURE(status))
20715 {
20716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080020717 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070020718 vos_mem_free(pWdaParams->wdaMsgParam) ;
20719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20720 vos_mem_free(pWdaParams) ;
20721 }
20722
20723 return CONVERT_WDI2VOS_STATUS(status) ;
20724}
20725
20726VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
20727 tpTxControlParams pTxCtrlParam)
20728{
20729 VOS_STATUS wdaStatus;
20730
20731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020732 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020733 if( pTxCtrlParam == NULL )
20734 {
20735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020736 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020737 return VOS_STATUS_E_FAILURE;
20738 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020739 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
20740 {
20741 wdaStatus = WDA_SuspendDataTx(pWDA);
20742 }
20743 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
20744 {
20745 wdaStatus = WDA_ResumeDataTx(pWDA);
20746 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020747 return wdaStatus;
20748}
20749
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020750void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053020751{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020752 WDI_Status status;
20753 status = WDI_FWLoggingDXEdoneInd(logType);
20754
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053020755 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020756 {
20757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20758 FL("Failure status %d"), status);
20759 }
Mihir Shete5affadc2015-05-29 20:54:57 +053020760}
20761
Jeff Johnson295189b2012-06-20 16:38:30 -070020762 /* FUNCTION WDA_featureCapsExchange
20763 * WDA API to invoke capability exchange between host and FW.
20764 */
20765void WDA_featureCapsExchange(v_PVOID_t pVosContext)
20766{
20767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020768 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020769 WDI_featureCapsExchangeReq( NULL, pVosContext);
20770}
20771
Yathish9f22e662012-12-10 14:21:35 -080020772/* FUNCTION WDA_disableCapablityFeature
20773 * WDA API to diable Active mode offload in host.
20774 */
20775void WDA_disableCapablityFeature(tANI_U8 feature_index)
20776{
20777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20778 "%s:enter", __func__ );
20779 WDI_disableCapablityFeature(feature_index);
20780}
20781
Jeff Johnson295189b2012-06-20 16:38:30 -070020782 /* FUNCTION WDA_getHostWlanFeatCaps
20783 * Wrapper for WDI API, that will return if the feature (enum value).passed
20784 * to this API is supported or not in Host
20785 * return value
20786 * 0 - implies feature is NOT Supported
20787 * any non zero value - implies feature is SUPPORTED
20788 */
20789tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
20790{
20791 return WDI_getHostWlanFeatCaps(featEnumValue);
20792}
20793
20794 /* FUNCTION WDA_getFwWlanFeatCaps
20795 * Wrapper for WDI API, that will return if the feature (enum value).passed
20796 * to this API is supported or not in FW
20797 * return value
20798 * 0 - implies feature is NOT Supported
20799 * any non zero value - implies feature is SUPPORTED
20800 */
20801tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
20802{
20803 return WDI_getFwWlanFeatCaps(featEnumValue);
20804}
20805
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053020806
Jeff Johnson295189b2012-06-20 16:38:30 -070020807/*
20808 * FUNCTION: WDA_shutdown
20809 * Shutdown WDA/WDI without handshaking with Riva.
20810 * Synchronous function.
20811 */
20812VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
20813{
20814 WDI_Status wdiStatus;
20815 //tANI_U8 eventIdx = 0;
20816 VOS_STATUS status = VOS_STATUS_SUCCESS;
20817 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020818 if (NULL == pWDA)
20819 {
20820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020821 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020822 VOS_ASSERT(0);
20823 return VOS_STATUS_E_FAILURE;
20824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020825 /* FTM mode stay START_STATE */
20826 if( (WDA_READY_STATE != pWDA->wdaState) &&
20827 (WDA_INIT_STATE != pWDA->wdaState) &&
20828 (WDA_START_STATE != pWDA->wdaState) )
20829 {
20830 VOS_ASSERT(0);
20831 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020832
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020833 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070020834 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020835 if(VOS_TRUE == pWDA->wdaTimersCreated)
20836 {
20837 wdaDestroyTimers(pWDA);
20838 pWDA->wdaTimersCreated = VOS_FALSE;
20839 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020840 }
Leo Chang9d76f622013-08-23 16:34:52 -070020841 else
20842 {
20843 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020844 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020845
Jeff Johnson295189b2012-06-20 16:38:30 -070020846 /* call WDI shutdown */
20847 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070020848 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
20849 {
20850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20851 "error in WDA Stop" );
20852 status = VOS_STATUS_E_FAILURE;
20853 }
20854 /* WDI stop is synchrnous, shutdown is complete when it returns */
20855 pWDA->wdaState = WDA_STOP_STATE;
20856
Jeff Johnson295189b2012-06-20 16:38:30 -070020857 /* shutdown should perform the stop & close actions. */
20858 /* Destroy the event */
20859 status = vos_event_destroy(&pWDA->txFrameEvent);
20860 if(!VOS_IS_STATUS_SUCCESS(status))
20861 {
20862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020863 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020864 status = VOS_STATUS_E_FAILURE;
20865 }
20866 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
20867 if(!VOS_IS_STATUS_SUCCESS(status))
20868 {
20869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020870 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020871 status = VOS_STATUS_E_FAILURE;
20872 }
20873 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
20874 if(!VOS_IS_STATUS_SUCCESS(status))
20875 {
20876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020877 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020878 status = VOS_STATUS_E_FAILURE;
20879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020880 /* free WDA context */
20881 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
20882 if ( !VOS_IS_STATUS_SUCCESS(status) )
20883 {
20884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20885 "error in WDA close " );
20886 status = VOS_STATUS_E_FAILURE;
20887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020888 return status;
20889}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020890
Jeff Johnsone7245742012-09-05 17:12:55 -070020891/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020892 * FUNCTION: WDA_setNeedShutdown
20893 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070020894 */
20895
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020896void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070020897{
20898 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020899 if(pWDA == NULL)
20900 {
20901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20902 "Could not get the WDA Context pointer" );
20903 return;
20904 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020905 pWDA->needShutdown = TRUE;
20906}
20907/*
20908 * FUNCTION: WDA_needShutdown
20909 * WDA needs a shutdown
20910 */
20911
20912v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
20913{
20914 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020915 if(pWDA == NULL)
20916 {
20917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20918 "Could not get the WDA Context pointer" );
20919 return 0;
20920 }
20921 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070020922}
20923
Mohit Khanna4a70d262012-09-11 16:30:12 -070020924#ifdef WLAN_FEATURE_11AC
20925/*
20926 * FUNCTION: WDA_SetBeaconFilterReqCallback
20927 *
20928 */
20929void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
20930{
20931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020933 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020934 if(NULL == pWdaParams)
20935 {
20936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020937 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020938 VOS_ASSERT(0) ;
20939 return ;
20940 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020941
Mohit Khanna4a70d262012-09-11 16:30:12 -070020942 vos_mem_free(pWdaParams->wdaMsgParam) ;
20943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20944 vos_mem_free(pWdaParams) ;
20945 /*
20946 * No respone required for SetBeaconFilter req so just free the request
20947 * param here
20948 */
20949
20950 return ;
20951}
20952
20953VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
20954 tUpdateVHTOpMode *pData)
20955{
20956 WDI_Status status = WDI_STATUS_SUCCESS ;
20957 tWDA_ReqParams *pWdaParams ;
20958 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
20959 sizeof(WDI_UpdateVHTOpMode)) ;
20960 if(NULL == wdiTemp)
20961 {
20962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020963 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020964 VOS_ASSERT(0);
20965 return VOS_STATUS_E_NOMEM;
20966 }
20967 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20968 if(NULL == pWdaParams)
20969 {
20970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020971 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020972 VOS_ASSERT(0);
20973 vos_mem_free(wdiTemp);
20974 return VOS_STATUS_E_NOMEM;
20975 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053020976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20977 "------> %s Opmode = %d and staid = %d" ,
20978 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020979 wdiTemp->opMode = pData->opMode;
20980 wdiTemp->staId = pData->staId;
20981
20982 pWdaParams->pWdaContext = pWDA;
20983 /* Store Req pointer, as this will be used for response */
20984 pWdaParams->wdaMsgParam = (void *)pData;
20985 /* store Params pass it to WDI */
20986 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
20987
20988 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
20989
20990 if(IS_WDI_STATUS_FAILURE(status))
20991 {
20992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20993 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
20994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20995 vos_mem_free(pWdaParams->wdaMsgParam);
20996 vos_mem_free(pWdaParams);
20997 }
20998 return CONVERT_WDI2VOS_STATUS(status) ;
20999}
21000#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021001
21002/*==========================================================================
21003 FUNCTION WDA_TransportChannelDebug
21004
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070021005 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021006 Display Transport Channel debugging information
21007 User may request to display DXE channel snapshot
21008 Or if host driver detects any abnormal stcuk may display
21009
21010 PARAMETERS
schang6295e542013-03-12 15:31:23 -070021011 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080021012 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053021013 debugFlags : Enable stall detect features
21014 defined by WPAL_DeviceDebugFlags
21015 These features may effect
21016 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021017
21018 RETURN VALUE
21019 NONE
21020
21021===========================================================================*/
21022void WDA_TransportChannelDebug
21023(
schang6295e542013-03-12 15:31:23 -070021024 tpAniSirGlobal pMac,
21025 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053021026 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021027)
21028{
Mihir Shete40a55652014-03-02 14:14:47 +053021029 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021030 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070021031}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021032
21033/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053021034 FUNCTION WDA_TransportKickDxe
21035
21036 DESCRIPTION
21037 Request Kick Dxe when first hdd TX time out
21038 happens
21039
21040 PARAMETERS
21041 NONE
21042
21043 RETURN VALUE
21044 NONE
21045
21046===========================================================================*/
21047void WDA_TransportKickDxe()
21048{
21049 WDI_TransportKickDxe();
21050 return;
21051}
21052
21053
21054/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021055 FUNCTION WDA_SetEnableSSR
21056
21057 DESCRIPTION
21058 API to enable/disable SSR on WDI timeout
21059
21060 PARAMETERS
21061 enableSSR : enable/disable SSR
21062
21063 RETURN VALUE
21064 NONE
21065
21066===========================================================================*/
21067void WDA_SetEnableSSR(v_BOOL_t enableSSR)
21068{
21069 WDI_SetEnableSSR(enableSSR);
21070}
Leo Chang9056f462013-08-01 19:21:11 -070021071
Agrawal Ashish0552be02016-03-02 18:03:43 +053021072/**
21073 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
21074 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
21075 *
21076 * Return: void
21077 */
21078void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
21079{
21080 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
21081}
21082
Leo Chang9056f462013-08-01 19:21:11 -070021083#ifdef FEATURE_WLAN_LPHB
21084/*
21085 * FUNCTION: WDA_LPHBconfRspCallback
21086 *
21087 */
21088void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
21089{
21090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21091
21092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21093 "<------ %s " ,__func__);
21094 if (NULL == pWdaParams)
21095 {
21096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21097 "%s: pWdaParams received NULL", __func__);
21098 VOS_ASSERT(0) ;
21099 return ;
21100 }
21101
21102 /* Do not need to send notification to upper layer
21103 * Just free allocated resources */
21104 if (pWdaParams != NULL)
21105 {
21106 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21107 {
21108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21109 }
21110 vos_mem_free(pWdaParams->wdaMsgParam) ;
21111 vos_mem_free(pWdaParams) ;
21112 }
21113
21114 return;
21115}
21116
21117/*
21118 * FUNCTION: WDA_ProcessLPHBConfReq
21119 *
21120 */
21121VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
21122 tSirLPHBReq *pData)
21123{
21124 WDI_Status wdiStatus;
21125 tWDA_ReqParams *pWdaParams ;
21126
21127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21128 "------> %s " , __func__);
21129
21130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21131 if (NULL == pWdaParams)
21132 {
21133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21134 "%s: VOS MEM Alloc Failure", __func__);
21135 VOS_ASSERT(0);
21136 vos_mem_free(pData);
21137 return VOS_STATUS_E_NOMEM;
21138 }
21139
21140 pWdaParams->pWdaContext = pWDA;
21141 pWdaParams->wdaMsgParam = (void *)pData;
21142 pWdaParams->wdaWdiApiMsgParam = NULL;
21143
21144 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
21145 if (WDI_STATUS_PENDING == wdiStatus)
21146 {
21147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21148 "Pending received for %s:%d ", __func__, __LINE__);
21149 }
21150 else if (WDI_STATUS_SUCCESS != wdiStatus)
21151 {
21152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21153 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
21154 vos_mem_free(pWdaParams->wdaMsgParam);
21155 vos_mem_free(pWdaParams);
21156 }
21157
21158 return CONVERT_WDI2VOS_STATUS(wdiStatus);
21159}
21160#endif /* FEATURE_WLAN_LPHB */
21161
c_hpothu92367912014-05-01 15:18:17 +053021162void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
21163 void* pUserData)
21164{
21165 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
21166
21167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21168 "<------ %s " ,__func__);
21169 if (NULL == pBcnMissRateInfo)
21170 {
21171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21172 "%s: pWdaParams received NULL", __func__);
21173 VOS_ASSERT(0) ;
21174 return ;
21175 }
21176 if (pBcnMissRateInfo->callback)
21177 {
21178 pBcnMissRateInfo->callback(status, bcnMissRate,
21179 pBcnMissRateInfo->data);
21180 }
21181 vos_mem_free(pUserData);
21182
21183 return;
21184}
21185
21186v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
21187 tSirBcnMissRateReq *pData)
21188{
21189 WDI_Status wdiStatus;
21190 tSirBcnMissRateInfo *pBcnMissRateInfo;
21191
21192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21193 "------> %s " , __func__);
21194
21195 pBcnMissRateInfo =
21196 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
21197 if (NULL == pBcnMissRateInfo)
21198 {
21199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21200 "%s: VOS MEM Alloc Failure", __func__);
21201 VOS_ASSERT(0);
21202 vos_mem_free(pData);
21203 return;
21204 }
21205
21206 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
21207 pBcnMissRateInfo->data = pData->data;
21208
21209 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
21210 WDA_GetBcnMissRateCallback,
21211 pData->bssid);
21212 if (WDI_STATUS_PENDING == wdiStatus)
21213 {
21214 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21215 "Pending received for %s:%d ", __func__, __LINE__);
21216 }
21217 else if (WDI_STATUS_SUCCESS != wdiStatus)
21218 {
21219 if (pBcnMissRateInfo->callback)
21220 {
21221 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
21222 -1, pBcnMissRateInfo->data);
21223 }
21224 }
21225 vos_mem_free(pData);
21226}
Dino Mycle41bdc942014-06-10 11:30:24 +053021227
21228#ifdef WLAN_FEATURE_EXTSCAN
21229
21230/*==========================================================================
21231 FUNCTION WDA_EXTScanStartRspCallback
21232
21233 DESCRIPTION
21234 API to send EXTScan Start Response to HDD
21235
21236 PARAMETERS
21237 pEventData: Response from FW
21238 pUserData:
21239===========================================================================*/
21240void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
21241{
21242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21243 tWDA_CbContext *pWDA = NULL;
21244 void *pCallbackContext;
21245 tpAniSirGlobal pMac;
21246
21247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21248 "%s:", __func__);
21249 if (NULL == pWdaParams)
21250 {
21251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21252 "%s: pWdaParams received NULL", __func__);
21253 VOS_ASSERT(0);
21254 return;
21255 }
21256
21257 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21258
21259 if (NULL == pWDA)
21260 {
21261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21262 "%s: pWDA received NULL", __func__);
21263 VOS_ASSERT(0);
21264 goto error;
21265 }
21266
21267 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21268 if (NULL == pMac)
21269 {
21270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21271 "%s:pMac is NULL", __func__);
21272 VOS_ASSERT(0);
21273 goto error;
21274 }
21275
21276 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21277
21278 if (pMac->sme.pEXTScanIndCb)
21279 {
21280 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
21281 pEventData);
21282 }
21283 else
21284 {
21285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21286 "%s:HDD callback is null", __func__);
21287 VOS_ASSERT(0);
21288 }
21289
21290error:
21291
21292 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21293 {
21294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21295 }
21296 if (pWdaParams->wdaMsgParam != NULL)
21297 {
21298 vos_mem_free(pWdaParams->wdaMsgParam);
21299 }
21300 vos_mem_free(pWdaParams) ;
21301
21302 return;
21303}
21304
21305/*==========================================================================
21306 FUNCTION WDA_EXTScanStopRspCallback
21307
21308 DESCRIPTION
21309 API to send EXTScan Stop Response to HDD
21310
21311 PARAMETERS
21312 pEventData: Response from FW
21313 pUserData:
21314===========================================================================*/
21315void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
21316{
21317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21318 tWDA_CbContext *pWDA = NULL;
21319 void *pCallbackContext;
21320 tpAniSirGlobal pMac;
21321
21322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21323 "%s:", __func__);
21324 if (NULL == pWdaParams)
21325 {
21326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21327 "%s: pWdaParams received NULL", __func__);
21328 VOS_ASSERT(0);
21329 return;
21330 }
21331
21332 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21333
21334 if (NULL == pWDA)
21335 {
21336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21337 "%s: pWDA received NULL", __func__);
21338 VOS_ASSERT(0);
21339 goto error;
21340 }
21341
21342 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21343 if (NULL == pMac)
21344 {
21345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21346 "%s:pMac is NULL", __func__);
21347 VOS_ASSERT(0);
21348 goto error;
21349 }
21350 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21351
21352 if (pMac->sme.pEXTScanIndCb)
21353 {
21354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21355 "%s:HDD call back function called", __func__);
21356 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
21357 pEventData);
21358 }
21359 else
21360 {
21361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21362 "%s:HDD callback is null", __func__);
21363 VOS_ASSERT(0);
21364 }
21365
21366error:
21367
21368 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21369 {
21370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21371 }
21372 if (pWdaParams->wdaMsgParam != NULL)
21373 {
21374 vos_mem_free(pWdaParams->wdaMsgParam);
21375 }
21376 vos_mem_free(pWdaParams) ;
21377
21378
21379 return;
21380}
21381
21382/*==========================================================================
21383 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
21384
21385 DESCRIPTION
21386 API to send EXTScan Get Cached Results Response to HDD
21387
21388 PARAMETERS
21389 pEventData: Response from FW
21390 pUserData:
21391===========================================================================*/
21392void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
21393{
21394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21395 tWDA_CbContext *pWDA = NULL;
21396 void *pCallbackContext;
21397 tpAniSirGlobal pMac;
21398
21399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21400 "%s: ", __func__);
21401 if (NULL == pWdaParams)
21402 {
21403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21404 "%s: pWdaParams received NULL", __func__);
21405 VOS_ASSERT(0);
21406 return;
21407 }
21408
21409 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21410
21411 if (NULL == pWDA)
21412 {
21413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21414 "%s: pWDA received NULL", __func__);
21415 VOS_ASSERT(0);
21416 goto error;
21417 }
21418
21419 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21420 if (NULL == pMac)
21421 {
21422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21423 "%s:pMac is NULL", __func__);
21424 VOS_ASSERT(0);
21425 goto error;
21426 }
21427
21428 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21429
21430 if (pMac->sme.pEXTScanIndCb)
21431 {
21432 pMac->sme.pEXTScanIndCb(pCallbackContext,
21433 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
21434 pEventData);
21435 }
21436 else
21437 {
21438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21439 "%s:HDD callback is null", __func__);
21440 VOS_ASSERT(0);
21441 }
21442
21443
21444error:
21445
21446 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21447 {
21448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21449 }
21450 if (pWdaParams->wdaMsgParam != NULL)
21451 {
21452 vos_mem_free(pWdaParams->wdaMsgParam);
21453 }
21454 vos_mem_free(pWdaParams) ;
21455
21456 return;
21457}
21458
21459/*==========================================================================
21460 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
21461
21462 DESCRIPTION
21463 API to send EXTScan Get Capabilities Response to HDD
21464
21465 PARAMETERS
21466 pEventData: Response from FW
21467 pUserData:
21468===========================================================================*/
21469void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
21470{
21471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21472 tWDA_CbContext *pWDA = NULL;
21473 void *pCallbackContext;
21474 tpAniSirGlobal pMac;
21475
21476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21477 "%s:", __func__);
21478 if (NULL == pWdaParams)
21479 {
21480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21481 "%s: pWdaParams received NULL", __func__);
21482 VOS_ASSERT(0);
21483 return;
21484 }
21485
21486 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21487
21488 if (NULL == pWDA)
21489 {
21490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21491 "%s: pWDA received NULL", __func__);
21492 VOS_ASSERT(0);
21493 goto error;
21494 }
21495
21496 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21497 if (NULL == pMac)
21498 {
21499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21500 "%s:pMac is NULL", __func__);
21501 VOS_ASSERT(0);
21502 goto error;
21503 }
21504
21505 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21506
21507 if (pMac->sme.pEXTScanIndCb)
21508 {
21509 pMac->sme.pEXTScanIndCb(pCallbackContext,
21510 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
21511 pEventData);
21512 }
21513 else
21514 {
21515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21516 "%s:HDD callback is null", __func__);
21517 VOS_ASSERT(0);
21518 }
21519
21520
21521error:
21522
21523 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21524 {
21525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21526 }
21527 if (pWdaParams->wdaMsgParam != NULL)
21528 {
21529 vos_mem_free(pWdaParams->wdaMsgParam);
21530 }
21531 vos_mem_free(pWdaParams) ;
21532
21533 return;
21534}
21535
21536/*==========================================================================
21537 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
21538
21539 DESCRIPTION
21540 API to send EXTScan Set BSSID Hotlist Response to HDD
21541
21542 PARAMETERS
21543 pEventData: Response from FW
21544 pUserData:
21545===========================================================================*/
21546void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21547{
21548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21549 tWDA_CbContext *pWDA = NULL;
21550 void *pCallbackContext;
21551 tpAniSirGlobal pMac;
21552
21553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21554 "%s: ", __func__);
21555 if (NULL == pWdaParams)
21556 {
21557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21558 "%s: pWdaParams received NULL", __func__);
21559 VOS_ASSERT(0) ;
21560 return;
21561 }
21562
21563 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21564
21565 if (NULL == pWDA)
21566 {
21567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21568 "%s: pWDA received NULL", __func__);
21569 VOS_ASSERT(0);
21570 goto error;
21571 }
21572
21573 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21574 if (NULL == pMac)
21575 {
21576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21577 "%s:pMac is NULL", __func__);
21578 VOS_ASSERT(0);
21579 goto error;
21580 }
21581
21582 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21583
21584 if (pMac->sme.pEXTScanIndCb)
21585 {
21586 pMac->sme.pEXTScanIndCb(pCallbackContext,
21587 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
21588 pEventData);
21589 }
21590 else
21591 {
21592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21593 "%s:HDD callback is null", __func__);
21594 VOS_ASSERT(0);
21595 }
21596
21597
21598error:
21599
21600 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21601 {
21602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21603 }
21604 if (pWdaParams->wdaMsgParam != NULL)
21605 {
21606 vos_mem_free(pWdaParams->wdaMsgParam);
21607 }
21608 vos_mem_free(pWdaParams) ;
21609
21610 return;
21611}
21612
21613/*==========================================================================
21614 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
21615
21616 DESCRIPTION
21617 API to send EXTScan ReSet BSSID Hotlist Response to HDD
21618
21619 PARAMETERS
21620 pEventData: Response from FW
21621 pUserData:
21622===========================================================================*/
21623void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21624{
21625 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21626 tWDA_CbContext *pWDA = NULL;
21627 void *pCallbackContext;
21628 tpAniSirGlobal pMac;
21629
21630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21631 "%s:", __func__);
21632 if (NULL == pWdaParams)
21633 {
21634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21635 "%s: pWdaParams received NULL", __func__);
21636 VOS_ASSERT(0) ;
21637 return;
21638 }
21639
21640 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21641
21642 if (NULL == pWDA)
21643 {
21644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21645 "%s: pWDA received NULL", __func__);
21646 VOS_ASSERT(0);
21647 goto error;
21648 }
21649
21650 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21651 if (NULL == pMac)
21652 {
21653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21654 "%s:pMac is NULL", __func__);
21655 VOS_ASSERT(0);
21656 goto error;
21657 }
21658
21659 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21660
21661 if (pMac->sme.pEXTScanIndCb)
21662 {
21663 pMac->sme.pEXTScanIndCb(pCallbackContext,
21664 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
21665 pEventData);
21666 }
21667 else
21668 {
21669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21670 "%s:HDD callback is null", __func__);
21671 VOS_ASSERT(0);
21672 }
21673
21674
21675error:
21676
21677 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21678 {
21679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21680 }
21681 if (pWdaParams->wdaMsgParam != NULL)
21682 {
21683 vos_mem_free(pWdaParams->wdaMsgParam);
21684 }
21685 vos_mem_free(pWdaParams) ;
21686
21687 return;
21688}
21689
21690/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021691 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
21692
21693 DESCRIPTION
21694 API to send EXTScan Set SSID Hotlist Response to HDD
21695
21696 PARAMETERS
21697 pEventData: Response from FW
21698 pUserData:
21699===========================================================================*/
21700void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21701{
21702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21703 tWDA_CbContext *pWDA = NULL;
21704 void *pCallbackContext;
21705 tpAniSirGlobal pMac;
21706
21707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21708 "%s: ", __func__);
21709 if (NULL == pWdaParams)
21710 {
21711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21712 "%s: pWdaParams received NULL", __func__);
21713 VOS_ASSERT(0) ;
21714 return;
21715 }
21716
21717 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21718
21719 if (NULL == pWDA)
21720 {
21721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21722 "%s: pWDA received NULL", __func__);
21723 VOS_ASSERT(0);
21724 goto error;
21725 }
21726
21727 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21728 if (NULL == pMac)
21729 {
21730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21731 "%s:pMac is NULL", __func__);
21732 VOS_ASSERT(0);
21733 goto error;
21734 }
21735
21736 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21737
21738 if (pMac->sme.pEXTScanIndCb)
21739 {
21740 pMac->sme.pEXTScanIndCb(pCallbackContext,
21741 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
21742 pEventData);
21743 }
21744 else
21745 {
21746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21747 "%s:HDD callback is null", __func__);
21748 VOS_ASSERT(0);
21749 }
21750
21751
21752error:
21753
21754 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21755 {
21756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21757 }
21758 if (pWdaParams->wdaMsgParam != NULL)
21759 {
21760 vos_mem_free(pWdaParams->wdaMsgParam);
21761 }
21762 vos_mem_free(pWdaParams) ;
21763
21764 return;
21765}
21766
21767/*==========================================================================
21768 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
21769
21770 DESCRIPTION
21771 API to send EXTScan ReSet SSID Hotlist Response to HDD
21772
21773 PARAMETERS
21774 pEventData: Response from FW
21775 pUserData:
21776===========================================================================*/
21777void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21778{
21779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21780 tWDA_CbContext *pWDA = NULL;
21781 void *pCallbackContext;
21782 tpAniSirGlobal pMac;
21783
21784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21785 "%s:", __func__);
21786 if (NULL == pWdaParams)
21787 {
21788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21789 "%s: pWdaParams received NULL", __func__);
21790 VOS_ASSERT(0) ;
21791 return;
21792 }
21793
21794 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21795
21796 if (NULL == pWDA)
21797 {
21798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21799 "%s: pWDA received NULL", __func__);
21800 VOS_ASSERT(0);
21801 goto error;
21802 }
21803
21804 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21805 if (NULL == pMac)
21806 {
21807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21808 "%s:pMac is NULL", __func__);
21809 VOS_ASSERT(0);
21810 goto error;
21811 }
21812
21813 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21814
21815 if (pMac->sme.pEXTScanIndCb)
21816 {
21817 pMac->sme.pEXTScanIndCb(pCallbackContext,
21818 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
21819 pEventData);
21820 }
21821 else
21822 {
21823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21824 "%s:HDD callback is null", __func__);
21825 VOS_ASSERT(0);
21826 }
21827
21828
21829error:
21830
21831 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21832 {
21833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21834 }
21835 if (pWdaParams->wdaMsgParam != NULL)
21836 {
21837 vos_mem_free(pWdaParams->wdaMsgParam);
21838 }
21839 vos_mem_free(pWdaParams) ;
21840
21841 return;
21842}
21843
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021844/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053021845 FUNCTION WDA_ProcessEXTScanStartReq
21846
21847 DESCRIPTION
21848 API to send EXTScan Start Request to WDI
21849
21850 PARAMETERS
21851 pWDA: Pointer to WDA context
21852 wdaRequest: Pointer to EXTScan req parameters
21853===========================================================================*/
21854VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
21855 tSirEXTScanStartReqParams *wdaRequest)
21856{
21857 WDI_Status status = WDI_STATUS_SUCCESS;
21858 tWDA_ReqParams *pWdaParams;
21859
21860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21861 "%s: ", __func__);
21862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21863 if (NULL == pWdaParams)
21864 {
21865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21866 "%s: VOS MEM Alloc Failure", __func__);
21867 VOS_ASSERT(0);
21868 return VOS_STATUS_E_NOMEM;
21869 }
21870 pWdaParams->pWdaContext = pWDA;
21871 pWdaParams->wdaMsgParam = wdaRequest;
21872 pWdaParams->wdaWdiApiMsgParam = NULL;
21873
21874 status = WDI_EXTScanStartReq((void *)wdaRequest,
21875 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
21876 (void *)pWdaParams);
21877 if (IS_WDI_STATUS_FAILURE(status))
21878 {
21879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21880 "Failure to request. Free all the memory " );
21881 vos_mem_free(pWdaParams->wdaMsgParam);
21882 vos_mem_free(pWdaParams);
21883 }
21884 return CONVERT_WDI2VOS_STATUS(status);
21885}
21886
21887/*==========================================================================
21888 FUNCTION WDA_ProcessEXTScanStopReq
21889
21890 DESCRIPTION
21891 API to send EXTScan Start Request to WDI
21892
21893 PARAMETERS
21894 pWDA: Pointer to WDA context
21895 wdaRequest: Pointer to EXTScan req parameters
21896===========================================================================*/
21897VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
21898 tSirEXTScanStopReqParams *wdaRequest)
21899{
21900 WDI_Status status = WDI_STATUS_SUCCESS;
21901 tWDA_ReqParams *pWdaParams;
21902
21903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21904 "%s:", __func__);
21905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21906 if (NULL == pWdaParams)
21907 {
21908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21909 "%s: VOS MEM Alloc Failure", __func__);
21910 VOS_ASSERT(0);
21911 return VOS_STATUS_E_NOMEM;
21912 }
21913 pWdaParams->pWdaContext = pWDA;
21914 pWdaParams->wdaMsgParam = wdaRequest;
21915 pWdaParams->wdaWdiApiMsgParam = NULL;
21916
21917 status = WDI_EXTScanStopReq((void *)wdaRequest,
21918 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
21919 (void *)pWdaParams);
21920 if (IS_WDI_STATUS_FAILURE(status))
21921 {
21922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21923 "Failure to request. Free all the memory " );
21924 vos_mem_free(pWdaParams->wdaMsgParam);
21925 vos_mem_free(pWdaParams);
21926 }
21927 return CONVERT_WDI2VOS_STATUS(status);
21928}
21929
21930/*==========================================================================
21931 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
21932
21933 DESCRIPTION
21934 API to send EXTScan Get Cached Results Request to WDI
21935
21936 PARAMETERS
21937 pWDA: Pointer to WDA context
21938 wdaRequest: Pointer to EXTScan req parameters
21939===========================================================================*/
21940VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
21941 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
21942{
21943 WDI_Status status = WDI_STATUS_SUCCESS;
21944 tWDA_ReqParams *pWdaParams;
21945
21946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21947 "%s: ", __func__);
21948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21949 if (NULL == pWdaParams)
21950 {
21951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21952 "%s: VOS MEM Alloc Failure", __func__);
21953 VOS_ASSERT(0);
21954 return VOS_STATUS_E_NOMEM;
21955 }
21956 pWdaParams->pWdaContext = pWDA;
21957 pWdaParams->wdaMsgParam = wdaRequest;
21958 pWdaParams->wdaWdiApiMsgParam = NULL;
21959
21960 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
21961 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
21962 (void *)pWdaParams);
21963 if (IS_WDI_STATUS_FAILURE(status))
21964 {
21965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21966 "Failure to request. Free all the memory " );
21967 vos_mem_free(pWdaParams->wdaMsgParam);
21968 vos_mem_free(pWdaParams);
21969 }
21970 return CONVERT_WDI2VOS_STATUS(status);
21971}
21972
21973/*==========================================================================
21974 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
21975
21976 DESCRIPTION
21977 API to send EXTScan Get Capabilities Request to WDI
21978
21979 PARAMETERS
21980 pWDA: Pointer to WDA context
21981 wdaRequest: Pointer to EXTScan req parameters
21982===========================================================================*/
21983VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
21984 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
21985{
21986 WDI_Status status = WDI_STATUS_SUCCESS;
21987 tWDA_ReqParams *pWdaParams;
21988
21989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21990 "%s:", __func__);
21991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21992 if (NULL == pWdaParams)
21993 {
21994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21995 "%s: VOS MEM Alloc Failure", __func__);
21996 VOS_ASSERT(0);
21997 return VOS_STATUS_E_NOMEM;
21998 }
21999 pWdaParams->pWdaContext = pWDA;
22000 pWdaParams->wdaMsgParam = wdaRequest;
22001 pWdaParams->wdaWdiApiMsgParam = NULL;
22002
22003 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
22004 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
22005 (void *)pWdaParams);
22006 if (IS_WDI_STATUS_FAILURE(status))
22007 {
22008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22009 "Failure to request. Free all the memory " );
22010 vos_mem_free(pWdaParams->wdaMsgParam);
22011 vos_mem_free(pWdaParams);
22012 }
22013 return CONVERT_WDI2VOS_STATUS(status);
22014}
22015
22016/*==========================================================================
22017 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
22018
22019 DESCRIPTION
22020 API to send Set BSSID Hotlist Request to WDI
22021
22022 PARAMETERS
22023 pWDA: Pointer to WDA context
22024 wdaRequest: Pointer to EXTScan req parameters
22025===========================================================================*/
22026VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22027 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
22028{
22029 WDI_Status status = WDI_STATUS_SUCCESS;
22030 tWDA_ReqParams *pWdaParams;
22031
22032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22033 "%s: ", __func__);
22034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22035 if (NULL == pWdaParams)
22036 {
22037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22038 "%s: VOS MEM Alloc Failure", __func__);
22039 VOS_ASSERT(0);
22040 return VOS_STATUS_E_NOMEM;
22041 }
22042 pWdaParams->pWdaContext = pWDA;
22043 pWdaParams->wdaMsgParam = wdaRequest;
22044 pWdaParams->wdaWdiApiMsgParam = NULL;
22045
22046 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
22047 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
22048 (void *)pWdaParams);
22049 if (IS_WDI_STATUS_FAILURE(status))
22050 {
22051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22052 "Failure to request. Free all the memory " );
22053 vos_mem_free(pWdaParams->wdaMsgParam);
22054 vos_mem_free(pWdaParams);
22055 }
22056 return CONVERT_WDI2VOS_STATUS(status);
22057}
22058
22059/*==========================================================================
22060 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
22061
22062 DESCRIPTION
22063 API to send Reset BSSID Hotlist Request to WDI
22064
22065 PARAMETERS
22066 pWDA: Pointer to WDA context
22067 wdaRequest: Pointer to EXTScan req parameters
22068===========================================================================*/
22069VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22070 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
22071{
22072 WDI_Status status = WDI_STATUS_SUCCESS;
22073 tWDA_ReqParams *pWdaParams;
22074
22075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22076 "%s:", __func__);
22077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22078 if (NULL == pWdaParams)
22079 {
22080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22081 "%s: VOS MEM Alloc Failure", __func__);
22082 VOS_ASSERT(0);
22083 return VOS_STATUS_E_NOMEM;
22084 }
22085 pWdaParams->pWdaContext = pWDA;
22086 pWdaParams->wdaMsgParam = wdaRequest;
22087 pWdaParams->wdaWdiApiMsgParam = NULL;
22088
22089 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
22090 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
22091 (void *)pWdaParams);
22092 if (IS_WDI_STATUS_FAILURE(status))
22093 {
22094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22095 "Failure to request. Free all the memory " );
22096 vos_mem_free(pWdaParams->wdaMsgParam);
22097 vos_mem_free(pWdaParams);
22098 }
22099 return CONVERT_WDI2VOS_STATUS(status);
22100}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022101
22102/*==========================================================================
22103 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
22104
22105 DESCRIPTION
22106 API to send Set SSID Hotlist Request to WDI
22107
22108 PARAMETERS
22109 pWDA: Pointer to WDA context
22110 wdaRequest: Pointer to EXTScan req parameters
22111===========================================================================*/
22112VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
22113 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
22114{
22115 WDI_Status status = WDI_STATUS_SUCCESS;
22116 tWDA_ReqParams *pWdaParams;
22117
22118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22119 "%s: ", __func__);
22120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22121 if (NULL == pWdaParams)
22122 {
22123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22124 "%s: VOS MEM Alloc Failure", __func__);
22125 VOS_ASSERT(0);
22126 return VOS_STATUS_E_NOMEM;
22127 }
22128 pWdaParams->pWdaContext = pWDA;
22129 pWdaParams->wdaMsgParam = wdaRequest;
22130 pWdaParams->wdaWdiApiMsgParam = NULL;
22131
22132 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
22133 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
22134 (void *)pWdaParams);
22135 if (IS_WDI_STATUS_FAILURE(status))
22136 {
22137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22138 "Failure to request. Free all the memory " );
22139 vos_mem_free(pWdaParams->wdaMsgParam);
22140 vos_mem_free(pWdaParams);
22141 }
22142 return CONVERT_WDI2VOS_STATUS(status);
22143}
22144
22145/*==========================================================================
22146 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
22147
22148 DESCRIPTION
22149 API to send Reset SSID Hotlist Request to WDI
22150
22151 PARAMETERS
22152 pWDA: Pointer to WDA context
22153 wdaRequest: Pointer to EXTScan req parameters
22154===========================================================================*/
22155VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
22156 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
22157{
22158 WDI_Status status = WDI_STATUS_SUCCESS;
22159 tWDA_ReqParams *pWdaParams;
22160
22161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22162 "%s:", __func__);
22163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22164 if (NULL == pWdaParams)
22165 {
22166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22167 "%s: VOS MEM Alloc Failure", __func__);
22168 VOS_ASSERT(0);
22169 return VOS_STATUS_E_NOMEM;
22170 }
22171 pWdaParams->pWdaContext = pWDA;
22172 pWdaParams->wdaMsgParam = wdaRequest;
22173 pWdaParams->wdaWdiApiMsgParam = NULL;
22174
22175 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
22176 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
22177 (void *)pWdaParams);
22178 if (IS_WDI_STATUS_FAILURE(status))
22179 {
22180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22181 "Failure to request. Free all the memory " );
22182 vos_mem_free(pWdaParams->wdaMsgParam);
22183 vos_mem_free(pWdaParams);
22184 }
22185 return CONVERT_WDI2VOS_STATUS(status);
22186}
22187
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053022188/*==========================================================================
22189 FUNCTION WDA_ProcessHighPriorityDataInfoInd
22190
22191 DESCRIPTION
22192 API to send Reset SSID Hotlist Request to WDI
22193
22194 PARAMETERS
22195 pWDA: Pointer to WDA context
22196 wdaRequest: Pointer to EXTScan req parameters
22197===========================================================================*/
22198VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
22199 tSirHighPriorityDataInfoInd *wdaRequest)
22200{
22201 WDI_Status status = WDI_STATUS_SUCCESS;
22202
22203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22204 "%s:", __func__);
22205
22206 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
22207 if (WDI_STATUS_PENDING == status)
22208 {
22209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22210 FL("pending status received "));
22211 }
22212 else if (WDI_STATUS_SUCCESS_SYNC != status)
22213 {
22214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22215 FL("Failure status %d"), status);
22216 }
22217 return CONVERT_WDI2VOS_STATUS(status);
22218}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022219
Dino Mycle41bdc942014-06-10 11:30:24 +053022220#endif /* WLAN_FEATURE_EXTSCAN */
22221
Sunil Duttbd736ed2014-05-26 21:19:41 +053022222#ifdef WLAN_FEATURE_LINK_LAYER_STATS
22223
22224/*==========================================================================
22225 FUNCTION WDA_LLStatsSetRspCallback
22226
22227 DESCRIPTION
22228 API to process set link layer statistics response from FW
22229
22230 PARAMETERS
22231 pRsp: Pointer to set link layer statistics response
22232 pUserData: Pointer to user data
22233
22234 RETURN VALUE
22235 NONE
22236
22237===========================================================================*/
22238void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
22239{
22240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22241
22242
22243 if (NULL == pWdaParams)
22244 {
22245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22246 "%s: pWdaParams received NULL", __func__);
22247 VOS_ASSERT(0) ;
22248 return ;
22249 }
22250
22251 /* Do not need to send notification to upper layer
22252 * Just free allocated resources */
22253 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22254 {
22255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22256 }
22257 if (pWdaParams->wdaMsgParam != NULL)
22258 {
22259 vos_mem_free(pWdaParams->wdaMsgParam);
22260 }
22261 vos_mem_free(pWdaParams) ;
22262
22263 return;
22264}
22265
22266/*==========================================================================
22267 FUNCTION WDA_ProcessLLStatsSetReq
22268
22269 DESCRIPTION
22270 API to send Set Link Layer Stats request to WDI
22271
22272 PARAMETERS
22273 pWDA: Pointer to WDA context
22274 wdaRequest: Pointer to set Link Layer Stats req parameters
22275===========================================================================*/
22276VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
22277 tSirLLStatsSetReq *wdaRequest)
22278{
22279 WDI_Status status = WDI_STATUS_SUCCESS;
22280 tWDA_ReqParams *pWdaParams;
22281
22282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22283 if (NULL == pWdaParams)
22284 {
22285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22286 "%s: VOS MEM Alloc Failure", __func__);
22287 VOS_ASSERT(0);
22288 return VOS_STATUS_E_NOMEM;
22289 }
22290 pWdaParams->pWdaContext = pWDA;
22291 pWdaParams->wdaMsgParam = wdaRequest;
22292 pWdaParams->wdaWdiApiMsgParam = NULL;
22293
22294 status = WDI_LLStatsSetReq((void *)wdaRequest,
22295 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
22296 (void *)pWdaParams);
22297 if (IS_WDI_STATUS_FAILURE(status))
22298 {
22299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22300 "Failure to request. Free all the memory " );
22301 vos_mem_free(pWdaParams->wdaMsgParam);
22302 vos_mem_free(pWdaParams);
22303 }
22304 return CONVERT_WDI2VOS_STATUS(status);
22305}
22306
22307/*==========================================================================
22308 FUNCTION WDA_LLStatsGetRspCallback
22309
22310 DESCRIPTION
22311 API to process get link layer statistics response from FW
22312
22313 PARAMETERS
22314 pRsp: Pointer to get link layer statistics response
22315 pUserData: Pointer to user data
22316
22317 RETURN VALUE
22318 NONE
22319
22320===========================================================================*/
22321void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
22322{
22323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22324
22325 if (NULL == pWdaParams)
22326 {
22327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22328 "%s: pWdaParams received NULL", __func__);
22329 VOS_ASSERT(0) ;
22330 return ;
22331 }
22332
22333 /* Do not need to send notification to upper layer
22334 * Just free allocated resources */
22335 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22336 {
22337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22338 }
22339 if (pWdaParams->wdaMsgParam != NULL)
22340 {
22341 vos_mem_free(pWdaParams->wdaMsgParam);
22342 }
22343 vos_mem_free(pWdaParams) ;
22344
22345 return;
22346}
22347
22348/*==========================================================================
22349 FUNCTION WDA_ProcessLLStatsGetReq
22350
22351 DESCRIPTION
22352 API to send Get Link Layer Stats request to WDI
22353
22354 PARAMETERS
22355 pWDA: Pointer to WDA context
22356 wdaRequest: Pointer to get Link Layer Stats req parameters
22357===========================================================================*/
22358VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
22359 tSirLLStatsGetReq *wdaRequest)
22360{
22361 WDI_Status status = WDI_STATUS_SUCCESS;
22362 tWDA_ReqParams *pWdaParams;
22363
22364 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22365 if (NULL == pWdaParams)
22366 {
22367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22368 "%s: VOS MEM Alloc Failure", __func__);
22369 VOS_ASSERT(0);
22370 return VOS_STATUS_E_NOMEM;
22371 }
22372 pWdaParams->pWdaContext = pWDA;
22373 pWdaParams->wdaMsgParam = wdaRequest;
22374 pWdaParams->wdaWdiApiMsgParam = NULL;
22375
22376 status = WDI_LLStatsGetReq((void *) wdaRequest,
22377 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
22378 (void *)pWdaParams);
22379 if (IS_WDI_STATUS_FAILURE(status))
22380 {
22381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22382 "Failure to request. Free all the memory " );
22383 vos_mem_free(pWdaParams->wdaMsgParam);
22384 vos_mem_free(pWdaParams);
22385 }
22386 return CONVERT_WDI2VOS_STATUS(status);
22387}
22388
22389/*==========================================================================
22390 FUNCTION WDA_LLStatsClearRspCallback
22391
22392 DESCRIPTION
22393 API to process clear link layer statistics response from FW
22394
22395 PARAMETERS
22396 pRsp: Pointer to clear link layer statistics response
22397 pUserData: Pointer to user data
22398
22399 RETURN VALUE
22400 NONE
22401
22402===========================================================================*/
22403void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
22404{
22405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22406
22407
22408 if (NULL == pWdaParams)
22409 {
22410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22411 "%s: pWdaParams received NULL", __func__);
22412 VOS_ASSERT(0) ;
22413 return ;
22414 }
22415 /* Do not need to send notification to upper layer
22416 * Just free allocated resources */
22417 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22418 {
22419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22420 }
22421 if (pWdaParams->wdaMsgParam != NULL)
22422 {
22423 vos_mem_free(pWdaParams->wdaMsgParam);
22424 }
22425 vos_mem_free(pWdaParams) ;
22426 return;
22427}
22428
22429/*==========================================================================
22430 FUNCTION WDA_ProcessLLStatsClearReq
22431
22432 DESCRIPTION
22433 API to send Clear Link Layer Stats request to WDI
22434
22435 PARAMETERS
22436 pWDA: Pointer to WDA context
22437 wdaRequest: Pointer to earLink Layer Stats req
22438===========================================================================*/
22439VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
22440 tSirLLStatsClearReq *wdaRequest)
22441{
22442 WDI_Status status = WDI_STATUS_SUCCESS;
22443 tWDA_ReqParams *pWdaParams;
22444
22445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22446 if (NULL == pWdaParams)
22447 {
22448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22449 "%s: VOS MEM Alloc Failure", __func__);
22450 VOS_ASSERT(0);
22451 return VOS_STATUS_E_NOMEM;
22452 }
22453 pWdaParams->pWdaContext = pWDA;
22454 pWdaParams->wdaMsgParam = wdaRequest;
22455 pWdaParams->wdaWdiApiMsgParam = NULL;
22456
22457 status = WDI_LLStatsClearReq((void *) wdaRequest,
22458 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
22459 (void *)pWdaParams);
22460 if (IS_WDI_STATUS_FAILURE(status))
22461 {
22462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22463 "Failure to request. Free all the memory " );
22464 vos_mem_free(pWdaParams->wdaMsgParam);
22465 vos_mem_free(pWdaParams);
22466 }
22467 return CONVERT_WDI2VOS_STATUS(status);
22468}
22469
22470#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053022471
Abhishek Singh85b74712014-10-08 11:38:19 +053022472void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
22473{
22474 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
22475
22476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22477 "<------ %s " ,__func__);
22478 if (NULL == fwStatsinfo)
22479 {
22480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22481 "%s: pWdaParams received NULL", __func__);
22482 VOS_ASSERT(0);
22483 return;
22484 }
22485
22486 if(fwStatsinfo->callback)
22487 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
22488
22489 vos_mem_free(pUserData);
22490 return;
22491}
22492
22493
22494v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
22495 tSirFWStatsGetReq *pData)
22496{
22497
22498 WDI_Status wdiStatus;
22499 tSirFWStatsInfo *fwStatsinfo;
22500
22501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22502 "------> %s" , __func__);
22503
22504 fwStatsinfo =
22505 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
22506 if (NULL == fwStatsinfo)
22507 {
22508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22509 "%s: VOS MEM Alloc Failure", __func__);
22510 VOS_ASSERT(0);
22511 vos_mem_free(pData);
22512 return;
22513 }
22514
22515 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
22516 fwStatsinfo->data = pData->data;
22517
22518 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
22519 WDA_FWStatsGetRspCallback,
22520 pData->stats);
22521 if (WDI_STATUS_PENDING == wdiStatus)
22522 {
22523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22524 "Pending received for %s:%d ", __func__, __LINE__);
22525 }
22526 else if (WDI_STATUS_SUCCESS != wdiStatus)
22527 {
22528 if (fwStatsinfo->callback)
22529 {
22530 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
22531 }
22532 vos_mem_free(fwStatsinfo);
22533 }
22534 vos_mem_free(pData);
22535}
22536
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053022537/*==========================================================================
22538 FUNCTION WDA_EncryptMsgRspCallback
22539
22540 DESCRIPTION
22541 API to send Encrypt message response to HDD
22542
22543 PARAMETERS
22544 pEventData: Response from FW
22545 pUserData: Data sent to firmware as part of request
22546===========================================================================*/
22547void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
22548 void* pUserData)
22549{
22550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22551 tWDA_CbContext *pWDA = NULL;
22552 tpAniSirGlobal pMac;
22553 vos_msg_t vosMsg;
22554 tpSirEncryptedDataRspParams pEncRspParams;
22555 tpSetEncryptedDataRspParams pEncryptedDataRsp;
22556
22557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22558 FL("%s:"), __func__);
22559 if (NULL == pWdaParams)
22560 {
22561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22562 FL("%s: pWdaParams received NULL"), __func__);
22563 VOS_ASSERT(0);
22564 return;
22565 }
22566
22567 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22568
22569 if (NULL == pWDA)
22570 {
22571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22572 FL("%s: pWDA received NULL"), __func__);
22573 VOS_ASSERT(0);
22574 goto error;
22575 }
22576
22577 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22578 if (NULL == pMac)
22579 {
22580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22581 FL("%s:pMac is NULL"), __func__);
22582 VOS_ASSERT(0);
22583 goto error;
22584 }
22585
22586 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
22587
22588 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
22589 if (NULL == pEncRspParams)
22590 {
22591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22592 FL("%s: VOS MEM Alloc Failure"), __func__);
22593 VOS_ASSERT(0);
22594 goto error;
22595 }
22596
22597 /* Message Header */
22598 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
22599 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
22600 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
22601 pEncryptedDataRsp->encryptedPayload.length;
22602 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
22603 pEncryptedDataRsp->encryptedPayload.data,
22604 pEncryptedDataRsp->encryptedPayload.length);
22605
22606 /* VOS message wrapper */
22607 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
22608 vosMsg.bodyptr = (void *)pEncRspParams;
22609 vosMsg.bodyval = 0;
22610
22611 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
22612 {
22613 /* free the mem */
22614 vos_mem_free((v_VOID_t *) pEncRspParams);
22615 }
22616
22617error:
22618
22619 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22620 {
22621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22622 }
22623 if (pWdaParams->wdaMsgParam != NULL)
22624 {
22625 vos_mem_free(pWdaParams->wdaMsgParam);
22626 }
22627 vos_mem_free(pWdaParams) ;
22628
22629 return;
22630}
22631/*==========================================================================
22632 FUNCTION WDA_ProcessEncryptMsgReq
22633
22634 DESCRIPTION
22635 API to send Encrypt message Request to WDI
22636
22637 PARAMETERS
22638 pWDA: Pointer to WDA context
22639 wdaRequest: Pointer to Encrypt_msg req parameters
22640===========================================================================*/
22641VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
22642 u8 *wdaRequest)
22643{
22644 WDI_Status status = WDI_STATUS_SUCCESS;
22645 tWDA_ReqParams *pWdaParams;
22646
22647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22648 FL("%s: "), __func__);
22649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22650 if (NULL == pWdaParams)
22651 {
22652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22653 FL("%s: VOS MEM Alloc Failure"), __func__);
22654 VOS_ASSERT(0);
22655 return VOS_STATUS_E_NOMEM;
22656 }
22657 pWdaParams->pWdaContext = pWDA;
22658 pWdaParams->wdaMsgParam = wdaRequest;
22659 pWdaParams->wdaWdiApiMsgParam = NULL;
22660
22661 status = WDI_EncryptMsgReq((void *)wdaRequest,
22662 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22663 (void *)pWdaParams);
22664 if (IS_WDI_STATUS_FAILURE(status))
22665 {
22666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22667 FL("Failure to request. Free all the memory " ));
22668 vos_mem_free(pWdaParams->wdaMsgParam);
22669 vos_mem_free(pWdaParams);
22670 }
22671 return CONVERT_WDI2VOS_STATUS(status);
22672}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022673/*==========================================================================
22674 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22675
22676 DESCRIPTION
22677 API to enable/disable RTS/CTS for different modes.
22678
22679 PARAMETERS
22680 pWDA: Pointer to WDA context
22681 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22682===========================================================================*/
22683
22684VOS_STATUS
22685WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22686 tANI_U32 rtsCtsVal)
22687{
22688 WDI_Status status;
22689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22690 FL("---> %s"), __func__);
22691 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22692 if (WDI_STATUS_PENDING == status)
22693 {
22694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22695 FL("pending status received "));
22696 }
22697 else if (WDI_STATUS_SUCCESS_SYNC != status)
22698 {
22699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22700 FL("Failure status %d"), status);
22701 }
22702 return CONVERT_WDI2VOS_STATUS(status) ;
22703}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022704
22705void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022706{
22707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022708 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022709
22710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22711 "<------ %s " ,__func__);
22712 if (NULL == pWdaParams)
22713 {
22714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22715 "%s: pWdaParams received NULL", __func__);
22716 VOS_ASSERT(0) ;
22717 return ;
22718 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022719 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22720 if (pData != NULL) {
22721 pData->callback(pData->magic, pData->cmpVar);
22722 vos_mem_free(pWdaParams->wdaMsgParam);
22723 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022724 vos_mem_free(pWdaParams) ;
22725
22726 return;
22727}
22728
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022729VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022730{
22731
22732 WDI_Status status = WDI_STATUS_SUCCESS;
22733 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022734 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022735
22736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22737 FL("%s: "), __func__);
22738 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22739 if (NULL == pWdaParams)
22740 {
22741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22742 FL("%s: VOS MEM Alloc Failure"), __func__);
22743 VOS_ASSERT(0);
22744 return VOS_STATUS_E_NOMEM;
22745 }
22746 pWdaParams->pWdaContext = pWDA;
22747 pWdaParams->wdaMsgParam = wdaRequest;
22748 pWdaParams->wdaWdiApiMsgParam = NULL;
22749
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022750 status = WDI_MonStartReq(pMonModeData->data,
22751 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022752 (void *)pWdaParams);
22753 if (IS_WDI_STATUS_FAILURE(status))
22754 {
22755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22756 "Failure to request. Free all the memory " );
22757 vos_mem_free(pWdaParams->wdaMsgParam);
22758 vos_mem_free(pWdaParams);
22759 }
22760 return CONVERT_WDI2VOS_STATUS(status);
22761}
22762
Katya Nigamf0511f62015-05-05 16:40:57 +053022763VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22764{
22765
22766 WDI_Status status = WDI_STATUS_SUCCESS;
22767 tWDA_ReqParams *pWdaParams;
22768
22769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22770 FL("%s: "), __func__);
22771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22772 if (NULL == pWdaParams)
22773 {
22774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22775 FL("%s: VOS MEM Alloc Failure"), __func__);
22776 VOS_ASSERT(0);
22777 return VOS_STATUS_E_NOMEM;
22778 }
22779 pWdaParams->pWdaContext = pWDA;
22780 pWdaParams->wdaMsgParam = wdaRequest;
22781 pWdaParams->wdaWdiApiMsgParam = NULL;
22782
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22784 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022785 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022786 (void *)pWdaParams);
22787
22788 if (IS_WDI_STATUS_FAILURE(status))
22789 {
22790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22791 "Failure to request. Free all the memory " );
22792 vos_mem_free(pWdaParams->wdaMsgParam);
22793 vos_mem_free(pWdaParams);
22794 }
22795 return CONVERT_WDI2VOS_STATUS(status);
22796}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022797
22798VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22799{
22800 WDI_Status status;
22801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22802 FL("---> %s"), __func__);
22803 status = WDI_EnableDisableCAEventInd(val);
22804 if (WDI_STATUS_PENDING == status)
22805 {
22806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22807 FL("pending status received "));
22808 }
22809 else if (WDI_STATUS_SUCCESS_SYNC != status)
22810 {
22811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22812 FL("Failure status %d"), status);
22813 }
22814 return CONVERT_WDI2VOS_STATUS(status) ;
22815}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022816
22817/*==========================================================================
22818 FUNCTION WDA_WifiConfigSetRspCallback
22819
22820 DESCRIPTION
22821 API to process set WifiConfig response from FW
22822
22823 PARAMETERS
22824 pRsp: Pointer to set WifiConfig response
22825 pUserData: Pointer to user data
22826
22827 RETURN VALUE
22828 NONE
22829
22830===========================================================================*/
22831void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22832{
22833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22834
22835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22836 "<------ %s " ,__func__);
22837
22838 if(NULL == pWdaParams)
22839 {
22840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22841 "%s: pWdaParams received NULL", __func__);
22842 VOS_ASSERT(0);
22843 return ;
22844 }
22845
22846 if(NULL == pWdaParams->wdaMsgParam)
22847 {
22848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22849 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
22850 VOS_ASSERT(0);
22851 vos_mem_free(pWdaParams);
22852 return ;
22853 }
22854
22855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22856 vos_mem_free(pWdaParams->wdaMsgParam);
22857 vos_mem_free(pWdaParams);
22858
22859 return;
22860}
22861
22862/*==========================================================================
22863 FUNCTION WDA_ProcessWifiConfigReq
22864
22865 DESCRIPTION
22866 API to send Set WifiConfig params request to WDI
22867
22868 PARAMETERS
22869 pWDA: Pointer to WDA context
22870 wdaRequest: Pointer to set WifiConfig req parameters
22871===========================================================================*/
22872
22873VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
22874 tSetWifiConfigParams *pwdaWificonfig)
22875{
22876 WDI_Status status = WDI_STATUS_SUCCESS;
22877 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
22878 tWDA_ReqParams *pWdaParams ;
22879 WDI_Status wstatus;
22880
22881 /* Sanity Check*/
22882 if(NULL == pwdaWificonfig)
22883 {
22884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22885 "%s: tSetWifiConfigParams received NULL", __func__);
22886 VOS_ASSERT(0) ;
22887 return VOS_STATUS_E_FAULT;
22888 }
22889
22890 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
22891 sizeof(WDI_WifiConfigSetReqType));
22892 if(NULL == pwdiWifConfigSetReqParams)
22893 {
22894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22895 "%s: VOS MEM Alloc Failure", __func__);
22896 VOS_ASSERT(0);
22897 vos_mem_free(pwdaWificonfig);
22898 return VOS_STATUS_E_NOMEM;
22899 }
22900
22901 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
22902 if(NULL == pWdaParams)
22903 {
22904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22905 "%s: VOS MEM Alloc Failure", __func__);
22906 VOS_ASSERT(0);
22907 vos_mem_free(pwdiWifConfigSetReqParams);
22908 vos_mem_free(pwdaWificonfig);
22909 return VOS_STATUS_E_NOMEM;
22910 }
22911 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
22912 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
22913 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
22914 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
22915
22916 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053022917 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022918 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
22919
22920 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
22921 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
22922 pWdaParams);
22923 if(IS_WDI_STATUS_FAILURE(wstatus))
22924 {
22925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22926 "Failure in sendind WifiConfigReq, free all the memory" );
22927 status = CONVERT_WDI2VOS_STATUS(wstatus);
22928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
22929 vos_mem_free(pWdaParams->wdaMsgParam);
22930 vos_mem_free(pWdaParams);
22931 }
22932
22933 return status;
22934
22935}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022936
22937#ifdef FEATURE_OEM_DATA_SUPPORT
22938/*
22939 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
22940 * Request to WDI.
22941 */
22942VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
22943 tOemDataReqNewConfig *pOemDataReqNewConfig)
22944{
22945 VOS_STATUS status = VOS_STATUS_SUCCESS;
22946 WDI_Status wstatus;
22947 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
22948
22949 /* Sanity Check*/
22950 if(NULL == pOemDataReqNewConfig)
22951 {
22952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22953 "%s: pOemDataReqNewConfig received NULL", __func__);
22954 VOS_ASSERT(0) ;
22955 return VOS_STATUS_E_FAULT;
22956 }
22957
22958 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
22959 sizeof(WDI_OemDataReqNewConfig));
22960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22961 "------> %s " ,__func__);
22962
22963 if(NULL == wdiOemDataReqNewConfig)
22964 {
22965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22966 "%s: VOS MEM Alloc Failure", __func__);
22967 VOS_ASSERT(0);
22968 vos_mem_free(pOemDataReqNewConfig);
22969 return VOS_STATUS_E_NOMEM;
22970 }
22971
22972 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
22973 sizeof(WDI_OemDataReqNewConfig));
22974
22975 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
22976
22977 if (WDI_STATUS_PENDING == wstatus)
22978 {
22979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22980 FL("pending status received "));
22981 }
22982 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
22983 {
22984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22985 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022986 }
22987
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053022988 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022989 vos_mem_free(pOemDataReqNewConfig);
22990
22991 return status;
22992}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022993
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022994void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
22995 void *pUserData)
22996{
22997 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
22998 (tSirAntennaDiversitySelectionInfo *)pUserData;
22999
23000 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
23001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23002 "<------ %s " ,__func__);
23003 if (NULL == pAntennaDivSelInfo)
23004 {
23005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23006 "%s: pWdaParams received NULL", __func__);
23007 VOS_ASSERT(0) ;
23008 return ;
23009 }
23010 if (NULL == resParams)
23011 {
23012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23013 "%s: resParams received NULL", __func__);
23014 VOS_ASSERT(0) ;
23015 return ;
23016 }
23017
23018 if (pAntennaDivSelInfo->callback)
23019 {
23020 if (WDI_STATUS_SUCCESS == status)
23021 {
23022 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
23023 pAntennaDivSelInfo->data);
23024 }
23025 else
23026 {
23027 pAntennaDivSelInfo->callback(-1,
23028 pAntennaDivSelInfo->data);
23029 }
23030 }
23031
23032 vos_mem_free(pUserData);
23033 return;
23034}
23035
23036/*
23037 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
23038 * Request to WDI.
23039 */
23040v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
23041 tSirAntennaDiversitySelectionReq *pData)
23042{
23043 WDI_Status wdiStatus;
23044 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
23045
23046 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23047 "------> %s " , __func__);
23048
23049 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
23050 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
23051 if (NULL == pAntennaDivSelInfo)
23052 {
23053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23054 "%s: VOS MEM Alloc Failure", __func__);
23055 VOS_ASSERT(0);
23056 vos_mem_free(pData);
23057 return;
23058 }
23059
23060 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
23061 pAntennaDivSelInfo->data = pData->data;
23062
23063 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
23064 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
23065
23066 if (WDI_STATUS_PENDING == wdiStatus)
23067 {
23068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23069 "Pending received for %s:%d ", __func__, __LINE__);
23070 }
23071 else if (WDI_STATUS_SUCCESS != wdiStatus)
23072 {
23073 if (pAntennaDivSelInfo->callback)
23074 {
23075 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
23076 }
23077 }
23078
23079 vos_mem_free(pData);
23080 return;
23081}
23082
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053023083/*
23084 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
23085 * Request to WDI.
23086 */
23087VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
23088 tModifyRoamParamsReqParams *params)
23089{
23090 WDI_Status status;
23091
23092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23093 FL("---> %s"), __func__);
23094
23095 if (NULL == params)
23096 {
23097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23098 FL("tModifyRoamParamsReqParams is received NULL"));
23099 return VOS_STATUS_E_NOMEM;
23100 }
23101
23102 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
23103 if (WDI_STATUS_PENDING == status)
23104 {
23105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23106 FL("pending status received "));
23107 }
23108 else if (WDI_STATUS_SUCCESS_SYNC != status)
23109 {
23110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23111 FL("Failure status %d"), status);
23112 }
23113 vos_mem_free(params);
23114 return CONVERT_WDI2VOS_STATUS(status) ;
23115}
23116
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023117#endif