blob: 07964961cace516dc4d2ae3636bfa93df1b1b522 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530139#define WDA_BA_MAX_RETRY_THRESHOLD 10
140#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800141
Jeff Johnson295189b2012-06-20 16:38:30 -0700142/* extern declarations */
143extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700144extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* forward declarations */
147void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
148 void *pBodyptr, tANI_U32 bodyVal) ;
149VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
150 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
152VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
153
154extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
155 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530156void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700157void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
158 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
159void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
160 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
161void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
162 void* pUserData ) ;
163static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
164static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530165bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800167void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef WLAN_FEATURE_VOWIFI_11R
170VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
171#endif /* WLAN_FEATURE_VOWIFI_11R */
172
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
174void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
175VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700176#ifdef FEATURE_WLAN_SCAN_PNO
177static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
178static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
179static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
180#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700181#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700182VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530183VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
184 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530186void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
187void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
c_hpothu92367912014-05-01 15:18:17 +0530222v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
223 tSirBcnMissRateReq *pData);
224
Jeff Johnson295189b2012-06-20 16:38:30 -0700225VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
226 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700227#ifdef WLAN_FEATURE_11AC
228VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
229 tUpdateVHTOpMode *pData);
230#endif
Leo Chang9056f462013-08-01 19:21:11 -0700231
232#ifdef FEATURE_WLAN_LPHB
233VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
234 tSirLPHBReq *pData);
235#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530236
Abhishek Singh00b71972016-01-07 10:51:04 +0530237#ifdef WLAN_FEATURE_RMC
238void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
239 v_PVOID_t pData);
240#endif /* WLAN_FEATURE_RMC */
241
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#ifdef WLAN_FEATURE_EXTSCAN
243VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
244 tSirEXTScanStartReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStopReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
248 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
250 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
252 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530255VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
257VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530259VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
260 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530261#endif /* WLAN_FEATURE_EXTSCAN */
262
Sunil Duttbd736ed2014-05-26 21:19:41 +0530263#ifdef WLAN_FEATURE_LINK_LAYER_STATS
264VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
265 tSirLLStatsSetReq *wdaRequest);
266
267VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
268 tSirLLStatsGetReq *wdaRequest);
269
270VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
271 tSirLLStatsClearReq *wdaRequest);
272#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530273
274v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
275 tSirFWStatsGetReq *wdaRequest);
276
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530277VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
278 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530279VOS_STATUS
280WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
281 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530282
c_manjeecfd1efb2015-09-25 19:32:34 +0530283VOS_STATUS
284WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
285 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530286
Katya Nigamf0511f62015-05-05 16:40:57 +0530287VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
288VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530289VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530290
291VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
292 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530293
294VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
295 tOemDataReqNewConfig *pOemDataReqNewConfig);
296
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530297
298v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
299 tSirAntennaDiversitySelectionReq *pData);
300
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530301VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
302 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530303/*
304 * FUNCTION: WDA_ProcessNanRequest
305 * Process NAN request
306 */
307VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
308 tNanRequest *wdaRequest)
309{
310 WDI_Status status = WDI_STATUS_SUCCESS;
311 tWDA_ReqParams *pWdaParams;
312 WDI_NanRequestType *wdiRequest = NULL;
313 size_t wdiReqLength = sizeof(WDI_NanRequestType)
314 - sizeof(wdiRequest->request_data)
315 + wdaRequest->request_data_len;
316
317 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
318
319 if (NULL == wdiRequest)
320 {
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
322 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
323 wdiReqLength);
324 vos_mem_free(wdaRequest);
325 return VOS_STATUS_E_NOMEM;
326 }
327
328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
329 "WDA: Process Nan Request length: %zu", wdiReqLength);
330
331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
332 if (NULL == pWdaParams)
333 {
334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
335 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
336 VOS_ASSERT(0);
337 vos_mem_free(wdaRequest);
338 vos_mem_free(wdiRequest);
339 return VOS_STATUS_E_NOMEM;
340 }
341
342 wdiRequest->request_data_len = wdaRequest->request_data_len;
343
344 vos_mem_copy( wdiRequest->request_data,
345 wdaRequest->request_data,
346 wdaRequest->request_data_len);
347
348 vos_mem_free(wdaRequest);
349
350 pWdaParams->pWdaContext = pWDA;
351 pWdaParams->wdaMsgParam = NULL;
352 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
353
354 status = WDI_NanRequest(wdiRequest, pWdaParams);
355
356 if (IS_WDI_STATUS_FAILURE(status))
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
359 "Failure to request. Free all the memory " );
360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
361 vos_mem_free(pWdaParams);
362 }
363
364 return CONVERT_WDI2VOS_STATUS(status) ;
365}
366
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530367/**
368 * wda_state_info_dump() - prints state information of wda layer
369 */
370static void wda_state_info_dump(void)
371{
372 v_CONTEXT_t vos_ctx_ptr = NULL;
373 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530374
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
376 "<------ %s " ,__func__);
377
378 /* Get the Global VOSS Context */
379 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
380
381 if (NULL != vos_ctx_ptr)
382 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
383 vos_ctx_ptr );
384 else {
385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
386 "%s: Invalid Global VOSS Context", __func__);
387 VOS_ASSERT(0);
388 return;
389 }
390
391 if (NULL != wda)
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
393 "wdaState: %d linkState: %d", wda->wdaState,
394 wda->linkState);
395 else {
396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
397 "%s: Invalid WDA Context", __func__);
398 VOS_ASSERT(0);
399 }
400}
401
402/**
403 * wda_register_debug_callback() - registration function for wda layer
404 * to print wda state information
405 */
406static void wda_register_debug_callback(void)
407{
408 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
409}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530410
Jeff Johnson295189b2012-06-20 16:38:30 -0700411/*
412 * FUNCTION: WDA_open
413 * Allocate the WDA context
414 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530415VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 tMacOpenParameters *pMacParams )
417{
418 tWDA_CbContext *wdaContext;
419 VOS_STATUS status;
420 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530422 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
424 if(!VOS_IS_STATUS_SUCCESS(status))
425 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
427 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 return VOS_STATUS_E_NOMEM;
429 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /*__asm int 3;*/
431 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
432
433 /* Initialize data structures */
434 wdaContext->pVosContext = pVosContext;
435 wdaContext->wdaState = WDA_INIT_STATE;
436 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530437 vos_lock_init(&wdaContext->mgmt_pkt_lock);
438
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Initialize WDA-WDI synchronization event */
440 status = vos_event_init(&wdaContext->wdaWdiEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 /* Init Frame transfer event */
448 status = vos_event_init(&wdaContext->txFrameEvent);
449 if(!VOS_IS_STATUS_SUCCESS(status))
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800452 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800453 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 status = vos_event_init(&wdaContext->suspendDataTxEvent);
456 if(!VOS_IS_STATUS_SUCCESS(status))
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800459 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800460 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
463 if(!VOS_IS_STATUS_SUCCESS(status))
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800466 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800467 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530471 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 &wdiDevCapability, pMacParams->driverType))
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800476 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 else
479 {
480 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
481 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
482 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* update max STA in WDA used for BA */
484 wdaContext->wdaMaxSta = pMacParams->maxStation;
485 /* store the frameTransRequired flag in wdaContext, to send this to HAL
486 * in WDA_Start
487 */
488 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
489 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530490
491 wda_register_debug_callback();
492
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800494
495error:
496 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
497 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700498}
499
Jeff Johnson295189b2012-06-20 16:38:30 -0700500/*
501 * FUNCTION: WDA_preStart
502 * Trigger DAL-AL to start CFG download
503 */
504VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
505{
506 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
507 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /*
509 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
510 */
511 wdaMsg.type = WNI_CFG_DNLD_REQ ;
512 wdaMsg.bodyptr = NULL;
513 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 /* post the message.. */
515 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
516 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
517 {
518 vosStatus = VOS_STATUS_E_BADMSG;
519 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 return( vosStatus );
521}
Jeff Johnson295189b2012-06-20 16:38:30 -0700522/*
523 * FUNCTION: WDA_wdiStartCallback
524 * Once WDI_Start is finished, WDI start callback will be called by WDI
525 * to indicate completion of WDI_Start.
526 */
527void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
528 void *pVosContext)
529{
530 tWDA_CbContext *wdaContext;
531 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (NULL == pVosContext)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 return;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
539 if (NULL == wdaContext)
540 {
541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700542 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 return;
544 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 }
550 else
551 {
552 wdaContext->wdaState = WDA_START_STATE;
553 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* extract and save version information from the Start Response */
555 wdaContext->wcnssWlanCompiledVersion.major =
556 wdiRspParams->wlanCompiledVersion.major;
557 wdaContext->wcnssWlanCompiledVersion.minor =
558 wdiRspParams->wlanCompiledVersion.minor;
559 wdaContext->wcnssWlanCompiledVersion.version =
560 wdiRspParams->wlanCompiledVersion.version;
561 wdaContext->wcnssWlanCompiledVersion.revision =
562 wdiRspParams->wlanCompiledVersion.revision;
563 wdaContext->wcnssWlanReportedVersion.major =
564 wdiRspParams->wlanReportedVersion.major;
565 wdaContext->wcnssWlanReportedVersion.minor =
566 wdiRspParams->wlanReportedVersion.minor;
567 wdaContext->wcnssWlanReportedVersion.version =
568 wdiRspParams->wlanReportedVersion.version;
569 wdaContext->wcnssWlanReportedVersion.revision =
570 wdiRspParams->wlanReportedVersion.revision;
571 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
572 wdiRspParams->wcnssSoftwareVersion,
573 sizeof(wdaContext->wcnssSoftwareVersionString));
574 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
575 wdiRspParams->wcnssHardwareVersion,
576 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 /* Notify WDA_start that WDI_Start has completed */
578 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700579 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 return;
585}
586
Jeff Johnson295189b2012-06-20 16:38:30 -0700587/*
588 * FUNCTION: WDA_start
589 * Prepare TLV configuration and call WDI_Start.
590 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700591VOS_STATUS WDA_start(v_PVOID_t pVosContext)
592{
593 tWDA_CbContext *wdaContext;
594 VOS_STATUS status;
595 WDI_Status wdiStatus;
596 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 if (NULL == pVosContext)
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700600 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 return VOS_STATUS_E_FAILURE;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
604 if (NULL == wdaContext)
605 {
606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700607 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 return VOS_STATUS_E_FAILURE;
609 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* Non-FTM mode, WDA status for START must be INIT
611 * FTM mode, WDA Status for START can be INIT or STOP */
612 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
613 (WDA_STOP_STATE != wdaContext->wdaState) )
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* initialize the wdiStartParam. Note that we can create this on
621 the stack since we won't exit until WDI_Start() completes or
622 times out */
623 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* prepare the config TLV for the WDI */
626 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
627 if ( !VOS_IS_STATUS_SUCCESS(status) )
628 {
629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700630 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 return VOS_STATUS_E_FAILURE;
632 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* note from here onwards if an error occurs we must
634 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
636 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
637 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* initialize the WDA-WDI synchronization event */
639 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* call WDI start */
641 wdiStatus = WDI_Start(&wdiStartParam,
642 (WDI_StartRspCb)WDA_wdiStartCallback,
643 (v_VOID_t *)pVosContext);
644 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700647 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 vos_mem_free(wdiStartParam.pConfigBuffer);
649 return VOS_STATUS_E_FAILURE;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* wait for WDI start to invoke our callback */
652 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
653 WDA_WDI_START_TIMEOUT );
654 if ( !VOS_IS_STATUS_SUCCESS(status) )
655 {
656 if ( VOS_STATUS_E_TIMEOUT == status )
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700659 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 }
661 else
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
664 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700665 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 }
667 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530668 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* we no longer need the config TLV */
672 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* if we are not in the START state then WDI_Start() failed */
674 if (WDA_START_STATE != wdaContext->wdaState)
675 {
676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700677 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 return VOS_STATUS_E_FAILURE;
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* FTM mode does not need to monitor BA activity */
681 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
682 {
683 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800684 if(VOS_STATUS_SUCCESS == status)
685 {
686 wdaContext->wdaTimersCreated = VOS_TRUE;
687 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530688 else
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 FL("wda create timers failed"));
692 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 }
Leo Chang9d76f622013-08-23 16:34:52 -0700694 else
695 {
696 vos_event_init(&wdaContext->ftmStopDoneEvent);
697 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 return status;
699}
700
Jeff Johnson295189b2012-06-20 16:38:30 -0700701/*
702 * FUNCTION: WDA_prepareConfigTLV
703 * Function to prepare CFG for DAL(WDA)
704 */
705VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
706 WDI_StartReqParamsType *wdiStartParams )
707{
708 /* get pMac to acess CFG data base */
709 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
711 tHalCfg *tlvStruct = NULL ;
712 tANI_U8 *tlvStructStart = NULL ;
713 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
714 v_PVOID_t *configParam;
715 tANI_U32 configParamSize;
716 tANI_U32 *configDataValue;
717 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700718 tANI_U8 i;
719
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 if ((NULL == pMac)||(NULL == wdaContext))
721 {
722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700723 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 VOS_ASSERT(0);
725 return VOS_STATUS_E_FAILURE;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
728 WNI_CFG_STA_ID_LEN +
729 WNI_CFG_EDCA_WME_ACBK_LEN +
730 WNI_CFG_EDCA_WME_ACBE_LEN +
731 WNI_CFG_EDCA_WME_ACVI_LEN +
732 WNI_CFG_EDCA_WME_ACVO_LEN +
733 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* malloc memory for all configs in one shot */
735 configParam = vos_mem_malloc(configParamSize);
736
737 if(NULL == configParam )
738 {
739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700740 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 VOS_ASSERT(0) ;
742 return VOS_STATUS_E_NOMEM;
743 }
744 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)configParam;
747 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* TODO: Remove Later */
749 /* QWLAN_HAL_CFG_STA_ID */
750 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
751 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
752 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_STA_ID");
757 goto handle_failure;
758 }
759 tlvStruct->length = strLength ;
760 /* calculate the pad bytes to have the CFG in aligned format */
761 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
762 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
770 != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
779 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
783 eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
792 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
793 tlvStruct->length = sizeof(tANI_U32);
794 configDataValue = (tANI_U32 *)(tlvStruct + 1);
795 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
796 != eSIR_SUCCESS)
797 {
798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
799 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
800 goto handle_failure;
801 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700802 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
803 + sizeof(tHalCfg) + tlvStruct->length)) ;
804
805 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
806 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
810 configDataValue ) != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_PERIOD */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_PERIOD");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_CAL_CONTROL */
832 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_CAL_CONTROL");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_PROXIMITY */
845 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_PROXIMITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
858 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
862 != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
875 eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
884 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
897 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
923 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
936 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
949 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length));
961
962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
976 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length));
988
989 /* QWLAN_HAL_CFG_FIXED_RATE */
990 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
994 != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_FIXED_RATE");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length));
1002
1003 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1004 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1005 tlvStruct->length = sizeof(tANI_U32);
1006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1007 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1008 != eSIR_SUCCESS)
1009 {
1010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1011 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1012 goto handle_failure;
1013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1015 + sizeof(tHalCfg) + tlvStruct->length));
1016
1017 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1031 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1039 goto handle_failure;
1040 }
1041 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1044 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1070 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1071 tlvStruct->length = sizeof(tANI_U32);
1072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1073 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1074 configDataValue ) != eSIR_SUCCESS)
1075 {
1076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1077 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1078 goto handle_failure;
1079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length);
1082
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1097 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1101 configDataValue ) != eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1110 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1111 tlvStruct->length = sizeof(tANI_U32);
1112 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1113 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1114 eSIR_SUCCESS)
1115 {
1116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1117 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1118 goto handle_failure;
1119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1121 + sizeof(tHalCfg) + tlvStruct->length);
1122
1123 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1150 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1163 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1164 tlvStruct->length = sizeof(tANI_U32);
1165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1166 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1167 configDataValue ) != eSIR_SUCCESS)
1168 {
1169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1170 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1171 goto handle_failure;
1172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1174 + sizeof(tHalCfg) + tlvStruct->length);
1175
1176 /* QWLAN_HAL_CFG_STATS_PERIOD */
1177 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_STATS_PERIOD");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1190 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1194 eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1203 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1207 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1211 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1224 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1225 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1228 &strLength) != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1232 goto handle_failure;
1233 }
1234 tlvStruct->length = strLength;
1235 /* calculate the pad bytes to have the CFG in aligned format */
1236 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1237 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1239 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1241 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1242 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1245 &strLength) != eSIR_SUCCESS)
1246 {
1247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1248 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1249 goto handle_failure;
1250 }
1251 tlvStruct->length = strLength;
1252 /* calculate the pad bytes to have the CFG in aligned format */
1253 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1254 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1256 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1258 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1259 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1261 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1262 &strLength) != eSIR_SUCCESS)
1263 {
1264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1265 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1266 goto handle_failure;
1267 }
1268 tlvStruct->length = strLength;
1269 /* calculate the pad bytes to have the CFG in aligned format */
1270 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1271 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1275 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1276 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1279 &strLength) != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1283 goto handle_failure;
1284 }
1285 tlvStruct->length = strLength;
1286 /* calculate the pad bytes to have the CFG in aligned format */
1287 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1288 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1292 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1305 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1318 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1326 goto handle_failure;
1327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1383 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1391 goto handle_failure;
1392 }
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1396 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1409 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1430 goto handle_failure;
1431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1433 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1435 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1436 * into FW, so the parameters are added here.
1437 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001438 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1439 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1453 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1454 tlvStruct->length = sizeof(tANI_U32);
1455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1456 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1457 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1458 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1556 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562
Wilson Tsaof8b37942013-09-06 10:49:00 -07001563 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1564 {
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1590 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596 }
1597
1598 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1599 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1603 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1604 + sizeof(tHalCfg) + tlvStruct->length) ;
1605
1606 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1607 {
1608 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1609 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 }
1616
1617 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1618 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624
Jeff Johnson32d95a32012-09-10 13:15:23 -07001625 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001626 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1630 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1631 wcnssCompiledApiVersion.minor,
1632 wcnssCompiledApiVersion.version,
1633 wcnssCompiledApiVersion.revision);
1634 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1635 + sizeof(tHalCfg) + tlvStruct->length) ;
1636
Jeff Johnsond13512a2012-07-17 11:42:19 -07001637 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1638 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1646 goto handle_failure;
1647 }
1648
1649 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1650 + sizeof(tHalCfg) + tlvStruct->length) ;
1651 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1652 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
1665
1666 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1667 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1675 goto handle_failure;
1676 }
1677
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001681 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1682 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1683 tlvStruct->length = sizeof(tANI_U32);
1684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1685 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1686 != eSIR_SUCCESS)
1687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1690 goto handle_failure;
1691 }
1692
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001695#ifdef WLAN_SOFTAP_VSTA_FEATURE
1696 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1700 != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1704 goto handle_failure;
1705 }
1706
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709#endif
1710
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001711 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1712 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715
1716 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1717 != eSIR_SUCCESS)
1718 {
1719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1720 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1721 goto handle_failure;
1722 }
1723
1724 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1725 + sizeof(tHalCfg) + tlvStruct->length) ;
1726
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301727/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1728 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1729 tlvStruct->length = sizeof(tANI_U32);
1730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1731 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1732 configDataValue ) != eSIR_SUCCESS)
1733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1735 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1736 goto handle_failure;
1737 }
1738
1739 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1740 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301741#ifdef FEATURE_WLAN_TDLS
1742 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1743 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1747 configDataValue ) != eSIR_SUCCESS)
1748 {
1749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1750 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1751 goto handle_failure;
1752 }
1753 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1754 + sizeof(tHalCfg) + tlvStruct->length) ;
1755
1756 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1757 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1770 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
1782 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1783 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1784 tlvStruct->length = sizeof(tANI_U32);
1785 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1786 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1787 configDataValue ) != eSIR_SUCCESS)
1788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1790 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1791 goto handle_failure;
1792 }
1793 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1794 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301795 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1796 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1800 configDataValue ) != eSIR_SUCCESS)
1801 {
1802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1803 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1804 goto handle_failure;
1805 }
1806 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1807 + sizeof(tHalCfg) + tlvStruct->length) ;
1808
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301809#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301810
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001811 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1812 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1813 tlvStruct->length = sizeof(tANI_U32);
1814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1815 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1816 configDataValue ) != eSIR_SUCCESS)
1817 {
1818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1819 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1820 goto handle_failure;
1821 }
1822
1823 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1824 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001825
1826 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1827 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1828 tlvStruct->length = sizeof(tANI_U32);
1829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1830 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1831 != eSIR_SUCCESS)
1832 {
1833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1834 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1835 goto handle_failure;
1836 }
1837 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1838 + sizeof(tHalCfg) + tlvStruct->length));
1839
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301840 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1841 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1842 tlvStruct->length = sizeof(tANI_U32);
1843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1844 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1845 configDataValue ) != eSIR_SUCCESS)
1846 {
1847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1848 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1849 goto handle_failure;
1850 }
1851
1852 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1853 + sizeof(tHalCfg) + tlvStruct->length) ;
1854
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301855 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1856 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1857 tlvStruct->length = sizeof(tANI_U32);
1858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1859 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1860 configDataValue ) != eSIR_SUCCESS)
1861 {
1862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1863 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1864 goto handle_failure;
1865 }
1866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1867 + sizeof(tHalCfg) + tlvStruct->length) ;
1868
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301869 /* QWLAN_HAL_CFG_ATH_DISABLE */
1870 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1871 tlvStruct->length = sizeof(tANI_U32);
1872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1873 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1874 configDataValue ) != eSIR_SUCCESS)
1875 {
1876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1877 "Failed to get value for WNI_CFG_ATH_DISABLE");
1878 goto handle_failure;
1879 }
1880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1881 + sizeof(tHalCfg) + tlvStruct->length) ;
1882
c_hpothu6d7dc922013-12-02 12:36:41 +05301883 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1884 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1885 tlvStruct->length = sizeof(tANI_U32);
1886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1887 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1888 configDataValue ) != eSIR_SUCCESS)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1892 goto handle_failure;
1893 }
1894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1895 + sizeof(tHalCfg) + tlvStruct->length) ;
1896
1897 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1898 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1899 tlvStruct->length = sizeof(tANI_U32);
1900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1901 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1902 configDataValue ) != eSIR_SUCCESS)
1903 {
1904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1905 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1906 goto handle_failure;
1907 }
1908 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1909 + sizeof(tHalCfg) + tlvStruct->length) ;
1910
1911 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1912 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1913 tlvStruct->length = sizeof(tANI_U32);
1914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1920 goto handle_failure;
1921 }
1922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
1925 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1926 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1930 configDataValue ) != eSIR_SUCCESS)
1931 {
1932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1933 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1934 goto handle_failure;
1935 }
1936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1937 + sizeof(tHalCfg) + tlvStruct->length) ;
1938
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301939 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1940 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1941 tlvStruct->length = sizeof(tANI_U32);
1942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1943 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1944 configDataValue ) != eSIR_SUCCESS)
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1947 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1948 goto handle_failure;
1949 }
1950 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1951 + sizeof(tHalCfg) + tlvStruct->length) ;
1952
1953 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1954 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1955 tlvStruct->length = sizeof(tANI_U32);
1956 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1957 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1958 configDataValue ) != eSIR_SUCCESS)
1959 {
1960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1961 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1962 goto handle_failure;
1963 }
1964 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1965 + sizeof(tHalCfg) + tlvStruct->length) ;
1966
1967 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1968 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1969 tlvStruct->length = sizeof(tANI_U32);
1970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1971 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1972 configDataValue ) != eSIR_SUCCESS)
1973 {
1974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1975 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1976 goto handle_failure;
1977 }
1978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1979 + sizeof(tHalCfg) + tlvStruct->length) ;
1980
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001981 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1982 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1983 tlvStruct->length = sizeof(tANI_U32);
1984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1985 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1986 configDataValue ) != eSIR_SUCCESS)
1987 {
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1989 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1990 goto handle_failure;
1991 }
1992 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1993 + sizeof(tHalCfg) + tlvStruct->length) ;
1994
c_hpothu5bd1ae42014-03-07 20:28:22 +05301995 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1996 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1997 tlvStruct->length = sizeof(tANI_U32);
1998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1999
2000 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2001 configDataValue ) != eSIR_SUCCESS)
2002 {
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2004 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2005 goto handle_failure;
2006 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2008 + sizeof(tHalCfg) + tlvStruct->length) ;
2009
2010 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2011 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2012 tlvStruct->length = sizeof(tANI_U32);
2013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2014
2015 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2016 configDataValue ) != eSIR_SUCCESS)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2019 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2020 goto handle_failure;
2021 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302022 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2023 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302024
c_hpothu2d0f1c42014-04-01 18:38:51 +05302025 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2026 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2027 tlvStruct->length = sizeof(tANI_U32);
2028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2029
2030 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2031 configDataValue ) != eSIR_SUCCESS)
2032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2034 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2035 goto handle_failure;
2036 }
2037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2038 + sizeof(tHalCfg) + tlvStruct->length) ;
2039
2040 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2041 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2042 tlvStruct->length = sizeof(tANI_U32);
2043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2044
2045 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2046 configDataValue ) != eSIR_SUCCESS)
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2050 goto handle_failure;
2051 }
2052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2053 + sizeof(tHalCfg) + tlvStruct->length) ;
2054
2055 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2056 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2057 tlvStruct->length = sizeof(tANI_U32);
2058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2059
2060 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2061 configDataValue ) != eSIR_SUCCESS)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2065 goto handle_failure;
2066 }
2067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2068 + sizeof(tHalCfg) + tlvStruct->length) ;
2069
2070 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2071 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2072 tlvStruct->length = sizeof(tANI_U32);
2073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2074
2075 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2076 configDataValue ) != eSIR_SUCCESS)
2077 {
2078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2079 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2080 goto handle_failure;
2081 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2083 + sizeof(tHalCfg) + tlvStruct->length) ;
2084
Mihir Shetec34258c2014-07-30 17:50:27 +05302085 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2086 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2087 tlvStruct->length = sizeof(tANI_U32);
2088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2089
2090 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2091 configDataValue ) != eSIR_SUCCESS)
2092 {
2093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2094 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2095 goto handle_failure;
2096 }
2097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2098 + sizeof(tHalCfg) + tlvStruct->length) ;
2099
2100 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2101 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2102 tlvStruct->length = sizeof(tANI_U32);
2103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2104
2105 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2106 configDataValue ) != eSIR_SUCCESS)
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2109 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2110 goto handle_failure;
2111 }
2112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2113 + sizeof(tHalCfg) + tlvStruct->length) ;
2114
2115 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2116 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2117 tlvStruct->length = sizeof(tANI_U32);
2118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2119
2120 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2121 configDataValue ) != eSIR_SUCCESS)
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2124 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2125 goto handle_failure;
2126 }
2127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2128 + sizeof(tHalCfg) + tlvStruct->length) ;
2129
2130 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2131 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2132 tlvStruct->length = sizeof(tANI_U32);
2133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2134
2135 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2136 configDataValue ) != eSIR_SUCCESS)
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2140 goto handle_failure;
2141 }
2142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2143 + sizeof(tHalCfg) + tlvStruct->length) ;
2144
2145 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2146 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2147 tlvStruct->length = sizeof(tANI_U32);
2148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2149
2150 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2151 configDataValue ) != eSIR_SUCCESS)
2152 {
2153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2154 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2155 goto handle_failure;
2156 }
2157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2158 + sizeof(tHalCfg) + tlvStruct->length) ;
2159
2160 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2161 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2162 tlvStruct->length = sizeof(tANI_U32);
2163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2164
2165 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2166 configDataValue ) != eSIR_SUCCESS)
2167 {
2168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2169 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2170 goto handle_failure;
2171 }
2172 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2173 + sizeof(tHalCfg) + tlvStruct->length) ;
2174
2175 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2176 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2177 tlvStruct->length = sizeof(tANI_U32);
2178 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2179
2180 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2181 configDataValue ) != eSIR_SUCCESS)
2182 {
2183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2184 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2185 goto handle_failure;
2186 }
2187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2188 + sizeof(tHalCfg) + tlvStruct->length) ;
2189
2190 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2191 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2192 tlvStruct->length = sizeof(tANI_U32);
2193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2194
2195 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2196 configDataValue ) != eSIR_SUCCESS)
2197 {
2198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2199 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2200 goto handle_failure;
2201 }
2202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2203 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302204
2205 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2206 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2207 tlvStruct->length = sizeof(tANI_U32);
2208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2209
2210 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2211 configDataValue ) != eSIR_SUCCESS)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2214 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2215 goto handle_failure;
2216 }
2217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2218 + sizeof(tHalCfg) + tlvStruct->length) ;
2219
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302220 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2221 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2222 tlvStruct->length = sizeof(tANI_U32);
2223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2224
2225 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2226 configDataValue ) != eSIR_SUCCESS)
2227 {
2228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2229 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2230 goto handle_failure;
2231 }
2232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2233 + sizeof(tHalCfg) + tlvStruct->length) ;
2234
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302235 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2236 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2237 tlvStruct->length = sizeof(tANI_U32);
2238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2239
2240 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2241 configDataValue ) != eSIR_SUCCESS)
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2244 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2245 goto handle_failure;
2246 }
2247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2248 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302249
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302250 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2251 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2252 tlvStruct->length = sizeof(tANI_U32);
2253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2254
2255 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2256 configDataValue ) != eSIR_SUCCESS)
2257 {
2258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2259 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2260 goto handle_failure;
2261 }
2262 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2263 + sizeof(tHalCfg) + tlvStruct->length) ;
2264
Sachin Ahuja41b61902015-06-18 18:32:15 +05302265
2266 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2268 tlvStruct->length = sizeof(tANI_U32);
2269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2270
2271 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2272 configDataValue ) != eSIR_SUCCESS)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2275 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2276 goto handle_failure;
2277 }
2278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2279 + sizeof(tHalCfg) + tlvStruct->length) ;
2280
2281 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2282 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2283 tlvStruct->length = sizeof(tANI_U32);
2284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2285
2286 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2287 configDataValue ) != eSIR_SUCCESS)
2288 {
2289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2290 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2291 goto handle_failure;
2292 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2294 + sizeof(tHalCfg) + tlvStruct->length) ;
2295
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302296 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2297 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2298 tlvStruct->length = sizeof(tANI_U32);
2299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2300
2301 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2302 configDataValue ) != eSIR_SUCCESS)
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2306 goto handle_failure;
2307 }
2308 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2309 + sizeof(tHalCfg) + tlvStruct->length) ;
2310
2311 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2312 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2313 tlvStruct->length = sizeof(tANI_U32);
2314 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2315
2316 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2317 configDataValue ) != eSIR_SUCCESS)
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2320 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2321 goto handle_failure;
2322 }
2323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2324 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302325
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302326 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2327 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2328 tlvStruct->length = sizeof(tANI_U32);
2329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2330
2331 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2332 configDataValue ) != eSIR_SUCCESS)
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2335 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2336 goto handle_failure;
2337 }
2338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2339 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302340 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2341 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2342 tlvStruct->length = sizeof(tANI_U32);
2343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2344 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2345 configDataValue ) != eSIR_SUCCESS)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2348 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2349 goto handle_failure;
2350 }
2351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2352 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302353
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302354 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2355 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2356 tlvStruct->length = sizeof(tANI_U32);
2357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2358
2359 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2360 configDataValue ) != eSIR_SUCCESS)
2361 {
2362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2363 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2364 goto handle_failure;
2365 }
2366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2367 + sizeof(tHalCfg) + tlvStruct->length) ;
2368
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302369 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2370 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2371 tlvStruct->length = sizeof(tANI_U32);
2372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2373
2374 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2375 configDataValue ) != eSIR_SUCCESS)
2376 {
2377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2378 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2379 goto handle_failure;
2380 }
2381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2382 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302383
2384 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2385 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2386 tlvStruct->length = sizeof(tANI_U32);
2387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2388
2389 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2390 configDataValue ) != eSIR_SUCCESS)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2393 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2394 goto handle_failure;
2395 }
2396 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2397 + sizeof(tHalCfg) + tlvStruct->length) ;
2398
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002400#ifdef WLAN_DEBUG
2401 {
2402 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2404 "****** Dumping CFG TLV ***** ");
2405 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2406 {
2407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2408 "%02x %02x %02x %02x %02x %02x %02x %02x",
2409 tlvStructStart[i],
2410 tlvStructStart[i+1],
2411 tlvStructStart[i+2],
2412 tlvStructStart[i+3],
2413 tlvStructStart[i+4],
2414 tlvStructStart[i+5],
2415 tlvStructStart[i+6],
2416 tlvStructStart[i+7]);
2417 }
2418 /* Dump the bytes in the last line*/
2419 for (; i < wdiStartParams->usConfigBufferLen; i++)
2420 {
2421 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2422 "%02x ",tlvStructStart[i]);
2423 }
2424 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2425 "**************************** ");
2426 }
2427#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429handle_failure:
2430 vos_mem_free(configParam);
2431 return VOS_STATUS_E_FAILURE;
2432}
Jeff Johnson295189b2012-06-20 16:38:30 -07002433/*
2434 * FUNCTION: WDA_wdiCompleteCB
2435 * call the voss call back function
2436 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002437void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002438{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2440 tWDA_CbContext *wdaContext;
2441
2442 if(NULL == pWdaParams)
2443 {
2444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002445 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002446 VOS_ASSERT(0) ;
2447 return ;
2448 }
2449
2450 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2451
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 if (NULL == wdaContext)
2453 {
2454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002455 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 return ;
2457 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002458
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002460 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002464 vos_mem_free(pWdaParams);
2465
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if(WDI_STATUS_SUCCESS != status)
2467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2469 "WDI stop callback returned failure" );
2470 VOS_ASSERT(0) ;
2471 }
2472 else
2473 {
2474 wdaContext->wdaState = WDA_STOP_STATE;
2475 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002476
Leo Chang9d76f622013-08-23 16:34:52 -07002477 /* FTM Driver stop procedure should be synced.
2478 * Stop and Close will happen on same context */
2479 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2480 {
2481 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2482 {
2483 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2484 "%s: FTM Stop Event Set Fail", __func__);
2485 VOS_ASSERT(0);
2486 }
2487 }
2488
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002490 vos_WDAComplete_cback(wdaContext->pVosContext);
2491
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return ;
2493}
Jeff Johnson295189b2012-06-20 16:38:30 -07002494/*
2495 * FUNCTION: WDA_stop
2496 * call WDI_stop
2497 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002498VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2499{
2500 WDI_Status wdiStatus;
2501 VOS_STATUS status = VOS_STATUS_SUCCESS;
2502 WDI_StopReqParamsType *wdiStopReq;
2503 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002504 tWDA_ReqParams *pWdaParams ;
2505
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 if (NULL == pWDA)
2507 {
2508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002509 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 VOS_ASSERT(0);
2511 return VOS_STATUS_E_FAILURE;
2512 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002513 if (pWDA->wdiFailed == true)
2514 {
2515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002516 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002517 return VOS_STATUS_E_ALREADY;
2518 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002519
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* FTM mode stay START_STATE */
2521 if( (WDA_READY_STATE != pWDA->wdaState) &&
2522 (WDA_INIT_STATE != pWDA->wdaState) &&
2523 (WDA_START_STATE != pWDA->wdaState) )
2524 {
2525 VOS_ASSERT(0);
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 wdiStopReq = (WDI_StopReqParamsType *)
2528 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2529 if(NULL == wdiStopReq)
2530 {
2531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 VOS_ASSERT(0);
2534 return VOS_STATUS_E_NOMEM;
2535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002536
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 wdiStopReq->wdiStopReason = reason;
2538 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302539
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2541 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 VOS_ASSERT(0);
2546 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002547 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002549
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002550 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2551 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 {
2553 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002554 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002556
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002557 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2558 pWdaParams->wdaMsgParam = NULL;
2559 pWdaParams->pWdaContext = pWDA;
2560
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 /* call WDI stop */
2562 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002563 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2564
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2568 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2570 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 status = VOS_STATUS_E_FAILURE;
2572 }
Leo Chang9d76f622013-08-23 16:34:52 -07002573
2574 /* FTM Driver stop procedure should be synced.
2575 * Stop and Close will happen on same context */
2576 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2577 {
2578 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2579 WDI_RESPONSE_TIMEOUT);
2580 if (status != VOS_STATUS_SUCCESS)
2581 {
2582 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2583 "%s: FTM Stop Timepoout", __func__);
2584 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002585 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302586 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 return status;
2589}
Jeff Johnson295189b2012-06-20 16:38:30 -07002590/*
2591 * FUNCTION: WDA_close
2592 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302593 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002594VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2595{
Jeff Johnson43971f52012-07-17 12:26:56 -07002596 VOS_STATUS status = VOS_STATUS_SUCCESS;
2597 WDI_Status wstatus;
2598 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 if (NULL == wdaContext)
2601 {
2602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002603 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 return VOS_STATUS_E_FAILURE;
2605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2607 (WDA_STOP_STATE != wdaContext->wdaState))
2608 {
2609 VOS_ASSERT(0);
2610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002612 wstatus = WDI_Close();
2613 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 {
2615 status = VOS_STATUS_E_FAILURE;
2616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002619 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2620 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 {
2622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002623 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 status = VOS_STATUS_E_FAILURE;
2625 }
2626
Jeff Johnson43971f52012-07-17 12:26:56 -07002627 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002628 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 {
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002631 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 status = VOS_STATUS_E_FAILURE;
2633 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002634 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002635 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002638 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 status = VOS_STATUS_E_FAILURE;
2640 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002641 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002642 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002645 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 status = VOS_STATUS_E_FAILURE;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002649 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002650 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 {
2652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2653 "error in WDA close " );
2654 status = VOS_STATUS_E_FAILURE;
2655 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +05302656 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 return status;
2658}
Jeff Johnson295189b2012-06-20 16:38:30 -07002659/*
2660 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2661 * returns 1 if the compiled version is greater than or equal to the input version
2662 */
2663
2664uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2665{
2666 VOS_STATUS status = VOS_STATUS_SUCCESS;
2667 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2668 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2671 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2672 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2673 (compiledVersion.revision >= revision)))
2674 return 1;
2675 else
2676 return 0;
2677}
Jeff Johnson295189b2012-06-20 16:38:30 -07002678/*
2679 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2680 * returns 1 if the compiled version is greater than or equal to the input version
2681 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002682uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2683{
2684 VOS_STATUS status = VOS_STATUS_SUCCESS;
2685 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2686 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2689 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2690 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2691 (reportedVersion.revision >= revision)))
2692 return 1;
2693 else
2694 return 0;
2695}
Jeff Johnson295189b2012-06-20 16:38:30 -07002696/*
2697 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2698 * Returns the version of the WCNSS WLAN API with which the HOST
2699 * device driver was compiled
2700 */
2701VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2702 tSirVersionType *pVersion)
2703{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302704 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 if ((NULL == pvosGCtx) || (NULL == pVersion))
2706 {
2707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 VOS_ASSERT(0);
2710 return VOS_STATUS_E_FAILURE;
2711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2713 if (NULL == pWDA )
2714 {
2715 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002716 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 VOS_ASSERT(0);
2718 return VOS_STATUS_E_FAILURE;
2719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 *pVersion = pWDA->wcnssWlanCompiledVersion;
2721 return VOS_STATUS_SUCCESS;
2722}
Jeff Johnson295189b2012-06-20 16:38:30 -07002723/*
2724 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2725 * Returns the version of the WCNSS WLAN API with which the WCNSS
2726 * device driver was compiled
2727 */
2728VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2729 tSirVersionType *pVersion)
2730{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302731 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 if ((NULL == pvosGCtx) || (NULL == pVersion))
2733 {
2734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002735 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 VOS_ASSERT(0);
2737 return VOS_STATUS_E_FAILURE;
2738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2740 if (NULL == pWDA )
2741 {
2742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002743 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 VOS_ASSERT(0);
2745 return VOS_STATUS_E_FAILURE;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 *pVersion = pWDA->wcnssWlanReportedVersion;
2748 return VOS_STATUS_SUCCESS;
2749}
Jeff Johnson295189b2012-06-20 16:38:30 -07002750/*
2751 * FUNCTION: WDA_GetWcnssSoftwareVersion
2752 * Returns the WCNSS Software version string
2753 */
2754VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2755 tANI_U8 *pVersion,
2756 tANI_U32 versionBufferSize)
2757{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302758 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if ((NULL == pvosGCtx) || (NULL == pVersion))
2762 {
2763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_FAILURE;
2767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2769 if (NULL == pWDA )
2770 {
2771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0);
2774 return VOS_STATUS_E_FAILURE;
2775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2777 return VOS_STATUS_SUCCESS;
2778}
Jeff Johnson295189b2012-06-20 16:38:30 -07002779/*
2780 * FUNCTION: WDA_GetWcnssHardwareVersion
2781 * Returns the WCNSS Hardware version string
2782 */
2783VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2784 tANI_U8 *pVersion,
2785 tANI_U32 versionBufferSize)
2786{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302787 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002789 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 if ((NULL == pvosGCtx) || (NULL == pVersion))
2791 {
2792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002793 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 VOS_ASSERT(0);
2795 return VOS_STATUS_E_FAILURE;
2796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2798 if (NULL == pWDA )
2799 {
2800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0);
2803 return VOS_STATUS_E_FAILURE;
2804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2806 return VOS_STATUS_SUCCESS;
2807}
Jeff Johnson295189b2012-06-20 16:38:30 -07002808/*
2809 * FUNCTION: WDA_WniCfgDnld
2810 * Trigger CFG Download
2811 */
2812VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2813{
2814 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302815 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002816
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 if (NULL == pMac )
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 return VOS_STATUS_E_FAILURE;
2823 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302824 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 return vosStatus;
2826}
Jeff Johnson295189b2012-06-20 16:38:30 -07002827/* -----------------------------------------------------------------
2828 * WDI interface
2829 * -----------------------------------------------------------------
2830 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002831/*
2832 * FUNCTION: WDA_suspendDataTxCallback
2833 * call back function called from TL after suspend Transmission
2834 */
2835VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2836 v_U8_t* ucSTAId,
2837 VOS_STATUS vosStatus)
2838{
2839 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002841 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 if (NULL == pWDA )
2843 {
2844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002845 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_ASSERT(0);
2847 return VOS_STATUS_E_FAILURE;
2848 }
2849 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2850 {
2851 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2852 }
2853 else
2854 {
2855 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* Trigger the event to bring the WDA TL suspend function to come
2858 * out of wait*/
2859 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2860 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2861 {
2862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002863 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 /* If TL suspended had timedout before this callback was called, resume back
2866 * TL.*/
2867 if (pWDA->txSuspendTimedOut)
2868 {
2869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002870 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 WDA_ResumeDataTx(pWDA);
2872 pWDA->txSuspendTimedOut = FALSE;
2873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 return VOS_STATUS_SUCCESS;
2875}
Jeff Johnson295189b2012-06-20 16:38:30 -07002876/*
2877 * FUNCTION: WDA_suspendDataTx
2878 * Update TL to suspend the data Transmission
2879 */
2880VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2881{
2882 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2883 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002884
2885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002886 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 if (pWDA->txSuspendTimedOut)
2889 {
2890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002891 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 return status;
2893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 /* Reset the event to be not signalled */
2895 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2896 if(!VOS_IS_STATUS_SUCCESS(status))
2897 {
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002899 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return VOS_STATUS_E_FAILURE;
2901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002903 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 WDA_SuspendDataTxCallback);
2905 if(status != VOS_STATUS_SUCCESS)
2906 {
2907 return status;
2908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 /* Wait for the event to be set by the TL, to get the response of
2910 * suspending the TX queues, this event should be set by the Callback
2911 * function called by TL*/
2912 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2913 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2914 if(!VOS_IS_STATUS_SUCCESS(status))
2915 {
2916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2917 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002918 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 /* Set this flag to true when TL suspend times out, so that when TL
2920 * suspend eventually happens and calls the callback, TL can be resumed
2921 * right away by looking at this flag when true.*/
2922 pWDA->txSuspendTimedOut = TRUE;
2923 }
2924 else
2925 {
2926 pWDA->txSuspendTimedOut = FALSE;
2927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2929 {
2930 status = VOS_STATUS_SUCCESS;
2931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return status;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_resumeDataTx
2936 * Update TL to resume the data Transmission
2937 */
2938VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2939{
2940 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941
2942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002943 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002944
2945 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 return status;
2947}
Jeff Johnson295189b2012-06-20 16:38:30 -07002948/*
2949 * FUNCTION: WDA_InitScanReqCallback
2950 * Trigger Init SCAN callback
2951 */
2952void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2953{
2954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2955 tWDA_CbContext *pWDA;
2956 tInitScanParams *pWDA_ScanParam ;
2957 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002959 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == pWdaParams)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 VOS_ASSERT(0) ;
2965 return ;
2966 }
2967 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2968 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 if(NULL == pWDA_ScanParam)
2970 {
2971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002972 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002973 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2975 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 return ;
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(WDI_STATUS_SUCCESS != wdiStatus)
2979 {
2980 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if(VOS_STATUS_SUCCESS != status)
2982 {
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 }
2986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 /* free WDI command buffer */
2988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302990
2991
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002993 /* without converting the Status to Failure or Success Just
2994 pass the same status to lim */
2995 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 /* send SCAN RSP message back to PE */
2997 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 return ;
2999}
3000
3001/*
3002 * FUNCTION: WDA_ProcessInitScanReq
3003 * Trigger Init SCAN in DAL
3004 */
3005VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3006 tInitScanParams *initScanParams)
3007{
3008 WDI_Status status = WDI_STATUS_SUCCESS ;
3009 WDI_InitScanReqParamsType *wdiInitScanParam =
3010 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3011 sizeof(WDI_InitScanReqParamsType)) ;
3012 tWDA_ReqParams *pWdaParams;
3013 tANI_U8 i = 0;
3014
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003016 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 if(NULL == wdiInitScanParam)
3018 {
3019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 VOS_ASSERT(0);
3022 return VOS_STATUS_E_NOMEM;
3023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3025 if(NULL == pWdaParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0);
3030 vos_mem_free(wdiInitScanParam);
3031 return VOS_STATUS_E_NOMEM;
3032 }
3033
3034 /* Copy init Scan params to WDI structure */
3035 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3036 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3037 sizeof(tSirMacAddr)) ;
3038 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3039 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3040 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3042 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3044 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3046 {
3047 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3048 initScanParams->scanEntry.bssIdx[i] ;
3049 }
3050
3051 /* if Frame length, copy macMgmtHdr or WDI structure */
3052 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3053 {
3054 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3055 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3056 }
3057 wdiInitScanParam->wdiReqStatusCB = NULL ;
3058
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 /* Store Init Req pointer, as this will be used for response */
3060 pWdaParams->pWdaContext = pWDA;
3061 pWdaParams->wdaMsgParam = initScanParams;
3062 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 /* first try to suspend TX */
3064 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(WDI_STATUS_SUCCESS != status)
3066 {
3067 goto handleWdiFailure;
3068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 /* call DAL API to pass init scan request to DAL */
3070 status = WDI_InitScanReq(wdiInitScanParam,
3071 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 if(IS_WDI_STATUS_FAILURE(status))
3073 {
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3075 "error in WDA Init Scan, Resume Tx " );
3076 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_ASSERT(0) ;
3078
3079 goto handleWdiFailure;
3080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082handleWdiFailure:
3083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3084 "Failure in WDI Api, free all the memory " );
3085 /* free WDI command buffer */
3086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3087 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 /* send Failure to PE */
3089 initScanParams->status = eSIR_FAILURE ;
3090 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 return CONVERT_WDI2VOS_STATUS(status) ;
3092}
3093
Jeff Johnson295189b2012-06-20 16:38:30 -07003094/*
3095 * FUNCTION: WDA_StartScanReqCallback
3096 * send Start SCAN RSP back to PE
3097 */
3098void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3099 void* pUserData)
3100{
3101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3102 tWDA_CbContext *pWDA;
3103 tStartScanParams *pWDA_ScanParam;
3104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003105 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 if(NULL == pWdaParams)
3107 {
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0) ;
3111 return ;
3112 }
3113 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3114 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 if(NULL == pWDA_ScanParam)
3116 {
3117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003118 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003120 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 return ;
3122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3124 {
3125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003126 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003128 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3132 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003133
Jeff Johnson295189b2012-06-20 16:38:30 -07003134
3135 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003136 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 /* send SCAN RSP message back to PE */
3138 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 return ;
3140}
3141
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_ProcessStartScanReq
3144 * Trigger start SCAN in WDI
3145 */
3146VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3147 tStartScanParams *startScanParams)
3148{
3149 WDI_Status status = WDI_STATUS_SUCCESS;
3150 WDI_StartScanReqParamsType *wdiStartScanParams =
3151 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3152 sizeof(WDI_StartScanReqParamsType)) ;
3153 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if(NULL == wdiStartScanParams)
3157 {
3158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_NOMEM;
3162 }
3163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3164 if(NULL == pWdaParams)
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 vos_mem_free(wdiStartScanParams);
3170 return VOS_STATUS_E_NOMEM;
3171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 /* Copy init Scan params to WDI structure */
3173 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3174 wdiStartScanParams->wdiReqStatusCB = NULL ;
3175
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 /* Store Init Req pointer, as this will be used for response */
3177 /* store Params pass it to WDI */
3178 pWdaParams->pWdaContext = pWDA;
3179 pWdaParams->wdaMsgParam = startScanParams;
3180 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 /* call DAL API to pass init scan request to DAL */
3182 status = WDI_StartScanReq(wdiStartScanParams,
3183 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 /* failure returned by WDI API */
3185 if(IS_WDI_STATUS_FAILURE(status))
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3188 "Failure in Start Scan WDI API, free all the memory "
3189 "It should be due to previous abort scan." );
3190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3191 vos_mem_free(pWdaParams) ;
3192 startScanParams->status = eSIR_FAILURE ;
3193 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return CONVERT_WDI2VOS_STATUS(status) ;
3196}
Jeff Johnson295189b2012-06-20 16:38:30 -07003197/*
3198 * FUNCTION: WDA_EndScanReqCallback
3199 * END SCAN callback
3200 */
3201void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3202{
3203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3204 tWDA_CbContext *pWDA;
3205 tEndScanParams *endScanParam;
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003207 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(NULL == pWdaParams)
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 VOS_ASSERT(0) ;
3213 return ;
3214 }
3215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3216 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 if(NULL == endScanParam)
3218 {
3219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3223 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 return ;
3225 }
3226
3227 /* Free WDI command buffer */
3228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3229 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003231 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 /* send response back to PE */
3233 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3234 return ;
3235}
3236
Jeff Johnson295189b2012-06-20 16:38:30 -07003237/*
3238 * FUNCTION: WDA_ProcessEndScanReq
3239 * Trigger END SCAN in WDI
3240 */
3241VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3242 tEndScanParams *endScanParams)
3243{
3244 WDI_Status status = WDI_STATUS_SUCCESS;
3245 WDI_EndScanReqParamsType *wdiEndScanParams =
3246 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3247 sizeof(WDI_EndScanReqParamsType)) ;
3248 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(NULL == wdiEndScanParams)
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 VOS_ASSERT(0);
3256 return VOS_STATUS_E_NOMEM;
3257 }
3258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3259 if(NULL == pWdaParams)
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0);
3264 vos_mem_free(wdiEndScanParams);
3265 return VOS_STATUS_E_NOMEM;
3266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* Copy init Scan params to WDI structure */
3268 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3269 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 /* Store Init Req pointer, as this will be used for response */
3271 /* store Params pass it to WDI */
3272 pWdaParams->pWdaContext = pWDA;
3273 pWdaParams->wdaMsgParam = endScanParams;
3274 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 /* call DAL API to pass init scan request to DAL */
3276 status = WDI_EndScanReq(wdiEndScanParams,
3277 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 if(IS_WDI_STATUS_FAILURE(status))
3279 {
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3281 "Failure in End Scan WDI API, free all the memory "
3282 "It should be due to previous abort scan." );
3283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3284 vos_mem_free(pWdaParams) ;
3285 endScanParams->status = eSIR_FAILURE ;
3286 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return CONVERT_WDI2VOS_STATUS(status) ;
3289}
Jeff Johnson295189b2012-06-20 16:38:30 -07003290/*
3291 * FUNCTION: WDA_FinishScanReqCallback
3292 * Trigger Finish SCAN callback
3293 */
3294void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3295{
3296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3297 tWDA_CbContext *pWDA;
3298 tFinishScanParams *finishScanParam;
3299 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == pWdaParams)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0) ;
3307 return ;
3308 }
3309
3310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3311 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 if(NULL == finishScanParam)
3313 {
3314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3318 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return ;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3322 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 /*
3324 * Now Resume TX, if we reached here means, TX is already suspended, we
3325 * have to resume it unconditionaly
3326 */
3327 status = WDA_ResumeDataTx(pWDA) ;
3328
3329 if(VOS_STATUS_SUCCESS != status)
3330 {
3331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003332 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003334 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3336 return ;
3337}
Jeff Johnson295189b2012-06-20 16:38:30 -07003338/*
3339 * FUNCTION: WDA_ProcessFinshScanReq
3340 * Trigger Finish SCAN in WDI
3341 */
3342VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3343 tFinishScanParams *finishScanParams)
3344{
3345 WDI_Status status = WDI_STATUS_SUCCESS;
3346 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3347 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3348 sizeof(WDI_FinishScanReqParamsType)) ;
3349 tWDA_ReqParams *pWdaParams ;
3350 tANI_U8 i = 0;
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 if(NULL == wdiFinishScanParams)
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_ASSERT(0);
3358 return VOS_STATUS_E_NOMEM;
3359 }
3360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3361 if(NULL == pWdaParams)
3362 {
3363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 VOS_ASSERT(0);
3366 vos_mem_free(wdiFinishScanParams);
3367 return VOS_STATUS_E_NOMEM;
3368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 /* Copy init Scan params to WDI structure */
3370 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3371 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3372 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3374 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3375 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3376 finishScanParams->frameLength ;
3377 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3378 finishScanParams->currentOperChannel ;
3379 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3380 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3381 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3383 {
3384 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3385 finishScanParams->scanEntry.bssIdx[i] ;
3386 }
3387
3388
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 /* if Frame length, copy macMgmtHdr ro WDI structure */
3390 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3391 {
3392 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3393 &finishScanParams->macMgmtHdr,
3394 sizeof(WDI_MacMgmtHdr)) ;
3395 }
3396 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 /* Store Init Req pointer, as this will be used for response */
3398 /* store Params pass it to WDI */
3399 pWdaParams->pWdaContext = pWDA;
3400 pWdaParams->wdaMsgParam = finishScanParams;
3401 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 /* call DAL API to pass init scan request to DAL */
3403 status = WDI_FinishScanReq(wdiFinishScanParams,
3404 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003405
Jeff Johnson295189b2012-06-20 16:38:30 -07003406
3407 /*
3408 * WDI API returns failure..
3409 */
3410 if(IS_WDI_STATUS_FAILURE( status))
3411 {
3412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3413 "Failure in Finish Scan WDI API, free all the memory " );
3414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3415 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 finishScanParams->status = eSIR_FAILURE ;
3417 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 return CONVERT_WDI2VOS_STATUS(status) ;
3420}
Jeff Johnson295189b2012-06-20 16:38:30 -07003421/*---------------------------------------------------------------------
3422 * ASSOC API's
3423 *---------------------------------------------------------------------
3424 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003425/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303426 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 * Trigger Init SCAN callback
3428 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303429void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003430{
3431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3432 tWDA_CbContext *pWDA;
3433 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 if(NULL == pWdaParams)
3437 {
3438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003439 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 VOS_ASSERT(0) ;
3441 return ;
3442 }
3443 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3444 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3446 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 /* reset macBSSID */
3448 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 /* reset macSTASelf */
3450 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003451 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 return ;
3454}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303455
3456/*
3457 * FUNCTION: WDA_JoinReqCallback
3458 * Free memory and send SWITCH CHANNEL RSP back to PE.
3459 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3460 */
3461void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3462{
3463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3464 tWDA_CbContext *pWDA;
3465 tSwitchChannelParams *joinReqParam;
3466
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3468 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3469
3470 if(NULL == pWdaParams)
3471 {
3472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3473 "%s: pWdaParams received NULL", __func__);
3474 VOS_ASSERT(0);
3475 return;
3476 }
3477
3478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3479 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3480 joinReqParam->status = wdiStatus;
3481
3482 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3483 {
3484 /* reset macBSSID */
3485 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3486 /* reset macSTASelf */
3487 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3488
3489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3490 vos_mem_free(pWdaParams);
3491 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3492 }
3493
3494 return;
3495}
3496
Jeff Johnson295189b2012-06-20 16:38:30 -07003497/*
3498 * FUNCTION: WDA_ProcessJoinReq
3499 * Trigger Join REQ in WDI
3500 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003501VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3502 tSwitchChannelParams* joinReqParam)
3503{
3504 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 WDI_JoinReqParamsType *wdiJoinReqParam =
3506 (WDI_JoinReqParamsType *)vos_mem_malloc(
3507 sizeof(WDI_JoinReqParamsType)) ;
3508 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 if(NULL == wdiJoinReqParam)
3512 {
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003516 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 return VOS_STATUS_E_NOMEM;
3518 }
3519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3520 if(NULL == pWdaParams)
3521 {
3522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 VOS_ASSERT(0);
3525 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003526 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 return VOS_STATUS_E_NOMEM;
3528 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003529
3530 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3531 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3532 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3533 {
3534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3535 "%s: received join request when BSSID or self-STA is NULL "
3536 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003538 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3539 VOS_ASSERT(0);
3540 vos_mem_free(wdiJoinReqParam);
3541 vos_mem_free(pWdaParams);
3542 joinReqParam->status = eSIR_FAILURE ;
3543 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3544 return VOS_STATUS_E_INVAL;
3545 }
3546
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 /* copy the BSSID for pWDA */
3548 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3549 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3551 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3553 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003554#ifdef WLAN_FEATURE_VOWIFI
3555 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3556 joinReqParam->maxTxPower ;
3557#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3559 joinReqParam->localPowerConstraint ;
3560#endif
3561 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3562 joinReqParam->secondaryChannelOffset ;
3563 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3564
Sachin Ahuja935eda782014-07-30 14:57:41 +05303565 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3566 wdiJoinReqParam->pUserData = pWdaParams;
3567
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 /* Store Init Req pointer, as this will be used for response */
3569 /* store Params pass it to WDI */
3570 pWdaParams->pWdaContext = pWDA;
3571 pWdaParams->wdaMsgParam = joinReqParam;
3572 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303574 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(IS_WDI_STATUS_FAILURE(status))
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3578 "Failure in Join WDI API, free all the memory " );
3579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3580 vos_mem_free(pWdaParams) ;
3581 joinReqParam->status = eSIR_FAILURE ;
3582 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 return CONVERT_WDI2VOS_STATUS(status) ;
3585}
Jeff Johnson295189b2012-06-20 16:38:30 -07003586/*
3587 * FUNCTION: WDA_SwitchChannelReqCallback
3588 * send Switch channel RSP back to PE
3589 */
3590void WDA_SwitchChannelReqCallback(
3591 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3592{
3593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3594 tWDA_CbContext *pWDA;
3595 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 if(NULL == pWdaParams)
3599 {
3600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 VOS_ASSERT(0) ;
3603 return ;
3604 }
3605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3606 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3607
3608#ifdef WLAN_FEATURE_VOWIFI
3609 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3610#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003614 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 return ;
3617}
Jeff Johnson295189b2012-06-20 16:38:30 -07003618/*
3619 * FUNCTION: WDA_ProcessChannelSwitchReq
3620 * Request to WDI to switch channel REQ params.
3621 */
3622VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3623 tSwitchChannelParams *pSwitchChanParams)
3624{
3625 WDI_Status status = WDI_STATUS_SUCCESS ;
3626 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3627 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3628 sizeof(WDI_SwitchChReqParamsType)) ;
3629 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 if(NULL == wdiSwitchChanParam)
3633 {
3634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 VOS_ASSERT(0);
3637 return VOS_STATUS_E_NOMEM;
3638 }
3639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3640 if(NULL == pWdaParams)
3641 {
3642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 VOS_ASSERT(0);
3645 vos_mem_free(wdiSwitchChanParam);
3646 return VOS_STATUS_E_NOMEM;
3647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3649#ifndef WLAN_FEATURE_VOWIFI
3650 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3651 pSwitchChanParams->localPowerConstraint;
3652#endif
3653 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3654 pSwitchChanParams->secondaryChannelOffset;
3655 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 /* Store req pointer, as this will be used for response */
3657 /* store Params pass it to WDI */
3658 pWdaParams->pWdaContext = pWDA;
3659 pWdaParams->wdaMsgParam = pSwitchChanParams;
3660 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661#ifdef WLAN_FEATURE_VOWIFI
3662 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3663 = pSwitchChanParams->maxTxPower;
3664 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3665 pSwitchChanParams ->selfStaMacAddr,
3666 sizeof(tSirMacAddr));
3667#endif
3668 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3669 pSwitchChanParams->bssId,
3670 sizeof(tSirMacAddr));
3671
3672 status = WDI_SwitchChReq(wdiSwitchChanParam,
3673 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 if(IS_WDI_STATUS_FAILURE(status))
3675 {
3676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3677 "Failure in process channel switch Req WDI API, free all the memory " );
3678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3679 vos_mem_free(pWdaParams) ;
3680 pSwitchChanParams->status = eSIR_FAILURE ;
3681 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 return CONVERT_WDI2VOS_STATUS(status) ;
3684}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003685
3686/*
3687 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3688 * send Switch channel RSP back to PE
3689 */
3690void WDA_SwitchChannelReqCallback_V1(
3691 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3692 void* pUserData)
3693{
3694 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3695 tWDA_CbContext *pWDA;
3696 tSwitchChannelParams *pSwitchChanParams;
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3698 "<------ %s " ,__func__);
3699
3700 if (NULL == pWdaParams)
3701 {
3702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3703 "%s: pWdaParams received NULL", __func__);
3704 VOS_ASSERT(0);
3705 return ;
3706 }
3707 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3708 pSwitchChanParams =
3709 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3710 pSwitchChanParams->channelSwitchSrc =
3711 wdiSwitchChanRsp->channelSwitchSrc;
3712#ifdef WLAN_FEATURE_VOWIFI
3713 pSwitchChanParams->txMgmtPower =
3714 wdiSwitchChanRsp->ucTxMgmtPower;
3715#endif
3716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3717 vos_mem_free(pWdaParams);
3718 pSwitchChanParams->status =
3719 wdiSwitchChanRsp->wdiStatus ;
3720 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3721 (void *)pSwitchChanParams , 0);
3722 return;
3723}
3724
3725/*
3726 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3727 * Request to WDI to switch channel REQ params.
3728 */
3729VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3730 tSwitchChannelParams *pSwitchChanParams)
3731{
3732 WDI_Status status = WDI_STATUS_SUCCESS ;
3733 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3734 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3735 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3736 tWDA_ReqParams *pWdaParams ;
3737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3738 "------> %s " ,__func__);
3739 if (NULL == wdiSwitchChanParam)
3740 {
3741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3742 "%s: VOS MEM Alloc Failure", __func__);
3743 VOS_ASSERT(0);
3744 return VOS_STATUS_E_NOMEM;
3745 }
3746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3747 if (NULL == pWdaParams)
3748 {
3749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3750 "%s: VOS MEM Alloc Failure", __func__);
3751 VOS_ASSERT(0);
3752 vos_mem_free(wdiSwitchChanParam);
3753 return VOS_STATUS_E_NOMEM;
3754 }
3755 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3756 pSwitchChanParams->channelSwitchSrc;
3757
3758 wdiSwitchChanParam->wdiChInfo.ucChannel =
3759 pSwitchChanParams->channelNumber;
3760#ifndef WLAN_FEATURE_VOWIFI
3761 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3762 pSwitchChanParams->localPowerConstraint;
3763#endif
3764 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3765 pSwitchChanParams->secondaryChannelOffset;
3766 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3767 /* Store req pointer, as this will be used for response */
3768 /* store Params pass it to WDI */
3769 pWdaParams->pWdaContext = pWDA;
3770 pWdaParams->wdaMsgParam = pSwitchChanParams;
3771 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3772#ifdef WLAN_FEATURE_VOWIFI
3773 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3774 pSwitchChanParams->maxTxPower;
3775 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3776 pSwitchChanParams ->selfStaMacAddr,
3777 sizeof(tSirMacAddr));
3778#endif
3779 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3780 pSwitchChanParams->bssId,
3781 sizeof(tSirMacAddr));
3782
3783 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3784 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3785 pWdaParams);
3786 if (IS_WDI_STATUS_FAILURE(status))
3787 {
3788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3789 "Failure in process channel switch Req WDI "
3790 "API, free all the memory " );
3791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3792 vos_mem_free(pWdaParams) ;
3793 pSwitchChanParams->status = eSIR_FAILURE ;
3794 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3795 (void *)pSwitchChanParams, 0) ;
3796 }
3797 return CONVERT_WDI2VOS_STATUS(status) ;
3798}
3799
Jeff Johnson295189b2012-06-20 16:38:30 -07003800/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303801 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 * config BSS Req Callback, called by WDI
3803 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303804void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 ,void* pUserData)
3806{
3807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3808 tWDA_CbContext *pWDA;
3809 tAddBssParams *configBssReqParam;
3810 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 if(NULL == pWdaParams)
3814 {
3815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 VOS_ASSERT(0) ;
3818 return ;
3819 }
3820 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3821 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3822 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003824 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3826 {
3827 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3828 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3830 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3831 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3832
3833 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3834 {
3835 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3836 {
3837 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3838 staConfigBssParam->staType = STA_ENTRY_BSSID;
3839 }
3840 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3841 (staConfigBssParam->staType == STA_ENTRY_SELF))
3842 {
3843 /* This is the 1st add BSS Req for the BTAMP STA */
3844 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3845 staConfigBssParam->staType = STA_ENTRY_BSSID;
3846 }
3847 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3848 (staConfigBssParam->staType == STA_ENTRY_PEER))
3849 {
3850 /* This is the 2nd ADD BSS Request that is sent
3851 * on the BTAMP STA side. The Sta type is
3852 * set to STA_ENTRY_PEER here.*/
3853 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3854 }
3855 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3856 (staConfigBssParam->staType == STA_ENTRY_SELF))
3857 {
3858 /* statype is already set by PE.
3859 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3860 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3861 staConfigBssParam->staType = STA_ENTRY_BSSID;
3862 }
3863 else
3864 {
3865 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3866 staConfigBssParam->staType = STA_ENTRY_PEER;
3867 }
3868 }
3869 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3870 {
3871 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3872 staConfigBssParam->staType = STA_ENTRY_SELF;
3873 }
3874 else
3875 {
3876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3877 "Invalid operation mode specified");
3878 VOS_ASSERT(0);
3879 }
3880
3881 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3886 sizeof(tSirMacAddr));
3887 staConfigBssParam->txChannelWidthSet =
3888 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3890 staConfigBssParam->htCapable)
3891 {
3892 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3893 wdiConfigBssRsp->ucBSSIdx;
3894 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3895 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303896 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3897 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3900 wdiConfigBssRsp->ucBSSIdx,
3901 wdiConfigBssRsp->ucSTAIdx))
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003904 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 VOS_ASSERT(0) ;
3906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3908 {
3909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 VOS_ASSERT(0) ;
3912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003913#ifdef WLAN_FEATURE_VOWIFI
3914 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3915#endif
3916 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303917 else
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3920 "%s: Failure with status %d", __func__,
3921 wdiConfigBssRsp->wdiStatus);
3922 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3923 WLAN_LOG_INDICATOR_HOST_DRIVER,
3924 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3925 FALSE, TRUE);
3926 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303927 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3928 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3930 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 return ;
3933}
Jeff Johnson295189b2012-06-20 16:38:30 -07003934/*
3935 * FUNCTION: WDA_UpdateEdcaParamsForAC
3936 * Update WDI EDCA params with PE edca params
3937 */
3938void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3939 WDI_EdcaParamRecord *wdiEdcaParam,
3940 tSirMacEdcaParamRecord *macEdcaParam)
3941{
3942 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3943 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3944 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3945 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3946 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3947 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3948}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303949void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3950 void* pUserData)
3951{
3952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3953 tWDA_CbContext *pWDA;
3954 tAddBssParams *addBssParams;
3955
3956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3957 "<------ %s, wdiStatus: %d",
3958 __func__, wdiStatus);
3959
3960 if (NULL == pWdaParams)
3961 {
3962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3963 "%s: Invalid pWdaParams pointer", __func__);
3964 VOS_ASSERT(0);
3965 return;
3966 }
3967
3968 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3969 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3970
3971 addBssParams->status = wdiStatus;
3972
3973 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3974 {
3975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3976 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303977 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3978 WLAN_LOG_INDICATOR_HOST_DRIVER,
3979 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3980 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303981 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3982 }
3983
3984 return ;
3985}
3986
Jeff Johnson295189b2012-06-20 16:38:30 -07003987/*
3988 * FUNCTION: WDA_ProcessConfigBssReq
3989 * Configure BSS before starting Assoc with AP
3990 */
3991VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3992 tAddBssParams* configBssReqParam)
3993{
3994 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303995 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303999 if (NULL == configBssReqParam)
4000 {
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4002 "%s: configBssReqParam is NULL", __func__);
4003 return VOS_STATUS_E_INVAL;
4004 }
4005
4006 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4007 sizeof(WDI_ConfigBSSReqParamsType)) ;
4008
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(NULL == wdiConfigBssReqParam)
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 VOS_ASSERT(0);
4014 return VOS_STATUS_E_NOMEM;
4015 }
4016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4017 if(NULL == pWdaParams)
4018 {
4019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004020 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 VOS_ASSERT(0);
4022 vos_mem_free(wdiConfigBssReqParam);
4023 return VOS_STATUS_E_NOMEM;
4024 }
Kiran4a17ebe2013-01-31 10:43:43 -08004025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4026 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4029 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304030 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4031 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 /* Store Init Req pointer, as this will be used for response */
4033 /* store Params pass it to WDI */
4034 pWdaParams->pWdaContext = pWDA;
4035 pWdaParams->wdaMsgParam = configBssReqParam;
4036 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304038 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(IS_WDI_STATUS_FAILURE(status))
4040 {
4041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4042 "Failure in Config BSS WDI API, free all the memory " );
4043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4044 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 return CONVERT_WDI2VOS_STATUS(status) ;
4049}
Jeff Johnson295189b2012-06-20 16:38:30 -07004050#ifdef ENABLE_HAL_COMBINED_MESSAGES
4051/*
4052 * FUNCTION: WDA_PostAssocReqCallback
4053 * Post ASSOC req callback, send RSP back to PE
4054 */
4055void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4056 void* pUserData)
4057{
4058 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4059 tPostAssocParams *postAssocReqParam =
4060 (tPostAssocParams *)pWDA->wdaMsgParam ;
4061 /*STA context within the BSS Params*/
4062 tAddStaParams *staPostAssocParam =
4063 &postAssocReqParam->addBssParams.staContext ;
4064 /*STA Params for self STA*/
4065 tAddStaParams *selfStaPostAssocParam =
4066 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004070 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4072 {
4073 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4074 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4075 sizeof(tSirMacAddr)) ;
4076 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4077 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4078 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4080 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304081 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4083 pWDA->wdaWdiApiMsgParam = NULL;
4084 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 return ;
4087}
Jeff Johnson295189b2012-06-20 16:38:30 -07004088/*
4089 * FUNCTION: WDA_ProcessPostAssocReq
4090 * Trigger POST ASSOC processing in WDI
4091 */
4092VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4093 tPostAssocParams *postAssocReqParam)
4094{
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 WDI_Status status = WDI_STATUS_SUCCESS ;
4096
4097 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4098 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4099 sizeof(WDI_PostAssocReqParamsType)) ;
4100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(NULL == wdiPostAssocReqParam)
4104 {
4105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 VOS_ASSERT(0);
4108 return VOS_STATUS_E_NOMEM;
4109 }
4110
4111 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4112 {
4113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004114 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_ASSERT(0);
4116 return VOS_STATUS_E_FAILURE;
4117 }
4118
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 /* update BSS params into WDI structure */
4120 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4121 &postAssocReqParam->addBssParams) ;
4122 /* update STA params into WDI structure */
4123 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4124 &postAssocReqParam->addStaParams) ;
4125
4126 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4127 postAssocReqParam->addBssParams.highPerformance;
4128 WDA_UpdateEdcaParamsForAC(pWDA,
4129 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4130 &postAssocReqParam->addBssParams.acbe);
4131 WDA_UpdateEdcaParamsForAC(pWDA,
4132 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4133 &postAssocReqParam->addBssParams.acbk);
4134 WDA_UpdateEdcaParamsForAC(pWDA,
4135 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4136 &postAssocReqParam->addBssParams.acvi);
4137 WDA_UpdateEdcaParamsForAC(pWDA,
4138 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4139 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 /* Store Init Req pointer, as this will be used for response */
4141 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 /* store Params pass it to WDI */
4143 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4145 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 if(IS_WDI_STATUS_FAILURE(status))
4147 {
4148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4149 "Failure in Post Assoc WDI API, free all the memory " );
4150 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4151 pWDA->wdaWdiApiMsgParam = NULL;
4152 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 return CONVERT_WDI2VOS_STATUS(status) ;
4157}
4158#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004159/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304160 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 * ADD STA req callback, send RSP back to PE
4162 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304163void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 void* pUserData)
4165{
4166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4167 tWDA_CbContext *pWDA;
4168 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004170 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 if(NULL == pWdaParams)
4172 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 VOS_ASSERT(0) ;
4175 return ;
4176 }
4177 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4178 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004180 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4182 {
4183 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4184 /*TODO: UMAC structure doesn't have these fields*/
4185 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4186 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4187 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4188 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4189 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4190 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004191#ifdef FEATURE_WLAN_TDLS
4192 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4193 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4194#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004196#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 {
4198 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4199 wdiConfigStaRsp->ucBssIdx;
4200 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4201 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304202 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4203 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 }
4205 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004208 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_ASSERT(0) ;
4210 return ;
4211 }
4212 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304213 else
4214 {
4215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4216 "%s: Failure with status %d", __func__,
4217 wdiConfigStaRsp->wdiStatus);
4218 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4219 WLAN_LOG_INDICATOR_HOST_DRIVER,
4220 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4221 FALSE, TRUE);
4222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4224 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 return ;
4227}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304228void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4229 void* pUserData)
4230{
4231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4232 tWDA_CbContext *pWDA;
4233 tAddStaParams *addStaParams;
4234
4235 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4236 "<------ %s, wdiStatus: %d",
4237 __func__, wdiStatus);
4238
4239 if (NULL == pWdaParams)
4240 {
4241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4242 "%s: Invalid pWdaParams pointer", __func__);
4243 VOS_ASSERT(0);
4244 return;
4245 }
4246
4247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4248 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4249
4250 addStaParams->status = wdiStatus;
4251
4252 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4253 {
4254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4255 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304256 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4257 WLAN_LOG_INDICATOR_HOST_DRIVER,
4258 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4259 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304260 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4261 }
4262
4263 return ;
4264}
4265
Jeff Johnson295189b2012-06-20 16:38:30 -07004266/*
4267 * FUNCTION: WDA_ConfigStaReq
4268 * Trigger Config STA processing in WDI
4269 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304270VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 tAddStaParams *addStaReqParam)
4272{
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4275 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4276 sizeof(WDI_ConfigSTAReqParamsType)) ;
4277 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 if(NULL == wdiConfigStaReqParam)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 return VOS_STATUS_E_NOMEM;
4286 }
4287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4288 if(NULL == pWdaParams)
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_ASSERT(0);
4293 vos_mem_free(wdiConfigStaReqParam);
4294 return VOS_STATUS_E_NOMEM;
4295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 /* update STA params into WDI structure */
4298 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4299 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304300 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4301 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 /* Store Init Req pointer, as this will be used for response */
4303 /* store Params pass it to WDI */
4304 pWdaParams->pWdaContext = pWDA;
4305 pWdaParams->wdaMsgParam = addStaReqParam;
4306 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304307
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304309 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 if(IS_WDI_STATUS_FAILURE(status))
4311 {
4312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4313 "Failure in Config STA WDI API, free all the memory " );
4314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4315 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 return CONVERT_WDI2VOS_STATUS(status) ;
4320}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304321
Jeff Johnson295189b2012-06-20 16:38:30 -07004322/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304323 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304325 */
4326void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 void* pUserData)
4328{
4329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4330 tWDA_CbContext *pWDA;
4331 tDeleteBssParams *delBssReqParam;
4332 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004334 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 if(NULL == pWdaParams)
4336 {
4337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004338 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 VOS_ASSERT(0) ;
4340 return ;
4341 }
4342 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4343 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004344 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4346 {
4347 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4348 sizeof(tSirMacAddr)) ;
4349 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304350 else
4351 {
4352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4353 "%s: Failure with status %d", __func__,
4354 wdiDelBssRsp->wdiStatus);
4355 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4356 WLAN_LOG_INDICATOR_HOST_DRIVER,
4357 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4358 FALSE, TRUE);
4359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4361 {
4362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004363 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 VOS_ASSERT(0) ;
4365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4367 {
4368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004369 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 VOS_ASSERT(0) ;
4371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4373 {
4374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004375 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 VOS_ASSERT(0) ;
4377 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304378
4379 WLANTL_StartForwarding(staIdx,0,0);
4380
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4382 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 /* reset the the system role*/
4384 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4385
4386 /* Reset the BA related information */
4387 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4388 {
4389 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4390 {
4391 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4392 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304393 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 /* Reset framesTxed counters here */
4395 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4396 {
4397 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4398 }
4399 }
4400 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 return ;
4404}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304405void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4406 void* pUserData)
4407{
4408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4409 tWDA_CbContext *pWDA;
4410 tDeleteBssParams *delbssParams;
4411
4412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4413 "<------ %s, wdiStatus: %d",
4414 __func__, wdiStatus);
4415
4416 if (NULL == pWdaParams)
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4419 "%s: Invalid pWdaParams pointer", __func__);
4420 VOS_ASSERT(0);
4421 return;
4422 }
4423
4424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4425 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4426
4427 delbssParams->status = wdiStatus ;
4428
4429 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4430 {
4431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4432 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304433 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4434 WLAN_LOG_INDICATOR_HOST_DRIVER,
4435 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4436 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304437 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4438 }
4439
4440 return ;
4441}
Jeff Johnson295189b2012-06-20 16:38:30 -07004442
Jeff Johnson295189b2012-06-20 16:38:30 -07004443/*
4444 * FUNCTION: WDA_ProcessDelBssReq
4445 * Init DEL BSS req with WDI
4446 */
4447VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4448 tDeleteBssParams *delBssParam)
4449{
4450 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4452 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4453 sizeof(WDI_DelBSSReqParamsType)) ;
4454 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 if(NULL == wdiDelBssReqParam)
4458 {
4459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 VOS_ASSERT(0);
4462 return VOS_STATUS_E_NOMEM;
4463 }
4464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4465 if(NULL == pWdaParams)
4466 {
4467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 VOS_ASSERT(0);
4470 vos_mem_free(wdiDelBssReqParam);
4471 return VOS_STATUS_E_NOMEM;
4472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304474 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4475 wdiDelBssReqParam->pUserData = pWdaParams;
4476
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 /* Store Init Req pointer, as this will be used for response */
4478 /* store Params pass it to WDI */
4479 pWdaParams->pWdaContext = pWDA;
4480 pWdaParams->wdaMsgParam = delBssParam;
4481 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304482
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304484 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 if(IS_WDI_STATUS_FAILURE(status))
4486 {
4487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4488 "Failure in Del BSS WDI API, free all the memory " );
4489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4490 vos_mem_free(pWdaParams) ;
4491 delBssParam->status = eSIR_FAILURE ;
4492 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 return CONVERT_WDI2VOS_STATUS(status) ;
4495}
Jeff Johnson295189b2012-06-20 16:38:30 -07004496/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304497 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304499 */
4500void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 void* pUserData)
4502{
4503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4504 tWDA_CbContext *pWDA;
4505 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 if(NULL == pWdaParams)
4509 {
4510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004511 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304512 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 return ;
4514 }
4515 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4516 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004517 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4519 {
4520 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004523 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 VOS_ASSERT(0) ;
4525 }
4526 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304527 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304529 else
4530 {
4531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4532 "%s: Failure with status %d", __func__,
4533 wdiDelStaRsp->wdiStatus);
4534 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4535 WLAN_LOG_INDICATOR_HOST_DRIVER,
4536 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4537 FALSE, TRUE);
4538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4540 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 /*Reset the BA information corresponding to this STAIdx */
4542 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4543 WDA_INVALID_STA_INDEX;
4544 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304545 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 return ;
4548}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304549void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4550 void* pUserData)
4551{
4552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4553 tWDA_CbContext *pWDA;
4554 tDeleteStaParams *delStaParams;
4555
4556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4557 "<------ %s, wdiStatus: %d",
4558 __func__, wdiStatus);
4559
4560 if (NULL == pWdaParams)
4561 {
4562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4563 "%s: Invalid pWdaParams pointer", __func__);
4564 VOS_ASSERT(0);
4565 return;
4566 }
4567
4568 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4569 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4570
4571 delStaParams->status = wdiStatus ;
4572
4573 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4574 {
4575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4576 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304577 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4578 WLAN_LOG_INDICATOR_HOST_DRIVER,
4579 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4580 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304581 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4582 }
4583
4584 return ;
4585}
4586
Jeff Johnson295189b2012-06-20 16:38:30 -07004587/*
4588 * FUNCTION: WDA_ProcessDelStaReq
4589 * Init DEL STA req with WDI
4590 */
4591VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4592 tDeleteStaParams *delStaParam)
4593{
4594 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4596 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4597 sizeof(WDI_DelSTAReqParamsType)) ;
4598 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004600 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 if(NULL == wdiDelStaReqParam)
4602 {
4603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 VOS_ASSERT(0);
4606 return VOS_STATUS_E_NOMEM;
4607 }
4608 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4609 if(NULL == pWdaParams)
4610 {
4611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 VOS_ASSERT(0);
4614 vos_mem_free(wdiDelStaReqParam);
4615 return VOS_STATUS_E_NOMEM;
4616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304618 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4619 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 /* Store Init Req pointer, as this will be used for response */
4621 /* store Params pass it to WDI */
4622 pWdaParams->pWdaContext = pWDA;
4623 pWdaParams->wdaMsgParam = delStaParam;
4624 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304625
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304627 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 if(IS_WDI_STATUS_FAILURE(status))
4629 {
4630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4631 "Failure in Del STA WDI API, free all the memory status = %d",
4632 status );
4633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4634 vos_mem_free(pWdaParams) ;
4635 delStaParam->status = eSIR_FAILURE ;
4636 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 return CONVERT_WDI2VOS_STATUS(status) ;
4639}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304640void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004641{
4642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4643 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304644 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004646 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 if(NULL == pWdaParams)
4648 {
4649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004650 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 VOS_ASSERT(0) ;
4652 return ;
4653 }
4654 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4655 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4657 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4659 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4660 pwdiAddSTASelfRsp->macSelfSta,
4661 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304662 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4663 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4664 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4665 {
4666 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4667 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4669 "%s: Failure with status %d failcnter %d", __func__,
4670 pwdiAddSTASelfRsp->wdiStatus,
4671 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4672 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4673 WLAN_LOG_INDICATOR_HOST_DRIVER,
4674 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4675 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 return ;
4679}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304680void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4681 void* pUserData)
4682{
4683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4684 tWDA_CbContext *pWDA;
4685 tAddStaSelfParams *addStaSelfParams;
4686
4687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4688 "<------ %s, wdiStatus: %d",
4689 __func__, wdiStatus);
4690
4691 if (NULL == pWdaParams)
4692 {
4693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4694 "%s: Invalid pWdaParams pointer", __func__);
4695 VOS_ASSERT(0);
4696 return;
4697 }
4698
4699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4700 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4701
4702 addStaSelfParams->status = wdiStatus ;
4703
4704 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4705 {
4706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4707 vos_mem_free(pWdaParams) ;
4708 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4709 = WDA_ADDSTA_REQ_WDI_FAIL;
4710 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4712 "%s: Failure with status %d failcnter %d", __func__,
4713 wdiStatus,
4714 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4715 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4716 WLAN_LOG_INDICATOR_HOST_DRIVER,
4717 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4718 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304719 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4720 }
4721
4722 return ;
4723}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304724
Jeff Johnson295189b2012-06-20 16:38:30 -07004725/*
4726 * FUNCTION: WDA_ProcessAddStaSelfReq
4727 *
4728 */
4729VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4730{
4731 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004732 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4734 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4735 sizeof(WDI_AddSTASelfReqParamsType)) ;
4736 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304739 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 if( NULL == wdiAddStaSelfReq )
4741 {
4742 VOS_ASSERT( 0 );
4743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004744 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304745 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4746 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 return( VOS_STATUS_E_NOMEM );
4748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 if( NULL == pWdaParams )
4751 {
4752 VOS_ASSERT( 0 );
4753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004754 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304755 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4756 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004757 vos_mem_free(wdiAddStaSelfReq) ;
4758 return( VOS_STATUS_E_NOMEM );
4759 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304760 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4761 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004763 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 /* Store Init Req pointer, as this will be used for response */
4765 /* store Params pass it to WDI */
4766 pWdaParams->pWdaContext = pWDA;
4767 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304768 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4769
4770 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4771 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772
Jeff Johnson43971f52012-07-17 12:26:56 -07004773 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4776 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004777 wstatus );
4778 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4780 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304781 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4782 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 pAddStaSelfReq->status = eSIR_FAILURE ;
4784 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4785 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004786 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787}
Jeff Johnson295189b2012-06-20 16:38:30 -07004788/*
4789 * FUNCTION: WDA_DelSTASelfRespCallback
4790 *
4791 */
4792void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4793 wdiDelStaSelfRspParams , void* pUserData)
4794{
4795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4796 tWDA_CbContext *pWDA;
4797 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 if (NULL == pWdaParams)
4801 {
4802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004803 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 VOS_ASSERT(0);
4805 return;
4806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4808 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004810 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811
4812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4813 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304814 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304815 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4817 "%s: Failure with status %d", __func__,
4818 wdiDelStaSelfRspParams->wdiStatus);
4819 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4820 WLAN_LOG_INDICATOR_HOST_DRIVER,
4821 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4822 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 return ;
4826}
Jeff Johnson295189b2012-06-20 16:38:30 -07004827/*
4828 * FUNCTION: WDA_DelSTASelfReqCallback
4829 *
4830 */
4831void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4832 void* pUserData)
4833{
4834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4835 tWDA_CbContext *pWDA;
4836 tDelStaSelfParams *delStaSelfParams;
4837
4838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304839 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004840 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004841
4842 if (NULL == pWdaParams)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0);
4847 return;
4848 }
4849
4850 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4851 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4852
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004853 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854
4855 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4856 {
4857 VOS_ASSERT(0);
4858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4859 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304860 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4861 WLAN_LOG_INDICATOR_HOST_DRIVER,
4862 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4863 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4865 }
4866
4867 return ;
4868}
4869
4870/*
4871 * FUNCTION: WDA_DelSTASelfReq
4872 * Trigger Config STA processing in WDI
4873 */
4874VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4875 tDelStaSelfParams* pDelStaSelfReqParam)
4876{
4877 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004878 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 tWDA_ReqParams *pWdaParams = NULL;
4880 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4881 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4882 sizeof(WDI_DelSTASelfReqParamsType)) ;
4883
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004885 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 if( NULL == wdiDelStaSelfReq )
4887 {
4888 VOS_ASSERT( 0 );
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004890 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return( VOS_STATUS_E_NOMEM );
4892 }
4893
4894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4895 if( NULL == pWdaParams )
4896 {
4897 VOS_ASSERT( 0 );
4898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004899 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 vos_mem_free(wdiDelStaSelfReq) ;
4901 return( VOS_STATUS_E_NOMEM );
4902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 pWdaParams->pWdaContext = pWDA;
4904 /* Store param pointer as passed in by caller */
4905 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4906 /* store Params pass it to WDI */
4907 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4909 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4910
4911 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4912 wdiDelStaSelfReq->pUserData = pWdaParams;
4913
Jeff Johnson43971f52012-07-17 12:26:56 -07004914 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4916
Jeff Johnson43971f52012-07-17 12:26:56 -07004917 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 {
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4920 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4921 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004922 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4924 vos_mem_free(pWdaParams) ;
4925 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4926 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4927 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004928 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929}
4930
Jeff Johnson295189b2012-06-20 16:38:30 -07004931/*
4932 * FUNCTION: WDA_SendMsg
4933 * Send Message back to PE
4934 */
4935void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4936 void *pBodyptr, tANI_U32 bodyVal)
4937{
4938 tSirMsgQ msg = {0} ;
4939 tANI_U32 status = VOS_STATUS_SUCCESS ;
4940 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 msg.type = msgType;
4942 msg.bodyval = bodyVal;
4943 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if (VOS_STATUS_SUCCESS != status)
4946 {
4947 if(NULL != pBodyptr)
4948 {
4949 vos_mem_free(pBodyptr);
4950 }
4951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004952 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 VOS_ASSERT(0) ;
4954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 return ;
4956}
Jeff Johnson295189b2012-06-20 16:38:30 -07004957/*
4958 * FUNCTION: WDA_UpdateBSSParams
4959 * Translated WDA/PE BSS info into WDI BSS info..
4960 */
4961void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4962 WDI_ConfigBSSReqInfoType *wdiBssParams,
4963 tAddBssParams *wdaBssParams)
4964{
4965 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304966 v_U8_t i = 0;
4967
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 /* copy bssReq Params to WDI structure */
4969 vos_mem_copy(wdiBssParams->macBSSID,
4970 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4971 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4972 sizeof(tSirMacAddr)) ;
4973 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4974 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4975 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 wdiBssParams->ucShortSlotTimeSupported =
4977 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4979 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4980 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4981 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4982 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4983
4984 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4985 wdiBssParams->ucTXOPProtectionFullSupport =
4986 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4988 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4991 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4992 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4993 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4994
Chet Lanctot186b5732013-03-18 10:26:30 -07004995 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4996
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 /* copy SSID into WDI structure */
4998 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4999 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5000 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5002 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005004#ifdef WLAN_FEATURE_VOWIFI
5005 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5006#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009#ifdef WLAN_FEATURE_VOWIFI_11R
5010 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 if(wdiBssParams->bExtSetStaKeyParamValid)
5012 {
5013 /* copy set STA key params to WDI structure */
5014 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5015 wdaBssParams->extSetStaKeyParam.staIdx;
5016 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5017 wdaBssParams->extSetStaKeyParam.encType;
5018 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5019 wdaBssParams->extSetStaKeyParam.wepType;
5020 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5021 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5023 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005024 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5026 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5027 {
5028 WDA_GetWepKeysFromCfg( pWDA,
5029 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5030 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5031 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5032 }
5033 else
5034 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5036 keyIndex++)
5037 {
5038 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5039 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5041 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5042 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5043 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305044
5045 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5046 {
5047 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5048 {
5049 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5050 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5051 }
5052
5053 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5054 {
5055 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5056 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5057 }
5058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5059 FL("%s: Negated Keys"), __func__);
5060 }
5061 else
5062 {
5063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5064 FL("%s: No change in Keys "), __func__);
5065 vos_mem_copy(
5066 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5067 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5068 WLAN_MAX_KEY_RSC_LEN);
5069 vos_mem_copy(
5070 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5071 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5072 SIR_MAC_MAX_KEY_LENGTH);
5073 }
5074
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5076 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5077 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5078 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305080 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 }
5083 }
5084 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5085 }
5086 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5087 {
5088 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5089 sizeof(wdaBssParams->extSetStaKeyParam) );
5090 }
5091#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005092#ifdef WLAN_FEATURE_11AC
5093 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5094 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5095#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005096
5097 return ;
5098}
Jeff Johnson295189b2012-06-20 16:38:30 -07005099/*
5100 * FUNCTION: WDA_UpdateSTAParams
5101 * Translated WDA/PE BSS info into WDI BSS info..
5102 */
5103void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5104 WDI_ConfigStaReqInfoType *wdiStaParams,
5105 tAddStaParams *wdaStaParams)
5106{
5107 tANI_U8 i = 0;
5108 /* Update STA params */
5109 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5110 sizeof(tSirMacAddr)) ;
5111 wdiStaParams->usAssocId = wdaStaParams->assocId;
5112 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005113 wdiStaParams->staIdx = wdaStaParams->staIdx;
5114
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 wdiStaParams->ucShortPreambleSupported =
5116 wdaStaParams->shortPreambleSupported;
5117 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5118 sizeof(tSirMacAddr)) ;
5119 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5120
5121 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5122
5123 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5124 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5125 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5126 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5127 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5128 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5129 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5130
5131 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5132 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 wdiStaParams->wdiSupportedRates.opRateMode =
5134 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5136 {
5137 wdiStaParams->wdiSupportedRates.llbRates[i] =
5138 wdaStaParams->supportedRates.llbRates[i];
5139 }
5140 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5141 {
5142 wdiStaParams->wdiSupportedRates.llaRates[i] =
5143 wdaStaParams->supportedRates.llaRates[i];
5144 }
5145 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5146 {
5147 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5148 wdaStaParams->supportedRates.aniLegacyRates[i];
5149 }
5150 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5151 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005152#ifdef WLAN_FEATURE_11AC
5153 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5154 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5155 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5156 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5157#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5159 {
5160 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5161 wdaStaParams->supportedRates.supportedMCSSet[i];
5162 }
5163 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5164 wdaStaParams->supportedRates.rxHighestDataRate;
5165
5166 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5167
5168 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5169
5170 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5171 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5172 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5173
5174 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5175 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5176 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5177 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005179#ifdef WLAN_FEATURE_11AC
5180 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5181 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005182 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305183 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5184 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5185 * must be set by default */
5186 if ( wdiStaParams->vhtTxMUBformeeCapable )
5187 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005188#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005189 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5190 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 return ;
5192}
Jeff Johnson295189b2012-06-20 16:38:30 -07005193/*
5194 * -------------------------------------------------------------------------
5195 * CFG update to WDI
5196 * -------------------------------------------------------------------------
5197 */
5198
5199 /*
5200 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5201 * Convert the WNI CFG ID to HAL CFG ID
5202 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005203static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005204{
5205 switch(wniCfgId)
5206 {
5207 case WNI_CFG_STA_ID:
5208 return QWLAN_HAL_CFG_STA_ID;
5209 case WNI_CFG_CURRENT_TX_ANTENNA:
5210 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5211 case WNI_CFG_CURRENT_RX_ANTENNA:
5212 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5213 case WNI_CFG_LOW_GAIN_OVERRIDE:
5214 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5215 case WNI_CFG_POWER_STATE_PER_CHAIN:
5216 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5217 case WNI_CFG_CAL_PERIOD:
5218 return QWLAN_HAL_CFG_CAL_PERIOD;
5219 case WNI_CFG_CAL_CONTROL:
5220 return QWLAN_HAL_CFG_CAL_CONTROL;
5221 case WNI_CFG_PROXIMITY:
5222 return QWLAN_HAL_CFG_PROXIMITY;
5223 case WNI_CFG_NETWORK_DENSITY:
5224 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5225 case WNI_CFG_MAX_MEDIUM_TIME:
5226 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5227 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5228 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5229 case WNI_CFG_RTS_THRESHOLD:
5230 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5231 case WNI_CFG_SHORT_RETRY_LIMIT:
5232 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5233 case WNI_CFG_LONG_RETRY_LIMIT:
5234 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5235 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5236 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5237 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5238 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5239 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5240 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5241 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5242 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5243 case WNI_CFG_FIXED_RATE:
5244 return QWLAN_HAL_CFG_FIXED_RATE;
5245 case WNI_CFG_RETRYRATE_POLICY:
5246 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5247 case WNI_CFG_RETRYRATE_SECONDARY:
5248 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5249 case WNI_CFG_RETRYRATE_TERTIARY:
5250 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5251 case WNI_CFG_FORCE_POLICY_PROTECTION:
5252 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5253 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5254 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5255 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5256 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5257 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5258 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5259 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5260 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5261 case WNI_CFG_MAX_BA_SESSIONS:
5262 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5263 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5264 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5265 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5266 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5267 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5268 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5269 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5270 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5271 case WNI_CFG_STATS_PERIOD:
5272 return QWLAN_HAL_CFG_STATS_PERIOD;
5273 case WNI_CFG_CFP_MAX_DURATION:
5274 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5275#if 0 /*This is not part of CFG*/
5276 case WNI_CFG_FRAME_TRANS_ENABLED:
5277 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5278#endif
5279 case WNI_CFG_DTIM_PERIOD:
5280 return QWLAN_HAL_CFG_DTIM_PERIOD;
5281 case WNI_CFG_EDCA_WME_ACBK:
5282 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5283 case WNI_CFG_EDCA_WME_ACBE:
5284 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5285 case WNI_CFG_EDCA_WME_ACVI:
5286 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5287 case WNI_CFG_EDCA_WME_ACVO:
5288 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5289#if 0
5290 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5291 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5292 case WNI_CFG_TELE_BCN_TRANS_LI:
5293 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5294 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5295 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5296 case WNI_CFG_TELE_BCN_MAX_LI:
5297 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5298 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5299 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5300#endif
5301 case WNI_CFG_ENABLE_CLOSE_LOOP:
5302 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005303 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5304 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305305 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5306 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 default:
5308 {
5309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005310 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 wniCfgId);
5312 return VOS_STATUS_E_INVAL;
5313 }
5314 }
5315}
Jeff Johnson295189b2012-06-20 16:38:30 -07005316/*
5317 * FUNCTION: WDA_UpdateCfgCallback
5318 *
5319 */
5320void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5321{
5322 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5323 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5324 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /*
5328 * currently there is no response message is expected between PE and
5329 * WDA, Failure return from WDI is a ASSERT condition
5330 */
5331 if(WDI_STATUS_SUCCESS != wdiStatus)
5332 {
5333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005334 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005335 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5336 }
5337
5338 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5339 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5340 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 return ;
5342}
Jeff Johnson295189b2012-06-20 16:38:30 -07005343/*
5344 * FUNCTION: WDA_UpdateCfg
5345 *
5346 */
5347VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5348{
5349
5350 WDI_Status status = WDI_STATUS_SUCCESS ;
5351 tANI_U32 val =0;
5352 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5353 tHalCfg *configData;
5354 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5355 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005357 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 if (NULL == pMac )
5359 {
5360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 return VOS_STATUS_E_FAILURE;
5363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005364 if(WDA_START_STATE != pWDA->wdaState)
5365 {
5366 return VOS_STATUS_E_FAILURE;
5367 }
5368
5369 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5370 {
5371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005372 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_ASSERT(0);
5374 return VOS_STATUS_E_FAILURE;
5375 }
5376
5377 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5378 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiCfgReqParam)
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_ASSERT(0);
5384 return VOS_STATUS_E_NOMEM;
5385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5387 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 if(NULL == wdiCfgReqParam->pConfigBuffer)
5389 {
5390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 vos_mem_free(wdiCfgReqParam);
5393 VOS_ASSERT(0);
5394 return VOS_STATUS_E_NOMEM;
5395 }
5396
5397 /*convert the WNI CFG Id to HAL CFG Id*/
5398 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5399 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5400
5401 /*TODO: revisit this for handling string parameters */
5402 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5403 &val) != eSIR_SUCCESS)
5404 {
5405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005406 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5408 vos_mem_free(wdiCfgReqParam);
5409 return eSIR_FAILURE;
5410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5412 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5413 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5414 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5415 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5416
5417 /* store Params pass it to WDI */
5418 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005419#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5420 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5421 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 if(IS_WDI_STATUS_FAILURE(status))
5423 {
5424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5425 "Failure in Update CFG WDI API, free all the memory " );
5426 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5427 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5428 pWDA->wdaWdiCfgApiMsgParam = NULL;
5429 /* Failure is not expected */
5430 VOS_ASSERT(0) ;
5431 }
5432#else
5433 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5434 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5435 pWDA->wdaWdiCfgApiMsgParam = NULL;
5436#endif
5437 return CONVERT_WDI2VOS_STATUS(status) ;
5438}
5439
Jeff Johnson295189b2012-06-20 16:38:30 -07005440VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5441 v_U8_t *pDefaultKeyId,
5442 v_U8_t *pNumKeys,
5443 WDI_KeysType *pWdiKeys )
5444{
5445 v_U32_t i, j, defKeyId = 0;
5446 v_U32_t val = SIR_MAC_KEY_LENGTH;
5447 VOS_STATUS status = WDI_STATUS_SUCCESS;
5448 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 if (NULL == pMac )
5450 {
5451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005452 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return VOS_STATUS_E_FAILURE;
5454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5456 &defKeyId ))
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5459 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5460 }
5461
5462 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 /* Need to extract ALL of the configured WEP Keys */
5464 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5465 {
5466 val = SIR_MAC_KEY_LENGTH;
5467 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5468 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5469 pWdiKeys[j].key,
5470 &val ))
5471 {
5472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005473 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 }
5475 else
5476 {
5477 pWdiKeys[j].keyId = (tANI_U8) i;
5478 /*
5479 * Actually, a DC (Don't Care) because
5480 * this is determined (and set) by PE/MLME
5481 */
5482 pWdiKeys[j].unicast = 0;
5483 /*
5484 * Another DC (Don't Care)
5485 */
5486 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5487 /* Another DC (Don't Care). Unused for WEP */
5488 pWdiKeys[j].paeRole = 0;
5489 /* Determined from wlan_cfgGetStr() above.*/
5490 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 j++;
5492 *pNumKeys = (tANI_U8) j;
5493 }
5494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 return status;
5496}
Jeff Johnson295189b2012-06-20 16:38:30 -07005497/*
5498 * FUNCTION: WDA_SetBssKeyReqCallback
5499 * send SET BSS key RSP back to PE
5500 */
5501void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5502{
5503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5504 tWDA_CbContext *pWDA;
5505 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005507 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 if(NULL == pWdaParams)
5509 {
5510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005511 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 VOS_ASSERT(0) ;
5513 return ;
5514 }
5515 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5516 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305517 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5518 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5520 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005521 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 return ;
5524}
Jeff Johnson295189b2012-06-20 16:38:30 -07005525/*
5526 * FUNCTION: WDA_ProcessSetBssKeyReq
5527 * Request to WDI for programming the BSS key( key for
5528 * broadcast/multicast frames Encryption)
5529 */
5530VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5531 tSetBssKeyParams *setBssKeyParams )
5532{
5533 WDI_Status status = WDI_STATUS_SUCCESS ;
5534 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5535 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5536 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5537 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 if(NULL == wdiSetBssKeyParam)
5542 {
5543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 VOS_ASSERT(0);
5546 return VOS_STATUS_E_NOMEM;
5547 }
5548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0);
5554 vos_mem_free(wdiSetBssKeyParam);
5555 return VOS_STATUS_E_NOMEM;
5556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 /* copy set BSS params to WDI structure */
5559 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5560 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5561 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 if(setBssKeyParams->encType != eSIR_ED_NONE)
5563 {
5564 if( setBssKeyParams->numKeys == 0 &&
5565 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5566 setBssKeyParams->encType == eSIR_ED_WEP104))
5567 {
5568 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5570 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5571 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5572 }
5573 else
5574 {
5575 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5576 {
5577 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5578 setBssKeyParams->key[keyIndex].keyId;
5579 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5580 setBssKeyParams->key[keyIndex].unicast;
5581 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5582 setBssKeyParams->key[keyIndex].keyDirection;
5583 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5584 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5585 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5586 setBssKeyParams->key[keyIndex].paeRole;
5587 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5588 setBssKeyParams->key[keyIndex].keyLength;
5589 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5590 setBssKeyParams->key[keyIndex].key,
5591 SIR_MAC_MAX_KEY_LENGTH);
5592 }
5593 }
5594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5596 setBssKeyParams->singleTidRc;
5597 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 /* Store set key pointer, as this will be used for response */
5599 /* store Params pass it to WDI */
5600 pWdaParams->pWdaContext = pWDA;
5601 pWdaParams->wdaMsgParam = setBssKeyParams;
5602 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5604 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5605
5606 if(IS_WDI_STATUS_FAILURE(status))
5607 {
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5609 "Failure in Set BSS Key Req WDI API, free all the memory " );
5610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5611 vos_mem_free(pWdaParams) ;
5612 setBssKeyParams->status = eSIR_FAILURE ;
5613 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 return CONVERT_WDI2VOS_STATUS(status) ;
5616}
Jeff Johnson295189b2012-06-20 16:38:30 -07005617/*
5618 * FUNCTION: WDA_RemoveBssKeyReqCallback
5619 * send SET BSS key RSP back to PE
5620 */
5621void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5622{
5623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5624 tWDA_CbContext *pWDA;
5625 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005627 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 if(NULL == pWdaParams)
5629 {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005631 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 VOS_ASSERT(0) ;
5633 return ;
5634 }
5635 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5636 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5638 vos_mem_free(pWdaParams) ;
5639
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005640 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 return ;
5643}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305644
5645/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305646 * FUNCTION: WDA_GetFrameLogRspCallback
5647 * recieves get frame log response from FW
5648 */
5649void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5650 void* pUserData)
5651{
5652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5653 tWDA_CbContext *pWDA = NULL;
5654 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5655
5656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5657 "<------ Entering: %s " ,__func__);
5658 if(NULL == pWdaParams)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5661 "%s: pWdaParams received NULL", __func__);
5662 VOS_ASSERT(0) ;
5663 return ;
5664 }
5665
5666 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5667 if (NULL == pWDA)
5668 {
5669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5670 "%s:pWDA is NULL", __func__);
5671 VOS_ASSERT(0);
5672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5673 vos_mem_free(pWdaParams);
5674 return ;
5675 }
5676
5677 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5678 if(NULL == pGetFrameLogReqParams)
5679 {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5681 "%s: pGetFrameLogReqParams received NULL", __func__);
5682 VOS_ASSERT(0);
5683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5684 vos_mem_free(pWdaParams);
5685 return;
5686 }
5687
Siddharth Bhal64246172015-02-27 01:04:37 +05305688 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305690 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5691 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305692 }
5693
5694 /* free WDI command buffer only */
5695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5696 vos_mem_free(pWdaParams->wdaMsgParam);
5697 vos_mem_free(pWdaParams);
5698
5699 return ;
5700
5701}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305702
5703/*
5704 * FUNCTION: WDA_RssiMonitorStopRspCallback
5705 * recieves Rssi Monitor stop response from FW
5706 */
5707void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5708 void* pUserData)
5709{
5710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5711 tSirRssiMonitorReq *pRssiMonitorReqParams;
5712
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5714 "<------ %s " ,__func__);
5715
5716 if(NULL == pWdaParams)
5717 {
5718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5719 "%s: pWdaParams received NULL", __func__);
5720 VOS_ASSERT(0);
5721 return ;
5722 }
5723
5724 if(NULL == pWdaParams->wdaMsgParam)
5725 {
5726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5727 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5728 VOS_ASSERT(0);
5729 vos_mem_free(pWdaParams);
5730 return ;
5731 }
5732
5733 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5734
5735 if(pRssiMonitorReqParams->rssiMonitorCallback)
5736 {
5737 pRssiMonitorReqParams->rssiMonitorCallback(
5738 pRssiMonitorReqParams->rssiMonitorCbContext,
5739 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5740 }
5741 else
5742 {
5743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5744 "%s: pFWLoggingInitParams callback is NULL", __func__);
5745 }
5746
5747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5748 vos_mem_free(pWdaParams->wdaMsgParam);
5749 vos_mem_free(pWdaParams);
5750
5751 return;
5752}
5753
5754/*
5755 * FUNCTION: WDA_RssiMonitorStartRspCallback
5756 * recieves Rssi Monitor start response from FW
5757 */
5758void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5759 void* pUserData)
5760{
5761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5762 tSirRssiMonitorReq *pRssiMonitorReqParams;
5763
5764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5765 "<------ %s " ,__func__);
5766
5767 if(NULL == pWdaParams)
5768 {
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5770 "%s: pWdaParams received NULL", __func__);
5771 VOS_ASSERT(0);
5772 return ;
5773 }
5774
5775 if(NULL == pWdaParams->wdaMsgParam)
5776 {
5777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5778 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5779 VOS_ASSERT(0);
5780 vos_mem_free(pWdaParams);
5781 return ;
5782 }
5783
5784 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5785
5786 if(pRssiMonitorReqParams->rssiMonitorCallback)
5787 {
5788 pRssiMonitorReqParams->rssiMonitorCallback(
5789 pRssiMonitorReqParams->rssiMonitorCbContext,
5790 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5791 }
5792 else
5793 {
5794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5795 "%s: pFWLoggingInitParams callback is NULL", __func__);
5796 }
5797
5798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5799 vos_mem_free(pWdaParams->wdaMsgParam);
5800 vos_mem_free(pWdaParams);
5801
5802 return;
5803}
5804
Siddharth Bhal64246172015-02-27 01:04:37 +05305805/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305806 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305807 * recieves Mgmt Logging init response from FW
5808 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305809void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305810 void* pUserData)
5811{
5812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305813 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305814 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305815
5816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5817 "<------ %s " ,__func__);
5818
5819 if(NULL == pWdaParams)
5820 {
5821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5822 "%s: pWdaParams received NULL", __func__);
5823 VOS_ASSERT(0);
5824 return ;
5825 }
5826
5827 if(NULL == pWdaParams->wdaMsgParam)
5828 {
5829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5830 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5831 VOS_ASSERT(0);
5832 vos_mem_free(pWdaParams);
5833 return ;
5834 }
5835
c_manjeecfd1efb2015-09-25 19:32:34 +05305836 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5837 if(NULL == pWdaParams)
5838 {
5839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5840 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5841 VOS_ASSERT(0);
5842 vos_mem_free(pWdaParams);
5843 return;
5844 }
5845
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305846 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305847 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305848
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305849 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305850 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305851 pFWLoggingInitParams->fwlogInitCallback(
5852 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305853 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305854 }
5855 else
5856 {
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305858 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305859 }
5860
c_manjeecfd1efb2015-09-25 19:32:34 +05305861 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5863 vos_mem_free(pWdaParams->wdaMsgParam);
5864 vos_mem_free(pWdaParams);
5865
5866 return;
5867}
5868
5869/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305870 * FUNCTION: WDA_SpoofMacAddrRspCallback
5871 * recieves spoof mac addr response from FW
5872 */
5873void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5874{
5875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5876 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305877
Siddharth Bhal171788a2014-09-29 21:02:40 +05305878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5879 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305880
Siddharth Bhal171788a2014-09-29 21:02:40 +05305881 if(NULL == pWdaParams)
5882 {
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5884 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305885 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305886 return ;
5887 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305889
Siddharth Bhal029d6732014-10-09 21:31:23 +05305890 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305892 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305893 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305894 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5895 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305896
Siddharth Bhal171788a2014-09-29 21:02:40 +05305897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305898 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305899 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305900
5901 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305902}
5903
Jeff Johnson295189b2012-06-20 16:38:30 -07005904/*
5905 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5906 * Request to WDI to remove the BSS key( key for broadcast/multicast
5907 * frames Encryption)
5908 */
5909VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5910 tRemoveBssKeyParams *removeBssKeyParams )
5911{
5912 WDI_Status status = WDI_STATUS_SUCCESS ;
5913 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5914 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5915 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(NULL == wdiRemoveBssKeyParam)
5920 {
5921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_ASSERT(0);
5924 return VOS_STATUS_E_NOMEM;
5925 }
5926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5927 if(NULL == pWdaParams)
5928 {
5929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 VOS_ASSERT(0);
5932 vos_mem_free(wdiRemoveBssKeyParam);
5933 return VOS_STATUS_E_NOMEM;
5934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 /* copy Remove BSS key params to WDI structure*/
5936 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5937 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5938 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5939 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5940 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 /* Store remove key pointer, as this will be used for response */
5942 /* store Params pass it to WDI */
5943 pWdaParams->pWdaContext = pWDA;
5944 pWdaParams->wdaMsgParam = removeBssKeyParams;
5945 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5947 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 if(IS_WDI_STATUS_FAILURE(status))
5949 {
5950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5951 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5953 vos_mem_free(pWdaParams) ;
5954 removeBssKeyParams->status = eSIR_FAILURE ;
5955 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 return CONVERT_WDI2VOS_STATUS(status) ;
5958}
Jeff Johnson295189b2012-06-20 16:38:30 -07005959/*
5960 * FUNCTION: WDA_SetBssKeyReqCallback
5961 * send SET BSS key RSP back to PE
5962 */
5963void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5964{
5965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5966 tWDA_CbContext *pWDA;
5967 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005969 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 if(NULL == pWdaParams)
5971 {
5972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005973 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 VOS_ASSERT(0) ;
5975 return ;
5976 }
5977 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5978 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305979 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5980 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5982 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005983 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 return ;
5986}
Jeff Johnson295189b2012-06-20 16:38:30 -07005987/*
5988 * FUNCTION: WDA_ProcessSetStaKeyReq
5989 * Request to WDI for programming the STA key( key for Unicast frames
5990 * Encryption)
5991 */
5992VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5993 tSetStaKeyParams *setStaKeyParams )
5994{
5995 WDI_Status status = WDI_STATUS_SUCCESS ;
5996 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5997 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5998 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5999 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006002 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 if(NULL == wdiSetStaKeyParam)
6004 {
6005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 VOS_ASSERT(0);
6008 return VOS_STATUS_E_NOMEM;
6009 }
6010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6011 if(NULL == pWdaParams)
6012 {
6013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 VOS_ASSERT(0);
6016 vos_mem_free(wdiSetStaKeyParam);
6017 return VOS_STATUS_E_NOMEM;
6018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 /* copy set STA key params to WDI structure */
6022 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6023 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6024 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6025 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 if(setStaKeyParams->encType != eSIR_ED_NONE)
6027 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006028 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6030 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6031 {
6032 WDA_GetWepKeysFromCfg( pWDA,
6033 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6034 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6035 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6036 }
6037 else
6038 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6040 keyIndex++)
6041 {
6042 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6043 setStaKeyParams->key[keyIndex].keyId;
6044 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6045 setStaKeyParams->key[keyIndex].unicast;
6046 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6047 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6049 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6050 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6051 setStaKeyParams->key[keyIndex].paeRole;
6052 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6053 setStaKeyParams->key[keyIndex].keyLength;
6054 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6055 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6056 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6057 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6058 {
6059 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6060 }
6061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6063 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 }
6065 }
6066 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6067 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 /* Store set key pointer, as this will be used for response */
6069 /* store Params pass it to WDI */
6070 pWdaParams->pWdaContext = pWDA;
6071 pWdaParams->wdaMsgParam = setStaKeyParams;
6072 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6074 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 if(IS_WDI_STATUS_FAILURE(status))
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6078 "Failure in set STA Key Req WDI API, free all the memory " );
6079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6080 vos_mem_free(pWdaParams) ;
6081 setStaKeyParams->status = eSIR_FAILURE ;
6082 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 return CONVERT_WDI2VOS_STATUS(status) ;
6085}
Jeff Johnson295189b2012-06-20 16:38:30 -07006086/*
6087 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6088 * send SET Bcast STA key RSP back to PE
6089 */
6090void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6091{
6092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6093 tWDA_CbContext *pWDA;
6094 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 if(NULL == pWdaParams)
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 VOS_ASSERT(0) ;
6102 return ;
6103 }
6104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6105 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6107 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006108 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 return ;
6111}
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113/*
6114 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6115 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6116 * Encryption)
6117 */
6118VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6119 tSetStaKeyParams *setStaKeyParams )
6120{
6121 WDI_Status status = WDI_STATUS_SUCCESS ;
6122 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6123 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6124 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6125 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 if(NULL == wdiSetStaKeyParam)
6130 {
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_ASSERT(0);
6134 return VOS_STATUS_E_NOMEM;
6135 }
6136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6137 if(NULL == pWdaParams)
6138 {
6139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006141 VOS_ASSERT(0);
6142 vos_mem_free(wdiSetStaKeyParam);
6143 return VOS_STATUS_E_NOMEM;
6144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 /* copy set STA key params to WDI structure */
6148 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6149 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6150 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6151 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 if(setStaKeyParams->encType != eSIR_ED_NONE)
6153 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6155 keyIndex++)
6156 {
6157 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6158 setStaKeyParams->key[keyIndex].keyId;
6159 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6160 setStaKeyParams->key[keyIndex].unicast;
6161 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6162 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6164 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6165 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6166 setStaKeyParams->key[keyIndex].paeRole;
6167 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6168 setStaKeyParams->key[keyIndex].keyLength;
6169 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6170 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6173 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 }
6175 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 /* Store set key pointer, as this will be used for response */
6177 /* store Params pass it to WDI */
6178 pWdaParams->pWdaContext = pWDA;
6179 pWdaParams->wdaMsgParam = setStaKeyParams;
6180 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6182 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 if(IS_WDI_STATUS_FAILURE(status))
6184 {
6185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6186 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6188 vos_mem_free(pWdaParams) ;
6189 setStaKeyParams->status = eSIR_FAILURE ;
6190 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 return CONVERT_WDI2VOS_STATUS(status) ;
6193}
Jeff Johnson295189b2012-06-20 16:38:30 -07006194/*
6195 * FUNCTION: WDA_RemoveStaKeyReqCallback
6196 * send SET BSS key RSP back to PE
6197 */
6198void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6199{
6200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6201 tWDA_CbContext *pWDA;
6202 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(NULL == pWdaParams)
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 VOS_ASSERT(0) ;
6210 return ;
6211 }
6212 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6213 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6215 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006216 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 return ;
6219}
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221/*
6222 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6223 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6224 */
6225VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6226 tRemoveStaKeyParams *removeStaKeyParams )
6227{
6228 WDI_Status status = WDI_STATUS_SUCCESS ;
6229 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6230 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6231 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6232 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 if(NULL == wdiRemoveStaKeyParam)
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_ASSERT(0);
6240 return VOS_STATUS_E_NOMEM;
6241 }
6242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6243 if(NULL == pWdaParams)
6244 {
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 VOS_ASSERT(0);
6248 vos_mem_free(wdiRemoveStaKeyParam);
6249 return VOS_STATUS_E_NOMEM;
6250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 /* copy remove STA key params to WDI structure*/
6252 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6253 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6254 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6255 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6256 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 /* Store remove key pointer, as this will be used for response */
6258 /* store Params pass it to WDI */
6259 pWdaParams->pWdaContext = pWDA;
6260 pWdaParams->wdaMsgParam = removeStaKeyParams;
6261 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6263 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 if(IS_WDI_STATUS_FAILURE(status))
6265 {
6266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6267 "Failure in remove STA Key Req WDI API, free all the memory " );
6268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6269 vos_mem_free(pWdaParams) ;
6270 removeStaKeyParams->status = eSIR_FAILURE ;
6271 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 return CONVERT_WDI2VOS_STATUS(status) ;
6274}
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_IsHandleSetLinkStateReq
6277 * Update the WDA state and return the status to handle this message or not
6278 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006279WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6280 tWDA_CbContext *pWDA,
6281 tLinkStateParams *linkStateParams)
6282{
6283 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 switch(linkStateParams->state)
6285 {
6286 case eSIR_LINK_PREASSOC_STATE:
6287 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6288 /*
6289 * set the WDA state to PRE ASSOC
6290 * copy the BSSID into pWDA to use it in join request and return,
6291 * No need to handle these messages.
6292 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006293 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6294 {
6295 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006297 }
6298 else
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006302 VOS_ASSERT(0);
6303 }
6304
6305 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6306 {
6307 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006309 }
6310 else
6311 {
6312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006314 VOS_ASSERT(0);
6315 }
6316
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6318 *channel and after ) so reset the WDA state to ready when the second
6319 * time UMAC issue the link state with PREASSOC
6320 */
6321 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6322 {
6323 /* RESET WDA state back to WDA_READY_STATE */
6324 pWDA->wdaState = WDA_READY_STATE;
6325 }
6326 else
6327 {
6328 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6329 }
6330 //populate linkState info in WDACbCtxt
6331 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 default:
6334 if(pWDA->wdaState != WDA_READY_STATE)
6335 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006336 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6337 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6338 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6339 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6340 *the ASSERT in WDA_Stop during module unload.*/
6341 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6342 {
6343 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006344 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006345 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006346 else
6347 {
6348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006349 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006350 status = WDA_IGNORE_SET_LINK_STATE;
6351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 }
6353 break;
6354 }
6355
6356 return status;
6357}
Jeff Johnson295189b2012-06-20 16:38:30 -07006358/*
6359 * FUNCTION: WDA_SetLinkStateCallback
6360 * call back function for set link state from WDI
6361 */
6362void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6363{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306364 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 tLinkStateParams *linkStateParams;
6366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006368 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306369 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 {
6371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 VOS_ASSERT(0) ;
6374 return ;
6375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306377 if (NULL == pWDA)
6378 {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6380 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6382 vos_mem_free(pWdaParams->wdaMsgParam);
6383 vos_mem_free(pWdaParams);
6384
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306385 VOS_ASSERT(0);
6386 return ;
6387 }
6388
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 /*
6391 * In STA mode start the BA activity check timer after association
6392 * and in AP mode start BA activity check timer after BSS start */
6393 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6394 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006395 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6396 ((status == WDI_STATUS_SUCCESS) &&
6397 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 {
6399 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 /*
6403 * No respone required for WDA_SET_LINK_STATE so free the request
6404 * param here
6405 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6407 vos_mem_free(pWdaParams);
6408
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 return ;
6410}
Jeff Johnson295189b2012-06-20 16:38:30 -07006411/*
6412 * FUNCTION: WDA_ProcessSetLinkState
6413 * Request to WDI to set the link status.
6414 */
6415VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6416 tLinkStateParams *linkStateParams)
6417{
6418 WDI_Status status = WDI_STATUS_SUCCESS ;
6419 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6420 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6421 sizeof(WDI_SetLinkReqParamsType)) ;
6422 tWDA_ReqParams *pWdaParams ;
6423 tpAniSirGlobal pMac;
6424 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6425
6426 if(NULL == pMac)
6427 {
6428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006429 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006431 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 return VOS_STATUS_E_FAILURE;
6433 }
6434
6435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 if(NULL == wdiSetLinkStateParam)
6438 {
6439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 VOS_ASSERT(0);
6442 return VOS_STATUS_E_NOMEM;
6443 }
6444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6445 if(NULL == pWdaParams)
6446 {
6447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006449 VOS_ASSERT(0);
6450 vos_mem_free(wdiSetLinkStateParam);
6451 return VOS_STATUS_E_NOMEM;
6452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 if(WDA_IGNORE_SET_LINK_STATE ==
6454 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6455 {
6456 status = WDI_STATUS_E_FAILURE;
6457 }
6458 else
6459 {
6460 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6461 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6463 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6465 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 pWdaParams->pWdaContext = pWDA;
6467 /* Store remove key pointer, as this will be used for response */
6468 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 /* store Params pass it to WDI */
6470 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6471 /* Stop Timer only other than GO role and concurrent session */
6472 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006473 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6475 {
6476 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6479 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 if(IS_WDI_STATUS_FAILURE(status))
6481 {
6482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6483 "Failure in set link state Req WDI API, free all the memory " );
6484 }
6485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 if(IS_WDI_STATUS_FAILURE(status))
6487 {
6488 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006489 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 vos_mem_free(pWdaParams);
6491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 return CONVERT_WDI2VOS_STATUS(status) ;
6493}
Jeff Johnson295189b2012-06-20 16:38:30 -07006494/*
6495 * FUNCTION: WDA_GetStatsReqParamsCallback
6496 * send the response to PE with Stats received from WDI
6497 */
6498void WDA_GetStatsReqParamsCallback(
6499 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6500 void* pUserData)
6501{
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306503 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504
6505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006506 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 pGetPEStatsRspParams =
6508 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6509 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6510
6511 if(NULL == pGetPEStatsRspParams)
6512 {
6513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 VOS_ASSERT(0);
6516 return;
6517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306519 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6521 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006522
6523 //Fill the Session Id Properly in PE
6524 pGetPEStatsRspParams->sessionId = 0;
6525 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006526 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6528 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 vos_mem_copy( pGetPEStatsRspParams + 1,
6530 wdiGetStatsRsp + 1,
6531 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306532
6533 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6534 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6535 vosMsg.bodyval = 0;
6536 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6537 (vos_msg_t*)&vosMsg))
6538 {
6539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6540 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6541 vos_mem_free(pGetPEStatsRspParams);
6542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006543
6544 return;
6545}
6546
Jeff Johnson295189b2012-06-20 16:38:30 -07006547/*
6548 * FUNCTION: WDA_ProcessGetStatsReq
6549 * Request to WDI to get the statistics
6550 */
6551VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6552 tAniGetPEStatsReq *pGetStatsParams)
6553{
6554 WDI_Status status = WDI_STATUS_SUCCESS ;
6555 WDI_GetStatsReqParamsType wdiGetStatsParam;
6556 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306557 vos_msg_t vosMsg;
6558
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6562 pGetStatsParams->staId;
6563 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6564 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 status = WDI_GetStatsReq(&wdiGetStatsParam,
6567 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 if(IS_WDI_STATUS_FAILURE(status))
6569 {
6570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6571 "Failure in Get Stats Req WDI API, free all the memory " );
6572 pGetPEStatsRspParams =
6573 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6574 if(NULL == pGetPEStatsRspParams)
6575 {
6576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006579 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 return VOS_STATUS_E_NOMEM;
6581 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306582 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6584 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6585 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306586
6587 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6588 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6589 vosMsg.bodyval = 0;
6590 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6591 (vos_msg_t*)&vosMsg))
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6594 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6595 vos_mem_free(pGetPEStatsRspParams);
6596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 /* Free the request message */
6599 vos_mem_free(pGetStatsParams);
6600 return CONVERT_WDI2VOS_STATUS(status);
6601}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006602
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006603#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006604/*
6605 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6606 * send the response to PE with roam Rssi received from WDI
6607 */
6608void WDA_GetRoamRssiReqParamsCallback(
6609 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6610 void* pUserData)
6611{
6612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6613 tWDA_CbContext *pWDA = NULL;
6614 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6615 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6617 "<------ %s " ,__func__);
6618 if(NULL == pWdaParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6621 "%s: pWdaParams received NULL", __func__);
6622 VOS_ASSERT(0) ;
6623 return ;
6624 }
6625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6626 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6627
6628 if(NULL == pGetRoamRssiReqParams)
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6631 "%s: pGetRoamRssiReqParams received NULL", __func__);
6632 VOS_ASSERT(0);
6633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6634 vos_mem_free(pWdaParams);
6635 return ;
6636 }
6637 pGetRoamRssiRspParams =
6638 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6639
6640 if(NULL == pGetRoamRssiRspParams)
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6643 "%s: VOS MEM Alloc Failure", __func__);
6644 VOS_ASSERT(0);
6645 return;
6646 }
6647 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6648 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006649 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006650 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6651 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6652
6653 /* Assign get roam rssi req (backup) in to the response */
6654 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6655
6656 /* free WDI command buffer */
6657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6658 vos_mem_free(pWdaParams) ;
6659
6660 /* send response to UMAC*/
6661 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6662
6663 return;
6664}
6665
6666
6667
6668/*
6669 * FUNCTION: WDA_ProcessGetRoamRssiReq
6670 * Request to WDI to get the statistics
6671 */
6672VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6673 tAniGetRssiReq *pGetRoamRssiParams)
6674{
6675 WDI_Status status = WDI_STATUS_SUCCESS ;
6676 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6677 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6678 tWDA_ReqParams *pWdaParams = NULL;
6679
6680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6681 "------> %s " ,__func__);
6682 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6683 pGetRoamRssiParams->staId;
6684 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6685
6686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6687 if(NULL == pWdaParams)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6690 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306691 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006692 VOS_ASSERT(0);
6693 return VOS_STATUS_E_NOMEM;
6694 }
6695
6696 /* Store Init Req pointer, as this will be used for response */
6697 pWdaParams->pWdaContext = pWDA;
6698
6699 /* Take Get roam Rssi req backup as it stores the callback to be called after
6700 receiving the response */
6701 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6702 pWdaParams->wdaWdiApiMsgParam = NULL;
6703
6704 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6705 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6706 if(IS_WDI_STATUS_FAILURE(status))
6707 {
6708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6709 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6710 pGetRoamRssiRspParams =
6711 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6712 if(NULL == pGetRoamRssiRspParams)
6713 {
6714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6715 "%s: VOS MEM Alloc Failure", __func__);
6716 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306717 vos_mem_free(pGetRoamRssiParams);
6718 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006719 return VOS_STATUS_E_NOMEM;
6720 }
6721 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6722 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6723 pGetRoamRssiRspParams->rssi = 0;
6724 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6725 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6726 (void *)pGetRoamRssiRspParams, 0) ;
6727 }
6728 return CONVERT_WDI2VOS_STATUS(status);
6729}
6730#endif
6731
6732
Jeff Johnson295189b2012-06-20 16:38:30 -07006733/*
6734 * FUNCTION: WDA_UpdateEDCAParamCallback
6735 * call back function for Update EDCA params from WDI
6736 */
6737void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6738{
6739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6740 tEdcaParams *pEdcaParams;
6741
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 if(NULL == pWdaParams)
6745 {
6746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 VOS_ASSERT(0) ;
6749 return ;
6750 }
6751 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6753 vos_mem_free(pWdaParams);
6754 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 return ;
6756}
Jeff Johnson295189b2012-06-20 16:38:30 -07006757/*
6758 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6759 * Request to WDI to Update the EDCA params.
6760 */
6761VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6762 tEdcaParams *pEdcaParams)
6763{
6764 WDI_Status status = WDI_STATUS_SUCCESS ;
6765 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6766 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6767 sizeof(WDI_UpdateEDCAParamsType)) ;
6768 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006770 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 if(NULL == wdiEdcaParam)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006776 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 return VOS_STATUS_E_NOMEM;
6778 }
6779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6780 if(NULL == pWdaParams)
6781 {
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 VOS_ASSERT(0);
6785 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006786 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 return VOS_STATUS_E_NOMEM;
6788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006790 /*
6791 Since firmware is not using highperformance flag, we have removed
6792 this flag from wdiEDCAInfo structure to match sizeof the structure
6793 between host and firmware.In future if we are planning to use
6794 highperformance flag then Please define this flag in wdiEDCAInfo
6795 structure, update it here and send it to firmware. i.e.
6796 Following is the original line which we removed as part of the fix
6797 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6798 pEdcaParams->highPerformance;
6799 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6801 &pEdcaParams->acbe);
6802 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6803 &pEdcaParams->acbk);
6804 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6805 &pEdcaParams->acvi);
6806 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6807 &pEdcaParams->acvo);
6808 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 pWdaParams->pWdaContext = pWDA;
6810 /* Store remove key pointer, as this will be used for response */
6811 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 /* store Params pass it to WDI */
6813 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6815 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 if(IS_WDI_STATUS_FAILURE(status))
6817 {
6818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6819 "Failure in Update EDCA Params WDI API, free all the memory " );
6820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6821 vos_mem_free(pWdaParams);
6822 vos_mem_free(pEdcaParams);
6823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 return CONVERT_WDI2VOS_STATUS(status) ;
6825}
Jeff Johnson295189b2012-06-20 16:38:30 -07006826/*
6827 * FUNCTION: WDA_AddBAReqCallback
6828 * send ADD BA RSP back to PE
6829 */
6830void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6831 void* pUserData)
6832{
6833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6834 tWDA_CbContext *pWDA;
6835 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306838 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 {
6840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 VOS_ASSERT(0) ;
6843 return ;
6844 }
6845 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306846 if (NULL == pWDA)
6847 {
6848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6849 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6851 vos_mem_free(pWdaParams->wdaMsgParam);
6852 vos_mem_free(pWdaParams);
6853
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306854 VOS_ASSERT(0);
6855 return ;
6856 }
6857
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6860 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006861 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 return ;
6864}
6865
Jeff Johnson295189b2012-06-20 16:38:30 -07006866/*
6867 * FUNCTION: WDA_ProcessAddBAReq
6868 * Request to WDI to Update the ADDBA REQ params.
6869 */
6870VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306871 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006872{
Jeff Johnson43971f52012-07-17 12:26:56 -07006873 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6875 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6876 sizeof(WDI_AddBAReqParamsType)) ;
6877 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006879 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 if(NULL == wdiAddBAReqParam)
6881 {
6882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 VOS_ASSERT(0);
6885 return VOS_STATUS_E_NOMEM;
6886 }
6887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6888 if(NULL == pWdaParams)
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_ASSERT(0);
6893 vos_mem_free(wdiAddBAReqParam);
6894 return VOS_STATUS_E_NOMEM;
6895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 do
6897 {
6898 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 wdiAddBaInfo->ucSTAIdx = staIdx ;
6900 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306901 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 } while(0) ;
6903 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 pWdaParams->pWdaContext = pWDA;
6905 /* store Params pass it to WDI */
6906 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6907 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006908 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6909 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910
Jeff Johnson43971f52012-07-17 12:26:56 -07006911 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 {
6913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006914 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6915 status = CONVERT_WDI2VOS_STATUS(wstatus);
6916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 vos_mem_free(pWdaParams);
6918 pAddBAReqParams->status = eSIR_FAILURE;
6919 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6920 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006921 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006922}
Jeff Johnson295189b2012-06-20 16:38:30 -07006923/*
6924 * FUNCTION: WDA_AddBASessionReqCallback
6925 * send ADD BA SESSION RSP back to PE/(or TL)
6926 */
6927void WDA_AddBASessionReqCallback(
6928 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6929{
6930 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306932 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 if(NULL == pWdaParams)
6937 {
6938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006939 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 VOS_ASSERT(0) ;
6941 return ;
6942 }
6943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306944 if (NULL == pWDA)
6945 {
6946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6947 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6949 vos_mem_free(pWdaParams->wdaMsgParam);
6950 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306951 VOS_ASSERT(0);
6952 return ;
6953 }
6954
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 if( NULL == pAddBAReqParams )
6957 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006959 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return ;
6964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306968 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 * another request to HAL(/WDI) (ADD_BA_REQ)
6970 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 if((VOS_STATUS_SUCCESS ==
6972 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306973 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 {
6975 /* Update TL with BA info received from HAL/WDI */
6976 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6977 wdiAddBaSession->usBaSessionID,
6978 wdiAddBaSession->ucSTAIdx,
6979 wdiAddBaSession->ucBaTID,
6980 wdiAddBaSession->ucBaBufferSize,
6981 wdiAddBaSession->ucWinSize,
6982 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306984 wdiAddBaSession->ucSTAIdx,
6985 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 }
6987 else
6988 {
6989 pAddBAReqParams->status =
6990 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6991
6992 /* Setting Flag to indicate that Set BA is success */
6993 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6994 {
6995 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6996 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6997 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 /*Reset the WDA state to READY */
7002 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 return ;
7004}
7005
Jeff Johnson295189b2012-06-20 16:38:30 -07007006/*
7007 * FUNCTION: WDA_ProcessAddBASessionReq
7008 * Request to WDI to Update the ADDBA REQ params.
7009 */
7010VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7011 tAddBAParams *pAddBAReqParams)
7012{
7013 WDI_Status status = WDI_STATUS_SUCCESS ;
7014 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7015 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7016 sizeof(WDI_AddBASessionReqParamsType)) ;
7017 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007018 WLANTL_STAStateType tlSTAState = 0;
7019
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007021 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 if(NULL == wdiAddBASessionReqParam)
7023 {
7024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 VOS_ASSERT(0);
7027 return VOS_STATUS_E_NOMEM;
7028 }
7029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7030 if(NULL == pWdaParams)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0);
7035 vos_mem_free(wdiAddBASessionReqParam);
7036 return VOS_STATUS_E_NOMEM;
7037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 /*
7039 * Populate ADD BA parameters and pass these paarmeters to WDI.
7040 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7041 * the state to track if these is BA recipient case or BA initiator
7042 * case.
7043 */
7044 do
7045 {
7046 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7047 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7048 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7049 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7050 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7051 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7052 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7055 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7056 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7057 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7058 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307059
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 }while(0) ;
7061 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 pWdaParams->pWdaContext = pWDA;
7063 /* Store ADD BA pointer, as this will be used for response */
7064 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7065 /* store Params pass it to WDI */
7066 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007067
7068 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7069 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7070 */
7071 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7072 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7073 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007075 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007076 status = WDI_STATUS_E_NOT_ALLOWED;
7077 pAddBAReqParams->status =
7078 CONVERT_WDI2SIR_STATUS(status) ;
7079 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7080 /*Reset the WDA state to READY */
7081 pWDA->wdaState = WDA_READY_STATE;
7082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7083 vos_mem_free(pWdaParams);
7084
7085 return CONVERT_WDI2VOS_STATUS(status) ;
7086 }
7087
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7089 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(IS_WDI_STATUS_FAILURE(status))
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007093 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007095 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007096 pAddBAReqParams->status =
7097 CONVERT_WDI2SIR_STATUS(status) ;
7098 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007099 /*Reset the WDA state to READY */
7100 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 vos_mem_free(pWdaParams);
7103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105}
Jeff Johnson295189b2012-06-20 16:38:30 -07007106/*
7107 * FUNCTION: WDA_DelBANotifyTL
7108 * send DEL BA IND to TL
7109 */
7110void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7111 tDelBAParams *pDelBAReqParams)
7112{
7113 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7114 //tSirMsgQ msg;
7115 vos_msg_t vosMsg;
7116 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pDelBAInd)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7125 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7126 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7127 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007128
Jeff Johnson295189b2012-06-20 16:38:30 -07007129
7130 vosMsg.type = WDA_DELETEBA_IND;
7131 vosMsg.bodyptr = pDelBAInd;
7132 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7133 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7134 {
7135 vosStatus = VOS_STATUS_E_BADMSG;
7136 }
7137}
Jeff Johnson295189b2012-06-20 16:38:30 -07007138/*
7139 * FUNCTION: WDA_DelBAReqCallback
7140 * send DEL BA RSP back to PE
7141 */
7142void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7143{
7144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7145 tWDA_CbContext *pWDA;
7146 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 if(NULL == pWdaParams)
7150 {
7151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007152 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 VOS_ASSERT(0) ;
7154 return ;
7155 }
7156 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307157
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 /* Notify TL about DEL BA in case of recipinet */
7160 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7161 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7162 {
7163 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 /*
7166 * No respone required for WDA_DELBA_IND so just free the request
7167 * param here
7168 */
7169 vos_mem_free(pDelBAReqParams);
7170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7171 vos_mem_free(pWdaParams);
7172 return ;
7173}
7174
Jeff Johnson295189b2012-06-20 16:38:30 -07007175/*
7176 * FUNCTION: WDA_ProcessDelBAReq
7177 * Request to WDI to Update the DELBA REQ params.
7178 */
7179VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7180 tDelBAParams *pDelBAReqParams)
7181{
7182 WDI_Status status = WDI_STATUS_SUCCESS ;
7183 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7184 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7185 sizeof(WDI_DelBAReqParamsType)) ;
7186 tWDA_ReqParams *pWdaParams ;
7187 tANI_U16 staIdx = 0;
7188 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 if(NULL == wdiDelBAReqParam)
7192 {
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 VOS_ASSERT(0);
7196 return VOS_STATUS_E_NOMEM;
7197 }
7198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7199 if(NULL == pWdaParams)
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 VOS_ASSERT(0);
7204 vos_mem_free(wdiDelBAReqParam);
7205 return VOS_STATUS_E_NOMEM;
7206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7208 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7209 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7210 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 pWdaParams->pWdaContext = pWDA;
7212 /* Store DEL BA pointer, as this will be used for response */
7213 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 /* store Params pass it to WDI */
7215 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7217 * maintained in WDA, so that WDA can retry for another BA session
7218 */
7219 staIdx = pDelBAReqParams->staIdx;
7220 tid = pDelBAReqParams->baTID;
7221 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 status = WDI_DelBAReq(wdiDelBAReqParam,
7223 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if(IS_WDI_STATUS_FAILURE(status))
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7227 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7229 vos_mem_free(pWdaParams->wdaMsgParam);
7230 vos_mem_free(pWdaParams);
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007233}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007234
7235/*
7236 * FUNCTION: WDA_UpdateChReqCallback
7237 *
7238 */
7239void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7240{
Siddharth Bhala006c122014-05-03 12:13:27 +05307241 tWDA_ReqParams *pWdaParams;
7242 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7243 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7244 WDI_UpdateChannelReqinfoType *pChanInfoType;
7245 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007246
7247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7248 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307249 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007250 {
7251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307252 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007253 VOS_ASSERT(0);
7254 return;
7255 }
7256
Siddharth Bhala006c122014-05-03 12:13:27 +05307257 pWdaParams = (tWDA_ReqParams *)pUserData;
7258 pwdiUpdateChReqParam =
7259 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7260 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7261 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7262 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007263 /*
7264 * currently there is no response message is expected between PE and
7265 * WDA, Failure return from WDI is a ASSERT condition
7266 */
7267 vos_mem_free(pChanInfoType);
7268 vos_mem_free(pChanList);
7269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7270 vos_mem_free(pWdaParams);
7271
7272 return;
7273}
7274
7275/*
7276 * FUNCTION: WDA_ProcessUpdateChannelList
7277 * Request to WDI to Update the ChannelList params.
7278 */
7279VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7280 tSirUpdateChanList *pChanList)
7281{
7282 WDI_Status status = WDI_STATUS_SUCCESS;
7283 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7284 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7285 WDI_UpdateChannelReqinfoType *pChanInfoType;
7286 tWDA_ReqParams *pWdaParams;
7287 wpt_uint8 i;
7288
7289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7290 "------> %s " ,__func__);
7291 if(NULL == pChanList)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7294 "%s: NULL pChanList", __func__);
7295 VOS_ASSERT(0);
7296 return VOS_STATUS_E_INVAL;
7297 }
7298
7299 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7300 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007302 "Update channel list capability Not Supported");
7303 vos_mem_free(pChanList);
7304 return VOS_STATUS_E_INVAL;
7305 }
7306
7307 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7308 sizeof(WDI_UpdateChReqParamsType));
7309 if(NULL == pwdiUpdateChReqParam)
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7313 __func__);
7314 VOS_ASSERT(0);
7315 vos_mem_free(pChanList);
7316 return VOS_STATUS_E_NOMEM;
7317 }
7318 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7319 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7320 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7321 pChanList->numChan);
7322 if(NULL == pChanInfoType)
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7325 "%s: VOS MEM Alloc Failure", __func__);
7326 VOS_ASSERT(0);
7327 vos_mem_free(pChanList);
7328 vos_mem_free(pwdiUpdateChReqParam);
7329 return VOS_STATUS_E_NOMEM;
7330 }
7331 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7332 * pChanList->numChan);
7333 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7334
7335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7336 if(NULL == pWdaParams)
7337 {
7338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7339 "%s: VOS MEM Alloc Failure", __func__);
7340 VOS_ASSERT(0);
7341 vos_mem_free(pChanList);
7342 vos_mem_free(pChanInfoType);
7343 vos_mem_free(pwdiUpdateChReqParam);
7344 return VOS_STATUS_E_NOMEM;
7345 }
7346 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7347
7348 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7349 {
7350 pChanInfoType->mhz =
7351 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7352
7353 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7354 pChanInfoType->band_center_freq2 = 0;
7355
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7357 "chan[%d] = %u", i, pChanInfoType->mhz);
7358 if (pChanList->chanParam[i].dfsSet)
7359 {
7360 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7362 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7363 pChanList->chanParam[i].dfsSet);
7364 }
7365
7366 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7367 {
7368 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7369 }
7370 else
7371 {
7372 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7373 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7374 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7375 }
7376
7377 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7378 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307379 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007380 pChanInfoType++;
7381 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007382 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7383 pWdaParams->pWdaContext = pWDA;
7384 pWdaParams->wdaMsgParam = (void *)pChanList;
7385 /* store Params pass it to WDI */
7386 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7387 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7388 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7389 if(IS_WDI_STATUS_FAILURE(status))
7390 {
7391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7392 "Failure in Update Channel REQ Params WDI API, free all the memory");
7393 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7394 vos_mem_free(pwdiUpdateChReqParam);
7395 vos_mem_free(pWdaParams->wdaMsgParam);
7396 vos_mem_free(pWdaParams);
7397 }
7398 return CONVERT_WDI2VOS_STATUS(status);
7399}
7400
Jeff Johnson295189b2012-06-20 16:38:30 -07007401/*
7402 * FUNCTION: WDA_AddTSReqCallback
7403 * send ADD TS RSP back to PE
7404 */
7405void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7406{
7407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307408 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 tAddTsParams *pAddTsReqParams;
7410
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007412 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 if(NULL == pWdaParams)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 VOS_ASSERT(0) ;
7418 return ;
7419 }
7420 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307421 if (NULL == pWDA)
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7424 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7426 vos_mem_free(pWdaParams->wdaMsgParam);
7427 vos_mem_free(pWdaParams);
7428
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307429 VOS_ASSERT(0);
7430 return ;
7431 }
7432
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7435 vos_mem_free(pWdaParams);
7436
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007437 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 return ;
7440}
7441
Jeff Johnson295189b2012-06-20 16:38:30 -07007442/*
7443 * FUNCTION: WDA_ProcessAddTSReq
7444 * Request to WDI to Update the ADD TS REQ params.
7445 */
7446VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7447 tAddTsParams *pAddTsReqParams)
7448{
7449 WDI_Status status = WDI_STATUS_SUCCESS ;
7450 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7451 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7452 sizeof(WDI_AddTSReqParamsType)) ;
7453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007456 if(NULL == wdiAddTSReqParam)
7457 {
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 VOS_ASSERT(0);
7461 return VOS_STATUS_E_NOMEM;
7462 }
7463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7464 if(NULL == pWdaParams)
7465 {
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 VOS_ASSERT(0);
7469 vos_mem_free(wdiAddTSReqParam);
7470 return VOS_STATUS_E_NOMEM;
7471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7473 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 //TS IE
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7476 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7477 pAddTsReqParams->tspec.length;
7478
7479 //TS IE : TS INFO : TRAFFIC
7480 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7481 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7482 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7483 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7484 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7485 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7486 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7487 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7488 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7489 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7490 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7491 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7492 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7493 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7495 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7496
7497 //TS IE : TS INFO : SCHEDULE
7498 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7499 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7501 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 //TS IE
7503 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7504 pAddTsReqParams->tspec.nomMsduSz;
7505 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7506 pAddTsReqParams->tspec.maxMsduSz;
7507 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7508 pAddTsReqParams->tspec.minSvcInterval;
7509 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7510 pAddTsReqParams->tspec.maxSvcInterval;
7511 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7512 pAddTsReqParams->tspec.inactInterval;
7513 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7514 pAddTsReqParams->tspec.suspendInterval;
7515 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7516 pAddTsReqParams->tspec.svcStartTime;
7517 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7518 pAddTsReqParams->tspec.minDataRate;
7519 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7520 pAddTsReqParams->tspec.meanDataRate;
7521 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7522 pAddTsReqParams->tspec.peakDataRate;
7523 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7524 pAddTsReqParams->tspec.maxBurstSz;
7525 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7526 pAddTsReqParams->tspec.delayBound;
7527 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7528 pAddTsReqParams->tspec.minPhyRate;
7529 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7530 pAddTsReqParams->tspec.surplusBw;
7531 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7532 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 /* TODO: tAddTsParams doesn't have the following fields */
7534#if 0
7535 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7536 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7537 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7538 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7539#endif
7540 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7541
7542 pWdaParams->pWdaContext = pWDA;
7543 /* Store ADD TS pointer, as this will be used for response */
7544 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 /* store Params pass it to WDI */
7546 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 status = WDI_AddTSReq(wdiAddTSReqParam,
7548 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 if(IS_WDI_STATUS_FAILURE(status))
7550 {
7551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7552 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7554 vos_mem_free(pWdaParams);
7555 pAddTsReqParams->status = eSIR_FAILURE ;
7556 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007559}
7560
Jeff Johnson295189b2012-06-20 16:38:30 -07007561/*
7562 * FUNCTION: WDA_DelTSReqCallback
7563 * send DEL TS RSP back to PE
7564 */
7565void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7566{
7567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7571 vos_mem_free(pWdaParams->wdaMsgParam) ;
7572 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 /*
7574 * No respone required for WDA_DEL_TS_REQ so just free the request
7575 * param here
7576 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 return ;
7578}
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_ProcessDelTSReq
7582 * Request to WDI to Update the DELTS REQ params.
7583 */
7584VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7585 tDelTsParams *pDelTSReqParams)
7586{
7587 WDI_Status status = WDI_STATUS_SUCCESS ;
7588 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7589 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7590 sizeof(WDI_DelTSReqParamsType)) ;
7591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 if(NULL == wdiDelTSReqParam)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 return VOS_STATUS_E_NOMEM;
7600 }
7601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7602 if(NULL == pWdaParams)
7603 {
7604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_ASSERT(0);
7607 vos_mem_free(wdiDelTSReqParam);
7608 return VOS_STATUS_E_NOMEM;
7609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7611 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7612 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7613 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7614 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 pWdaParams->pWdaContext = pWDA;
7616 /* Store DEL TS pointer, as this will be used for response */
7617 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 /* store Params pass it to WDI */
7619 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 status = WDI_DelTSReq(wdiDelTSReqParam,
7621 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 if(IS_WDI_STATUS_FAILURE(status))
7623 {
7624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7625 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7627 vos_mem_free(pWdaParams->wdaMsgParam);
7628 vos_mem_free(pWdaParams);
7629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631}
Jeff Johnson295189b2012-06-20 16:38:30 -07007632/*
7633 * FUNCTION: WDA_UpdateBeaconParamsCallback
7634 * Free the memory. No need to send any response to PE in this case
7635 */
7636void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7637{
7638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(NULL == pWdaParams)
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007644 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 VOS_ASSERT(0) ;
7646 return ;
7647 }
7648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7649 vos_mem_free(pWdaParams->wdaMsgParam) ;
7650 vos_mem_free(pWdaParams);
7651 /*
7652 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7653 * param here
7654 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 return ;
7656}
Jeff Johnson295189b2012-06-20 16:38:30 -07007657/*
7658 * FUNCTION: WDA_ProcessUpdateBeaconParams
7659 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7660 */
7661VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7662 tUpdateBeaconParams *pUpdateBeaconParams)
7663{
7664 WDI_Status status = WDI_STATUS_SUCCESS ;
7665 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7666 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7667 sizeof(WDI_UpdateBeaconParamsType)) ;
7668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 if(NULL == wdiUpdateBeaconParams)
7672 {
7673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 VOS_ASSERT(0);
7676 return VOS_STATUS_E_NOMEM;
7677 }
7678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7679 if(NULL == pWdaParams)
7680 {
7681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 VOS_ASSERT(0);
7684 vos_mem_free(wdiUpdateBeaconParams);
7685 return VOS_STATUS_E_NOMEM;
7686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7688 pUpdateBeaconParams->bssIdx;
7689 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7690 pUpdateBeaconParams->fShortPreamble;
7691 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7692 pUpdateBeaconParams->fShortSlotTime;
7693 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7694 pUpdateBeaconParams->beaconInterval;
7695 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7696 pUpdateBeaconParams->llaCoexist;
7697 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7698 pUpdateBeaconParams->llbCoexist;
7699 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7700 pUpdateBeaconParams->llgCoexist;
7701 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7702 pUpdateBeaconParams->ht20MhzCoexist;
7703 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7704 pUpdateBeaconParams->llnNonGFCoexist;
7705 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7706 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7707 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7708 pUpdateBeaconParams->fRIFSMode;
7709 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7710 pUpdateBeaconParams->paramChangeBitmap;
7711 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7712
7713 pWdaParams->pWdaContext = pWDA;
7714 /* Store UpdateBeacon Req pointer, as this will be used for response */
7715 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 /* store Params pass it to WDI */
7717 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7719 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7720 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 if(IS_WDI_STATUS_FAILURE(status))
7722 {
7723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7724 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7726 vos_mem_free(pWdaParams->wdaMsgParam);
7727 vos_mem_free(pWdaParams);
7728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007730}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007731#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007732/*
7733 * FUNCTION: WDA_TSMStatsReqCallback
7734 * send TSM Stats RSP back to PE
7735 */
7736void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7737{
7738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7739 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007740 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7741 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742
7743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007744 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 if(NULL == pWdaParams)
7746 {
7747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 VOS_ASSERT(0) ;
7750 return ;
7751 }
7752 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307753 if (NULL == pWDA)
7754 {
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7756 "%s:pWDA is NULL", __func__);
7757 VOS_ASSERT(0);
7758 return ;
7759 }
7760
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007761 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7762
7763 if(NULL == pGetTsmStatsReqParams)
7764 {
7765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7766 "%s: pGetTsmStatsReqParams received NULL", __func__);
7767 VOS_ASSERT(0);
7768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7769 vos_mem_free(pWdaParams);
7770 return;
7771 }
7772
7773 pTsmRspParams =
7774 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 if( NULL == pTsmRspParams )
7776 {
7777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007778 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 VOS_ASSERT( 0 );
7780 return ;
7781 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007782 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7783 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7784 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7785
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7787 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7788 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7789 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7790 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7791 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7792 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7793 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7794 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7795 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007796
7797 /* Assign get tsm stats req req (backup) in to the response */
7798 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7799
7800 /* free WDI command buffer */
7801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7802 vos_mem_free(pWdaParams);
7803
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 return ;
7806}
7807
7808
Jeff Johnson295189b2012-06-20 16:38:30 -07007809/*
7810 * FUNCTION: WDA_ProcessTsmStatsReq
7811 * Request to WDI to get the TSM Stats params.
7812 */
7813VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007814 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007815{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007816 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007818 tWDA_ReqParams *pWdaParams = NULL;
7819 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7820
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007822 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7824 sizeof(WDI_TSMStatsReqParamsType));
7825 if(NULL == wdiTSMReqParam)
7826 {
7827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 VOS_ASSERT(0);
7830 return VOS_STATUS_E_NOMEM;
7831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7833 if(NULL == pWdaParams)
7834 {
7835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 VOS_ASSERT(0);
7838 vos_mem_free(wdiTSMReqParam);
7839 return VOS_STATUS_E_NOMEM;
7840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7842 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7843 pTsmStats->bssId,
7844 sizeof(wpt_macAddr));
7845 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7846
7847 pWdaParams->pWdaContext = pWDA;
7848 /* Store TSM Stats pointer, as this will be used for response */
7849 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007850 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 status = WDI_TSMStatsReq(wdiTSMReqParam,
7852 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 if(IS_WDI_STATUS_FAILURE(status))
7854 {
7855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7856 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007857 vos_mem_free(pWdaParams);
7858
7859 pGetTsmStatsRspParams =
7860 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7861 if(NULL == pGetTsmStatsRspParams)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7864 "%s: VOS MEM Alloc Failure", __func__);
7865 VOS_ASSERT(0);
7866 vos_mem_free(pTsmStats);
7867 return VOS_STATUS_E_NOMEM;
7868 }
7869 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7870 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7871 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7872
7873 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 return CONVERT_WDI2VOS_STATUS(status) ;
7876}
7877#endif
7878/*
7879 * FUNCTION: WDA_SendBeaconParamsCallback
7880 * No need to send any response to PE in this case
7881 */
7882void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7883{
7884
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 return ;
7888}
Jeff Johnson295189b2012-06-20 16:38:30 -07007889/*
7890 * FUNCTION: WDA_ProcessSendBeacon
7891 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7892 * start beacon trasmission
7893 */
7894VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7895 tSendbeaconParams *pSendbeaconParams)
7896{
7897 WDI_Status status = WDI_STATUS_SUCCESS ;
7898 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7902 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7903 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7904 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7906 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307907 /* p2pIeOffset should be atleast greater than timIeOffset */
7908 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7909 (pSendbeaconParams->p2pIeOffset <
7910 pSendbeaconParams->timIeOffset))
7911 {
7912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7913 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307914 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307915 VOS_ASSERT( 0 );
7916 return WDI_STATUS_E_FAILURE;
7917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7919 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 /* Copy the beacon template to local buffer */
7921 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7922 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7923 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7924
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7926 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 if(IS_WDI_STATUS_FAILURE(status))
7928 {
7929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7930 "Failure in SEND BEACON REQ Params WDI API" );
7931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 vos_mem_free(pSendbeaconParams);
7933 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934}
Jeff Johnson295189b2012-06-20 16:38:30 -07007935/*
7936 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7937 * No need to send any response to PE in this case
7938 */
7939void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7940{
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007942 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 return ;
7944}
7945
Jeff Johnson295189b2012-06-20 16:38:30 -07007946/*
7947 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7948 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7949 * send probe response
7950 */
7951VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7952 tSendProbeRespParams *pSendProbeRspParams)
7953{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007954 WDI_Status status = WDI_STATUS_SUCCESS;
7955 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7956 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007958 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007959
7960 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307961 {
7962 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007963 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307964 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007965
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007967 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007969 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 /* Copy the Probe Response template to local buffer */
7972 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007973 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 pSendProbeRspParams->pProbeRespTemplate,
7975 pSendProbeRspParams->probeRespTemplateLen);
7976 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007977 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7979 WDI_PROBE_REQ_BITMAP_IE_LEN);
7980
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007981 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007982
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007983 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 if(IS_WDI_STATUS_FAILURE(status))
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7988 "Failure in SEND Probe RSP Params WDI API" );
7989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007991 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007993}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007994#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007995/*
7996 * FUNCTION: WDA_SetMaxTxPowerCallBack
7997 * send the response to PE with power value received from WDI
7998 */
7999void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8000 void* pUserData)
8001{
8002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8003 tWDA_CbContext *pWDA = NULL;
8004 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8005
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 if(NULL == pWdaParams)
8009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 VOS_ASSERT(0) ;
8013 return ;
8014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308016 if (NULL == pWDA)
8017 {
8018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8019 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8021 vos_mem_free(pWdaParams->wdaMsgParam);
8022 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308023 VOS_ASSERT(0);
8024 return ;
8025 }
8026
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if( NULL == pMaxTxPowerParams )
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008031 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008032 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 return ;
8036 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008037
Jeff Johnson295189b2012-06-20 16:38:30 -07008038
8039 /*need to free memory for the pointers used in the
8040 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8042 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008044
Jeff Johnson295189b2012-06-20 16:38:30 -07008045
8046 /* send response to UMAC*/
8047 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8048
8049 return;
8050}
Jeff Johnson295189b2012-06-20 16:38:30 -07008051/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008052 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 * Request to WDI to send set Max Tx Power Request
8054 */
8055 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8056 tMaxTxPowerParams *MaxTxPowerParams)
8057{
8058 WDI_Status status = WDI_STATUS_SUCCESS;
8059 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8060 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008061
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008064
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8066 sizeof(WDI_SetMaxTxPowerParamsType));
8067 if(NULL == wdiSetMaxTxPowerParams)
8068 {
8069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 VOS_ASSERT(0);
8072 return VOS_STATUS_E_NOMEM;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8075 if(NULL == pWdaParams)
8076 {
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 vos_mem_free(wdiSetMaxTxPowerParams);
8080 VOS_ASSERT(0);
8081 return VOS_STATUS_E_NOMEM;
8082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 /* Copy.Max.Tx.Power Params to WDI structure */
8084 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8085 MaxTxPowerParams->bssId,
8086 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8088 MaxTxPowerParams->selfStaMacAddr,
8089 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8091 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 pWdaParams->pWdaContext = pWDA;
8094 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 /* store Params pass it to WDI */
8096 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8098 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 if(IS_WDI_STATUS_FAILURE(status))
8100 {
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8102 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8104 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008105 /* send response to UMAC*/
8106 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 }
8108 return CONVERT_WDI2VOS_STATUS(status);
8109
8110}
Jeff Johnson295189b2012-06-20 16:38:30 -07008111#endif
schang86c22c42013-03-13 18:41:24 -07008112
8113/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008114 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8115 * send the response to PE with power value received from WDI
8116 */
8117void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8118 *pwdiSetMaxTxPowerPerBandRsp,
8119 void* pUserData)
8120{
8121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8122 tWDA_CbContext *pWDA = NULL;
8123 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8124
8125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8126 "<------ %s ", __func__);
8127 if (NULL == pWdaParams)
8128 {
8129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8130 "%s: pWdaParams received NULL", __func__);
8131 VOS_ASSERT(0);
8132 return ;
8133 }
8134 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308135 if (NULL == pWDA)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8138 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8140 vos_mem_free(pWdaParams->wdaMsgParam);
8141 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308142 VOS_ASSERT(0);
8143 return ;
8144 }
8145
Arif Hussaina5ebce02013-08-09 15:09:58 -07008146 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8147 if ( NULL == pMxTxPwrPerBandParams )
8148 {
8149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8150 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8151 VOS_ASSERT(0);
8152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8153 vos_mem_free(pWdaParams);
8154 return;
8155 }
8156
8157 /*need to free memory for the pointers used in the
8158 WDA Process.Set Max Tx Power Req function*/
8159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8160 vos_mem_free(pWdaParams);
8161 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8162
8163 /* send response to UMAC*/
8164 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8165 pMxTxPwrPerBandParams, 0);
8166
8167 return;
8168}
8169
8170/*
8171 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8172 * Request to WDI to send set Max Tx Power Per band Request
8173 */
8174 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8175 tMaxTxPowerPerBandParams
8176 *MaxTxPowerPerBandParams)
8177{
8178 WDI_Status status = WDI_STATUS_SUCCESS;
8179 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8180 tWDA_ReqParams *pWdaParams = NULL;
8181
8182 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8183 "------> %s ", __func__);
8184
8185 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8186 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8187
8188 if (NULL == wdiSetMxTxPwrPerBandParams)
8189 {
8190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8191 "%s: VOS MEM Alloc Failure", __func__);
8192 VOS_ASSERT(0);
8193 return VOS_STATUS_E_NOMEM;
8194 }
8195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8196 if (NULL == pWdaParams)
8197 {
8198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8199 "%s: VOS MEM Alloc Failure", __func__);
8200 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8201 VOS_ASSERT(0);
8202 return VOS_STATUS_E_NOMEM;
8203 }
8204 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8205 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8206 MaxTxPowerPerBandParams->bandInfo;
8207 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8208 MaxTxPowerPerBandParams->power;
8209 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8210 pWdaParams->pWdaContext = pWDA;
8211 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8212 /* store Params pass it to WDI */
8213 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8214 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8215 WDA_SetMaxTxPowerPerBandCallBack,
8216 pWdaParams);
8217 if (IS_WDI_STATUS_FAILURE(status))
8218 {
8219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8220 "Failure in SET MAX TX Power REQ Params WDI API,"
8221 " free all the memory");
8222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8223 vos_mem_free(pWdaParams);
8224 /* send response to UMAC*/
8225 WDA_SendMsg(pWDA,
8226 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8227 MaxTxPowerPerBandParams, 0);
8228 }
8229 return CONVERT_WDI2VOS_STATUS(status);
8230}
8231
8232/*
schang86c22c42013-03-13 18:41:24 -07008233 * FUNCTION: WDA_SetTxPowerCallBack
8234 * send the response to PE with power value received from WDI
8235 */
8236void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8237 void* pUserData)
8238{
8239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8240 tWDA_CbContext *pWDA = NULL;
8241 tSirSetTxPowerReq *pTxPowerParams = NULL;
8242
8243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8244 "<------ %s ", __func__);
8245 if(NULL == pWdaParams)
8246 {
8247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8248 "%s: pWdaParams received NULL", __func__);
8249 VOS_ASSERT(0) ;
8250 return ;
8251 }
8252 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308253 if (NULL == pWDA)
8254 {
8255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8256 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8258 vos_mem_free(pWdaParams->wdaMsgParam);
8259 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308260 VOS_ASSERT(0);
8261 return ;
8262 }
8263
schang86c22c42013-03-13 18:41:24 -07008264 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8265 if(NULL == pTxPowerParams)
8266 {
8267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8268 "%s: pTxPowerParams received NULL " ,__func__);
8269 VOS_ASSERT(0);
8270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8271 vos_mem_free(pWdaParams);
8272 return ;
8273 }
8274
8275 /*need to free memory for the pointers used in the
8276 WDA Process.Set Max Tx Power Req function*/
8277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8278 vos_mem_free(pWdaParams);
8279
8280 /* send response to UMAC*/
8281 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8282 return;
8283}
8284
8285/*
8286 * FUNCTION: WDA_ProcessSetTxPowerReq
8287 * Request to WDI to send set Tx Power Request
8288 */
8289 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8290 tSirSetTxPowerReq *txPowerParams)
8291{
8292 WDI_Status status = WDI_STATUS_SUCCESS;
8293 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8294 tWDA_ReqParams *pWdaParams = NULL;
8295
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8297 "------> %s ", __func__);
8298
8299 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8300 sizeof(WDI_SetTxPowerParamsType));
8301 if(NULL == wdiSetTxPowerParams)
8302 {
8303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8304 "%s: VOS MEM Alloc Failure", __func__);
8305 VOS_ASSERT(0);
8306 return VOS_STATUS_E_NOMEM;
8307 }
8308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8309 if(NULL == pWdaParams)
8310 {
8311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8312 "%s: VOS MEM Alloc Failure", __func__);
8313 vos_mem_free(wdiSetTxPowerParams);
8314 VOS_ASSERT(0);
8315 return VOS_STATUS_E_NOMEM;
8316 }
8317 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8318 txPowerParams->bssIdx;
8319 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8320 txPowerParams->mwPower;
8321 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8322 pWdaParams->pWdaContext = pWDA;
8323 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8324 /* store Params pass it to WDI */
8325 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8326 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8327 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8328 if(IS_WDI_STATUS_FAILURE(status))
8329 {
8330 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8331 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8333 vos_mem_free(pWdaParams);
8334 /* send response to UMAC*/
8335 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8336 }
8337 return CONVERT_WDI2VOS_STATUS(status);
8338}
8339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340/*
8341 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8342 * Free the memory. No need to send any response to PE in this case
8343 */
8344void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8345{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008349 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008350
8351 if(NULL == pWdaParams)
8352 {
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008355 VOS_ASSERT(0) ;
8356 return ;
8357 }
8358
8359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8360 vos_mem_free(pWdaParams->wdaMsgParam) ;
8361 vos_mem_free(pWdaParams);
8362
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 /*
8364 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8365 * so just free the request param here
8366 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 return ;
8368}
8369
Jeff Johnson295189b2012-06-20 16:38:30 -07008370/*
8371 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8372 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8373 */
8374VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8375 tP2pPsParams *pP2pPsConfigParams)
8376{
8377 WDI_Status status = WDI_STATUS_SUCCESS ;
8378 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8379 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8380 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008381 tWDA_ReqParams *pWdaParams = NULL;
8382
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 if(NULL == wdiSetP2PGONOAReqParam)
8386 {
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008388 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308389 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 VOS_ASSERT(0);
8391 return VOS_STATUS_E_NOMEM;
8392 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008393
8394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8395 if(NULL == pWdaParams)
8396 {
8397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008398 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008399 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008400 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008401 VOS_ASSERT(0);
8402 return VOS_STATUS_E_NOMEM;
8403 }
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8406 pP2pPsConfigParams->opp_ps;
8407 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8408 pP2pPsConfigParams->ctWindow;
8409 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8410 pP2pPsConfigParams->count;
8411 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8412 pP2pPsConfigParams->duration;
8413 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8414 pP2pPsConfigParams->interval;
8415 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8416 pP2pPsConfigParams->single_noa_duration;
8417 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8418 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008419
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8421 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008422 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8423
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008425 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8426 pWdaParams->pWdaContext = pWDA;
8427
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008429 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8430
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(IS_WDI_STATUS_FAILURE(status))
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8434 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8436 vos_mem_free(pWdaParams->wdaMsgParam);
8437 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 return CONVERT_WDI2VOS_STATUS(status);
8440
Jeff Johnson295189b2012-06-20 16:38:30 -07008441}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308442
8443#ifdef FEATURE_WLAN_TDLS
8444/*
8445 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8446 * Free the memory. No need to send any response to PE in this case
8447 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308448void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8449 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308450{
8451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8452 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308453 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308454
8455
8456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8457 "<------ %s " ,__func__);
8458 if(NULL == pWdaParams)
8459 {
8460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8461 "%s: pWdaParams received NULL", __func__);
8462 VOS_ASSERT(0) ;
8463 return ;
8464 }
8465 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8466
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308467 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308468 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8470 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8472 vos_mem_free(pWdaParams->wdaMsgParam);
8473 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308474 VOS_ASSERT(0);
8475 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308476 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308477
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308478 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8479 if( NULL == pTdlsLinkEstablishParams )
8480 {
8481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8482 "%s: pTdlsLinkEstablishParams "
8483 "received NULL " ,__func__);
8484 VOS_ASSERT(0);
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8486 vos_mem_free(pWdaParams);
8487 return ;
8488 }
8489 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8490 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308492 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308493 /* send response to UMAC*/
8494 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8495
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308496 return ;
8497}
8498
8499VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8500 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8501{
8502 WDI_Status status = WDI_STATUS_SUCCESS ;
8503 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8504 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8505 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8506 tWDA_ReqParams *pWdaParams = NULL;
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8508 "------> %s " ,__func__);
8509 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308513 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308514 VOS_ASSERT(0);
8515 return VOS_STATUS_E_NOMEM;
8516 }
8517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8518 if(NULL == pWdaParams)
8519 {
8520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8521 "%s: VOS MEM Alloc Failure", __func__);
8522 vos_mem_free(pTdlsLinkEstablishParams);
8523 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8524 VOS_ASSERT(0);
8525 return VOS_STATUS_E_NOMEM;
8526 }
8527 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308528 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308529 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308530 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308531 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308532 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308533 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308534 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308535 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308536 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308537 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8538 pTdlsLinkEstablishParams->isOffChannelSupported;
8539
8540 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8541 pTdlsLinkEstablishParams->validChannels,
8542 pTdlsLinkEstablishParams->validChannelsLen);
8543
8544 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8545 pTdlsLinkEstablishParams->validChannelsLen;
8546
8547 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8548 pTdlsLinkEstablishParams->validOperClasses,
8549 pTdlsLinkEstablishParams->validOperClassesLen);
8550 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8551 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308552
8553 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8554 /* Store msg pointer from PE, as this will be used for response */
8555 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8556 /* store Params pass it to WDI */
8557 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8558 pWdaParams->pWdaContext = pWDA;
8559
8560 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8561 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8562 WDA_SetTDLSLinkEstablishReqParamsCallback,
8563 pWdaParams);
8564 if(IS_WDI_STATUS_FAILURE(status))
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8569 vos_mem_free(pWdaParams->wdaMsgParam);
8570 vos_mem_free(pWdaParams);
8571 }
8572 return CONVERT_WDI2VOS_STATUS(status);
8573}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308574
8575// tdlsoffchan
8576void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8577 void* pUserData)
8578{
8579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8580 tWDA_CbContext *pWDA = NULL;
8581 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8582
8583
8584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8585 "<------ %s " ,__func__);
8586 if(NULL == pWdaParams)
8587 {
8588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308590 VOS_ASSERT(0) ;
8591 return ;
8592 }
8593 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8594
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308595 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308596 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8598 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8600 vos_mem_free(pWdaParams->wdaMsgParam);
8601 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308602 VOS_ASSERT(0);
8603 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308604 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308605
Atul Mittalc0f739f2014-07-31 13:47:47 +05308606 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308607 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "%s: pTdlsChanSwitchParams "
8611 "received NULL " ,__func__);
8612 VOS_ASSERT(0);
8613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8614 vos_mem_free(pWdaParams);
8615 return ;
8616 }
8617 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8618 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8620 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308621 /* send response to UMAC*/
8622 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308623
8624 return ;
8625}
8626VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8627 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8628{
8629 WDI_Status status = WDI_STATUS_SUCCESS ;
8630 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8631 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8632 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8633 tWDA_ReqParams *pWdaParams = NULL;
8634
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8636 "Enter: %s ",__func__);
8637 if(NULL == wdiSetTDLSChanSwitchReqParam)
8638 {
8639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8640 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308641 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308642 VOS_ASSERT(0);
8643 return VOS_STATUS_E_NOMEM;
8644 }
8645
8646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8647 if(NULL == pWdaParams)
8648 {
8649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8650 "%s: VOS MEM Alloc Failure", __func__);
8651 vos_mem_free(pTdlsChanSwitchParams);
8652 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8653 VOS_ASSERT(0);
8654 return VOS_STATUS_E_NOMEM;
8655 }
8656 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8657 pTdlsChanSwitchParams->staIdx;
8658 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8659 pTdlsChanSwitchParams->tdlsSwMode;
8660 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8661 pTdlsChanSwitchParams->operClass;
8662 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8663 pTdlsChanSwitchParams->tdlsOffCh;
8664 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8665 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8666
8667
8668 /* Store msg pointer from PE, as this will be used for response */
8669 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8670 /* store Params pass it to WDI */
8671 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8672 pWdaParams->pWdaContext = pWDA;
8673 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8674 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8675 WDA_SetTDLSChanSwitchReqParamsCallback,
8676 pWdaParams);
8677 if(IS_WDI_STATUS_FAILURE(status))
8678 {
8679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8680 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8682 vos_mem_free(pWdaParams->wdaMsgParam);
8683 vos_mem_free(pWdaParams);
8684 }
8685 return CONVERT_WDI2VOS_STATUS(status);
8686}
8687#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308688
8689
Jeff Johnson295189b2012-06-20 16:38:30 -07008690#ifdef WLAN_FEATURE_VOWIFI_11R
8691/*
8692 * FUNCTION: WDA_AggrAddTSReqCallback
8693 * send ADD AGGREGATED TS RSP back to PE
8694 */
8695void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8696{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308698 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008699 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008702 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008703 if(NULL == pWdaParams)
8704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008706 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008707 VOS_ASSERT(0) ;
8708 return ;
8709 }
8710
8711 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308712 if (NULL == pWDA)
8713 {
8714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8715 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8717 vos_mem_free(pWdaParams->wdaMsgParam);
8718 vos_mem_free(pWdaParams);
8719
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308720 VOS_ASSERT(0);
8721 return ;
8722 }
8723
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008724 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008725
8726 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8727 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008728 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008731
8732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8733 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 return ;
8735}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008736/*
8737 * FUNCTION: WDA_ProcessAddTSReq
8738 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8739 */
8740VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8741 tAggrAddTsParams *pAggrAddTsReqParams)
8742{
8743 WDI_Status status = WDI_STATUS_SUCCESS ;
8744 int i;
8745 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008746 tWDA_ReqParams *pWdaParams = NULL;
8747
8748
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8752 sizeof(WDI_AggrAddTSReqParamsType)) ;
8753 if(NULL == wdiAggrAddTSReqParam)
8754 {
8755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008756 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308757 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008758 VOS_ASSERT(0);
8759 return VOS_STATUS_E_NOMEM;
8760 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761
8762
8763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8764 if(NULL == pWdaParams)
8765 {
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008768 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008769 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008770 VOS_ASSERT(0);
8771 return VOS_STATUS_E_NOMEM;
8772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8774 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8775 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008776 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8777 {
8778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8780 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8782 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8784 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8786 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8788 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8790 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8792 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8794 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8796 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8798 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8800 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8802 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8804 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8806 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8808 pAggrAddTsReqParams->tspec[i].inactInterval;
8809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8810 pAggrAddTsReqParams->tspec[i].suspendInterval;
8811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8812 pAggrAddTsReqParams->tspec[i].svcStartTime;
8813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8814 pAggrAddTsReqParams->tspec[i].minDataRate;
8815 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8816 pAggrAddTsReqParams->tspec[i].meanDataRate;
8817 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8818 pAggrAddTsReqParams->tspec[i].peakDataRate;
8819 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8820 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8821 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8822 pAggrAddTsReqParams->tspec[i].delayBound;
8823 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8824 pAggrAddTsReqParams->tspec[i].minPhyRate;
8825 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8826 pAggrAddTsReqParams->tspec[i].surplusBw;
8827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8828 pAggrAddTsReqParams->tspec[i].mediumTime;
8829 }
8830
8831 /* TODO: tAggrAddTsParams doesn't have the following fields */
8832#if 0
8833 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8834 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8835 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8836 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8837#endif
8838 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8839
8840 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008841 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8844
8845 pWdaParams->pWdaContext = pWDA;
8846
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008848 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8849
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 if(IS_WDI_STATUS_FAILURE(status))
8851 {
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8853 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8855 vos_mem_free(pWdaParams);
8856
8857 /* send the failure response back to PE*/
8858 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8859 {
8860 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8861 }
8862
8863 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8864 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 return CONVERT_WDI2VOS_STATUS(status) ;
8867}
8868#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008869/*
Mihir Shetea4306052014-03-25 00:02:54 +05308870 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008871 * send Enter IMPS RSP back to PE
8872 */
Mihir Shetea4306052014-03-25 00:02:54 +05308873void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008874{
Mihir Shetea4306052014-03-25 00:02:54 +05308875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308876 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308877
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308879 "<------ %s status=%d" ,__func__,status);
8880 if(NULL == pWdaParams)
8881 {
8882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8883 "%s: pWdaParams received NULL", __func__);
8884 VOS_ASSERT(0);
8885 return;
8886 }
8887
8888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308889 if (NULL == pWDA)
8890 {
8891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8892 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8894 vos_mem_free(pWdaParams->wdaMsgParam);
8895 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308896 VOS_ASSERT(0);
8897 return ;
8898 }
Mihir Shetea4306052014-03-25 00:02:54 +05308899
8900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8901 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308902 if (WDI_STATUS_SUCCESS != status)
8903 {
8904 pWDA->failureCounts.enterImpsFailureCount++;
8905 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8906 pWDA->failureCounts.enterImpsFailureCount)
8907 {
8908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8909 "%s: Status %d fail count %d", __func__, status,
8910 pWDA->failureCounts.enterImpsFailureCount);
8911 pWDA->failureCounts.enterImpsFailureCount = 0;
8912 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8913 WLAN_LOG_INDICATOR_HOST_DRIVER,
8914 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8915 FALSE, TRUE);
8916 }
8917 }
8918 else
8919 {
8920 pWDA->failureCounts.enterImpsFailureCount = 0;
8921 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008922 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 return ;
8924}
Mihir Shetea4306052014-03-25 00:02:54 +05308925
8926
8927/*
8928 * FUNCTION: WDA_EnterImpsReqCallback
8929 * Free memory and send Enter IMPS RSP back to PE.
8930 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8931 */
8932void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8933{
8934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308935 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308936
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8938 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8939
8940 if(NULL == pWdaParams)
8941 {
8942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8943 "%s: pWdaParams received NULL", __func__);
8944 VOS_ASSERT(0);
8945 return;
8946 }
8947
8948 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308949 if (NULL == pWDA)
8950 {
8951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8952 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8954 vos_mem_free(pWdaParams->wdaMsgParam);
8955 vos_mem_free(pWdaParams);
8956
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308957 VOS_ASSERT(0);
8958 return ;
8959 }
8960
Mihir Shetea4306052014-03-25 00:02:54 +05308961
8962 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8963 {
8964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8965 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308966 pWDA->failureCounts.enterImpsFailureCount++;
8967 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8968 pWDA->failureCounts.enterImpsFailureCount)
8969 {
8970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8971 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8972 pWDA->failureCounts.enterImpsFailureCount);
8973 pWDA->failureCounts.enterImpsFailureCount = 0;
8974 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8975 WLAN_LOG_INDICATOR_HOST_DRIVER,
8976 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8977 FALSE, TRUE);
8978 }
Mihir Shetea4306052014-03-25 00:02:54 +05308979 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8980 CONVERT_WDI2SIR_STATUS(wdiStatus));
8981 }
8982
8983 return;
8984}
Jeff Johnson295189b2012-06-20 16:38:30 -07008985/*
8986 * FUNCTION: WDA_ProcessEnterImpsReq
8987 * Request to WDI to Enter IMPS power state.
8988 */
8989VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8990{
8991 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308992 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8993 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308994 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308997
8998
8999 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9000 if (NULL == wdiEnterImpsReqParams)
9001 {
9002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9003 "%s: VOS MEM Alloc Failure", __func__);
9004 VOS_ASSERT(0);
9005 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9006 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9007 return VOS_STATUS_E_NOMEM;
9008 }
9009
9010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9011 if (NULL == pWdaParams)
9012 {
9013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9014 "%s: VOS MEM Alloc Failure", __func__);
9015 VOS_ASSERT(0);
9016 vos_mem_free(wdiEnterImpsReqParams);
9017 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9018 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9019 return VOS_STATUS_E_NOMEM;
9020 }
9021
9022 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9023 wdiEnterImpsReqParams->pUserData = pWdaParams;
9024
9025 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9026 pWdaParams->wdaMsgParam = NULL;
9027 pWdaParams->pWdaContext = pWDA;
9028
9029 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9030 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9031 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 if(IS_WDI_STATUS_FAILURE(status))
9033 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309034 if (! (failcnt & 0xF))
9035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9036 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9037 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309038 vos_mem_free(wdiEnterImpsReqParams);
9039 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009040 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 return CONVERT_WDI2VOS_STATUS(status) ;
9043}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309044
9045/*
9046 * FUNCTION: WDA_ExitImpsRespCallback
9047 * send Exit IMPS RSP back to PE
9048 */
9049void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9050{
9051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9052 tWDA_CbContext *pWDA;
9053
9054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9055 "<------ %s " ,__func__);
9056
9057 if (NULL == pWdaParams)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9060 "%s: pWdaParams received NULL", __func__);
9061 VOS_ASSERT(0);
9062 return;
9063 }
9064 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9065
9066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9067 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309068 if (WDI_STATUS_SUCCESS != status)
9069 {
9070 pWDA->failureCounts.exitImpsFailureCount++;
9071 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9072 pWDA->failureCounts.exitImpsFailureCount)
9073 {
9074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9075 "%s: Status %d fail count %d", __func__,
9076 status,
9077 pWDA->failureCounts.exitImpsFailureCount);
9078 pWDA->failureCounts.exitImpsFailureCount = 0;
9079 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9080 WLAN_LOG_INDICATOR_HOST_DRIVER,
9081 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9082 FALSE, TRUE);
9083 }
9084 }
9085 else
9086 {
9087 pWDA->failureCounts.exitImpsFailureCount = 0;
9088 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309089
9090 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9091 return;
9092}
9093
Jeff Johnson295189b2012-06-20 16:38:30 -07009094/*
9095 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 */
9097void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9098{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309100 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009102 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309103 if(NULL == pWdaParams)
9104 {
9105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9106 "%s: pWdaParams received NULL", __func__);
9107 VOS_ASSERT(0);
9108 return;
9109 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309110 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309111 if (IS_WDI_STATUS_FAILURE(status))
9112 {
9113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9114 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309115
9116 pWDA->failureCounts.exitImpsFailureCount++;
9117 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9118 pWDA->failureCounts.exitImpsFailureCount)
9119 {
9120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9121 "%s: wdiStatus %d fail count %d", __func__,
9122 status,
9123 pWDA->failureCounts.exitImpsFailureCount);
9124 pWDA->failureCounts.exitImpsFailureCount = 0;
9125 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9126 WLAN_LOG_INDICATOR_HOST_DRIVER,
9127 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9128 FALSE, TRUE);
9129 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309130 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9131 {
9132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9133 FL("reload wlan driver"));
9134 wpalWlanReload();
9135 }
9136 }
9137 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009138}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309139
Jeff Johnson295189b2012-06-20 16:38:30 -07009140/*
9141 * FUNCTION: WDA_ProcessExitImpsReq
9142 * Request to WDI to Exit IMPS power state.
9143 */
9144VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9145{
9146 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309147 tWDA_ReqParams *pWdaParams;
9148 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9149
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009151 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309152 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9153 sizeof(WDI_ExitImpsReqParamsType));
9154 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9157 "%s: VOS MEM Alloc Failure", __func__);
9158 VOS_ASSERT(0);
9159 return VOS_STATUS_E_NOMEM;
9160 }
9161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9162 if(NULL == pWdaParams)
9163 {
9164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9165 "%s: VOS MEM Alloc Failure", __func__);
9166 VOS_ASSERT(0);
9167 vos_mem_free(wdiExitImpsReqParams);
9168 return VOS_STATUS_E_NOMEM;
9169 }
9170 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9171 wdiExitImpsReqParams->pUserData = pWdaParams;
9172
9173 /* Store param pointer as passed in by caller */
9174 /* store Params pass it to WDI */
9175 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9176 pWdaParams->pWdaContext = pWDA;
9177 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9178 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9179 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9180 pWdaParams);
9181 if (IS_WDI_STATUS_FAILURE(status))
9182 {
9183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9184 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9186 vos_mem_free(pWdaParams);
9187 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 return CONVERT_WDI2VOS_STATUS(status) ;
9190}
Jeff Johnson295189b2012-06-20 16:38:30 -07009191/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009192 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 * send Enter BMPS RSP back to PE
9194 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009195void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009196{
9197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309198 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009199 tEnterBmpsParams *pEnterBmpsRspParams;
9200
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009202 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 if(NULL == pWdaParams)
9204 {
9205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009206 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 VOS_ASSERT(0) ;
9208 return ;
9209 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009210
9211 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309212 if (NULL == pWDA)
9213 {
9214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9215 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309216
9217 if(pWdaParams->wdaWdiApiMsgParam)
9218 {
9219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9220 }
9221 vos_mem_free(pWdaParams);
9222
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309223 VOS_ASSERT(0);
9224 return ;
9225 }
9226
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009227 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9228
9229 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009230 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009231
9232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309234 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9235 {
9236 pWDA->failureCounts.enterBmpsFailureCount++;
9237 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9238 pWDA->failureCounts.enterBmpsFailureCount)
9239 {
9240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9241 "%s: wdiStatus %d fail count %d", __func__,
9242 pwdiEnterBmpsRsp->wdiStatus,
9243 pWDA->failureCounts.enterBmpsFailureCount);
9244 pWDA->failureCounts.enterBmpsFailureCount = 0;
9245 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9246 WLAN_LOG_INDICATOR_HOST_DRIVER,
9247 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9248 FALSE, TRUE);
9249 }
9250 }
9251 else
9252 {
9253 pWDA->failureCounts.enterBmpsFailureCount = 0;
9254 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009255 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9256
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 return ;
9258}
Jeff Johnson295189b2012-06-20 16:38:30 -07009259/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009260 * FUNCTION: WDA_EnterBmpsReqCallback
9261 * Free memory and send Enter BMPS RSP back to PE.
9262 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9263 */
9264void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9265{
9266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309267 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009268 tEnterBmpsParams *pEnterBmpsRspParams;
9269
9270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9271 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9272
9273 if(NULL == pWdaParams)
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9276 "%s: pWdaParams received NULL", __func__);
9277 VOS_ASSERT(0);
9278 return;
9279 }
9280
9281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309282 if (NULL == pWDA)
9283 {
9284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9285 "%s:pWDA is NULL", __func__);
9286 VOS_ASSERT(0);
9287 return ;
9288 }
9289
Yue Ma7f44bbe2013-04-12 11:47:39 -07009290 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9291 pEnterBmpsRspParams->status = wdiStatus;
9292
9293 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9294 {
9295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9296 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309297 pWDA->failureCounts.enterBmpsFailureCount++;
9298 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9299 pWDA->failureCounts.enterBmpsFailureCount)
9300 {
9301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9302 "%s: wdiStatus %d fail count %d", __func__,
9303 wdiStatus,
9304 pWDA->failureCounts.enterBmpsFailureCount);
9305 pWDA->failureCounts.enterBmpsFailureCount = 0;
9306 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9307 WLAN_LOG_INDICATOR_HOST_DRIVER,
9308 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9309 FALSE, TRUE);
9310 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009311 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9312 }
9313
9314 return;
9315}
9316/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 * FUNCTION: WDA_ProcessEnterBmpsReq
9318 * Request to WDI to Enter BMPS power state.
9319 */
9320VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9321 tEnterBmpsParams *pEnterBmpsReqParams)
9322{
9323 WDI_Status status = WDI_STATUS_SUCCESS;
9324 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9325 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9329 {
9330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009331 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 VOS_ASSERT(0);
9333 return VOS_STATUS_E_FAILURE;
9334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9336 if (NULL == wdiEnterBmpsReqParams)
9337 {
9338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009341 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9342 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 return VOS_STATUS_E_NOMEM;
9344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9346 if (NULL == pWdaParams)
9347 {
9348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 VOS_ASSERT(0);
9351 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009352 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9353 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 return VOS_STATUS_E_NOMEM;
9355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9357 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9358 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9359 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009360 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009361 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9362 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9363 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009364 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9365 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 /* Store param pointer as passed in by caller */
9368 /* store Params pass it to WDI */
9369 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009370 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009373 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 if (IS_WDI_STATUS_FAILURE(status))
9375 {
9376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9377 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009379 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009381 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 return CONVERT_WDI2VOS_STATUS(status);
9384}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009385
9386
9387static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9388 WDI_Status wdiStatus,
9389 tExitBmpsParams *pExitBmpsReqParams)
9390{
9391 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9392
9393 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9394}
9395
9396
Jeff Johnson295189b2012-06-20 16:38:30 -07009397/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009398 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009399 * send Exit BMPS RSP back to PE
9400 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009401void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009402{
9403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309404 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009405 tExitBmpsParams *pExitBmpsRspParams;
9406
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009408 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 if(NULL == pWdaParams)
9410 {
9411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009412 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 VOS_ASSERT(0) ;
9414 return ;
9415 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009416
9417 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309418 if (NULL == pWDA)
9419 {
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9421 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309422
9423 if(pWdaParams->wdaWdiApiMsgParam)
9424 {
9425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9426 }
9427 vos_mem_free(pWdaParams);
9428
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309429 VOS_ASSERT(0);
9430 return ;
9431 }
9432
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009433 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9434
9435 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009436 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009437
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309439 vos_mem_free(pWdaParams);
9440
9441 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9442 {
9443 pWDA->failureCounts.exitBmpsFailureCount++;
9444 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9445 pWDA->failureCounts.exitBmpsFailureCount)
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9448 "%s: Status %d fail count %d", __func__,
9449 pExitBmpsRspParams->status,
9450 pWDA->failureCounts.exitBmpsFailureCount);
9451 pWDA->failureCounts.exitBmpsFailureCount = 0;
9452 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9453 WLAN_LOG_INDICATOR_HOST_DRIVER,
9454 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9455 FALSE, TRUE);
9456 }
9457 }
9458 else
9459 {
9460 pWDA->failureCounts.exitBmpsFailureCount = 0;
9461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009462
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009463 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 return ;
9465}
Jeff Johnson295189b2012-06-20 16:38:30 -07009466/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009467 * FUNCTION: WDA_ExitBmpsReqCallback
9468 * Free memory and send Exit BMPS RSP back to PE.
9469 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9470 */
9471void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9472{
9473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309474 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009475 tExitBmpsParams *pExitBmpsRspParams;
9476
9477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9478 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9479
9480 if(NULL == pWdaParams)
9481 {
9482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9483 "%s: pWdaParams received NULL", __func__);
9484 VOS_ASSERT(0);
9485 return;
9486 }
9487
9488 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309489 if (NULL == pWDA)
9490 {
9491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9492 "%s:pWDA is NULL", __func__);
9493 VOS_ASSERT(0);
9494 return ;
9495 }
9496
Yue Ma7f44bbe2013-04-12 11:47:39 -07009497 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9498 pExitBmpsRspParams->status = wdiStatus;
9499
9500 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9501 {
9502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9503 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309504 pWDA->failureCounts.exitBmpsFailureCount++;
9505 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9506 pWDA->failureCounts.exitBmpsFailureCount)
9507 {
9508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9509 "%s: wdiStatus %d fail count %d", __func__,
9510 wdiStatus,
9511 pWDA->failureCounts.exitBmpsFailureCount);
9512 pWDA->failureCounts.exitBmpsFailureCount = 0;
9513 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9514 WLAN_LOG_INDICATOR_HOST_DRIVER,
9515 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9516 FALSE, TRUE);
9517 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009518 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9519 }
9520
9521 return;
9522}
9523/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 * FUNCTION: WDA_ProcessExitBmpsReq
9525 * Request to WDI to Exit BMPS power state.
9526 */
9527VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9528 tExitBmpsParams *pExitBmpsReqParams)
9529{
9530 WDI_Status status = WDI_STATUS_SUCCESS ;
9531 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9532 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9533 sizeof(WDI_ExitBmpsReqParamsType)) ;
9534 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 if(NULL == wdiExitBmpsReqParams)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009542 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 return VOS_STATUS_E_NOMEM;
9544 }
9545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9546 if(NULL == pWdaParams)
9547 {
9548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 VOS_ASSERT(0);
9551 vos_mem_free(wdiExitBmpsReqParams);
9552 return VOS_STATUS_E_NOMEM;
9553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009555
9556 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9557
Yue Ma7f44bbe2013-04-12 11:47:39 -07009558 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9559 wdiExitBmpsReqParams->pUserData = pWdaParams;
9560
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 /* Store param pointer as passed in by caller */
9562 /* store Params pass it to WDI */
9563 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9564 pWdaParams->pWdaContext = pWDA;
9565 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009567 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 if(IS_WDI_STATUS_FAILURE(status))
9569 {
9570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9571 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9573 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009574 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 return CONVERT_WDI2VOS_STATUS(status) ;
9577}
Jeff Johnson295189b2012-06-20 16:38:30 -07009578/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 * send Enter UAPSD RSP back to PE
9581 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009582void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009583{
9584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309585 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009586 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009588 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 if(NULL == pWdaParams)
9590 {
9591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009592 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009593 VOS_ASSERT(0) ;
9594 return ;
9595 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009596
9597 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309598 if (NULL == pWDA)
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9601 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309602
9603 if(pWdaParams->wdaWdiApiMsgParam)
9604 {
9605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9606 }
9607 vos_mem_free(pWdaParams);
9608
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309609 VOS_ASSERT(0);
9610 return ;
9611 }
9612
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009613 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9614
9615 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009616 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009617
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9619 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009620 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 return ;
9622}
Jeff Johnson295189b2012-06-20 16:38:30 -07009623/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009624 * FUNCTION: WDA_EnterUapsdReqCallback
9625 * Free memory and send Enter UAPSD RSP back to PE.
9626 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9627 */
9628void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9629{
9630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9631 tWDA_CbContext *pWDA;
9632 tUapsdParams *pEnterUapsdRsqParams;
9633
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9635 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9636
9637 if(NULL == pWdaParams)
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "%s: pWdaParams received NULL", __func__);
9641 VOS_ASSERT(0);
9642 return;
9643 }
9644
9645 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309646 if (NULL == pWDA)
9647 {
9648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9649 "%s:pWDA is NULL", __func__);
9650 VOS_ASSERT(0);
9651 return ;
9652 }
9653
Yue Ma7f44bbe2013-04-12 11:47:39 -07009654 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9655 pEnterUapsdRsqParams->status = wdiStatus;
9656
9657 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9658 {
9659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9660 vos_mem_free(pWdaParams);
9661 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9662 }
9663
9664 return;
9665}
9666/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009667 * FUNCTION: WDA_ProcessEnterUapsdReq
9668 * Request to WDI to Enter UAPSD power state.
9669 */
9670VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9671 tUapsdParams *pEnterUapsdReqParams)
9672{
9673 WDI_Status status = WDI_STATUS_SUCCESS ;
9674 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9675 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9676 sizeof(WDI_EnterUapsdReqParamsType)) ;
9677 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 if(NULL == wdiEnterUapsdReqParams)
9681 {
9682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009684 VOS_ASSERT(0);
9685 return VOS_STATUS_E_NOMEM;
9686 }
9687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9688 if(NULL == pWdaParams)
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 VOS_ASSERT(0);
9693 vos_mem_free(wdiEnterUapsdReqParams);
9694 return VOS_STATUS_E_NOMEM;
9695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9697 pEnterUapsdReqParams->beDeliveryEnabled;
9698 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9699 pEnterUapsdReqParams->beTriggerEnabled;
9700 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9701 pEnterUapsdReqParams->bkDeliveryEnabled;
9702 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9703 pEnterUapsdReqParams->bkTriggerEnabled;
9704 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9705 pEnterUapsdReqParams->viDeliveryEnabled;
9706 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9707 pEnterUapsdReqParams->viTriggerEnabled;
9708 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9709 pEnterUapsdReqParams->voDeliveryEnabled;
9710 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9711 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009712 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713
Yue Ma7f44bbe2013-04-12 11:47:39 -07009714 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9715 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009716
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 /* Store param pointer as passed in by caller */
9718 /* store Params pass it to WDI */
9719 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9720 pWdaParams->pWdaContext = pWDA;
9721 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009723 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 if(IS_WDI_STATUS_FAILURE(status))
9725 {
9726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9727 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9728 vos_mem_free(pWdaParams->wdaMsgParam) ;
9729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9730 vos_mem_free(pWdaParams) ;
9731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 return CONVERT_WDI2VOS_STATUS(status) ;
9733}
Jeff Johnson295189b2012-06-20 16:38:30 -07009734/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009735 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 * send Exit UAPSD RSP back to PE
9737 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009738void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009739{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009740
9741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9742 tWDA_CbContext *pWDA;
9743 tExitUapsdParams *pExitUapsdRspParams;
9744
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009746 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009747 if(NULL == pWdaParams)
9748 {
9749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009750 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009751 VOS_ASSERT(0);
9752 return;
9753 }
9754
9755 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9756 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9757
9758 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009759 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009760
9761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9762 vos_mem_free(pWdaParams) ;
9763
9764 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009765 return ;
9766}
Jeff Johnson295189b2012-06-20 16:38:30 -07009767/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009768 * FUNCTION: WDA_ExitUapsdReqCallback
9769 * Free memory and send Exit UAPSD RSP back to PE.
9770 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9771 */
9772void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9773{
9774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309775 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009776 tExitUapsdParams *pExitUapsdRspParams;
9777
9778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9779 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9780
9781 if(NULL == pWdaParams)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9784 "%s: pWdaParams received NULL", __func__);
9785 VOS_ASSERT(0);
9786 return;
9787 }
9788
9789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309790 if (NULL == pWDA)
9791 {
9792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9793 "%s:pWDA is NULL", __func__);
9794 VOS_ASSERT(0);
9795 return ;
9796 }
9797
Yue Ma7f44bbe2013-04-12 11:47:39 -07009798 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9799 pExitUapsdRspParams->status = wdiStatus;
9800
9801 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9802 {
9803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9804 vos_mem_free(pWdaParams);
9805 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9806 }
9807
9808 return;
9809}
9810/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 * FUNCTION: WDA_ProcessExitUapsdReq
9812 * Request to WDI to Exit UAPSD power state.
9813 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009814VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9815 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009816{
9817 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009818 tWDA_ReqParams *pWdaParams ;
9819 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9820 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9821 sizeof(WDI_ExitUapsdReqParamsType)) ;
9822
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009824 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009825
9826 if(NULL == wdiExitUapsdReqParams)
9827 {
9828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009829 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009830 VOS_ASSERT(0);
9831 return VOS_STATUS_E_NOMEM;
9832 }
9833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9834 if(NULL == pWdaParams)
9835 {
9836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009837 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009838 VOS_ASSERT(0);
9839 vos_mem_free(wdiExitUapsdReqParams);
9840 return VOS_STATUS_E_NOMEM;
9841 }
9842
9843 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9845 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009846
9847 /* Store param pointer as passed in by caller */
9848 /* store Params pass it to WDI */
9849 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9850 pWdaParams->pWdaContext = pWDA;
9851 pWdaParams->wdaMsgParam = pExitUapsdParams;
9852
Yue Ma7f44bbe2013-04-12 11:47:39 -07009853 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 if(IS_WDI_STATUS_FAILURE(status))
9855 {
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9857 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009858 vos_mem_free(pWdaParams->wdaMsgParam) ;
9859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9860 vos_mem_free(pWdaParams) ;
9861
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009863 return CONVERT_WDI2VOS_STATUS(status) ;
9864}
9865
Jeff Johnson295189b2012-06-20 16:38:30 -07009866/*
9867 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9868 *
9869 */
9870void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9871{
9872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009875 if(NULL == pWdaParams)
9876 {
9877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009878 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 VOS_ASSERT(0) ;
9880 return ;
9881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 if( pWdaParams != NULL )
9883 {
9884 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9885 {
9886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9887 }
9888 if( pWdaParams->wdaMsgParam != NULL )
9889 {
9890 vos_mem_free(pWdaParams->wdaMsgParam) ;
9891 }
9892 vos_mem_free(pWdaParams) ;
9893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 return ;
9895}
Jeff Johnson295189b2012-06-20 16:38:30 -07009896/*
9897 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9898 * Request to WDI to set the power save params at start.
9899 */
9900VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9901 tSirPowerSaveCfg *pPowerSaveCfg)
9902{
9903 WDI_Status status = WDI_STATUS_SUCCESS ;
9904 tHalCfg *tlvStruct = NULL ;
9905 tANI_U8 *tlvStructStart = NULL ;
9906 v_PVOID_t *configParam;
9907 tANI_U32 configParamSize;
9908 tANI_U32 *configDataValue;
9909 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9910 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9914 {
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009916 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009918 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 return VOS_STATUS_E_FAILURE;
9920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9922 if (NULL == wdiPowerSaveCfg)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009927 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 return VOS_STATUS_E_NOMEM;
9929 }
9930 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9931 if(NULL == pWdaParams)
9932 {
9933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 VOS_ASSERT(0);
9936 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009937 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 return VOS_STATUS_E_NOMEM;
9939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009940 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9941 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 if(NULL == configParam)
9943 {
9944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009945 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009946 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 vos_mem_free(pWdaParams);
9948 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009949 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 return VOS_STATUS_E_NOMEM;
9951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 vos_mem_set(configParam, configParamSize, 0);
9953 wdiPowerSaveCfg->pConfigBuffer = configParam;
9954 tlvStruct = (tHalCfg *)configParam;
9955 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9957 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9958 tlvStruct->length = sizeof(tANI_U32);
9959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9960 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9962 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9964 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9965 tlvStruct->length = sizeof(tANI_U32);
9966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9967 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9969 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9971 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9972 tlvStruct->length = sizeof(tANI_U32);
9973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9974 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9976 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9978 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9979 tlvStruct->length = sizeof(tANI_U32);
9980 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9981 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9983 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9985 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9986 tlvStruct->length = sizeof(tANI_U32);
9987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9988 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9990 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9992 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9993 tlvStruct->length = sizeof(tANI_U32);
9994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9995 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9997 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9999 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10000 tlvStruct->length = sizeof(tANI_U32);
10001 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10002 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10004 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10006 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10007 tlvStruct->length = sizeof(tANI_U32);
10008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10009 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10010 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10011 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10013 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10014 tlvStruct->length = sizeof(tANI_U32);
10015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10016 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10017 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10018 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10020 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10021 tlvStruct->length = sizeof(tANI_U32);
10022 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10023 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10025 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10027 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10028 tlvStruct->length = sizeof(tANI_U32);
10029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10030 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10032 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010034 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 /* store Params pass it to WDI */
10036 pWdaParams->wdaMsgParam = configParam;
10037 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10038 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10040 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 if(IS_WDI_STATUS_FAILURE(status))
10042 {
10043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10044 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10045 vos_mem_free(pWdaParams->wdaMsgParam);
10046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10047 vos_mem_free(pWdaParams);
10048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010049 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 return CONVERT_WDI2VOS_STATUS(status);
10051}
Jeff Johnson295189b2012-06-20 16:38:30 -070010052/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010053 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 *
10055 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010056void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010057{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10059
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010061 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010062
10063 if(NULL == pWdaParams)
10064 {
10065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10066 "%s: pWdaParams received NULL", __func__);
10067 VOS_ASSERT(0);
10068 return ;
10069 }
10070
10071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 vos_mem_free(pWdaParams);
10073
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 return ;
10075}
Jeff Johnson295189b2012-06-20 16:38:30 -070010076/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10078 * Free memory.
10079 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10080 */
10081void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10082{
10083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10084
10085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10086 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10087
10088 if(NULL == pWdaParams)
10089 {
10090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10091 "%s: pWdaParams received NULL", __func__);
10092 VOS_ASSERT(0);
10093 return;
10094 }
10095
10096 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10097 {
10098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10099 vos_mem_free(pWdaParams);
10100 }
10101
10102 return;
10103}
10104/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 * FUNCTION: WDA_SetUapsdAcParamsReq
10106 * Request to WDI to set the UAPSD params for an ac (sta mode).
10107 */
10108VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10109 tUapsdInfo *pUapsdInfo)
10110{
10111 WDI_Status status = WDI_STATUS_SUCCESS;
10112 tWDA_CbContext *pWDA = NULL ;
10113 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10114 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10115 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 if(NULL == wdiUapsdParams)
10120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 VOS_ASSERT(0);
10124 return VOS_STATUS_E_NOMEM;
10125 }
10126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10127 if(NULL == pWdaParams)
10128 {
10129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 VOS_ASSERT(0);
10132 vos_mem_free(wdiUapsdParams);
10133 return VOS_STATUS_E_NOMEM;
10134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10136 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10137 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10138 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10139 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10140 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010141 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10142 wdiUapsdParams->pUserData = pWdaParams;
10143
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 pWdaParams->pWdaContext = pWDA;
10146 /* Store param pointer as passed in by caller */
10147 pWdaParams->wdaMsgParam = pUapsdInfo;
10148 /* store Params pass it to WDI */
10149 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010151 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010153 if(IS_WDI_STATUS_FAILURE(status))
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10156 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10158 vos_mem_free(pWdaParams);
10159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010160 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10161 return VOS_STATUS_SUCCESS;
10162 else
10163 return VOS_STATUS_E_FAILURE;
10164
Jeff Johnson295189b2012-06-20 16:38:30 -070010165}
10166/*
10167 * FUNCTION: WDA_ClearUapsdAcParamsReq
10168 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10169 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10170 * and again enter the UPASD with the modified params. Hence the disable
10171 * function was kept empty.
10172 *
10173 */
10174VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10175{
10176 /* do nothing */
10177 return VOS_STATUS_SUCCESS;
10178}
Jeff Johnson295189b2012-06-20 16:38:30 -070010179/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010180 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010181 *
10182 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010183void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010184{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10186
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010188 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010189
10190 if(NULL == pWdaParams)
10191 {
10192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010193 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010194 VOS_ASSERT(0) ;
10195 return ;
10196 }
10197
10198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10199 vos_mem_free(pWdaParams->wdaMsgParam);
10200 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010201
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 //print a msg, nothing else to do
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010204 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 return ;
10206}
Jeff Johnson295189b2012-06-20 16:38:30 -070010207/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010208 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10209 * Free memory.
10210 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10211 */
10212void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10213{
10214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10215
10216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10217 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10218
10219 if(NULL == pWdaParams)
10220 {
10221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10222 "%s: pWdaParams received NULL", __func__);
10223 VOS_ASSERT(0);
10224 return;
10225 }
10226
10227 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10228 {
10229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10230 vos_mem_free(pWdaParams->wdaMsgParam);
10231 vos_mem_free(pWdaParams);
10232 }
10233
10234 return;
10235}
10236/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 * FUNCTION: WDA_UpdateUapsdParamsReq
10238 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10239 */
10240VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10241 tUpdateUapsdParams* pUpdateUapsdInfo)
10242{
10243 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010244 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10246 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10247 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010248 tWDA_ReqParams *pWdaParams = NULL;
10249
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010251 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 if(NULL == wdiUpdateUapsdParams)
10253 {
10254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 VOS_ASSERT(0);
10257 return VOS_STATUS_E_NOMEM;
10258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10260 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10261 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010262 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10263 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010264
10265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10266 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 {
10268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010271 vos_mem_free(pUpdateUapsdInfo);
10272 vos_mem_free(wdiUpdateUapsdParams);
10273 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010276 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010278 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10279 pWdaParams->pWdaContext = pWDA;
10280
Jeff Johnson43971f52012-07-17 12:26:56 -070010281 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010282 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010283 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284
Jeff Johnson43971f52012-07-17 12:26:56 -070010285 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 {
10287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10288 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010289 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10291 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010292 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010294 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010295}
Jeff Johnson295189b2012-06-20 16:38:30 -070010296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010297 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 *
10299 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010300void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010301{
10302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 if(WDI_STATUS_SUCCESS != wdiStatus)
10306 {
10307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010308 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 if(NULL == pWdaParams)
10311 {
10312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010313 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 VOS_ASSERT(0) ;
10315 return ;
10316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10318 vos_mem_free(pWdaParams->wdaMsgParam);
10319 vos_mem_free(pWdaParams);
10320 return ;
10321}
Jeff Johnson295189b2012-06-20 16:38:30 -070010322/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010323 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10324 * Free memory.
10325 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10326 */
10327void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10328{
10329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10330
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10332 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10333
10334 if(NULL == pWdaParams)
10335 {
10336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10337 "%s: pWdaParams received NULL", __func__);
10338 VOS_ASSERT(0);
10339 return;
10340 }
10341
10342 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10343 {
10344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10345 vos_mem_free(pWdaParams->wdaMsgParam);
10346 vos_mem_free(pWdaParams);
10347 }
10348
10349 return;
10350}
10351/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10353 *
10354 */
10355VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10356 tSirWlanSetRxpFilters *pWlanSuspendParam)
10357{
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010359 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010360 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010362 /* Sanity Check
10363 * This is very unlikely and add assert to collect more info next time */
10364 if(NULL == pWlanSuspendParam)
10365 {
10366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10367 "%s: pWlanSuspendParam received NULL", __func__);
10368 VOS_ASSERT(0) ;
10369 return VOS_STATUS_E_FAULT;
10370 }
10371 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10372 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010374 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 if(NULL == wdiRxpFilterParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 VOS_ASSERT(0);
10380 vos_mem_free(pWlanSuspendParam);
10381 return VOS_STATUS_E_NOMEM;
10382 }
10383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10384 if(NULL == pWdaParams)
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 VOS_ASSERT(0);
10389 vos_mem_free(wdiRxpFilterParams);
10390 vos_mem_free(pWlanSuspendParam);
10391 return VOS_STATUS_E_NOMEM;
10392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10394 pWlanSuspendParam->setMcstBcstFilter;
10395 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10396 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10397
Yue Ma7f44bbe2013-04-12 11:47:39 -070010398 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10399 wdiRxpFilterParams->pUserData = pWdaParams;
10400
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 pWdaParams->pWdaContext = pWDA;
10402 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10403 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010404 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010405 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010407 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 {
10409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10410 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010411 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10413 vos_mem_free(pWdaParams->wdaMsgParam);
10414 vos_mem_free(pWdaParams);
10415 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010416 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010418
10419/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010420 * FUNCTION: WDA_ProcessGetFrameLogReq
10421 * Request to WDI to get the Frame Log.
10422 */
10423VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10424 tAniGetFrameLogReq *pGetFrameLog)
10425{
10426 VOS_STATUS status = VOS_STATUS_SUCCESS;
10427 WDI_Status wstatus;
10428 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10429 tWDA_ReqParams *pWdaParams ;
10430
10431 /* Sanity Check*/
10432 if(NULL == pGetFrameLog)
10433 {
10434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010435 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010436 VOS_ASSERT(0) ;
10437 return VOS_STATUS_E_FAULT;
10438 }
10439
10440 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10441 sizeof(WDI_GetFrameLogReqInfoType));
10442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10443 "------> %s " ,__func__);
10444
10445 if(NULL == wdiGetFrameLogInfo)
10446 {
10447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10448 "%s: VOS MEM Alloc Failure", __func__);
10449 VOS_ASSERT(0);
10450 vos_mem_free(pGetFrameLog);
10451 return VOS_STATUS_E_NOMEM;
10452 }
10453
10454 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10455 if(NULL == pWdaParams)
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10458 "%s: VOS MEM Alloc Failure", __func__);
10459 VOS_ASSERT(0);
10460 vos_mem_free(wdiGetFrameLogInfo);
10461 vos_mem_free(pGetFrameLog);
10462 return VOS_STATUS_E_NOMEM;
10463 }
10464
10465 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10466
10467 pWdaParams->pWdaContext = pWDA;
10468 pWdaParams->wdaMsgParam = pGetFrameLog;
10469 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10470
10471 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10472 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10473 pWdaParams);
10474 if(IS_WDI_STATUS_FAILURE(wstatus))
10475 {
10476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10477 "Failure in get frame log REQ WDI API, free all the memory" );
10478 status = CONVERT_WDI2VOS_STATUS(wstatus);
10479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10480 vos_mem_free(pWdaParams->wdaMsgParam);
10481 vos_mem_free(pWdaParams);
10482 }
10483 return status;
10484}
10485
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010486
10487/*
10488 * FUNCTION: WDA_FatalEventLogsRspCallback
10489 * recieves Flush Logs response from FW
10490 */
10491
10492void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10493 void* pUserData)
10494{
10495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10496
10497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10498 "<------ %s,wdiStatus:%d " ,
10499 __func__, wdiRsp->wdiStatus);
10500 if(NULL == pWdaParams)
10501 {
10502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10503 "%s: pWdaParams received NULL", __func__);
10504 VOS_ASSERT(0);
10505 return ;
10506 }
10507
10508 if(NULL == pWdaParams->wdaMsgParam)
10509 {
10510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10511 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10512 VOS_ASSERT(0);
10513 vos_mem_free(pWdaParams);
10514 return ;
10515 }
10516
10517 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10518 {
10519 /*
10520 * If it is failure, it means JOb is already posted by FW
10521 * for logging, so for failure scenario also we will get the
10522 * done indication
10523 */
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10525 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10526 __func__, wdiRsp->wdiStatus);
10527 }
10528
10529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10530 vos_mem_free(pWdaParams->wdaMsgParam);
10531 vos_mem_free(pWdaParams);
10532
10533 return;
10534
10535}
10536
10537/*
10538 * FUNCTION: WDA_ProcessFatalEventLogsReq
10539 * Request to WDI to send the fatal Event Logs Req.
10540 */
10541
10542VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10543 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10544{
10545 VOS_STATUS status = VOS_STATUS_SUCCESS;
10546 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10547 tWDA_ReqParams *pWdaParams ;
10548 WDI_Status wstatus;
10549
10550
10551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10552 "------> %s " ,__func__);
10553 if (NULL == pFatalEventLogsReqParam)
10554 {
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10556 "%s: pMgmtLoggingInitParam received NULL", __func__);
10557 VOS_ASSERT(0) ;
10558 return VOS_STATUS_E_FAULT;
10559 }
10560 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10561 sizeof(WDI_FatalEventLogsReqInfoType));
10562 if(NULL == wdiFatalEventLogsReqInfo)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10565 "%s: VOS MEM Alloc Failure", __func__);
10566 VOS_ASSERT(0);
10567 vos_mem_free(pFatalEventLogsReqParam);
10568 return VOS_STATUS_E_NOMEM;
10569 }
10570 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10571 if(NULL == pWdaParams)
10572 {
10573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10574 "%s: VOS MEM Alloc Failure", __func__);
10575 VOS_ASSERT(0);
10576 vos_mem_free(wdiFatalEventLogsReqInfo);
10577 vos_mem_free(pFatalEventLogsReqParam);
10578 return VOS_STATUS_E_NOMEM;
10579 }
10580 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10581 pWdaParams->pWdaContext = pWDA;
10582 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10583 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10584
10585 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10586 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10587 pWdaParams);
10588 if(IS_WDI_STATUS_FAILURE(wstatus))
10589 {
10590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10591 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10592 status = CONVERT_WDI2VOS_STATUS(wstatus);
10593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10594 vos_mem_free(pWdaParams->wdaMsgParam);
10595 vos_mem_free(pWdaParams);
10596 }
10597
10598 return status;
10599
10600}
10601
Siddharth Bhal64246172015-02-27 01:04:37 +053010602/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010603 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010604 *
10605 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010606VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10607 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010608{
10609 VOS_STATUS status = VOS_STATUS_SUCCESS;
10610 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010611 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010612 tWDA_ReqParams *pWdaParams ;
10613
10614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10615 "------> %s " ,__func__);
10616
10617 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010618 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010621 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010622 VOS_ASSERT(0) ;
10623 return VOS_STATUS_E_FAULT;
10624 }
10625
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010626 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10627 sizeof(WDI_FWLoggingInitReqInfoType));
10628 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010629 {
10630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10631 "%s: VOS MEM Alloc Failure", __func__);
10632 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010633 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010634 return VOS_STATUS_E_NOMEM;
10635 }
10636
10637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10638 if(NULL == pWdaParams)
10639 {
10640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10641 "%s: VOS MEM Alloc Failure", __func__);
10642 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010643 vos_mem_free(wdiFWLoggingInitInfo);
10644 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010645 return VOS_STATUS_E_NOMEM;
10646 }
10647
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010648 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10649 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10650 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10651 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10652 wdiFWLoggingInitInfo->continuousFrameLogging =
10653 pFWLoggingInitParam->continuousFrameLogging;
10654 wdiFWLoggingInitInfo->minLogBufferSize=
10655 pFWLoggingInitParam->minLogBufferSize;
10656 wdiFWLoggingInitInfo->maxLogBufferSize=
10657 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010658
10659 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010660 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10661 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010662
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010663 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10664 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010665 pWdaParams);
10666 if(IS_WDI_STATUS_FAILURE(wstatus))
10667 {
10668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10669 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10670 status = CONVERT_WDI2VOS_STATUS(wstatus);
10671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10672 vos_mem_free(pWdaParams->wdaMsgParam);
10673 vos_mem_free(pWdaParams);
10674 }
10675
10676 return status;
10677}
10678
Jeff Johnson295189b2012-06-20 16:38:30 -070010679/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010680 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10681 *
10682 */
10683VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10684 tSirRssiMonitorReq *pRssiMonitorReqParam)
10685{
10686 VOS_STATUS status = VOS_STATUS_SUCCESS;
10687 WDI_Status wstatus;
10688 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10689 tWDA_ReqParams *pWdaParams ;
10690
10691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10692 "------> %s " ,__func__);
10693
10694 /* Sanity Check*/
10695 if(NULL == pRssiMonitorReqParam)
10696 {
10697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10698 "%s: pRssiMonitorReqParam received NULL", __func__);
10699 VOS_ASSERT(0) ;
10700 return VOS_STATUS_E_FAULT;
10701 }
10702
10703 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10704 sizeof(WDI_RssiMonitorReqInfoType));
10705 if(NULL == wdiRssiMonitorInfo)
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10708 "%s: VOS MEM Alloc Failure", __func__);
10709 VOS_ASSERT(0);
10710 vos_mem_free(pRssiMonitorReqParam);
10711 return VOS_STATUS_E_NOMEM;
10712 }
10713
10714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10715 if(NULL == pWdaParams)
10716 {
10717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10718 "%s: VOS MEM Alloc Failure", __func__);
10719 VOS_ASSERT(0);
10720 vos_mem_free(wdiRssiMonitorInfo);
10721 vos_mem_free(pRssiMonitorReqParam);
10722 return VOS_STATUS_E_NOMEM;
10723 }
10724
10725 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10726 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10727 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10728 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10729 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10730
10731 pWdaParams->pWdaContext = pWDA;
10732 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10733 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10734
10735 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10736 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10737 pWdaParams);
10738 if(IS_WDI_STATUS_FAILURE(wstatus))
10739 {
10740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10741 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10742 status = CONVERT_WDI2VOS_STATUS(wstatus);
10743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10744 vos_mem_free(pWdaParams->wdaMsgParam);
10745 vos_mem_free(pWdaParams);
10746 }
10747
10748 return status;
10749}
10750
10751/*
10752 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10753 *
10754 */
10755VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10756 tSirRssiMonitorReq *pRssiMonitorReqParam)
10757{
10758 VOS_STATUS status = VOS_STATUS_SUCCESS;
10759 WDI_Status wstatus;
10760 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10761 tWDA_ReqParams *pWdaParams ;
10762
10763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10764 "------> %s " ,__func__);
10765
10766 /* Sanity Check*/
10767 if(NULL == pRssiMonitorReqParam)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10770 "%s: pRssiMonitorReqParam received NULL", __func__);
10771 VOS_ASSERT(0) ;
10772 return VOS_STATUS_E_FAULT;
10773 }
10774
10775 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10776 sizeof(WDI_RssiMonitorReqInfoType));
10777 if(NULL == wdiRssiMonitorInfo)
10778 {
10779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10780 "%s: VOS MEM Alloc Failure", __func__);
10781 VOS_ASSERT(0);
10782 vos_mem_free(pRssiMonitorReqParam);
10783 return VOS_STATUS_E_NOMEM;
10784 }
10785
10786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10787 if(NULL == pWdaParams)
10788 {
10789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10790 "%s: VOS MEM Alloc Failure", __func__);
10791 VOS_ASSERT(0);
10792 vos_mem_free(wdiRssiMonitorInfo);
10793 vos_mem_free(pRssiMonitorReqParam);
10794 return VOS_STATUS_E_NOMEM;
10795 }
10796
10797 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10798 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10799 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10800
10801 pWdaParams->pWdaContext = pWDA;
10802 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10803 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10804
10805 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10806 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10807 pWdaParams);
10808 if(IS_WDI_STATUS_FAILURE(wstatus))
10809 {
10810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10811 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10812 status = CONVERT_WDI2VOS_STATUS(wstatus);
10813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10814 vos_mem_free(pWdaParams->wdaMsgParam);
10815 vos_mem_free(pWdaParams);
10816 }
10817
10818 return status;
10819}
10820
10821
10822/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 * FUNCTION: WDA_WdiIndicationCallback
10824 *
10825 */
10826void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10827 void* pUserData)
10828{
10829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010831}
Jeff Johnson295189b2012-06-20 16:38:30 -070010832/*
10833 * FUNCTION: WDA_ProcessWlanSuspendInd
10834 *
10835 */
10836VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10837 tSirWlanSuspendParam *pWlanSuspendParam)
10838{
10839 WDI_Status wdiStatus;
10840 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10844 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10845 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10846 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10849 if(WDI_STATUS_PENDING == wdiStatus)
10850 {
10851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010852 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010853 }
10854 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010857 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 vos_mem_free(pWlanSuspendParam);
10860 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10861}
10862
Chet Lanctot186b5732013-03-18 10:26:30 -070010863#ifdef WLAN_FEATURE_11W
10864/*
10865 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10866 *
10867 */
10868VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10869 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10870{
10871 WDI_Status wdiStatus;
10872 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10874 "------> %s ", __func__);
10875
10876 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10877 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10878 sizeof(tSirMacAddr));
10879
10880 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10881 wdiExclUnencryptParams.pUserData = pWDA;
10882
10883 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10884 if(WDI_STATUS_PENDING == wdiStatus)
10885 {
10886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10887 "Pending received for %s:%d ", __func__, __LINE__ );
10888 }
10889 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10890 {
10891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10892 "Failure in %s:%d ", __func__, __LINE__ );
10893 }
10894 vos_mem_free(pExclUnencryptParam);
10895 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10896}
10897#endif
10898
Jeff Johnson295189b2012-06-20 16:38:30 -070010899/*
10900 * FUNCTION: WDA_ProcessWlanResumeCallback
10901 *
10902 */
10903void WDA_ProcessWlanResumeCallback(
10904 WDI_SuspendResumeRspParamsType *resumeRspParams,
10905 void* pUserData)
10906{
10907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010909 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 if(NULL == pWdaParams)
10911 {
10912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010913 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 VOS_ASSERT(0) ;
10915 return ;
10916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10918 {
10919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010920 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10923 vos_mem_free(pWdaParams->wdaMsgParam);
10924 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 return ;
10926}
Jeff Johnson295189b2012-06-20 16:38:30 -070010927/*
10928 * FUNCTION: WDA_ProcessWlanResumeReq
10929 *
10930 */
10931VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10932 tSirWlanResumeParam *pWlanResumeParam)
10933{
10934 WDI_Status wdiStatus;
10935 WDI_ResumeParamsType *wdiResumeParams =
10936 (WDI_ResumeParamsType *)vos_mem_malloc(
10937 sizeof(WDI_ResumeParamsType) ) ;
10938 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 if(NULL == wdiResumeParams)
10942 {
10943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 VOS_ASSERT(0);
10946 return VOS_STATUS_E_NOMEM;
10947 }
10948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10949 if(NULL == pWdaParams)
10950 {
10951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 VOS_ASSERT(0);
10954 vos_mem_free(wdiResumeParams);
10955 return VOS_STATUS_E_NOMEM;
10956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010957 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10958 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010960 wdiResumeParams->wdiReqStatusCB = NULL;
10961 pWdaParams->wdaMsgParam = pWlanResumeParam;
10962 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10963 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10965 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10966 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10968 {
10969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10970 "Failure in Host Resume REQ WDI API, free all the memory " );
10971 VOS_ASSERT(0);
10972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10973 vos_mem_free(pWdaParams->wdaMsgParam);
10974 vos_mem_free(pWdaParams);
10975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10977}
10978
Jeff Johnson295189b2012-06-20 16:38:30 -070010979/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010980 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 *
10982 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010983void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010984{
10985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 if(NULL == pWdaParams)
10989 {
10990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010992 VOS_ASSERT(0) ;
10993 return ;
10994 }
10995
10996 vos_mem_free(pWdaParams->wdaMsgParam) ;
10997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10998 vos_mem_free(pWdaParams) ;
10999 /*
11000 * No respone required for SetBeaconFilter req so just free the request
11001 * param here
11002 */
11003
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 return ;
11005}
Jeff Johnson295189b2012-06-20 16:38:30 -070011006/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011007 * FUNCTION: WDA_SetBeaconFilterReqCallback
11008 * Free memory.
11009 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11010 */
11011void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11012{
11013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11014
11015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11016 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11017
11018 if(NULL == pWdaParams)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11021 "%s: pWdaParams received NULL", __func__);
11022 VOS_ASSERT(0);
11023 return;
11024 }
11025
11026 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11027 {
11028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11029 vos_mem_free(pWdaParams->wdaMsgParam);
11030 vos_mem_free(pWdaParams);
11031 }
11032
11033 return;
11034}
11035/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 * FUNCTION: WDA_SetBeaconFilterReq
11037 * Request to WDI to send the beacon filtering related information.
11038 */
11039VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11040 tBeaconFilterMsg* pBeaconFilterInfo)
11041{
11042 WDI_Status status = WDI_STATUS_SUCCESS;
11043 tANI_U8 *dstPtr, *srcPtr;
11044 tANI_U8 filterLength;
11045 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11046 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11047 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11048 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011050 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 if(NULL == wdiBeaconFilterInfo)
11052 {
11053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 VOS_ASSERT(0);
11056 return VOS_STATUS_E_NOMEM;
11057 }
11058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11059 if(NULL == pWdaParams)
11060 {
11061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 VOS_ASSERT(0);
11064 vos_mem_free(wdiBeaconFilterInfo);
11065 return VOS_STATUS_E_NOMEM;
11066 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11068 pBeaconFilterInfo->beaconInterval;
11069 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11070 pBeaconFilterInfo->capabilityInfo;
11071 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11072 pBeaconFilterInfo->capabilityMask;
11073 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011074
11075 //Fill the BssIdx
11076 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11077
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 //Fill structure with info contained in the beaconFilterTable
11079 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11080 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11081 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11082 if(WDI_BEACON_FILTER_LEN < filterLength)
11083 {
11084 filterLength = WDI_BEACON_FILTER_LEN;
11085 }
11086 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011087 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11088 wdiBeaconFilterInfo->pUserData = pWdaParams;
11089
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 /* Store param pointer as passed in by caller */
11091 /* store Params pass it to WDI */
11092 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11093 pWdaParams->pWdaContext = pWDA;
11094 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11095
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011097 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 if(IS_WDI_STATUS_FAILURE(status))
11099 {
11100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11101 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11102 vos_mem_free(pWdaParams->wdaMsgParam) ;
11103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11104 vos_mem_free(pWdaParams) ;
11105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 return CONVERT_WDI2VOS_STATUS(status) ;
11107}
Jeff Johnson295189b2012-06-20 16:38:30 -070011108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011110 *
11111 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011112void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011113{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11115
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011117 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011118
11119 if(NULL == pWdaParams)
11120 {
11121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011122 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011123 VOS_ASSERT(0) ;
11124 return ;
11125 }
11126
11127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11128 vos_mem_free(pWdaParams->wdaMsgParam);
11129 vos_mem_free(pWdaParams);
11130
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 //print a msg, nothing else to do
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011133 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 return ;
11135}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011136/*
11137 * FUNCTION: WDA_RemBeaconFilterReqCallback
11138 * Free memory.
11139 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11140 */
11141void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11142{
11143 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11144
11145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11146 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11147
11148 if(NULL == pWdaParams)
11149 {
11150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11151 "%s: pWdaParams received NULL", __func__);
11152 VOS_ASSERT(0);
11153 return;
11154 }
11155
11156 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11157 {
11158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11159 vos_mem_free(pWdaParams->wdaMsgParam);
11160 vos_mem_free(pWdaParams);
11161 }
11162
11163 return;
11164}
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 // TODO: PE does not have this feature for now implemented,
11166 // but the support for removing beacon filter exists between
11167 // HAL and FW. This function can be called whenever PE defines
11168 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011169/*
11170 * FUNCTION: WDA_RemBeaconFilterReq
11171 * Request to WDI to send the removal of beacon filtering related information.
11172 */
11173VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11174 tRemBeaconFilterMsg* pBeaconFilterInfo)
11175{
11176 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011177 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011178 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11179 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11180 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011181 tWDA_ReqParams *pWdaParams ;
11182
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011184 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 if(NULL == wdiBeaconFilterInfo)
11186 {
11187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 VOS_ASSERT(0);
11190 return VOS_STATUS_E_NOMEM;
11191 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11193 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 {
11195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011198 vos_mem_free(wdiBeaconFilterInfo);
11199 vos_mem_free(pBeaconFilterInfo);
11200 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011202
11203 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11204 pBeaconFilterInfo->ucIeCount;
11205 //Fill structure with info contained in the ucRemIeId
11206 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11207 pBeaconFilterInfo->ucRemIeId,
11208 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11209 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11210 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011211
11212 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011213 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011215 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11216
11217 pWdaParams->pWdaContext = pWDA;
11218
Jeff Johnson43971f52012-07-17 12:26:56 -070011219 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011220 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011221 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 {
11223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11224 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011225 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11227 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011228 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011230 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011231}
Jeff Johnson295189b2012-06-20 16:38:30 -070011232/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011233 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011234 *
11235 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011236void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011237{
11238 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 if(NULL == pWdaParams)
11242 {
11243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 VOS_ASSERT(0) ;
11246 return ;
11247 }
11248
11249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11250 vos_mem_free(pWdaParams) ;
11251
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 return ;
11253}
Jeff Johnson295189b2012-06-20 16:38:30 -070011254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011255 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11256 * Free memory.
11257 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11258 */
11259void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11260{
11261 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11262
11263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11264 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11265
11266 if(NULL == pWdaParams)
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11269 "%s: pWdaParams received NULL", __func__);
11270 VOS_ASSERT(0);
11271 return;
11272 }
11273
11274 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11275 {
11276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11277 vos_mem_free(pWdaParams);
11278 }
11279
11280 return;
11281}
11282/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 * FUNCTION: WDA_SetRSSIThresholdsReq
11284 * Request to WDI to set the RSSI thresholds (sta mode).
11285 */
11286VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11287{
11288 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011289 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011290 tWDA_CbContext *pWDA = NULL ;
11291 v_PVOID_t pVosContext = NULL;
11292 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11293 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11294 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11295 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011297 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 if(NULL == wdiRSSIThresholdsInfo)
11299 {
11300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011301 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 VOS_ASSERT(0);
11303 return VOS_STATUS_E_NOMEM;
11304 }
11305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11306 if(NULL == pWdaParams)
11307 {
11308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 VOS_ASSERT(0);
11311 vos_mem_free(wdiRSSIThresholdsInfo);
11312 return VOS_STATUS_E_NOMEM;
11313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011315 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11316 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11317 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11319 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11320 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11322 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11323 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011324 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11325 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11327 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11328
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 /* Store param pointer as passed in by caller */
11330 /* store Params pass it to WDI */
11331 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11332 pWdaParams->pWdaContext = pWDA;
11333 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011334 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011335 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011336 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 {
11338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11339 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011340 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11342 vos_mem_free(pWdaParams) ;
11343 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011344 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011345
11346}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011347/*
Yue Madb90ac12013-04-04 13:39:13 -070011348 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 *
11350 */
Yue Madb90ac12013-04-04 13:39:13 -070011351void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011352{
11353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11354
11355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011356 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011357 if(NULL == pWdaParams)
11358 {
11359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011360 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011361 VOS_ASSERT(0) ;
11362 return ;
11363 }
11364
11365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11366 vos_mem_free(pWdaParams->wdaMsgParam);
11367 vos_mem_free(pWdaParams) ;
11368
11369 //print a msg, nothing else to do
11370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011371 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 return ;
11373}
Jeff Johnson295189b2012-06-20 16:38:30 -070011374/*
Yue Madb90ac12013-04-04 13:39:13 -070011375 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011376 * Free memory.
11377 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011378 */
11379void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11380{
11381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11382
11383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11384 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11385
11386 if(NULL == pWdaParams)
11387 {
11388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11389 "%s: Invalid pWdaParams pointer", __func__);
11390 VOS_ASSERT(0);
11391 return;
11392 }
11393
11394 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11395 {
11396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11397 vos_mem_free(pWdaParams->wdaMsgParam);
11398 vos_mem_free(pWdaParams);
11399 }
11400
11401 return;
11402}
11403/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 * FUNCTION: WDA_ProcessHostOffloadReq
11405 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11406 * to broadcast traffic (sta mode).
11407 */
11408VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11409 tSirHostOffloadReq *pHostOffloadParams)
11410{
11411 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011412 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11414 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11415 sizeof(WDI_HostOffloadReqParamsType)) ;
11416 tWDA_ReqParams *pWdaParams ;
11417
11418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011419 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011420
11421 if(NULL == wdiHostOffloadInfo)
11422 {
11423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011424 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 VOS_ASSERT(0);
11426 return VOS_STATUS_E_NOMEM;
11427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11429 if(NULL == pWdaParams)
11430 {
11431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 VOS_ASSERT(0);
11434 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011435 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 return VOS_STATUS_E_NOMEM;
11437 }
11438
11439 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11440 pHostOffloadParams->offloadType;
11441 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11442 pHostOffloadParams->enableOrDisable;
11443
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011444 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11445 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11446
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11448 {
11449 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11450 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11451 pHostOffloadParams->params.hostIpv4Addr,
11452 4);
11453 break;
11454 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11455 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11456 pHostOffloadParams->params.hostIpv6Addr,
11457 16);
11458 break;
11459 case SIR_IPV6_NS_OFFLOAD:
11460 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11461 pHostOffloadParams->params.hostIpv6Addr,
11462 16);
11463
11464#ifdef WLAN_NS_OFFLOAD
11465 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11466 {
11467 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11468 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11469 16);
11470 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11471 }
11472 else
11473 {
11474 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11475 }
11476
11477 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11478 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11479 16);
11480 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11481 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11482 6);
11483
11484 //Only two are supported so let's go through them without a loop
11485 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11486 {
11487 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11488 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11489 16);
11490 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11491 }
11492 else
11493 {
11494 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11495 }
11496
11497 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11498 {
11499 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11500 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11501 16);
11502 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11503 }
11504 else
11505 {
11506 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11507 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011508 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11509 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 break;
11511#endif //WLAN_NS_OFFLOAD
11512 default:
11513 {
11514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11515 "No Handling for Offload Type %x in WDA "
11516 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11517 //WDA_VOS_ASSERT(0) ;
11518 }
11519 }
Yue Madb90ac12013-04-04 13:39:13 -070011520 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11521 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011522
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011524 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 /* store Params pass it to WDI */
11526 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11527 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011528
Jeff Johnson295189b2012-06-20 16:38:30 -070011529
Jeff Johnson43971f52012-07-17 12:26:56 -070011530 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011531 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011532
Jeff Johnson43971f52012-07-17 12:26:56 -070011533 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 {
11535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011536 "Failure in host offload REQ WDI API, free all the memory %d",
11537 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011538 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11540 vos_mem_free(pWdaParams->wdaMsgParam);
11541 vos_mem_free(pWdaParams) ;
11542 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011543 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011544
11545}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011546/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011547 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 *
11549 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011550void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011551{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11553
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011555 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011556
11557 if(NULL == pWdaParams)
11558 {
11559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011560 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011561 VOS_ASSERT(0) ;
11562 return ;
11563 }
11564
11565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11566 vos_mem_free(pWdaParams->wdaMsgParam);
11567 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011568
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 //print a msg, nothing else to do
11570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011571 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 return ;
11573}
Jeff Johnson295189b2012-06-20 16:38:30 -070011574/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011575 * FUNCTION: WDA_KeepAliveReqCallback
11576 * Free memory.
11577 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11578 */
11579void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11580{
11581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11582
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11585
11586 if(NULL == pWdaParams)
11587 {
11588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11589 "%s: pWdaParams received NULL", __func__);
11590 VOS_ASSERT(0);
11591 return;
11592 }
11593
11594 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11595 {
11596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11597 vos_mem_free(pWdaParams->wdaMsgParam);
11598 vos_mem_free(pWdaParams);
11599 }
11600
11601 return;
11602}
11603/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 * FUNCTION: WDA_ProcessKeepAliveReq
11605 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11606 * wakeup due to broadcast traffic (sta mode).
11607 */
11608VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11609 tSirKeepAliveReq *pKeepAliveParams)
11610{
11611 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011612 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11614 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11615 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011616 tWDA_ReqParams *pWdaParams;
11617
Jeff Johnson295189b2012-06-20 16:38:30 -070011618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011619 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 if(NULL == wdiKeepAliveInfo)
11621 {
11622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011625 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 return VOS_STATUS_E_NOMEM;
11627 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011628
11629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11630 if(NULL == pWdaParams)
11631 {
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011633 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011634 VOS_ASSERT(0);
11635 vos_mem_free(wdiKeepAliveInfo);
11636 vos_mem_free(pKeepAliveParams);
11637 return VOS_STATUS_E_NOMEM;
11638 }
11639
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11641 pKeepAliveParams->packetType;
11642 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11643 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011644
11645 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11646 pKeepAliveParams->bssId,
11647 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011648
11649 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11650 {
11651 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11652 pKeepAliveParams->hostIpv4Addr,
11653 SIR_IPV4_ADDR_LEN);
11654 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11655 pKeepAliveParams->destIpv4Addr,
11656 SIR_IPV4_ADDR_LEN);
11657 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11658 pKeepAliveParams->destMacAddr,
11659 SIR_MAC_ADDR_LEN);
11660 }
11661 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11662 {
11663 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11664 SIR_IPV4_ADDR_LEN,
11665 0);
11666 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11667 SIR_IPV4_ADDR_LEN,
11668 0);
11669 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11670 SIR_MAC_ADDR_LEN,
11671 0);
11672 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011673 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11674 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011675
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011677 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011679 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11680 pWdaParams->pWdaContext = pWDA;
11681
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11683 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11684 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11686 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11689 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11690 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11691 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11693 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11694 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11695 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11696 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11697 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11698 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11699 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11701 "TimePeriod %d PacketType %d",
11702 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11703 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011704 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011705 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011706
Jeff Johnson43971f52012-07-17 12:26:56 -070011707 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 {
11709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11710 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011711 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11713 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011714 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011715 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011716 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011717
11718}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011719/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011720 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 *
11722 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011723void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011724 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11725 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011726{
11727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 if(NULL == pWdaParams)
11731 {
11732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011733 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011734 VOS_ASSERT(0) ;
11735 return ;
11736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11738 vos_mem_free(pWdaParams->wdaMsgParam);
11739 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 return ;
11741}
Jeff Johnson295189b2012-06-20 16:38:30 -070011742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011743 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11744 * Free memory.
11745 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11746 */
11747void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11748{
11749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11750
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11752 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11753
11754 if(NULL == pWdaParams)
11755 {
11756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11757 "%s: pWdaParams received NULL", __func__);
11758 VOS_ASSERT(0);
11759 return;
11760 }
11761
11762 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11763 {
11764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11765 vos_mem_free(pWdaParams->wdaMsgParam);
11766 vos_mem_free(pWdaParams);
11767 }
11768
11769 return;
11770}
11771
11772/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11774 * Request to WDI to add WOWL Bcast pattern
11775 */
11776VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11777 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11778{
11779 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011780 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11782 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11783 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11784 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011786 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 if(NULL == wdiWowlAddBcPtrnInfo)
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 VOS_ASSERT(0);
11792 return VOS_STATUS_E_NOMEM;
11793 }
11794 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11795 if(NULL == pWdaParams)
11796 {
11797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 VOS_ASSERT(0);
11800 vos_mem_free(wdiWowlAddBcPtrnInfo);
11801 return VOS_STATUS_E_NOMEM;
11802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11804 pWowlAddBcPtrnParams->ucPatternId;
11805 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11806 pWowlAddBcPtrnParams->ucPatternByteOffset;
11807 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11808 pWowlAddBcPtrnParams->ucPatternMaskSize;
11809 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11810 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011811 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11812 {
11813 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11814 pWowlAddBcPtrnParams->ucPattern,
11815 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11816 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11817 pWowlAddBcPtrnParams->ucPatternMask,
11818 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11819 }
11820 else
11821 {
11822 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11823 pWowlAddBcPtrnParams->ucPattern,
11824 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11825 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11826 pWowlAddBcPtrnParams->ucPatternMask,
11827 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11828
11829 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11830 pWowlAddBcPtrnParams->ucPatternExt,
11831 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11832 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11833 pWowlAddBcPtrnParams->ucPatternMaskExt,
11834 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11835 }
11836
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011837 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11838 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11839
Yue Ma7f44bbe2013-04-12 11:47:39 -070011840 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11841 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 /* Store param pointer as passed in by caller */
11843 /* store Params pass it to WDI */
11844 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11845 pWdaParams->pWdaContext = pWDA;
11846 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011847 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011848 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011849 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 {
11851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11852 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011853 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 vos_mem_free(pWdaParams->wdaMsgParam) ;
11855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11856 vos_mem_free(pWdaParams) ;
11857 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011858 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011859
11860}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011861/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011862 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011863 *
11864 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011865void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011866 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11867 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011868{
11869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 if(NULL == pWdaParams)
11873 {
11874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011875 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 VOS_ASSERT(0) ;
11877 return ;
11878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11880 vos_mem_free(pWdaParams->wdaMsgParam);
11881 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 return ;
11883}
Jeff Johnson295189b2012-06-20 16:38:30 -070011884/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011885 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11886 * Free memory.
11887 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11888 */
11889void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11890{
11891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11892
11893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11894 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11895
11896 if(NULL == pWdaParams)
11897 {
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11899 "%s: pWdaParams received NULL", __func__);
11900 VOS_ASSERT(0);
11901 return;
11902 }
11903
11904 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11905 {
11906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11907 vos_mem_free(pWdaParams->wdaMsgParam);
11908 vos_mem_free(pWdaParams);
11909 }
11910
11911 return;
11912}
11913/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11915 * Request to WDI to delete WOWL Bcast pattern
11916 */
11917VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11918 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11919{
11920 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011921 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11923 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11924 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11925 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 if(NULL == wdiWowlDelBcPtrnInfo)
11929 {
11930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 VOS_ASSERT(0);
11933 return VOS_STATUS_E_NOMEM;
11934 }
11935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11936 if(NULL == pWdaParams)
11937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 VOS_ASSERT(0);
11941 vos_mem_free(wdiWowlDelBcPtrnInfo);
11942 return VOS_STATUS_E_NOMEM;
11943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011944 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11945 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011946
11947 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11948 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11949
Yue Ma7f44bbe2013-04-12 11:47:39 -070011950 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11951 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 /* Store param pointer as passed in by caller */
11953 /* store Params pass it to WDI */
11954 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11955 pWdaParams->pWdaContext = pWDA;
11956 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011957 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011958 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011959 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 {
11961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11962 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011963 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 vos_mem_free(pWdaParams->wdaMsgParam) ;
11965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11966 vos_mem_free(pWdaParams) ;
11967 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011968 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011969
11970}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011971/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011972 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 *
11974 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011975void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011976{
11977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011978 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 if(NULL == pWdaParams)
11983 {
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011985 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 VOS_ASSERT(0) ;
11987 return ;
11988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011989 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011990 if (NULL == pWDA)
11991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11993 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011994
11995 if(pWdaParams->wdaWdiApiMsgParam)
11996 {
11997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11998 }
11999 vos_mem_free(pWdaParams);
12000
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012001 VOS_ASSERT(0);
12002 return ;
12003 }
12004
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12006
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012007 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12008
Jeff Johnson295189b2012-06-20 16:38:30 -070012009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12010 vos_mem_free(pWdaParams) ;
12011
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012012 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012013 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012015 return ;
12016}
Jeff Johnson295189b2012-06-20 16:38:30 -070012017/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012018 * FUNCTION: WDA_WowlEnterReqCallback
12019 * Free memory and send WOWL Enter RSP back to PE.
12020 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12021 */
12022void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12023{
12024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012025 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012026 tSirHalWowlEnterParams *pWowlEnterParams;
12027
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12029 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12030
12031 if(NULL == pWdaParams)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12034 "%s: pWdaParams received NULL", __func__);
12035 VOS_ASSERT(0);
12036 return;
12037 }
12038
12039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012040 if (NULL == pWDA)
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12043 "%s:pWDA is NULL", __func__);
12044 VOS_ASSERT(0);
12045 return ;
12046 }
12047
Yue Ma7f44bbe2013-04-12 11:47:39 -070012048 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12049 pWowlEnterParams->status = wdiStatus;
12050
12051 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12052 {
12053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12054 vos_mem_free(pWdaParams);
12055 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12056 }
12057
12058 return;
12059}
12060/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 * FUNCTION: WDA_ProcessWowlEnterReq
12062 * Request to WDI to enter WOWL
12063 */
12064VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12065 tSirHalWowlEnterParams *pWowlEnterParams)
12066{
12067 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012068 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12070 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12071 sizeof(WDI_WowlEnterReqParamsType)) ;
12072 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 if(NULL == wdiWowlEnterInfo)
12076 {
12077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 VOS_ASSERT(0);
12080 return VOS_STATUS_E_NOMEM;
12081 }
12082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12083 if(NULL == pWdaParams)
12084 {
12085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 VOS_ASSERT(0);
12088 vos_mem_free(wdiWowlEnterInfo);
12089 return VOS_STATUS_E_NOMEM;
12090 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012091
12092 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12093
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12095 pWowlEnterParams->magicPtrn,
12096 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12098 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12100 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12102 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12104 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12106 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12108 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12110 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12112 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113#ifdef WLAN_WAKEUP_EVENTS
12114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12115 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12116
12117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12118 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12119
12120 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12121 pWowlEnterParams->ucWowNetScanOffloadMatch;
12122
12123 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12124 pWowlEnterParams->ucWowGTKRekeyError;
12125
12126 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12127 pWowlEnterParams->ucWoWBSSConnLoss;
12128#endif // WLAN_WAKEUP_EVENTS
12129
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012130 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12131 pWowlEnterParams->bssIdx;
12132
Yue Ma7f44bbe2013-04-12 11:47:39 -070012133 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12134 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012135 /* Store param pointer as passed in by caller */
12136 /* store Params pass it to WDI */
12137 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12138 pWdaParams->pWdaContext = pWDA;
12139 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012140 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012141 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012142 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012143 {
12144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12145 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012146 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 vos_mem_free(pWdaParams->wdaMsgParam) ;
12148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12149 vos_mem_free(pWdaParams) ;
12150 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012151 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012152
12153}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012154/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012155 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 *
12157 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012158void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012159{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012161 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012162 tSirHalWowlExitParams *pWowlExitParams;
12163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012164 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012165 if(NULL == pWdaParams)
12166 {
12167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012168 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012169 VOS_ASSERT(0) ;
12170 return ;
12171 }
12172 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012173 if (NULL == pWDA)
12174 {
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12176 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012177
12178 if(pWdaParams->wdaWdiApiMsgParam)
12179 {
12180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12181 }
12182 vos_mem_free(pWdaParams);
12183
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012184 VOS_ASSERT(0);
12185 return ;
12186 }
12187
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012188 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12189
12190 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012191 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012192
12193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12194 vos_mem_free(pWdaParams) ;
12195
Jeff Johnson295189b2012-06-20 16:38:30 -070012196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012197 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012198 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012199 return ;
12200}
Jeff Johnson295189b2012-06-20 16:38:30 -070012201/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012202 * FUNCTION: WDA_WowlExitReqCallback
12203 * Free memory and send WOWL Exit RSP back to PE.
12204 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12205 */
12206void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12207{
12208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012209 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012210 tSirHalWowlExitParams *pWowlExitParams;
12211
12212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12213 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12214
12215 if(NULL == pWdaParams)
12216 {
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12218 "%s: pWdaParams received NULL", __func__);
12219 VOS_ASSERT(0);
12220 return;
12221 }
12222
12223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012224 if (NULL == pWDA)
12225 {
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12227 "%s:pWDA is NULL", __func__);
12228 VOS_ASSERT(0);
12229 return ;
12230 }
12231
Yue Ma7f44bbe2013-04-12 11:47:39 -070012232 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12233 pWowlExitParams->status = wdiStatus;
12234
12235 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12236 {
12237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12238 vos_mem_free(pWdaParams);
12239 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12240 }
12241
12242 return;
12243}
12244/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012245 * FUNCTION: WDA_ProcessWowlExitReq
12246 * Request to WDI to add WOWL Bcast pattern
12247 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012248VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12249 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012250{
12251 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012252 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012253 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12254 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12255 sizeof(WDI_WowlExitReqParamsType)) ;
12256 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012258 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012259 if(NULL == wdiWowlExitInfo)
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012262 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012263 VOS_ASSERT(0);
12264 return VOS_STATUS_E_NOMEM;
12265 }
12266 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12267 if(NULL == pWdaParams)
12268 {
12269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012270 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012271 VOS_ASSERT(0);
12272 vos_mem_free(wdiWowlExitInfo);
12273 return VOS_STATUS_E_NOMEM;
12274 }
12275
12276 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12277 pWowlExitParams->bssIdx;
12278
Yue Ma7f44bbe2013-04-12 11:47:39 -070012279 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12280 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012281
12282 /* Store param pointer as passed in by caller */
12283 /* store Params pass it to WDI */
12284 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12285 pWdaParams->pWdaContext = pWDA;
12286 pWdaParams->wdaMsgParam = pWowlExitParams;
12287
12288 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012289 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012290
Jeff Johnson43971f52012-07-17 12:26:56 -070012291 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 {
12293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12294 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012295 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12297 vos_mem_free(pWdaParams->wdaMsgParam);
12298 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012300 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012301}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012302/*
12303 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12304 * Request to WDI to determine whether a given station is capable of
12305 * using HW-based frame translation
12306 */
12307v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12308 tANI_U8 staIdx)
12309{
12310 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12311}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012312
12313/*
12314 * FUNCTION: WDA_IsSelfSTA
12315 * Request to WDI to determine whether a given STAID is self station
12316 * index.
12317 */
12318v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12319{
12320
12321 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12322
Girish Gowli05cf44e2014-06-12 21:53:37 +053012323 if (NULL != pWDA)
12324 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12325 else
12326 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012327}
Jeff Johnson295189b2012-06-20 16:38:30 -070012328/*
12329 * FUNCTION: WDA_NvDownloadReqCallback
12330 * send NV Download RSP back to PE
12331 */
12332void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12333 void* pUserData)
12334{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012335
12336 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012337 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012338
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012340 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012341
12342 if(NULL == pWdaParams)
12343 {
12344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012345 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012346 VOS_ASSERT(0) ;
12347 return ;
12348 }
12349
12350 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012351 if (NULL == pWDA)
12352 {
12353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12354 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012355
12356 if(pWdaParams->wdaWdiApiMsgParam)
12357 {
12358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12359 }
12360 vos_mem_free(pWdaParams);
12361
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012362 VOS_ASSERT(0);
12363 return ;
12364 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012365
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12368 vos_mem_free(pWdaParams);
12369
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 return ;
12372}
Jeff Johnson295189b2012-06-20 16:38:30 -070012373/*
12374 * FUNCTION: WDA_ProcessNvDownloadReq
12375 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12376 */
12377VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12378{
12379 /* Initialize the local Variables*/
12380 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12381 v_VOID_t *pNvBuffer=NULL;
12382 v_SIZE_t bufferSize = 0;
12383 WDI_Status status = WDI_STATUS_E_FAILURE;
12384 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012385 tWDA_ReqParams *pWdaParams ;
12386
Jeff Johnson295189b2012-06-20 16:38:30 -070012387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012388 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012389 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 {
12391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012392 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012393 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 return VOS_STATUS_E_FAILURE;
12395 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012396
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012398 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12399
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12401 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012402 if(NULL == wdiNvDownloadReqParam)
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012406 VOS_ASSERT(0);
12407 return VOS_STATUS_E_NOMEM;
12408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 /* Copy Params to wdiNvDownloadReqParam*/
12410 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12411 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012412
12413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12414 if(NULL == pWdaParams)
12415 {
12416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012417 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012418 VOS_ASSERT(0);
12419 vos_mem_free(wdiNvDownloadReqParam);
12420 return VOS_STATUS_E_NOMEM;
12421 }
12422
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012424 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12425 pWdaParams->wdaMsgParam = NULL;
12426 pWdaParams->pWdaContext = pWDA;
12427
12428
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012430
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012432 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12433
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 if(IS_WDI_STATUS_FAILURE(status))
12435 {
12436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12437 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12439 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012440 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012441 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012442}
12443/*
12444 * FUNCTION: WDA_FlushAcReqCallback
12445 * send Flush AC RSP back to TL
12446 */
12447void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12448{
12449 vos_msg_t wdaMsg = {0} ;
12450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12451 tFlushACReq *pFlushACReqParams;
12452 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012454 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 if(NULL == pWdaParams)
12456 {
12457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 VOS_ASSERT(0) ;
12460 return ;
12461 }
12462
12463 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12464 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12465 if(NULL == pFlushACRspParams)
12466 {
12467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012470 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 return ;
12472 }
12473 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12474 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12475 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12476 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12477 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012478 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012479 vos_mem_free(pWdaParams->wdaMsgParam) ;
12480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12481 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012482 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12483 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12484 // POST message to TL
12485 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12486
Jeff Johnson295189b2012-06-20 16:38:30 -070012487 return ;
12488}
Jeff Johnson295189b2012-06-20 16:38:30 -070012489/*
12490 * FUNCTION: WDA_ProcessFlushAcReq
12491 * Request to WDI to Update the DELBA REQ params.
12492 */
12493VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12494 tFlushACReq *pFlushAcReqParams)
12495{
12496 WDI_Status status = WDI_STATUS_SUCCESS ;
12497 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12498 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12499 sizeof(WDI_FlushAcReqParamsType)) ;
12500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 if(NULL == wdiFlushAcReqParam)
12502 {
12503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 VOS_ASSERT(0);
12506 return VOS_STATUS_E_NOMEM;
12507 }
12508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12509 if(NULL == pWdaParams)
12510 {
12511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 VOS_ASSERT(0);
12514 vos_mem_free(wdiFlushAcReqParam);
12515 return VOS_STATUS_E_NOMEM;
12516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012518 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12520 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12521 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12522 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 /* Store Flush AC pointer, as this will be used for response */
12524 /* store Params pass it to WDI */
12525 pWdaParams->pWdaContext = pWDA;
12526 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12527 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12529 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 if(IS_WDI_STATUS_FAILURE(status))
12531 {
12532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12533 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12534 vos_mem_free(pWdaParams->wdaMsgParam) ;
12535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12536 vos_mem_free(pWdaParams) ;
12537 //TODO: respond to TL with failure
12538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012539 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012540}
Jeff Johnson295189b2012-06-20 16:38:30 -070012541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012542 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 *
12544 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012545void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012546{
12547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012548 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012549 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012550
12551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 if(NULL == pWdaParams)
12554 {
12555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012557 VOS_ASSERT(0) ;
12558 return ;
12559 }
12560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012561 if (NULL == pWDA)
12562 {
12563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12564 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012565 vos_mem_free(pWdaParams->wdaMsgParam) ;
12566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12567 vos_mem_free(pWdaParams) ;
12568
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012569 VOS_ASSERT(0);
12570 return ;
12571 }
12572
Jeff Johnson295189b2012-06-20 16:38:30 -070012573 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12574 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12575 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12576 {
12577 pWDA->wdaAmpSessionOn = VOS_FALSE;
12578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 vos_mem_free(pWdaParams->wdaMsgParam) ;
12580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12581 vos_mem_free(pWdaParams) ;
12582 /*
12583 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12584 * param here
12585 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 return ;
12587}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012588/*
12589 * FUNCTION: WDA_BtAmpEventReqCallback
12590 * Free memory.
12591 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12592 */
12593void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12594{
12595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012596 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012597 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012598
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12600 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12601
12602 if(NULL == pWdaParams)
12603 {
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12605 "%s: pWdaParams received NULL", __func__);
12606 VOS_ASSERT(0);
12607 return;
12608 }
12609
12610 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012611 if (NULL == pWDA)
12612 {
12613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12614 "%s:pWDA is NULL", __func__);
12615 VOS_ASSERT(0);
12616 return ;
12617 }
12618
Yue Ma7f44bbe2013-04-12 11:47:39 -070012619 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12620
12621 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12622 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12623 {
12624 pWDA->wdaAmpSessionOn = VOS_FALSE;
12625 }
12626
12627 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12628 {
12629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12630 vos_mem_free(pWdaParams->wdaMsgParam);
12631 vos_mem_free(pWdaParams);
12632 }
12633
12634 return;
12635}
Jeff Johnson295189b2012-06-20 16:38:30 -070012636/*
12637 * FUNCTION: WDA_ProcessBtAmpEventReq
12638 * Request to WDI to Update with BT AMP events.
12639 */
12640VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12641 tSmeBtAmpEvent *pBtAmpEventParams)
12642{
12643 WDI_Status status = WDI_STATUS_SUCCESS ;
12644 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12645 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12646 sizeof(WDI_BtAmpEventParamsType)) ;
12647 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012649 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 if(NULL == wdiBtAmpEventParam)
12651 {
12652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 VOS_ASSERT(0);
12655 return VOS_STATUS_E_NOMEM;
12656 }
12657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12658 if(NULL == pWdaParams)
12659 {
12660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 VOS_ASSERT(0);
12663 vos_mem_free(wdiBtAmpEventParam);
12664 return VOS_STATUS_E_NOMEM;
12665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12667 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012668 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12669 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 /* Store BT AMP event pointer, as this will be used for response */
12671 /* store Params pass it to WDI */
12672 pWdaParams->pWdaContext = pWDA;
12673 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12674 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012676 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 if(IS_WDI_STATUS_FAILURE(status))
12678 {
12679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12680 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12681 vos_mem_free(pWdaParams->wdaMsgParam) ;
12682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12683 vos_mem_free(pWdaParams) ;
12684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012685 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12686 {
12687 pWDA->wdaAmpSessionOn = VOS_TRUE;
12688 }
12689 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012690}
12691
Jeff Johnson295189b2012-06-20 16:38:30 -070012692/*
12693 * FUNCTION: WDA_FTMCommandReqCallback
12694 * Handle FTM CMD response came from HAL
12695 * Route responce to HDD FTM
12696 */
12697void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12698 void *usrData)
12699{
12700 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12702 {
12703 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012704 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 return;
12706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 /* Release Current FTM Command Request */
12708 vos_mem_free(pWDA->wdaFTMCmdReq);
12709 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012710 /* Post FTM Responce to HDD FTM */
12711 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 return;
12713}
Jeff Johnson295189b2012-06-20 16:38:30 -070012714/*
12715 * FUNCTION: WDA_ProcessFTMCommand
12716 * Send FTM command to WDI
12717 */
12718VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12719 tPttMsgbuffer *pPTTFtmCmd)
12720{
12721 WDI_Status status = WDI_STATUS_SUCCESS;
12722 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 ftmCMDReq = (WDI_FTMCommandReqType *)
12724 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12725 if(NULL == ftmCMDReq)
12726 {
12727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12728 "WDA FTM Command buffer alloc fail");
12729 return VOS_STATUS_E_NOMEM;
12730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12732 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012734 /* Send command to WDI */
12735 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012736 return status;
12737}
Jeff Johnsone7245742012-09-05 17:12:55 -070012738#ifdef FEATURE_OEM_DATA_SUPPORT
12739/*
12740 * FUNCTION: WDA_StartOemDataReqCallback
12741 *
12742 */
12743void WDA_StartOemDataReqCallback(
12744 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12745 void* pUserData)
12746{
12747 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012749 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012750 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012751
Jeff Johnsone7245742012-09-05 17:12:55 -070012752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012753 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012754
12755 if(NULL == pWdaParams)
12756 {
12757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012758 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012759 VOS_ASSERT(0) ;
12760 return ;
12761 }
12762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12763
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012764 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012765 {
12766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012767 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012768 VOS_ASSERT(0);
12769 return ;
12770 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012771
Jeff Johnsone7245742012-09-05 17:12:55 -070012772 /*
12773 * Allocate memory for response params sent to PE
12774 */
12775 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12776
12777 // Check if memory is allocated for OemdataMeasRsp Params.
12778 if(NULL == pOemDataRspParams)
12779 {
12780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12781 "OEM DATA WDA callback alloc fail");
12782 VOS_ASSERT(0) ;
12783 return;
12784 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012785
Jeff Johnsone7245742012-09-05 17:12:55 -070012786 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12788 vos_mem_free(pWdaParams->wdaMsgParam);
12789 vos_mem_free(pWdaParams) ;
12790
Jeff Johnsone7245742012-09-05 17:12:55 -070012791 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012792 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012793 * Also, here success always means that we have atleast one BSSID.
12794 */
12795 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12796
12797 //enable Tx
12798 status = WDA_ResumeDataTx(pWDA);
12799 if(status != VOS_STATUS_SUCCESS)
12800 {
12801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12802 }
12803 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12804 return ;
12805}
12806/*
12807 * FUNCTION: WDA_ProcessStartOemDataReq
12808 * Send Start Oem Data Req to WDI
12809 */
12810VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12811 tStartOemDataReq *pOemDataReqParams)
12812{
12813 WDI_Status status = WDI_STATUS_SUCCESS;
12814 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012815 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012816
12817 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12818
12819 if(NULL == wdiOemDataReqParams)
12820 {
12821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012823 VOS_ASSERT(0);
12824 return VOS_STATUS_E_NOMEM;
12825 }
12826
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012827 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12828 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12829 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12830 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012831
12832 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12833
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12835 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012836 {
12837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012839 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012840 vos_mem_free(pOemDataReqParams);
12841 VOS_ASSERT(0);
12842 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012843 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012844
Bernald44a1ae2013-01-09 08:30:39 -080012845 pWdaParams->pWdaContext = (void*)pWDA;
12846 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12847 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012848
12849 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12850 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012851
12852 if(IS_WDI_STATUS_FAILURE(status))
12853 {
12854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12855 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12857 vos_mem_free(pWdaParams->wdaMsgParam);
12858 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012859 }
12860 return CONVERT_WDI2VOS_STATUS(status) ;
12861}
12862#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012863/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012864 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012865 *
12866 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012867void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012868{
12869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 if(NULL == pWdaParams)
12873 {
12874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012875 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012876 VOS_ASSERT(0) ;
12877 return ;
12878 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012879
12880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12881 vos_mem_free(pWdaParams->wdaMsgParam);
12882 vos_mem_free(pWdaParams);
12883
12884 return ;
12885}
12886/*
12887 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12888 * Free memory.
12889 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12890 */
12891void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12892{
12893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12894
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12897
12898 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12901 "%s: pWdaParams received NULL", __func__);
12902 VOS_ASSERT(0);
12903 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012904 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012905
12906 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012907 {
12908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909 vos_mem_free(pWdaParams->wdaMsgParam);
12910 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012911 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012912
12913 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012914}
Jeff Johnson295189b2012-06-20 16:38:30 -070012915#ifdef WLAN_FEATURE_GTK_OFFLOAD
12916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012917 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012918 *
12919 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012920void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012921 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012922{
12923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12924
12925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012926 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012927 if(NULL == pWdaParams)
12928 {
12929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12930 "%s: pWdaParams received NULL", __func__);
12931 VOS_ASSERT(0);
12932 return;
12933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012934
Jeff Johnson295189b2012-06-20 16:38:30 -070012935 vos_mem_free(pWdaParams->wdaMsgParam) ;
12936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12937 vos_mem_free(pWdaParams) ;
12938
12939 //print a msg, nothing else to do
12940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012941 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012942
12943 return ;
12944}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012945/*
12946 * FUNCTION: WDA_GTKOffloadReqCallback
12947 * Free memory.
12948 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12949 */
12950void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12951{
12952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012953
Yue Ma7f44bbe2013-04-12 11:47:39 -070012954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12955 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12956
12957 if(NULL == pWdaParams)
12958 {
12959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12960 "%s: pWdaParams received NULL", __func__);
12961 VOS_ASSERT(0);
12962 return;
12963 }
12964
12965 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12966 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012967 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12968 sizeof(WDI_GtkOffloadReqMsg));
12969 vos_mem_zero(pWdaParams->wdaMsgParam,
12970 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12972 vos_mem_free(pWdaParams->wdaMsgParam);
12973 vos_mem_free(pWdaParams);
12974 }
12975
12976 return;
12977}
Jeff Johnson295189b2012-06-20 16:38:30 -070012978/*
12979 * FUNCTION: WDA_ProcessGTKOffloadReq
12980 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12981 * to broadcast traffic (sta mode).
12982 */
12983VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12984 tpSirGtkOffloadParams pGtkOffloadParams)
12985{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012986 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012987 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12988 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12989 sizeof(WDI_GtkOffloadReqMsg)) ;
12990 tWDA_ReqParams *pWdaParams ;
12991
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012994
12995 if(NULL == wdiGtkOffloadReqMsg)
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012999 VOS_ASSERT(0);
13000 return VOS_STATUS_E_NOMEM;
13001 }
13002
13003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13004 if(NULL == pWdaParams)
13005 {
13006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 VOS_ASSERT(0);
13009 vos_mem_free(wdiGtkOffloadReqMsg);
13010 return VOS_STATUS_E_NOMEM;
13011 }
13012
13013 //
13014 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13015 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013016
13017 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013018 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013019
Jeff Johnson295189b2012-06-20 16:38:30 -070013020 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13021 // Copy KCK
13022 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13023 // Copy KEK
13024 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13025 // Copy KeyReplayCounter
13026 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13027 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13028
Yue Ma7f44bbe2013-04-12 11:47:39 -070013029 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13030 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013031
Jeff Johnson295189b2012-06-20 16:38:30 -070013032
13033 /* Store Params pass it to WDI */
13034 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13035 pWdaParams->pWdaContext = pWDA;
13036 /* Store param pointer as passed in by caller */
13037 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13038
Yue Ma7f44bbe2013-04-12 11:47:39 -070013039 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013040
13041 if(IS_WDI_STATUS_FAILURE(status))
13042 {
13043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13044 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013045 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13046 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13048 vos_mem_free(pWdaParams->wdaMsgParam);
13049 vos_mem_free(pWdaParams);
13050 }
13051
13052 return CONVERT_WDI2VOS_STATUS(status) ;
13053}
13054
13055/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013056 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 *
13058 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013059void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013060 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013061{
13062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13063 tWDA_CbContext *pWDA;
13064 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013065 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013066 vos_msg_t vosMsg;
13067
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013069 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013070
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013071 if(NULL == pWdaParams)
13072 {
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13074 "%s: pWdaParams received NULL", __func__);
13075 VOS_ASSERT(0);
13076 return;
13077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013078
Nirav Shah374de6e2014-02-13 16:40:01 +053013079 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13080 if(NULL == pGtkOffloadGetInfoRsp)
13081 {
13082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13083 "%s: vos_mem_malloc failed ", __func__);
13084 VOS_ASSERT(0);
13085 return;
13086 }
13087
Jeff Johnson295189b2012-06-20 16:38:30 -070013088 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13089 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13090
13091 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13092 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13093
13094 /* Message Header */
13095 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013096 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013097
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013098 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13099 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13100 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13101 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13102 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013103
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013104 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13105 pwdiGtkOffloadGetInfoRsparams->bssId,
13106 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013107 /* VOS message wrapper */
13108 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13109 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13110 vosMsg.bodyval = 0;
13111
13112 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13113 {
13114 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013115 vos_mem_zero(pGtkOffloadGetInfoRsp,
13116 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13118 }
13119
13120 vos_mem_free(pWdaParams->wdaMsgParam) ;
13121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13122 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013123
13124 return;
13125}
13126/*
13127 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13128 * Free memory and send RSP back to SME.
13129 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13130 */
13131void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13132{
13133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13134 vos_msg_t vosMsg;
13135
13136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13137 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13138
13139 if(NULL == pWdaParams)
13140 {
13141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13142 "%s: pWdaParams received NULL", __func__);
13143 VOS_ASSERT(0);
13144 return;
13145 }
13146
13147 /* VOS message wrapper */
13148 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13149 vosMsg.bodyptr = NULL;
13150 vosMsg.bodyval = 0;
13151
13152 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13153 {
13154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13155 vos_mem_free(pWdaParams->wdaMsgParam);
13156 vos_mem_free(pWdaParams);
13157 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13158 }
13159
13160 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013161}
13162#endif
13163
13164/*
13165 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13166 * Request to WDI to set Tx Per Tracking configurations
13167 */
13168VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13169{
13170 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013171 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13173 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13174 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13175 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013177 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013178 if(NULL == pwdiSetTxPerTrackingReqParams)
13179 {
13180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 vos_mem_free(pTxPerTrackingParams);
13183 VOS_ASSERT(0);
13184 return VOS_STATUS_E_NOMEM;
13185 }
13186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13187 if(NULL == pWdaParams)
13188 {
13189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13192 vos_mem_free(pTxPerTrackingParams);
13193 VOS_ASSERT(0);
13194 return VOS_STATUS_E_NOMEM;
13195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13197 pTxPerTrackingParams->ucTxPerTrackingEnable;
13198 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13199 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13200 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13201 pTxPerTrackingParams->ucTxPerTrackingRatio;
13202 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13203 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013204 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13205 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 /* Store param pointer as passed in by caller */
13207 /* store Params pass it to WDI
13208 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13209 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13210 pWdaParams->pWdaContext = pWDA;
13211 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013212 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013213 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013214 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013215 {
13216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13217 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013218 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 vos_mem_free(pWdaParams->wdaMsgParam) ;
13220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13221 vos_mem_free(pWdaParams) ;
13222 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013223 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013224
13225}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013226/*
13227 * FUNCTION: WDA_HALDumpCmdCallback
13228 * Send the VOS complete .
13229 */
13230void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13231 void* pUserData)
13232{
13233 tANI_U8 *buffer = NULL;
13234 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013235 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 if(NULL == pWdaParams)
13237 {
13238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013239 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013240 VOS_ASSERT(0) ;
13241 return ;
13242 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013243
13244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13245 "%s: WDA HAL DUMP Resp Received",__func__);
13246
Jeff Johnson295189b2012-06-20 16:38:30 -070013247 pWDA = pWdaParams->pWdaContext;
13248 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013249 if(wdiRspParams->usBufferLen > 0)
13250 {
13251 /*Copy the Resp data to UMAC supplied buffer*/
13252 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13253 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013254
13255 if (!pWdaParams->wdaHALDumpAsync)
13256 {/* Indicate VOSS about the start complete */
13257 vos_WDAComplete_cback(pWDA->pVosContext);
13258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013261 return ;
13262}
13263
Jeff Johnson295189b2012-06-20 16:38:30 -070013264/*
13265 * FUNCTION: WDA_ProcessHALDumpCmdReq
13266 * Send Dump command to WDI
13267 */
13268VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13269 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013270 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013271{
13272 WDI_Status status = WDI_STATUS_SUCCESS;
13273 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13274 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013275 tWDA_HalDumpReqParams *pWdaParams ;
13276
Jeff Johnson295189b2012-06-20 16:38:30 -070013277 pVosContextType pVosContext = NULL;
13278 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13280 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013281 if(pVosContext)
13282 {
13283 if (pVosContext->isLogpInProgress)
13284 {
13285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13286 "%s:LOGP in Progress. Ignore!!!", __func__);
13287 return VOS_STATUS_E_BUSY;
13288 }
13289 }
13290 else
13291 {
13292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13293 "%s: VOS Context Null", __func__);
13294 return VOS_STATUS_E_RESOURCES;
13295 }
13296
Siddharth Bhal68115602015-01-18 20:44:55 +053013297 if (NULL == pVosContext->pWDAContext)
13298 {
13299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13300 "%s: WDA Context Null", __func__);
13301 return VOS_STATUS_E_RESOURCES;
13302 }
13303 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 if(NULL == pWdaParams)
13305 {
13306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 return VOS_STATUS_E_NOMEM;
13309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 /* Allocate memory WDI request structure*/
13311 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13312 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13313 if(NULL == wdiHALDumpCmdReqParam)
13314 {
13315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13316 "WDA HAL DUMP Command buffer alloc fail");
13317 vos_mem_free(pWdaParams);
13318 return WDI_STATUS_E_FAILURE;
13319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013320 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 /* Extract the arguments */
13322 wdiHalDumpCmdInfo->command = cmd;
13323 wdiHalDumpCmdInfo->argument1 = arg1;
13324 wdiHalDumpCmdInfo->argument2 = arg2;
13325 wdiHalDumpCmdInfo->argument3 = arg3;
13326 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013329 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013330
13331 /* Response message will be passed through the buffer */
13332 pWdaParams->wdaMsgParam = (void *)pBuffer;
13333
13334 /* store Params pass it to WDI */
13335 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013336
13337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13338 "%s: WDA HAL DUMP Command sent",__func__);
13339
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013341 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13342 pWdaParams);
13343 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13344 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013345 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013346 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13347 WDA_DUMPCMD_WAIT_TIMEOUT );
13348 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013349 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013350 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13351 {
13352 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13353 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13354 }
13355 else
13356 {
13357 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13358 "%s: WDA_HALDUMP reporting other error",__func__);
13359 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013360 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013361 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013362 }
13363 return status;
13364}
Jeff Johnson295189b2012-06-20 16:38:30 -070013365#ifdef WLAN_FEATURE_GTK_OFFLOAD
13366/*
13367 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13368 * Request to WDI to get GTK Offload Information
13369 */
13370VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13371 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13372{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013373 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13375 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13376 tWDA_ReqParams *pWdaParams ;
13377
13378 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13379 {
13380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 VOS_ASSERT(0);
13383 return VOS_STATUS_E_NOMEM;
13384 }
13385
13386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13387 if(NULL == pWdaParams)
13388 {
13389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013391 VOS_ASSERT(0);
13392 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13393 return VOS_STATUS_E_NOMEM;
13394 }
13395
Yue Ma7f44bbe2013-04-12 11:47:39 -070013396 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13397 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013398
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 /* Store Params pass it to WDI */
13400 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13401 pWdaParams->pWdaContext = pWDA;
13402 /* Store param pointer as passed in by caller */
13403 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13404
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013405 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013406 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013407
Yue Ma7f44bbe2013-04-12 11:47:39 -070013408 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013409
13410 if(IS_WDI_STATUS_FAILURE(status))
13411 {
13412 /* failure returned by WDI API */
13413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13414 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13416 vos_mem_free(pWdaParams) ;
13417 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13418 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13419 }
13420
13421 return CONVERT_WDI2VOS_STATUS(status) ;
13422}
13423#endif // WLAN_FEATURE_GTK_OFFLOAD
13424
13425/*
Yue Mab9c86f42013-08-14 15:59:08 -070013426 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13427 *
13428 */
13429VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13430 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13431{
13432 WDI_Status wdiStatus;
13433 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13434
13435 addPeriodicTxPtrnParams =
13436 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13437
13438 if (NULL == addPeriodicTxPtrnParams)
13439 {
13440 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13441 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13442 __func__);
13443
13444 return VOS_STATUS_E_NOMEM;
13445 }
13446
13447 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13448 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13449
13450 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13451 addPeriodicTxPtrnParams->pUserData = pWDA;
13452
13453 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13454
13455 if (WDI_STATUS_PENDING == wdiStatus)
13456 {
13457 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13458 "Pending received for %s:%d", __func__, __LINE__ );
13459 }
13460 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13461 {
13462 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13463 "Failure in %s:%d", __func__, __LINE__ );
13464 }
13465
13466 vos_mem_free(addPeriodicTxPtrnParams);
13467
13468 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13469}
13470
13471/*
13472 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13473 *
13474 */
13475VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13476 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13477{
13478 WDI_Status wdiStatus;
13479 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13480
13481 delPeriodicTxPtrnParams =
13482 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13483
13484 if (NULL == delPeriodicTxPtrnParams)
13485 {
13486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13487 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13488 __func__);
13489
13490 return VOS_STATUS_E_NOMEM;
13491 }
13492
13493 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13494 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13495
13496 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13497 delPeriodicTxPtrnParams->pUserData = pWDA;
13498
13499 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13500
13501 if (WDI_STATUS_PENDING == wdiStatus)
13502 {
13503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13504 "Pending received for %s:%d", __func__, __LINE__ );
13505 }
13506 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13507 {
13508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13509 "Failure in %s:%d", __func__, __LINE__ );
13510 }
13511
13512 vos_mem_free(delPeriodicTxPtrnParams);
13513
13514 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13515}
13516
Abhishek Singh00b71972016-01-07 10:51:04 +053013517/*
13518 * FUNCTION: WDA_ProcessRateUpdateInd
13519 *
13520 */
13521VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13522 tSirRateUpdateInd *pRateUpdateParams)
13523{
13524 WDI_Status wdiStatus;
13525 WDI_RateUpdateIndParams rateUpdateParams;
13526
13527 vos_mem_copy(rateUpdateParams.bssid,
13528 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13529
13530 rateUpdateParams.ucastDataRateTxFlag =
13531 pRateUpdateParams->ucastDataRateTxFlag;
13532 rateUpdateParams.rmcDataRateTxFlag =
13533 pRateUpdateParams->rmcDataRateTxFlag;
13534 rateUpdateParams.mcastDataRate24GHzTxFlag =
13535 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13536 rateUpdateParams.mcastDataRate5GHzTxFlag =
13537 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13538
13539 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13540 rateUpdateParams.rmcDataRate =
13541 pRateUpdateParams->rmcDataRate;
13542 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13543 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13544
13545 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13546 rateUpdateParams.pUserData = pWDA;
13547
13548 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13549
13550 if (WDI_STATUS_PENDING == wdiStatus)
13551 {
13552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13553 "Pending received for %s:%d", __func__, __LINE__ );
13554 }
13555 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13556 {
13557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13558 "Failure in %s:%d", __func__, __LINE__ );
13559 }
13560
13561 vos_mem_free(pRateUpdateParams);
13562
13563 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13564}
13565
13566
Rajeev79dbe4c2013-10-05 11:03:42 +053013567#ifdef FEATURE_WLAN_BATCH_SCAN
13568/*
13569 * FUNCTION: WDA_ProcessStopBatchScanInd
13570 *
13571 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13572 *
13573 * PARAM:
13574 * pWDA: pointer to WDA context
13575 * pReq: pointer to stop batch scan request
13576 */
13577VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13578 tSirStopBatchScanInd *pReq)
13579{
13580 WDI_Status wdiStatus;
13581 WDI_StopBatchScanIndType wdiReq;
13582
13583 wdiReq.param = pReq->param;
13584
13585 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13586
13587 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13588 {
13589 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13590 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13591 }
13592
13593 vos_mem_free(pReq);
13594
13595 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13596}
13597/*==========================================================================
13598 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13599
13600 DESCRIPTION
13601 API to pull batch scan result from FW
13602
13603 PARAMETERS
13604 pWDA: Pointer to WDA context
13605 pGetBatchScanReq: Pointer to get batch scan result indication
13606
13607 RETURN VALUE
13608 NONE
13609
13610===========================================================================*/
13611VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13612 tSirTriggerBatchScanResultInd *pReq)
13613{
13614 WDI_Status wdiStatus;
13615 WDI_TriggerBatchScanResultIndType wdiReq;
13616
13617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13618 "------> %s " ,__func__);
13619
13620 wdiReq.param = pReq->param;
13621
13622 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13623
13624 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13625 {
13626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13627 "Trigger batch scan result ind failed %s:%d",
13628 __func__, wdiStatus);
13629 }
13630
13631 vos_mem_free(pReq);
13632
13633 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13634}
13635
13636/*==========================================================================
13637 FUNCTION WDA_SetBatchScanRespCallback
13638
13639 DESCRIPTION
13640 API to process set batch scan response from FW
13641
13642 PARAMETERS
13643 pRsp: Pointer to set batch scan response
13644 pUserData: Pointer to user data
13645
13646 RETURN VALUE
13647 NONE
13648
13649===========================================================================*/
13650void WDA_SetBatchScanRespCallback
13651(
13652 WDI_SetBatchScanRspType *pRsp,
13653 void* pUserData
13654)
13655{
13656 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13657 tpAniSirGlobal pMac;
13658 void *pCallbackContext;
13659 tWDA_CbContext *pWDA = NULL ;
13660 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13661
13662
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13664 "<------ %s " ,__func__);
13665 if (NULL == pWdaParams)
13666 {
13667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13668 "%s: pWdaParams received NULL", __func__);
13669 VOS_ASSERT(0) ;
13670 return ;
13671 }
13672
13673 /*extract WDA context*/
13674 pWDA = pWdaParams->pWdaContext;
13675 if (NULL == pWDA)
13676 {
13677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13678 "%s:pWDA is NULL can't invole HDD callback",
13679 __func__);
13680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13681 vos_mem_free(pWdaParams->wdaMsgParam);
13682 vos_mem_free(pWdaParams);
13683 VOS_ASSERT(0);
13684 return;
13685 }
13686
13687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13688 vos_mem_free(pWdaParams->wdaMsgParam);
13689 vos_mem_free(pWdaParams);
13690
13691 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13692 if (NULL == pMac)
13693 {
13694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13695 "%s:pMac is NULL", __func__);
13696 VOS_ASSERT(0);
13697 return;
13698 }
13699
13700 pHddSetBatchScanRsp =
13701 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13702 if (NULL == pHddSetBatchScanRsp)
13703 {
13704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13705 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13706 VOS_ASSERT(0);
13707 return;
13708 }
13709
13710 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13711
13712 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13713 /*call hdd callback with set batch scan response data*/
13714 if(pMac->pmc.setBatchScanReqCallback)
13715 {
13716 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13717 }
13718 else
13719 {
13720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13721 "%s:HDD callback is null", __func__);
13722 VOS_ASSERT(0);
13723 }
13724
13725 vos_mem_free(pHddSetBatchScanRsp);
13726 return ;
13727}
13728
13729/*==========================================================================
13730 FUNCTION WDA_ProcessSetBatchScanReq
13731
13732 DESCRIPTION
13733 API to send set batch scan request to WDI
13734
13735 PARAMETERS
13736 pWDA: Pointer to WDA context
13737 pSetBatchScanReq: Pointer to set batch scan req
13738
13739 RETURN VALUE
13740 NONE
13741
13742===========================================================================*/
13743VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13744 tSirSetBatchScanReq *pSetBatchScanReq)
13745{
13746 WDI_Status status;
13747 tWDA_ReqParams *pWdaParams ;
13748 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13749
13750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13751 "------> %s " ,__func__);
13752
13753 pWdiSetBatchScanReq =
13754 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13755 if (NULL == pWdiSetBatchScanReq)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13758 "%s: VOS MEM Alloc Failure", __func__);
13759 vos_mem_free(pSetBatchScanReq);
13760 VOS_ASSERT(0);
13761 return VOS_STATUS_E_NOMEM;
13762 }
13763
13764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13765 if (NULL == pWdaParams)
13766 {
13767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13768 "%s: VOS MEM Alloc Failure", __func__);
13769 VOS_ASSERT(0);
13770 vos_mem_free(pSetBatchScanReq);
13771 vos_mem_free(pWdiSetBatchScanReq);
13772 return VOS_STATUS_E_NOMEM;
13773 }
13774
13775 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13776 pWdiSetBatchScanReq->numberOfScansToBatch =
13777 pSetBatchScanReq->numberOfScansToBatch;
13778 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13779 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13780 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13781
13782 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13783 pWdaParams->pWdaContext = pWDA;
13784 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13785
13786 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13787 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13788 if (IS_WDI_STATUS_FAILURE(status))
13789 {
13790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13791 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13793 vos_mem_free(pWdaParams->wdaMsgParam);
13794 vos_mem_free(pWdaParams);
13795 }
13796 return CONVERT_WDI2VOS_STATUS(status);
13797}
13798
13799#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013800/*
13801 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13802 *
13803 * DESCRIPTION: This function sends start/update OBSS scan
13804 * inidcation message to WDI
13805 *
13806 * PARAM:
13807 * pWDA: pointer to WDA context
13808 * pReq: pointer to start OBSS scan request
13809 */
13810VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13811 tSirHT40OBSSScanInd *pReq)
13812{
13813 WDI_Status status;
13814 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13815 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013816
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13818 "------> %s " ,__func__);
13819 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13820 wdiOBSSScanParams.pUserData = pWDA;
13821
13822 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13823 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13824 pWdiOBSSScanInd->scanType = pReq->scanType;
13825 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13826 pReq->OBSSScanActiveDwellTime;
13827 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13828 pReq->OBSSScanPassiveDwellTime;
13829 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13830 pReq->BSSChannelWidthTriggerScanInterval;
13831 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13832 pReq->BSSWidthChannelTransitionDelayFactor;
13833 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13834 pReq->OBSSScanActiveTotalPerChannel;
13835 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13836 pReq->OBSSScanPassiveTotalPerChannel;
13837 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13838 pReq->OBSSScanActivityThreshold;
13839 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13840 vos_mem_copy(pWdiOBSSScanInd->channels,
13841 pReq->channels,
13842 pReq->channelCount);
13843 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13844 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13845 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13846 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13847 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13848
13849 vos_mem_copy(pWdiOBSSScanInd->ieField,
13850 pReq->ieField,
13851 pReq->ieFieldLen);
13852
13853 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13854 if (WDI_STATUS_PENDING == status)
13855 {
13856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13857 "Pending received for %s:%d ",__func__,__LINE__ );
13858 }
13859 else if (WDI_STATUS_SUCCESS_SYNC != status)
13860 {
13861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13862 "Failure in %s:%d ",__func__,__LINE__ );
13863 }
13864 return CONVERT_WDI2VOS_STATUS(status) ;
13865}
13866/*
13867 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13868 *
13869 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13870 *
13871 * PARAM:
13872 * pWDA: pointer to WDA context
13873 * pReq: pointer to stop batch scan request
13874 */
13875VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13876 tANI_U8 *bssIdx)
13877{
13878 WDI_Status status;
13879
13880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13881 "------> %s " ,__func__);
13882
13883 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13884 if (WDI_STATUS_PENDING == status)
13885 {
13886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13887 "Pending received for %s:%d ",__func__,__LINE__ );
13888 }
13889 else if (WDI_STATUS_SUCCESS_SYNC != status)
13890 {
13891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13892 "Failure in %s:%d ",__func__,__LINE__ );
13893 }
13894 return CONVERT_WDI2VOS_STATUS(status) ;
13895}
Yue Mab9c86f42013-08-14 15:59:08 -070013896/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013897 * -------------------------------------------------------------------------
13898 * DATA interface with WDI for Mgmt Frames
13899 * -------------------------------------------------------------------------
13900 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013901/*
13902 * FUNCTION: WDA_TxComplete
13903 * Callback function for the WDA_TxPacket
13904 */
13905VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13906 VOS_STATUS status )
13907{
13908
13909 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13910 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013911 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013912
Mihir Shete63341222015-03-24 15:39:18 +053013913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13914
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 if(NULL == wdaContext)
13916 {
13917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13918 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013919 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013920 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013921 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013922 return VOS_STATUS_E_FAILURE;
13923 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013924
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013925 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013926 /*Check if frame was timed out or not*/
13927 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13928 (v_PVOID_t)&uUserData);
13929
13930 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13931 {
13932 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13934 "%s: MGMT Frame Tx timed out",
13935 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013936 vos_pkt_return_packet(pData);
13937 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013938 return VOS_STATUS_SUCCESS;
13939 }
13940
Jeff Johnson295189b2012-06-20 16:38:30 -070013941 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13942 if( NULL!=wdaContext->pTxCbFunc)
13943 {
13944 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013945 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013946 {
13947 wdaContext->pTxCbFunc(pMac, pData);
13948 }
13949 else
13950 {
13951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013952 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013953 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013954 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013955 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013956 return status;
13957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013959 else {
13960 wdaContext->mgmt_pktfree_fail++;
13961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13962 "%s:packet (%p) userData (%lx) is not freed",
13963 __func__, pData, uUserData);
13964 }
13965 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013966
13967 /*
13968 * Trigger the event to bring the HAL TL Tx complete function to come
13969 * out of wait
13970 * Let the coe above to complete the packet first. When this event is set,
13971 * the thread waiting for the event may run and set Vospacket_freed causing the original
13972 * packet not being freed.
13973 */
13974 status = vos_event_set(&wdaContext->txFrameEvent);
13975 if(!VOS_IS_STATUS_SUCCESS(status))
13976 {
13977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013978 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 return status;
13981}
Jeff Johnson295189b2012-06-20 16:38:30 -070013982/*
13983 * FUNCTION: WDA_TxPacket
13984 * Forward TX management frame to WDI
13985 */
13986VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13987 void *pFrmBuf,
13988 tANI_U16 frmLen,
13989 eFrameType frmType,
13990 eFrameTxDir txDir,
13991 tANI_U8 tid,
13992 pWDATxRxCompFunc pCompFunc,
13993 void *pData,
13994 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013995 tANI_U32 txFlag,
13996 tANI_U32 txBdToken
13997 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013998{
13999 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14000 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14001 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14002 tANI_U8 eventIdx = 0;
14003 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14004 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014005 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014006 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014007
Jeff Johnson295189b2012-06-20 16:38:30 -070014008 if((NULL == pWDA)||(NULL == pFrmBuf))
14009 {
14010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014011 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014012 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014013 VOS_ASSERT(0);
14014 return VOS_STATUS_E_FAILURE;
14015 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014016
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014018 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14019 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014020 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14021 if(NULL == pMac)
14022 {
14023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014024 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014025 VOS_ASSERT(0);
14026 return VOS_STATUS_E_FAILURE;
14027 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014028
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 /* store the call back function in WDA context */
14030 pWDA->pTxCbFunc = pCompFunc;
14031 /* store the call back for the function of ackTxComplete */
14032 if( pAckTxComp )
14033 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014034 if( NULL != pWDA->pAckTxCbFunc )
14035 {
14036 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014038 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014039 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014040 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014041
Jeff Johnsone7245742012-09-05 17:12:55 -070014042 if( VOS_STATUS_SUCCESS !=
14043 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14044 {
14045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14046 "Tx Complete timeout Timer Stop Failed ");
14047 }
14048 else
14049 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014051 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014052 }
14053 }
14054
14055 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14056 pWDA->pAckTxCbFunc = pAckTxComp;
14057 if( VOS_STATUS_SUCCESS !=
14058 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14059 {
14060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14061 "Tx Complete Timer Start Failed ");
14062 pWDA->pAckTxCbFunc = NULL;
14063 return eHAL_STATUS_FAILURE;
14064 }
14065 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014066 /* Reset the event to be not signalled */
14067 status = vos_event_reset(&pWDA->txFrameEvent);
14068 if(!VOS_IS_STATUS_SUCCESS(status))
14069 {
14070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014071 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14073 if( pAckTxComp )
14074 {
14075 pWDA->pAckTxCbFunc = NULL;
14076 if( VOS_STATUS_SUCCESS !=
14077 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14078 {
14079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14080 "Tx Complete timeout Timer Stop Failed ");
14081 }
14082 }
14083 return VOS_STATUS_E_FAILURE;
14084 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014085
14086 /* If Peer Sta mask is set don't overwrite to self sta */
14087 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014088 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014089 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014091 else
14092 {
Ganesh K08bce952012-12-13 15:04:41 -080014093 /* Get system role, use the self station if in unknown role or STA role */
14094 systemRole = wdaGetGlobalSystemRole(pMac);
14095 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14096 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014097#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014098 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014099#endif
Ganesh K08bce952012-12-13 15:04:41 -080014100 ))
14101 {
14102 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14103 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014105
Jeff Johnsone7245742012-09-05 17:12:55 -070014106 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14107 disassoc frame reaches the HW, HAL has already deleted the peer station */
14108 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014109 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014110 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014111 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014112 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 /*Send Probe request frames on self sta idx*/
14114 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014116 /* Since we donot want probe responses to be retried, send probe responses
14117 through the NO_ACK queues */
14118 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14119 {
14120 //probe response is sent out using self station and no retries options.
14121 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14122 }
14123 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14124 {
14125 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14126 }
14127 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014128#ifdef FEATURE_WLAN_TDLS
14129 /* TDLS Management frames are sent using Peer Sta mask */
14130 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14131 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14132 {
14133 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14134
14135 }
14136#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014137 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014138
14139 /*Set frame tag to 0
14140 We will use the WDA user data in order to tag a frame as expired*/
14141 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14142 (v_PVOID_t)0);
14143
14144
14145 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014146 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14147 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 {
14149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014150 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014152 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 -070014153 if( pAckTxComp )
14154 {
14155 pWDA->pAckTxCbFunc = NULL;
14156 if( VOS_STATUS_SUCCESS !=
14157 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14158 {
14159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14160 "Tx Complete timeout Timer Stop Failed ");
14161 }
14162 }
14163 return VOS_STATUS_E_FAILURE;
14164 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014165 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014166 /*
14167 * Wait for the event to be set by the TL, to get the response of TX
14168 * complete, this event should be set by the Callback function called by TL
14169 */
14170 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14171 &eventIdx);
14172 if(!VOS_IS_STATUS_SUCCESS(status))
14173 {
14174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14175 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014176 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014177 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014178 /*Tag Frame as timed out for later deletion*/
14179 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14180 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014181 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14182 after the packet gets completed(packet freed once)*/
14183
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014184 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14185
14186 /*
14187 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14188 * TX completion call back
14189 */
14190 VOS_SMP_MB;
14191 vos_lock_release(&pWDA->mgmt_pkt_lock);
14192
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014193 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014194 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014195
Abhishek Singh837adf22015-10-01 17:37:37 +053014196 if (vos_isFatalEventEnabled())
14197 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14198 WLAN_LOG_INDICATOR_HOST_DRIVER,
14199 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14200 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014201
Jeff Johnson295189b2012-06-20 16:38:30 -070014202 if( pAckTxComp )
14203 {
14204 pWDA->pAckTxCbFunc = NULL;
14205 if( VOS_STATUS_SUCCESS !=
14206 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14207 {
14208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14209 "Tx Complete timeout Timer Stop Failed ");
14210 }
14211 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014212 pWDA->mgmtTxfailureCnt++;
14213
14214 /* SSR if timeout continously for
14215 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14216 */
14217 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14218 pWDA->mgmtTxfailureCnt)
14219 {
14220 vos_wlanRestart();
14221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 status = VOS_STATUS_E_FAILURE;
14223 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014224
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014225#ifdef WLAN_DUMP_MGMTFRAMES
14226 if (VOS_IS_STATUS_SUCCESS(status))
14227 {
14228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14229 "%s() TX packet : SubType %d", __func__,pFc->subType);
14230 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14231 pData, frmLen);
14232 }
14233#endif
14234
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014235 if (VOS_IS_STATUS_SUCCESS(status))
14236 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014237 pWDA->mgmtTxfailureCnt = 0;
14238 if ((vos_timer_get_system_time() - time_snapshot) >=
14239 WDA_TX_TIME_THRESHOLD)
14240 {
14241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14242 "Tx Complete took %lu ms",
14243 vos_timer_get_system_time() - time_snapshot);
14244 }
14245
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014246 if (pMac->fEnableDebugLog & 0x1)
14247 {
14248 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14249 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14250 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14251 {
14252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14253 pFc->type, pFc->subType);
14254 }
14255 }
14256 }
14257
14258
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 return status;
14260}
Jeff Johnson295189b2012-06-20 16:38:30 -070014261/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014262 * FUNCTION: WDA_ProcessDHCPStartInd
14263 * Forward DHCP Start to WDI
14264 */
14265static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14266 tAniDHCPInd *dhcpStartInd)
14267{
14268 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014269 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014270
c_hpothu0b0cab72014-02-13 21:52:40 +053014271 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14272 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014273 sizeof(tSirMacAddr));
14274
c_hpothu0b0cab72014-02-13 21:52:40 +053014275 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014276
c_hpothu0b0cab72014-02-13 21:52:40 +053014277 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014278 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14280 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014281 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014282 else if (WDI_STATUS_SUCCESS_SYNC != status)
14283 {
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14286 }
14287
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014288 vos_mem_free(dhcpStartInd);
14289 return CONVERT_WDI2VOS_STATUS(status) ;
14290}
14291
14292 /*
14293 * FUNCTION: WDA_ProcessDHCPStopInd
14294 * Forward DHCP Stop to WDI
14295 */
14296 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14297 tAniDHCPInd *dhcpStopInd)
14298 {
14299 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014300 WDI_DHCPInd wdiDHCPInd;
14301
14302 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14303 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14304
14305 status = WDI_dhcpStopInd(&wdiDHCPInd);
14306
14307 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014308 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14310 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014311 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014312 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014313 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14315 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014316 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014317
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014318 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014319
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014320 return CONVERT_WDI2VOS_STATUS(status) ;
14321 }
14322
Abhishek Singh00b71972016-01-07 10:51:04 +053014323#ifdef WLAN_FEATURE_RMC
14324
14325void
14326WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14327{
14328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14329 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14330
14331 switch (wdiRmcResponse->cmd)
14332 {
14333 case eWDI_BECOME_RULER_CMD :
14334 {
14335 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14336
14337 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14338 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14339
14340 if (NULL == pRmcBecomeRulerInd)
14341 {
14342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14343 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14344 break;
14345 }
14346
14347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14348 "Received eWDI_BECOME_RULER_CMD from WDI");
14349
14350 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14351
14352 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14353 wdiRmcResponse->mcastTransmitter,
14354 sizeof(tSirMacAddr));
14355 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14356 wdiRmcResponse->mcastGroup,
14357 sizeof(tSirMacAddr));
14358
14359 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14360 (void *)pRmcBecomeRulerInd, 0) ;
14361 break;
14362 }
14363 case eWDI_SUGGEST_RULER_CMD :
14364 {
14365 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14366
14367 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14368 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14369
14370 if (NULL == pRmcRulerSelectInd)
14371 {
14372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14373 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14374 break;
14375 }
14376
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14378 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14379
14380 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14381
14382 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14383 wdiRmcResponse->mcastTransmitter,
14384 sizeof(tSirMacAddr));
14385 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14386 wdiRmcResponse->mcastGroup,
14387 sizeof(tSirMacAddr));
14388 vos_mem_copy(pRmcRulerSelectInd->ruler,
14389 wdiRmcResponse->ruler,
14390 sizeof(pRmcRulerSelectInd->ruler));
14391
14392 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14393 (void *)pRmcRulerSelectInd, 0) ;
14394 break;
14395 }
14396 }
14397
14398 /* free the config structure */
14399 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14400 {
14401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14402 }
14403 vos_mem_free(pWdaParams->wdaMsgParam);
14404 vos_mem_free(pWdaParams);
14405
14406}
14407
14408void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14409{
14410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14411
14412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14413 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14414
14415 if (NULL == pWdaParams)
14416 {
14417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14418 "%s: pWdaParams received NULL", __func__);
14419 VOS_ASSERT(0);
14420 return;
14421 }
14422
14423 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14424 {
14425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14426 vos_mem_free(pWdaParams->wdaMsgParam);
14427 vos_mem_free(pWdaParams);
14428 }
14429
14430 return;
14431}
14432
14433static VOS_STATUS
14434WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14435 tSirRmcRulerReq *rmcRulerReq)
14436{
14437 WDI_Status status;
14438 WDI_RmcRulerReqParams *wdiRulerReq;
14439 tWDA_ReqParams *pWdaParams;
14440
14441 wdiRulerReq = (WDI_RmcRulerReqParams *)
14442 vos_mem_malloc(sizeof(*wdiRulerReq));
14443
14444 if (NULL == wdiRulerReq)
14445 {
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14447 "%s: VOS MEM Alloc Failure", __func__);
14448 VOS_ASSERT(0);
14449 vos_mem_free(rmcRulerReq);
14450 return VOS_STATUS_E_NOMEM;
14451 }
14452
14453 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14454 if (NULL == pWdaParams)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: VOS MEM Alloc Failure", __func__);
14458 VOS_ASSERT(0);
14459 vos_mem_free(rmcRulerReq);
14460 vos_mem_free(wdiRulerReq);
14461 return VOS_STATUS_E_NOMEM;
14462 }
14463
14464 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14465 /* Store param pointer as passed in by caller */
14466 pWdaParams->wdaMsgParam = rmcRulerReq;
14467 pWdaParams->pWdaContext = pWDA;
14468
14469 wdiRulerReq->cmd = rmcRulerReq->cmd;
14470
14471 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14472 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14473 vos_mem_copy(wdiRulerReq->mcastGroup,
14474 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14475 vos_mem_copy(wdiRulerReq->blacklist,
14476 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14477
14478 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14479
14480 status = WDI_RmcRulerReq(wdiRulerReq,
14481 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14482 (void *)pWdaParams);
14483 if (IS_WDI_STATUS_FAILURE(status))
14484 {
14485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14486 vos_mem_free(pWdaParams->wdaMsgParam);
14487 vos_mem_free(pWdaParams) ;
14488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14489 "Ruler Request failed");
14490 }
14491 return CONVERT_WDI2VOS_STATUS(status) ;
14492}
14493
14494/*
14495 * FUNCTION: WDA_ProcessRMCUpdateInd
14496 * Forward Update Indication to WDI
14497*/
14498static VOS_STATUS
14499WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14500 tSirRmcUpdateInd *rmcUpdateInd)
14501{
14502 WDI_Status status;
14503 WDI_RmcUpdateIndParams wdiUpdateInd;
14504
14505 /* Copy the paramters for Update_Ind */
14506
14507 wdiUpdateInd.indication = rmcUpdateInd->indication;
14508 wdiUpdateInd.role = rmcUpdateInd->role;
14509
14510 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14511 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14512
14513 vos_mem_copy(wdiUpdateInd.mcastGroup,
14514 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14515
14516 vos_mem_copy(wdiUpdateInd.mcastRuler,
14517 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14518
14519 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14520 wdiUpdateInd.pUserData = pWDA;
14521 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14522
14523 if (WDI_STATUS_PENDING == status)
14524 {
14525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14526 "Pending received for %s:%d ",__func__,__LINE__ );
14527 }
14528 else if (WDI_STATUS_SUCCESS_SYNC != status)
14529 {
14530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14531 "Failure in %s:%d ",__func__,__LINE__ );
14532 }
14533
14534 vos_mem_free(rmcUpdateInd);
14535
14536 return CONVERT_WDI2VOS_STATUS(status) ;
14537}
14538
14539void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14540 ,void* pUserData)
14541{
14542
14543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14544 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14545 tWDA_CbContext *pWDA;
14546 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14547 vos_msg_t vosMsg;
14548 v_U32_t wdaCnt = 0;
14549
14550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14551 "<------ %s " ,__func__);
14552 if (NULL == pWdaParams)
14553 {
14554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14555 "%s: pWdaParams received NULL", __func__);
14556 VOS_ASSERT(0);
14557 return;
14558 }
14559
14560 if (NULL == peerInfoRspParams)
14561 {
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14563 "%s: peerInfoRspParams received NULL", __func__);
14564 if(pWdaParams->wdaMsgParam)
14565 vos_mem_free(pWdaParams->wdaMsgParam);
14566 if(pWdaParams->wdaWdiApiMsgParam)
14567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14568 vos_mem_free(pWdaParams);
14569
14570 VOS_ASSERT(0);
14571 return;
14572 }
14573
14574 pIbssPeerInfoParams =
14575 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14576
14577 pIbssGetPeerInfoRsp =
14578 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14579
14580 if(NULL == pIbssGetPeerInfoRsp)
14581 {
14582 if(pWdaParams->wdaMsgParam)
14583 vos_mem_free(pWdaParams->wdaMsgParam);
14584 if(pWdaParams->wdaWdiApiMsgParam)
14585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14586 vos_mem_free(pWdaParams);
14587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14588 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14589 __func__);
14590 VOS_ASSERT(0);
14591 return;
14592
14593 }
14594
14595 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14596
14597
14598 if (peerInfoRspParams->wdiNumPeers > 32)
14599 {
14600 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14601 /* free the mem and return */
14602 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14603 if(pWdaParams->wdaMsgParam)
14604 vos_mem_free(pWdaParams->wdaMsgParam);
14605 if(pWdaParams->wdaWdiApiMsgParam)
14606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14607 vos_mem_free(pWdaParams);
14608
14609 return;
14610 }
14611
14612 /* Message Header */
14613 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14614 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14615 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14616 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14617
14618 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14619 {
14620 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14621 tSirIbssPeerInfoParams *pSmeTmp =
14622 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14623
14624 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14625 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14626 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14627 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14628 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14629 }
14630
14631 /* VOS message wrapper */
14632 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14633 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14634 vosMsg.bodyval = 0;
14635
14636 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14637 {
14638 /* free the mem and return */
14639 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14640 }
14641
14642 if(NULL != pWdaParams)
14643 {
14644 if(pWdaParams->wdaMsgParam)
14645 vos_mem_free(pWdaParams->wdaMsgParam);
14646 if(pWdaParams->wdaWdiApiMsgParam)
14647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14648 vos_mem_free(pWdaParams);
14649 }
14650
14651 return;
14652}
14653
14654static VOS_STATUS
14655WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14656 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14657{
14658 WDI_Status status;
14659 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14660 tWDA_ReqParams *pWdaParams;
14661
14662 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14663 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14664 if (NULL == wdiPeerInfoReq)
14665 {
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14667 "%s: VOS MEM Alloc Failure", __func__);
14668 VOS_ASSERT(0);
14669 vos_mem_free(ibssPeerInfoReqParams);
14670 return VOS_STATUS_E_NOMEM;
14671 }
14672
14673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14674 if (NULL == pWdaParams)
14675 {
14676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14677 "%s: VOS MEM Alloc Failure", __func__);
14678 VOS_ASSERT(0);
14679 vos_mem_free(wdiPeerInfoReq);
14680 vos_mem_free(ibssPeerInfoReqParams);
14681 return VOS_STATUS_E_NOMEM;
14682 }
14683
14684 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14685 /* Store param pointer as passed in by caller */
14686 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14687 pWdaParams->pWdaContext = pWDA;
14688
14689 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14690 ibssPeerInfoReqParams->allPeerInfoReqd;
14691 wdiPeerInfoReq->wdiStaIdx =
14692 ibssPeerInfoReqParams->staIdx;
14693
14694 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14695 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14696 (void *)pWdaParams);
14697 if (IS_WDI_STATUS_FAILURE(status))
14698 {
14699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14700 vos_mem_free(pWdaParams->wdaMsgParam);
14701 vos_mem_free(pWdaParams) ;
14702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14703 "IBSS Peer Info Request failed");
14704 }
14705 return CONVERT_WDI2VOS_STATUS(status) ;
14706
14707}
14708
14709/*
14710 * FUNCTION: WDA_ProcessTXFailMonitorInd
14711 * Forward TX Fail Monitor to WDI
14712 */
14713static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14714 tWDA_CbContext *pWDA,
14715 tAniTXFailMonitorInd *txFailMonitorInd)
14716{
14717 WDI_Status status;
14718 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14719 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14720
14721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14722 "<------ %s " ,__func__);
14723
14724 if (NULL == wdiTXFailMonitorInd)
14725 {
14726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14727 "%s: VOS MEM Alloc Failure", __func__);
14728 VOS_ASSERT(0);
14729 vos_mem_free(txFailMonitorInd);
14730 return VOS_STATUS_E_NOMEM;
14731 }
14732
14733 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14734
14735 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14736 wdiTXFailMonitorInd->pUserData = pWDA;
14737
14738 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14739
14740 if (WDI_STATUS_PENDING == status)
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14743 "TX Fail Monitor Indication Pending");
14744 }
14745 else if (WDI_STATUS_SUCCESS_SYNC == status)
14746 {
14747 if (0 == txFailMonitorInd->tx_fail_count)
14748 pWDA->txFailIndCallback = NULL;
14749 else
14750 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14751 }
14752 else
14753 {
14754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14755 "TX Fail Monitor Indication Failed");
14756 }
14757
14758 vos_mem_free(wdiTXFailMonitorInd);
14759 vos_mem_free(txFailMonitorInd);
14760
14761 return CONVERT_WDI2VOS_STATUS(status) ;
14762}
14763#endif /* WLAN_FEATURE_RMC */
14764
Kapil Gupta04ab1992016-06-26 13:36:51 +053014765#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14766VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
14767 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
14768{
14769 WDI_Status status;
14770 tWDA_ReqParams *pWdaParams ;
14771 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
14772 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
14773 sizeof(WDI_PERRoamTriggerScanInfo));
14774
14775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14776 "------> %s " ,__func__);
14777
14778 if (NULL == pwdiPERRoamTriggerScanInfo)
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14781 "%s: VOS MEM Alloc Failure", __func__);
14782 VOS_ASSERT(0);
14783 return VOS_STATUS_E_NOMEM;
14784 }
14785
14786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14787 if (NULL == pWdaParams)
14788 {
14789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14790 "%s: VOS MEM Alloc Failure", __func__);
14791 VOS_ASSERT(0);
14792 vos_mem_free(pwdiPERRoamTriggerScanInfo);
14793 return VOS_STATUS_E_NOMEM;
14794 }
14795
14796 pwdiPERRoamTriggerScanInfo->roamScanReq =
14797 pPERRoamTriggerScanReqParams->start;
14798
14799 /* Store Params pass it to WDI */
14800 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
14801 pWdaParams->pWdaContext = pWDA;
14802
14803 /* Store param pointer as passed in by caller */
14804 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
14805 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
14806 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
14807 pWdaParams);
14808
14809 if(IS_WDI_STATUS_FAILURE(status))
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14812 "Failure in Start Roam Candidate trigger Req WDI API" );
14813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14814 vos_mem_free(pWdaParams->wdaMsgParam);
14815 pWdaParams->wdaWdiApiMsgParam = NULL;
14816 pWdaParams->wdaMsgParam = NULL;
14817 }
14818 return CONVERT_WDI2VOS_STATUS(status) ;
14819}
14820#endif
14821
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014822/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014823 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14824 *
14825 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14826 *
14827 * PARAM:
14828 * pWDA: pointer to WDA context
14829 * pReq: pointer to stop batch scan request
14830 */
14831VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14832 tpSpoofMacAddrReqParams pReq)
14833{
14834 WDI_Status wdiStatus;
14835 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14836 tWDA_ReqParams *pWdaParams;
14837
14838 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14839 sizeof(WDI_SpoofMacAddrInfoType));
14840 if(NULL == WDI_SpoofMacAddrInfoParams) {
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14842 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14843 VOS_ASSERT(0);
14844 return VOS_STATUS_E_NOMEM;
14845 }
14846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14847 if(NULL == pWdaParams) {
14848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14849 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014850 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014851 VOS_ASSERT(0);
14852 return VOS_STATUS_E_NOMEM;
14853 }
14854
14855 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14856 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14857
14858 pWdaParams->pWdaContext = pWDA;
14859 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014860 pWdaParams->wdaMsgParam = (void *)pReq;
14861
14862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14863 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14864
Siddharth Bhal171788a2014-09-29 21:02:40 +053014865 /* store Params pass it to WDI */
14866 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14867
14868 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014869 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14870 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014871
14872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14873 {
14874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14875 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14877 vos_mem_free(pWdaParams->wdaMsgParam);
14878 vos_mem_free(pWdaParams);
14879 }
14880
14881 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14882}
14883
c_manjeecfd1efb2015-09-25 19:32:34 +053014884
14885/*
14886 * FUNCTION: WDA_FwrMemDumpRespCallback
14887 * recieves Mgmt Logging init response from FW
14888 */
14889 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14890 void* pUserData)
14891{
14892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14893 tAniFwrDumpReq *pFwrMemDumpReq;
14894 tAniFwrDumpRsp *pFwrMemDumpRsp;
14895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14896 "<------ %s " ,__func__);
14897
14898 if(NULL == pWdaParams)
14899 {
14900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14901 "%s: pWdaParams received NULL", __func__);
14902 VOS_ASSERT(0);
14903 return ;
14904 }
14905
14906 if(NULL == pWdaParams->wdaMsgParam)
14907 {
14908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14909 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14910 VOS_ASSERT(0);
14911 vos_mem_free(pWdaParams);
14912 return ;
14913 }
14914
14915 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14916 if(pFwrMemDumpRsp == NULL)
14917 {
14918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14919 "%s: pFwrMemDumpRsp is NULL", __func__);
14920 VOS_ASSERT(0);
14921 vos_mem_free(pWdaParams);
14922 return ;
14923 }
14924
14925 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14926 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14927
14928 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14929 {
14930 pFwrMemDumpReq->fwMemDumpReqCallback(
14931 pFwrMemDumpReq->fwMemDumpReqContext,
14932 pFwrMemDumpRsp);
14933 }
14934 else
14935 {
14936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14937 "%s: FwrMemDump callback is NULL", __func__);
14938 }
14939
14940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14941 vos_mem_free(pWdaParams->wdaMsgParam);
14942 vos_mem_free(pWdaParams);
14943 vos_mem_free(pFwrMemDumpRsp);
14944
14945 return ;
14946}
14947
14948VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14949 tAniFwrDumpReq* pFwrMemDumpReq)
14950{
14951 VOS_STATUS status = VOS_STATUS_SUCCESS;
14952 WDI_Status wstatus;
14953 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14954 tWDA_ReqParams *pWdaParams ;
14955
14956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14957 "------> %s " ,__func__);
14958 /* Sanity Check*/
14959 if(NULL == pFwrMemDumpReq)
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "%s: pFwrMemDumpReq received NULL", __func__);
14963 VOS_ASSERT(0) ;
14964 return VOS_STATUS_E_FAULT;
14965 }
14966
14967 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14968 if(NULL == pWdiFwrMemDumpReq)
14969 {
14970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14971 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14972 VOS_ASSERT(0);
14973 return VOS_STATUS_E_NOMEM;
14974 }
14975
14976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14977 if(NULL == pWdaParams)
14978 {
14979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14980 "%s: pWdaParams Alloc Failure", __func__);
14981 VOS_ASSERT(0);
14982 vos_mem_free(pWdiFwrMemDumpReq);
14983 return VOS_STATUS_E_NOMEM;
14984 }
14985
14986 /* Store Params pass it to WDI */
14987 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14988 pWdaParams->pWdaContext = pWDA;
14989 /* Store param pointer as passed in by caller */
14990 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14991
14992 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14993 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14994 pWdaParams);
14995
14996 if(IS_WDI_STATUS_FAILURE(wstatus))
14997 {
14998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14999 FL("Fwr Mem Dump Req failed, free all the memory"));
15000 status = CONVERT_WDI2VOS_STATUS(wstatus);
15001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015002 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015003 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015004 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015005 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015006 }
15007
15008 return status;
15009
15010}
15011
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015012/**
15013 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15014 *
15015 * @pWDA: WDA Call back context
15016 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15017 * that holds allowed action frames bitmask
15018 *
15019 * This function sets the allowed action frames that the FW needs to
15020 * handover to host.The Action frames other than the requested ones
15021 * can be dropped in FW
15022 *
15023 * Return: VOS_STATUS enumeration
15024 */
15025VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15026 struct sir_allowed_action_frames *allowed_action_frames)
15027{
15028 WDI_Status status;
15029 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15031 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015032
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015033 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15034 vos_mem_malloc(sizeof
15035 (*wdi_allowed_action_frames));
15036 if (!wdi_allowed_action_frames) {
15037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15038 "%s: VOS MEM Alloc Failure", __func__);
15039 vos_mem_free(allowed_action_frames);
15040 return VOS_STATUS_E_NOMEM;
15041 }
15042
15043 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15044 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15045
15046 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15047 if (WDI_STATUS_PENDING == status) {
15048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15049 FL("pending status received"));
15050 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15051 (WDI_STATUS_SUCCESS != status)) {
15052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15053 FL("Failure in allowed_action_frames API %d"), status);
15054 }
15055
15056 vos_mem_free(wdi_allowed_action_frames);
15057 vos_mem_free(allowed_action_frames);
15058 return CONVERT_WDI2VOS_STATUS(status) ;
15059}
c_manjeecfd1efb2015-09-25 19:32:34 +053015060
Siddharth Bhal171788a2014-09-29 21:02:40 +053015061/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015062 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15063 * Request to WDI.
15064 */
15065VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15066{
15067 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015068 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015069
15070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15071
15072 staId = (v_U8_t)params;
15073
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015074 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15075 if ( NULL == pTLCb )
15076 {
15077 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15078 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15079 return VOS_STATUS_E_FAULT;
15080 }
15081
15082
15083 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015084 /* Pause TL for Sta ID */
15085 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15086}
15087
15088/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 * FUNCTION: WDA_McProcessMsg
15090 * Trigger DAL-AL to start CFG download
15091 */
15092VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15093{
15094 VOS_STATUS status = VOS_STATUS_SUCCESS;
15095 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015096 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015097 {
15098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015099 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015100 VOS_ASSERT(0);
15101 return VOS_STATUS_E_FAILURE;
15102 }
15103
15104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015105 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015106
15107 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15108 if(NULL == pWDA )
15109 {
15110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015111 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015112 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015113 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 return VOS_STATUS_E_FAILURE;
15115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015116 /* Process all the WDA messages.. */
15117 switch( pMsg->type )
15118 {
15119 case WNI_CFG_DNLD_REQ:
15120 {
15121 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015122 /* call WDA complete event if config download success */
15123 if( VOS_IS_STATUS_SUCCESS(status) )
15124 {
15125 vos_WDAComplete_cback(pVosContext);
15126 }
15127 else
15128 {
15129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15130 "WDA Config Download failure" );
15131 }
15132 break ;
15133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015134 /*
15135 * Init SCAN request from PE, convert it into DAL format
15136 * and send it to DAL
15137 */
15138 case WDA_INIT_SCAN_REQ:
15139 {
15140 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15141 break ;
15142 }
15143 /* start SCAN request from PE */
15144 case WDA_START_SCAN_REQ:
15145 {
15146 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15147 break ;
15148 }
15149 /* end SCAN request from PE */
15150 case WDA_END_SCAN_REQ:
15151 {
15152 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15153 break ;
15154 }
15155 /* end SCAN request from PE */
15156 case WDA_FINISH_SCAN_REQ:
15157 {
15158 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15159 break ;
15160 }
15161 /* join request from PE */
15162 case WDA_CHNL_SWITCH_REQ:
15163 {
15164 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15165 {
15166 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15167 }
15168 else
15169 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015170 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15171 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15172 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15173 {
15174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15175 "call ProcessChannelSwitchReq_V1" );
15176 WDA_ProcessChannelSwitchReq_V1(pWDA,
15177 (tSwitchChannelParams*)pMsg->bodyptr) ;
15178 }
15179 else
15180 {
15181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15182 "call ProcessChannelSwitchReq" );
15183 WDA_ProcessChannelSwitchReq(pWDA,
15184 (tSwitchChannelParams*)pMsg->bodyptr) ;
15185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015186 }
15187 break ;
15188 }
15189 /* ADD BSS request from PE */
15190 case WDA_ADD_BSS_REQ:
15191 {
15192 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15193 break ;
15194 }
15195 case WDA_ADD_STA_REQ:
15196 {
15197 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15198 break ;
15199 }
15200 case WDA_DELETE_BSS_REQ:
15201 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015202 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15203 break ;
15204 }
15205 case WDA_DELETE_STA_REQ:
15206 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015207 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15208 break ;
15209 }
15210 case WDA_CONFIG_PARAM_UPDATE_REQ:
15211 {
15212 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15213 break ;
15214 }
15215 case WDA_SET_BSSKEY_REQ:
15216 {
15217 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15218 break ;
15219 }
15220 case WDA_SET_STAKEY_REQ:
15221 {
15222 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15223 break ;
15224 }
15225 case WDA_SET_STA_BCASTKEY_REQ:
15226 {
15227 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15228 break ;
15229 }
15230 case WDA_REMOVE_BSSKEY_REQ:
15231 {
15232 WDA_ProcessRemoveBssKeyReq(pWDA,
15233 (tRemoveBssKeyParams *)pMsg->bodyptr);
15234 break ;
15235 }
15236 case WDA_REMOVE_STAKEY_REQ:
15237 {
15238 WDA_ProcessRemoveStaKeyReq(pWDA,
15239 (tRemoveStaKeyParams *)pMsg->bodyptr);
15240 break ;
15241 }
15242 case WDA_REMOVE_STA_BCASTKEY_REQ:
15243 {
15244 /* TODO: currently UMAC is not sending this request, Add the code for
15245 handling this request when UMAC supports */
15246 break;
15247 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015248#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015249 case WDA_TSM_STATS_REQ:
15250 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015251 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015252 break;
15253 }
15254#endif
15255 case WDA_UPDATE_EDCA_PROFILE_IND:
15256 {
15257 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15258 break;
15259 }
15260 case WDA_ADD_TS_REQ:
15261 {
15262 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15263 break;
15264 }
15265 case WDA_DEL_TS_REQ:
15266 {
15267 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15268 break;
15269 }
15270 case WDA_ADDBA_REQ:
15271 {
15272 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15273 break;
15274 }
15275 case WDA_DELBA_IND:
15276 {
15277 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15278 break;
15279 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015280 case WDA_UPDATE_CHAN_LIST_REQ:
15281 {
15282 WDA_ProcessUpdateChannelList(pWDA,
15283 (tSirUpdateChanList *)pMsg->bodyptr);
15284 break;
15285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 case WDA_SET_LINK_STATE:
15287 {
15288 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15289 break;
15290 }
15291 case WDA_GET_STATISTICS_REQ:
15292 {
15293 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15294 break;
15295 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015296#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015297 case WDA_GET_ROAM_RSSI_REQ:
15298 {
15299 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15300 break;
15301 }
15302#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015303 case WDA_PWR_SAVE_CFG:
15304 {
15305 if(pWDA->wdaState == WDA_READY_STATE)
15306 {
15307 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15308 }
15309 else
15310 {
15311 if(NULL != pMsg->bodyptr)
15312 {
15313 vos_mem_free(pMsg->bodyptr);
15314 }
15315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15316 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15317 }
15318 break;
15319 }
15320 case WDA_ENTER_IMPS_REQ:
15321 {
15322 if(pWDA->wdaState == WDA_READY_STATE)
15323 {
15324 WDA_ProcessEnterImpsReq(pWDA);
15325 }
15326 else
15327 {
15328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15329 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15330 }
15331 break;
15332 }
15333 case WDA_EXIT_IMPS_REQ:
15334 {
15335 if(pWDA->wdaState == WDA_READY_STATE)
15336 {
15337 WDA_ProcessExitImpsReq(pWDA);
15338 }
15339 else
15340 {
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15342 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15343 }
15344 break;
15345 }
15346 case WDA_ENTER_BMPS_REQ:
15347 {
15348 if(pWDA->wdaState == WDA_READY_STATE)
15349 {
15350 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15351 }
15352 else
15353 {
15354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15355 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15356 }
15357 break;
15358 }
15359 case WDA_EXIT_BMPS_REQ:
15360 {
15361 if(pWDA->wdaState == WDA_READY_STATE)
15362 {
15363 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15364 }
15365 else
15366 {
15367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15368 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15369 }
15370 break;
15371 }
15372 case WDA_ENTER_UAPSD_REQ:
15373 {
15374 if(pWDA->wdaState == WDA_READY_STATE)
15375 {
15376 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15377 }
15378 else
15379 {
15380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15381 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15382 }
15383 break;
15384 }
15385 case WDA_EXIT_UAPSD_REQ:
15386 {
15387 if(pWDA->wdaState == WDA_READY_STATE)
15388 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015389 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 }
15391 else
15392 {
15393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15394 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15395 }
15396 break;
15397 }
15398 case WDA_UPDATE_UAPSD_IND:
15399 {
15400 if(pWDA->wdaState == WDA_READY_STATE)
15401 {
15402 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15403 }
15404 else
15405 {
15406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15407 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15408 }
15409 break;
15410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015411 case WDA_REGISTER_PE_CALLBACK :
15412 {
15413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15414 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15415 /*TODO: store the PE callback */
15416 /* Do Nothing? MSG Body should be freed at here */
15417 if(NULL != pMsg->bodyptr)
15418 {
15419 vos_mem_free(pMsg->bodyptr);
15420 }
15421 break;
15422 }
15423 case WDA_SYS_READY_IND :
15424 {
15425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15426 "Handling msg type WDA_SYS_READY_IND " );
15427 pWDA->wdaState = WDA_READY_STATE;
15428 if(NULL != pMsg->bodyptr)
15429 {
15430 vos_mem_free(pMsg->bodyptr);
15431 }
15432 break;
15433 }
15434 case WDA_BEACON_FILTER_IND :
15435 {
15436 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15437 break;
15438 }
15439 case WDA_BTC_SET_CFG:
15440 {
15441 /*TODO: handle this while dealing with BTC */
15442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15443 "Handling msg type WDA_BTC_SET_CFG " );
15444 /* Do Nothing? MSG Body should be freed at here */
15445 if(NULL != pMsg->bodyptr)
15446 {
15447 vos_mem_free(pMsg->bodyptr);
15448 }
15449 break;
15450 }
15451 case WDA_SIGNAL_BT_EVENT:
15452 {
15453 /*TODO: handle this while dealing with BTC */
15454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15455 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15456 /* Do Nothing? MSG Body should be freed at here */
15457 if(NULL != pMsg->bodyptr)
15458 {
15459 vos_mem_free(pMsg->bodyptr);
15460 }
15461 break;
15462 }
15463 case WDA_CFG_RXP_FILTER_REQ:
15464 {
15465 WDA_ProcessConfigureRxpFilterReq(pWDA,
15466 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15467 break;
15468 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015469 case WDA_MGMT_LOGGING_INIT_REQ:
15470 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015471 WDA_ProcessFWLoggingInitReq(pWDA,
15472 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015473 break;
15474 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015475 case WDA_GET_FRAME_LOG_REQ:
15476 {
15477 WDA_ProcessGetFrameLogReq(pWDA,
15478 (tAniGetFrameLogReq *)pMsg->bodyptr);
15479 break;
15480 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015481 case WDA_START_RSSI_MONITOR_REQ:
15482 {
15483 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15484 break;
15485 }
15486 case WDA_STOP_RSSI_MONITOR_REQ:
15487 {
15488 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15489 break;
15490 }
Karthick Sa35b0692015-08-21 15:57:05 +053015491 case WDA_SEND_LOG_DONE_IND:
15492 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015493 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015494 break;
15495 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015496 case WDA_FATAL_EVENT_LOGS_REQ:
15497 {
15498 WDA_ProcessFatalEventLogsReq(pWDA,
15499 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15500 break;
15501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 case WDA_SET_HOST_OFFLOAD:
15503 {
15504 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15505 break;
15506 }
15507 case WDA_SET_KEEP_ALIVE:
15508 {
15509 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15510 break;
15511 }
15512#ifdef WLAN_NS_OFFLOAD
15513 case WDA_SET_NS_OFFLOAD:
15514 {
15515 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15516 break;
15517 }
15518#endif //WLAN_NS_OFFLOAD
15519 case WDA_ADD_STA_SELF_REQ:
15520 {
15521 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15522 break;
15523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015524 case WDA_DEL_STA_SELF_REQ:
15525 {
15526 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15527 break;
15528 }
15529 case WDA_WOWL_ADD_BCAST_PTRN:
15530 {
15531 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15532 break;
15533 }
15534 case WDA_WOWL_DEL_BCAST_PTRN:
15535 {
15536 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15537 break;
15538 }
15539 case WDA_WOWL_ENTER_REQ:
15540 {
15541 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15542 break;
15543 }
15544 case WDA_WOWL_EXIT_REQ:
15545 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015546 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015547 break;
15548 }
15549 case WDA_TL_FLUSH_AC_REQ:
15550 {
15551 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15552 break;
15553 }
15554 case WDA_SIGNAL_BTAMP_EVENT:
15555 {
15556 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15557 break;
15558 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015559 case WDA_FW_STATS_GET_REQ:
15560 {
15561 WDA_ProcessFWStatsGetReq(pWDA,
15562 (tSirFWStatsGetReq *)pMsg->bodyptr);
15563 break;
15564 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015565#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15566 case WDA_LINK_LAYER_STATS_SET_REQ:
15567 {
15568 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15569 break;
15570 }
15571 case WDA_LINK_LAYER_STATS_GET_REQ:
15572 {
15573 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15574 break;
15575 }
15576 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15577 {
15578 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15579 break;
15580 }
15581#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015582#ifdef WLAN_FEATURE_EXTSCAN
15583 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15584 {
15585 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15586 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15587 break;
15588 }
15589 case WDA_EXTSCAN_START_REQ:
15590 {
15591 WDA_ProcessEXTScanStartReq(pWDA,
15592 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15593 break;
15594 }
15595 case WDA_EXTSCAN_STOP_REQ:
15596 {
15597 WDA_ProcessEXTScanStopReq(pWDA,
15598 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15599 break;
15600 }
15601 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15602 {
15603 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15604 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15605 break;
15606 }
15607 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15608 {
15609 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15610 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15611 break;
15612 }
15613 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15614 {
15615 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15616 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15617 break;
15618 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015619 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15620 {
15621 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15622 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15623 break;
15624 }
15625 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15626 {
15627 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15628 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15629 break;
15630 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015631 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15632 {
15633 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15634 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15635 break;
15636 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015637#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015638#ifdef WDA_UT
15639 case WDA_WDI_EVENT_MSG:
15640 {
15641 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15642 break ;
15643 }
15644#endif
15645 case WDA_UPDATE_BEACON_IND:
15646 {
15647 WDA_ProcessUpdateBeaconParams(pWDA,
15648 (tUpdateBeaconParams *)pMsg->bodyptr);
15649 break;
15650 }
15651 case WDA_SEND_BEACON_REQ:
15652 {
15653 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15654 break;
15655 }
15656 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15657 {
15658 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15659 (tSendProbeRespParams *)pMsg->bodyptr);
15660 break;
15661 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015662#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 case WDA_SET_MAX_TX_POWER_REQ:
15664 {
15665 WDA_ProcessSetMaxTxPowerReq(pWDA,
15666 (tMaxTxPowerParams *)pMsg->bodyptr);
15667 break;
15668 }
15669#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015670 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15671 {
15672 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15673 pMsg->bodyptr);
15674 break;
15675 }
schang86c22c42013-03-13 18:41:24 -070015676 case WDA_SET_TX_POWER_REQ:
15677 {
15678 WDA_ProcessSetTxPowerReq(pWDA,
15679 (tSirSetTxPowerReq *)pMsg->bodyptr);
15680 break;
15681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015682 case WDA_SET_P2P_GO_NOA_REQ:
15683 {
15684 WDA_ProcessSetP2PGONOAReq(pWDA,
15685 (tP2pPsParams *)pMsg->bodyptr);
15686 break;
15687 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015688 /* timer related messages */
15689 case WDA_TIMER_BA_ACTIVITY_REQ:
15690 {
15691 WDA_BaCheckActivity(pWDA) ;
15692 break ;
15693 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015694
15695 /* timer related messages */
15696 case WDA_TIMER_TRAFFIC_STATS_IND:
15697 {
15698 WDA_TimerTrafficStatsInd(pWDA);
15699 break;
15700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015701#ifdef WLAN_FEATURE_VOWIFI_11R
15702 case WDA_AGGR_QOS_REQ:
15703 {
15704 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15705 break;
15706 }
15707#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015708 case WDA_FTM_CMD_REQ:
15709 {
15710 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15711 break ;
15712 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015713#ifdef FEATURE_OEM_DATA_SUPPORT
15714 case WDA_START_OEM_DATA_REQ:
15715 {
15716 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15717 break;
15718 }
15719#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015720 /* Tx Complete Time out Indication */
15721 case WDA_TX_COMPLETE_TIMEOUT_IND:
15722 {
15723 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15724 break;
15725 }
15726 case WDA_WLAN_SUSPEND_IND:
15727 {
15728 WDA_ProcessWlanSuspendInd(pWDA,
15729 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15730 break;
15731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 case WDA_WLAN_RESUME_REQ:
15733 {
15734 WDA_ProcessWlanResumeReq(pWDA,
15735 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15736 break;
15737 }
15738
15739 case WDA_UPDATE_CF_IND:
15740 {
15741 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15742 pMsg->bodyptr = NULL;
15743 break;
15744 }
15745#ifdef FEATURE_WLAN_SCAN_PNO
15746 case WDA_SET_PNO_REQ:
15747 {
15748 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15749 break;
15750 }
15751 case WDA_UPDATE_SCAN_PARAMS_REQ:
15752 {
15753 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15754 break;
15755 }
15756 case WDA_SET_RSSI_FILTER_REQ:
15757 {
15758 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15759 break;
15760 }
15761#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015762#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015763 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015764 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015765 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015766 break;
15767 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053015768 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
15769 {
15770 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
15771 break;
15772 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015773#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015774 case WDA_SET_TX_PER_TRACKING_REQ:
15775 {
15776 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15777 break;
15778 }
15779
15780#ifdef WLAN_FEATURE_PACKET_FILTERING
15781 case WDA_8023_MULTICAST_LIST_REQ:
15782 {
15783 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15784 break;
15785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015786 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15787 {
15788 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15789 break;
15790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15792 {
15793 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15794 break;
15795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015796 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15797 {
15798 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15799 break;
15800 }
15801#endif // WLAN_FEATURE_PACKET_FILTERING
15802
15803
15804 case WDA_TRANSMISSION_CONTROL_IND:
15805 {
15806 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15807 break;
15808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 case WDA_SET_POWER_PARAMS_REQ:
15810 {
15811 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15812 break;
15813 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015814 case WDA_FW_MEM_DUMP_REQ:
15815 {
15816 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15817 break;
15818 }
15819
Jeff Johnson295189b2012-06-20 16:38:30 -070015820#ifdef WLAN_FEATURE_GTK_OFFLOAD
15821 case WDA_GTK_OFFLOAD_REQ:
15822 {
15823 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15824 break;
15825 }
15826
15827 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15828 {
15829 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15830 break;
15831 }
15832#endif //WLAN_FEATURE_GTK_OFFLOAD
15833
15834 case WDA_SET_TM_LEVEL_REQ:
15835 {
15836 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15837 break;
15838 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015839
Mohit Khanna4a70d262012-09-11 16:30:12 -070015840 case WDA_UPDATE_OP_MODE:
15841 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015842 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15843 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15844 {
15845 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15846 }
15847 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015848 {
15849 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15850 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15851 else
15852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015853 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015854 }
15855 else
15856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015857 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015858 break;
15859 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015860#ifdef WLAN_FEATURE_11W
15861 case WDA_EXCLUDE_UNENCRYPTED_IND:
15862 {
15863 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15864 break;
15865 }
15866#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015867#ifdef FEATURE_WLAN_TDLS
15868 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15869 {
15870 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15871 break;
15872 }
15873#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015874 case WDA_DHCP_START_IND:
15875 {
15876 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15877 break;
15878 }
15879 case WDA_DHCP_STOP_IND:
15880 {
15881 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15882 break;
15883 }
Leo Chang9056f462013-08-01 19:21:11 -070015884#ifdef FEATURE_WLAN_LPHB
15885 case WDA_LPHB_CONF_REQ:
15886 {
15887 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15888 break;
15889 }
15890#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015891 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15892 {
15893 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15894 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15895 break;
15896 }
15897 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15898 {
15899 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15900 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15901 break;
15902 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015903 case WDA_RATE_UPDATE_IND:
15904 {
15905 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15906 break;
15907 }
15908#ifdef WLAN_FEATURE_RMC
15909 case WDA_RMC_RULER_REQ:
15910 {
15911 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15912 break;
15913 }
15914 case WDA_RMC_UPDATE_IND:
15915 {
15916 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15917 break;
15918 }
15919 case WDA_GET_IBSS_PEER_INFO_REQ:
15920 {
15921 WDA_ProcessIbssPeerInfoReq(pWDA,
15922 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15923 break;
15924 }
15925 case WDA_TX_FAIL_MONITOR_IND:
15926 {
15927 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15928 break;
15929 }
15930#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053015931#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15932 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
15933 {
15934 WDA_ProcessPERRoamScanTriggerReq(pWDA,
15935 (tPERRoamScanStart *)pMsg->bodyptr);
15936 break;
15937 }
15938#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053015939#ifdef FEATURE_WLAN_BATCH_SCAN
15940 case WDA_SET_BATCH_SCAN_REQ:
15941 {
15942 WDA_ProcessSetBatchScanReq(pWDA,
15943 (tSirSetBatchScanReq *)pMsg->bodyptr);
15944 break;
15945 }
15946 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15947 {
15948 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15949 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15950 break;
15951 }
15952 case WDA_STOP_BATCH_SCAN_IND:
15953 {
15954 WDA_ProcessStopBatchScanInd(pWDA,
15955 (tSirStopBatchScanInd *)pMsg->bodyptr);
15956 break;
15957 }
c_hpothu92367912014-05-01 15:18:17 +053015958 case WDA_GET_BCN_MISS_RATE_REQ:
15959 WDA_ProcessGetBcnMissRateReq(pWDA,
15960 (tSirBcnMissRateReq *)pMsg->bodyptr);
15961 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015962#endif
15963
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015964 case WDA_HT40_OBSS_SCAN_IND:
15965 {
15966 WDA_ProcessHT40OBSSScanInd(pWDA,
15967 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15968 break;
15969 }
15970 case WDA_HT40_OBSS_STOP_SCAN_IND:
15971 {
15972 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15973 (tANI_U8*)pMsg->bodyptr);
15974 break;
15975 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015976// tdlsoffchan
15977#ifdef FEATURE_WLAN_TDLS
15978 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15979 {
15980 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15981 break;
15982 }
15983#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015984 case WDA_SPOOF_MAC_ADDR_REQ:
15985 {
15986 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15987 break;
15988 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015989 case WDA_ENCRYPT_MSG_REQ:
15990 {
15991 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15992 break;
15993 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015994
15995 case WDA_NAN_REQUEST:
15996 {
15997 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15998 break;
15999 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016000 case WDA_SET_RTS_CTS_HTVHT:
16001 {
16002 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16003 break;
16004 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016005
16006 case WDA_MON_START_REQ:
16007 {
16008 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16009 break;
16010 }
16011 case WDA_MON_STOP_REQ:
16012 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016013 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016014 break;
16015 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016016 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16017 {
16018 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16019 break;
16020 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016021 case WDA_WIFI_CONFIG_REQ:
16022 {
16023 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16024 break;
16025 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016026#ifdef FEATURE_OEM_DATA_SUPPORT
16027 case WDA_START_OEM_DATA_REQ_IND_NEW:
16028 {
16029 WDA_ProcessStartOemDataReqIndNew(pWDA,
16030 (tOemDataReqNewConfig *)pMsg->bodyptr);
16031 break;
16032 }
16033#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016034 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16035 {
16036 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16037 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16038 break;
16039 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016040 case WDA_MODIFY_ROAM_PARAMS_IND:
16041 {
16042 WDA_ProcessBcnMissPenaltyCount(pWDA,
16043 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16044 break;
16045 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016046
16047 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16048 wda_process_set_allowed_action_frames_ind(pWDA,
16049 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16050 break;
16051
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016052 case WDA_PAUSE_TL_IND:
16053 {
16054 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16055 break;
16056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016057 default:
16058 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016060 "No Handling for msg type %x in WDA "
16061 ,pMsg->type);
16062 /* Do Nothing? MSG Body should be freed at here */
16063 if(NULL != pMsg->bodyptr)
16064 {
16065 vos_mem_free(pMsg->bodyptr);
16066 }
16067 //WDA_VOS_ASSERT(0) ;
16068 }
16069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 return status ;
16071}
16072
Jeff Johnson295189b2012-06-20 16:38:30 -070016073/*
16074 * FUNCTION: WDA_LowLevelIndCallback
16075 * IND API callback from WDI, send Ind to PE
16076 */
16077void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16078 void* pUserData )
16079{
16080 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16081#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16082 tSirRSSINotification rssiNotification;
16083#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016084 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016085 {
16086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016087 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016088 VOS_ASSERT(0);
16089 return ;
16090 }
16091
16092 switch(wdiLowLevelInd->wdiIndicationType)
16093 {
16094 case WDI_RSSI_NOTIFICATION_IND:
16095 {
16096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16097 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016098#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16099 rssiNotification.bReserved =
16100 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16101 rssiNotification.bRssiThres1NegCross =
16102 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16103 rssiNotification.bRssiThres1PosCross =
16104 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16105 rssiNotification.bRssiThres2NegCross =
16106 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16107 rssiNotification.bRssiThres2PosCross =
16108 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16109 rssiNotification.bRssiThres3NegCross =
16110 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16111 rssiNotification.bRssiThres3PosCross =
16112 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016113 rssiNotification.avgRssi = (v_S7_t)
16114 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016115 WLANTL_BMPSRSSIRegionChangedNotification(
16116 pWDA->pVosContext,
16117 &rssiNotification);
16118#endif
16119 break ;
16120 }
16121 case WDI_MISSED_BEACON_IND:
16122 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016123 tpSirSmeMissedBeaconInd pMissBeacInd =
16124 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16126 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016127 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016128 if(NULL == pMissBeacInd)
16129 {
16130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16131 "%s: VOS MEM Alloc Failure", __func__);
16132 break;
16133 }
16134 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16135 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16136 pMissBeacInd->bssIdx =
16137 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16138 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016139 break ;
16140 }
16141 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16142 {
16143 /* TODO: Decode Ind and send Ind to PE */
16144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16145 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16146 break ;
16147 }
16148
16149 case WDI_MIC_FAILURE_IND:
16150 {
16151 tpSirSmeMicFailureInd pMicInd =
16152 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16153
16154 if(NULL == pMicInd)
16155 {
16156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016158 break;
16159 }
16160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16161 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016162 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16163 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16164 vos_mem_copy(pMicInd->bssId,
16165 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16166 sizeof(tSirMacAddr));
16167 vos_mem_copy(pMicInd->info.srcMacAddr,
16168 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16169 sizeof(tSirMacAddr));
16170 vos_mem_copy(pMicInd->info.taMacAddr,
16171 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16172 sizeof(tSirMacAddr));
16173 vos_mem_copy(pMicInd->info.dstMacAddr,
16174 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16175 sizeof(tSirMacAddr));
16176 vos_mem_copy(pMicInd->info.rxMacAddr,
16177 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16178 sizeof(tSirMacAddr));
16179 pMicInd->info.multicast =
16180 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16181 pMicInd->info.keyId=
16182 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16183 pMicInd->info.IV1=
16184 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16185 vos_mem_copy(pMicInd->info.TSC,
16186 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16188 (void *)pMicInd , 0) ;
16189 break ;
16190 }
16191 case WDI_FATAL_ERROR_IND:
16192 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016193 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016194 /* TODO: Decode Ind and send Ind to PE */
16195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16196 "Received WDI_FATAL_ERROR_IND from WDI ");
16197 break ;
16198 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016199 case WDI_DEL_STA_IND:
16200 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016201 tpDeleteStaContext pDelSTACtx =
16202 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16203
16204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16205 "Received WDI_DEL_STA_IND from WDI ");
16206 if(NULL == pDelSTACtx)
16207 {
16208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016210 break;
16211 }
16212 vos_mem_copy(pDelSTACtx->addr2,
16213 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16214 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016215 vos_mem_copy(pDelSTACtx->bssId,
16216 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16217 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016218 pDelSTACtx->assocId =
16219 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16220 pDelSTACtx->reasonCode =
16221 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16222 pDelSTACtx->staId =
16223 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016224 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16225 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016226 break ;
16227 }
16228 case WDI_COEX_IND:
16229 {
16230 tANI_U32 index;
16231 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016232 tSirSmeCoexInd *pSmeCoexInd;
16233
16234 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16235 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16236 {
16237 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16238 {
16239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16240 FL("Coex state: 0x%x coex feature: 0x%x"),
16241 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16242 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16243
16244 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16245 {
16246 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16247 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16248 }
16249 }
16250 break;
16251 }
16252
16253 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 if(NULL == pSmeCoexInd)
16255 {
16256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016257 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 break;
16259 }
16260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16261 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016262 /* Message Header */
16263 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16264 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016265 /* Info from WDI Indication */
16266 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16267 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16268 {
16269 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016271 /* VOS message wrapper */
16272 vosMsg.type = eWNI_SME_COEX_IND;
16273 vosMsg.bodyptr = (void *)pSmeCoexInd;
16274 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016275 /* Send message to SME */
16276 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16277 {
16278 /* free the mem and return */
16279 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16280 }
16281 else
16282 {
16283 /* DEBUG */
16284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16285 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16286 pSmeCoexInd->coexIndType,
16287 pSmeCoexInd->coexIndData[0],
16288 pSmeCoexInd->coexIndData[1],
16289 pSmeCoexInd->coexIndData[2],
16290 pSmeCoexInd->coexIndData[3]);
16291 }
16292 break;
16293 }
16294 case WDI_TX_COMPLETE_IND:
16295 {
16296 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16297 /* Calling TxCompleteAck Indication from wda context*/
16298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16299 "Complete Indication received from HAL");
16300 if( pWDA->pAckTxCbFunc )
16301 {
16302 if( VOS_STATUS_SUCCESS !=
16303 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16304 {
16305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16306 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016307 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016308 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016309 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16310 else
16311 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 pWDA->pAckTxCbFunc = NULL;
16313 }
16314 else
16315 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016317 "Tx Complete Indication is received after timeout ");
16318 }
16319 break;
16320 }
Viral Modid86bde22012-12-10 13:09:21 -080016321 case WDI_P2P_NOA_START_IND :
16322 {
16323 tSirP2PNoaStart *pP2pNoaStart =
16324 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16325
16326 if (NULL == pP2pNoaStart)
16327 {
16328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16329 "Memory allocation failure, "
16330 "WDI_P2P_NOA_START_IND not forwarded");
16331 break;
16332 }
16333 pP2pNoaStart->status =
16334 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16335 pP2pNoaStart->bssIdx =
16336 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16337 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16338 (void *)pP2pNoaStart , 0) ;
16339 break;
16340 }
16341
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016342#ifdef FEATURE_WLAN_TDLS
16343 case WDI_TDLS_IND :
16344 {
16345 tSirTdlsInd *pTdlsInd =
16346 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16347
16348 if (NULL == pTdlsInd)
16349 {
16350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16351 "Memory allocation failure, "
16352 "WDI_TDLS_IND not forwarded");
16353 break;
16354 }
16355 pTdlsInd->status =
16356 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16357 pTdlsInd->assocId =
16358 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16359 pTdlsInd->staIdx =
16360 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16361 pTdlsInd->reasonCode =
16362 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16363 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16364 (void *)pTdlsInd , 0) ;
16365 break;
16366 }
16367#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016368 case WDI_P2P_NOA_ATTR_IND :
16369 {
16370 tSirP2PNoaAttr *pP2pNoaAttr =
16371 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16373 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016374 if (NULL == pP2pNoaAttr)
16375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16377 "Memory allocation failure, "
16378 "WDI_P2P_NOA_ATTR_IND not forwarded");
16379 break;
16380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016381 pP2pNoaAttr->index =
16382 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16383 pP2pNoaAttr->oppPsFlag =
16384 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16385 pP2pNoaAttr->ctWin =
16386 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16387
16388 pP2pNoaAttr->uNoa1IntervalCnt =
16389 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16390 pP2pNoaAttr->uNoa1Duration =
16391 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16392 pP2pNoaAttr->uNoa1Interval =
16393 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16394 pP2pNoaAttr->uNoa1StartTime =
16395 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016396 pP2pNoaAttr->uNoa2IntervalCnt =
16397 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16398 pP2pNoaAttr->uNoa2Duration =
16399 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16400 pP2pNoaAttr->uNoa2Interval =
16401 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16402 pP2pNoaAttr->uNoa2StartTime =
16403 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016404 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16405 (void *)pP2pNoaAttr , 0) ;
16406 break;
16407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016408#ifdef FEATURE_WLAN_SCAN_PNO
16409 case WDI_PREF_NETWORK_FOUND_IND:
16410 {
16411 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016412 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16413 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16414 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16415 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16416
Jeff Johnson295189b2012-06-20 16:38:30 -070016417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16418 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016419 if (NULL == pPrefNetworkFoundInd)
16420 {
16421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16422 "Memory allocation failure, "
16423 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016424 if (NULL !=
16425 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16426 {
16427 wpalMemoryFree(
16428 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16429 );
16430 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016432 break;
16433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016434 /* Message Header */
16435 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016436 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016437
16438 /* Info from WDI Indication */
16439 pPrefNetworkFoundInd->ssId.length =
16440 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016441 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016442 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16443 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16444 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016445 if (NULL !=
16446 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16447 {
16448 pPrefNetworkFoundInd->frameLength =
16449 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16450 vos_mem_copy( pPrefNetworkFoundInd->data,
16451 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16452 pPrefNetworkFoundInd->frameLength);
16453 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16454 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16455 }
16456 else
16457 {
16458 pPrefNetworkFoundInd->frameLength = 0;
16459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016460 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016461 /* VOS message wrapper */
16462 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16463 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16464 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016465 /* Send message to SME */
16466 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16467 {
16468 /* free the mem and return */
16469 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16470 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016471 break;
16472 }
16473#endif // FEATURE_WLAN_SCAN_PNO
16474
16475#ifdef WLAN_WAKEUP_EVENTS
16476 case WDI_WAKE_REASON_IND:
16477 {
16478 vos_msg_t vosMsg;
16479 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16480 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16481 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16482
16483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016484 "[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 -070016485 wdiLowLevelInd->wdiIndicationType,
16486 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16487 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16488 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16489
16490 if (NULL == pWakeReasonInd)
16491 {
16492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16493 "Memory allocation failure, "
16494 "WDI_WAKE_REASON_IND not forwarded");
16495 break;
16496 }
16497
16498 vos_mem_zero(pWakeReasonInd, allocSize);
16499
16500 /* Message Header */
16501 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16502 pWakeReasonInd->mesgLen = allocSize;
16503
16504 /* Info from WDI Indication */
16505 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16506 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16507 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16508 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16509 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16510 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16511 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16512 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16513
16514 /* VOS message wrapper */
16515 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16516 vosMsg.bodyptr = (void *) pWakeReasonInd;
16517 vosMsg.bodyval = 0;
16518
16519 /* Send message to SME */
16520 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16521 {
16522 /* free the mem and return */
16523 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16524 }
16525
16526 break;
16527 }
16528#endif // WLAN_WAKEUP_EVENTS
16529
16530 case WDI_TX_PER_HIT_IND:
16531 {
16532 vos_msg_t vosMsg;
16533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16534 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16535 /* VOS message wrapper */
16536 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16537 vosMsg.bodyptr = NULL;
16538 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016539 /* Send message to SME */
16540 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16541 {
16542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16543 }
16544 break;
16545 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016546#ifdef WLAN_FEATURE_RMC
16547 case WDI_TX_FAIL_IND:
16548 {
16549 if (pWDA->txFailIndCallback)
16550 {
16551 pWDA->txFailIndCallback(
16552 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16553 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16554 }
16555 break;
16556 }
16557#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016558
Leo Chang9056f462013-08-01 19:21:11 -070016559#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016560 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016561 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016562 vos_msg_t vosMsg;
16563 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016564
Leo Changd9df8aa2013-09-26 13:32:26 -070016565 lphbInd =
16566 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16567 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016568 {
16569 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16570 "%s: LPHB IND buffer alloc Fail", __func__);
16571 return ;
16572 }
16573
Leo Changd9df8aa2013-09-26 13:32:26 -070016574 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016575 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016576 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016577 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016578 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016579 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16580
16581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016582 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016583 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16584
Leo Changd9df8aa2013-09-26 13:32:26 -070016585 vosMsg.type = eWNI_SME_LPHB_IND;
16586 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016587 vosMsg.bodyval = 0;
16588 /* Send message to SME */
16589 if (VOS_STATUS_SUCCESS !=
16590 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16591 {
16592 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16593 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016594 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016595 }
16596 break;
16597 }
16598#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016599 case WDI_PERIODIC_TX_PTRN_FW_IND:
16600 {
16601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16602 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16603 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16604 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16605 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16606 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16607 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16608
16609 break;
16610 }
Leo Chang9056f462013-08-01 19:21:11 -070016611
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016612 case WDI_IBSS_PEER_INACTIVITY_IND:
16613 {
16614 tSirIbssPeerInactivityInd *pIbssInd =
16615 (tSirIbssPeerInactivityInd *)
16616 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16617
16618 if (NULL == pIbssInd)
16619 {
16620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16621 "Memory allocation failure, "
16622 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16623 break;
16624 }
16625
16626 pIbssInd->bssIdx =
16627 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16628 pIbssInd->staIdx =
16629 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16630 vos_mem_copy(pIbssInd->peerAddr,
16631 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16632 sizeof(tSirMacAddr));
16633 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16634 break;
16635 }
16636
Abhishek Singh00b71972016-01-07 10:51:04 +053016637#ifdef WLAN_FEATURE_RMC
16638 case WDI_RMC_RULER_PICK_NEW :
16639 {
16640 tSirRmcUpdateInd *pRmcUpdateInd =
16641 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16642
16643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16644 "Received WDI_RMC_UPDATE_IND from WDI");
16645 if (NULL == pRmcUpdateInd)
16646 {
16647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16648 "Memory allocation failure, "
16649 "WDI_RMC_UPDATE_IND not forwarded");
16650 break;
16651 }
16652
16653 pRmcUpdateInd->indication =
16654 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16655 pRmcUpdateInd->role =
16656 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16657
16658 /* Copy the mcast transmitter which should be us */
16659 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16660 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16661 mcastTransmitter,
16662 sizeof(tSirMacAddr));
16663 /* Copy the mcast group address */
16664 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16665 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16666 sizeof(tSirMacAddr));
16667 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16668 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16669 sizeof(tSirMacAddr));
16670 vos_mem_copy(pRmcUpdateInd->ruler,
16671 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16672 sizeof(pRmcUpdateInd->ruler));
16673
16674 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16675 break;
16676 }
16677#endif /* WLAN_FEATURE_RMC */
16678
Rajeev79dbe4c2013-10-05 11:03:42 +053016679#ifdef FEATURE_WLAN_BATCH_SCAN
16680 case WDI_BATCH_SCAN_RESULT_IND:
16681 {
16682 void *pBatchScanResult;
16683 void *pCallbackContext;
16684 tpAniSirGlobal pMac;
16685
16686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16687 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16688
16689 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016690 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016691 {
16692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16693 "%s:pWDA is NULL", __func__);
16694 VOS_ASSERT(0);
16695 return;
16696 }
16697
16698 pBatchScanResult =
16699 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16700 if (NULL == pBatchScanResult)
16701 {
16702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16703 "%s:Batch scan result from FW is null can't invoke HDD callback",
16704 __func__);
16705 VOS_ASSERT(0);
16706 return;
16707 }
16708
16709 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16710 if (NULL == pMac)
16711 {
16712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16713 "%s:pMac is NULL", __func__);
16714 VOS_ASSERT(0);
16715 return;
16716 }
16717
16718 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16719 /*call hdd callback with set batch scan response data*/
16720 if(pMac->pmc.batchScanResultCallback)
16721 {
16722 pMac->pmc.batchScanResultCallback(pCallbackContext,
16723 pBatchScanResult);
16724 }
16725 else
16726 {
16727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16728 "%s:HDD callback is null", __func__);
16729 VOS_ASSERT(0);
16730 }
16731 break;
16732 }
16733#endif
16734
Leo Chang0b0e45a2013-12-15 15:18:55 -080016735#ifdef FEATURE_WLAN_CH_AVOID
16736 case WDI_CH_AVOID_IND:
16737 {
16738 vos_msg_t vosMsg;
16739 tSirChAvoidIndType *chAvoidInd;
16740
16741 chAvoidInd =
16742 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16743 if (NULL == chAvoidInd)
16744 {
16745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16746 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16747 return ;
16748 }
16749
16750 chAvoidInd->avoidRangeCount =
16751 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16752 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16753 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16754 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16755
16756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16757 "%s : WDA CH avoid notification", __func__);
16758
16759 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16760 vosMsg.bodyptr = chAvoidInd;
16761 vosMsg.bodyval = 0;
16762 /* Send message to SME */
16763 if (VOS_STATUS_SUCCESS !=
16764 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16765 {
16766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16767 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16768 vos_mem_free(chAvoidInd);
16769 }
16770 break;
16771 }
16772#endif /* FEATURE_WLAN_CH_AVOID */
16773
Sunil Duttbd736ed2014-05-26 21:19:41 +053016774#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16775 case WDI_LL_STATS_RESULTS_IND:
16776 {
16777 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016778 tpAniSirGlobal pMac;
16779
16780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16781 "Received WDI_LL_STATS_RESULTS_IND from FW");
16782
16783 /*sanity check*/
16784 if (NULL == pWDA)
16785 {
16786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16787 "%s:pWDA is NULL", __func__);
16788 VOS_ASSERT(0);
16789 return;
16790 }
16791
16792 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016793 (void *)wdiLowLevelInd->
16794 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016795 if (NULL == pLinkLayerStatsInd)
16796 {
16797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16798 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16799 __func__);
16800 VOS_ASSERT(0);
16801 return;
16802 }
16803
16804 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16805 if (NULL == pMac)
16806 {
16807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16808 "%s:pMac is NULL", __func__);
16809 VOS_ASSERT(0);
16810 return;
16811 }
16812
Dino Mycled3d50022014-07-07 12:58:25 +053016813 /* call hdd callback with Link Layer Statistics.
16814 * vdev_id/ifacId in link_stats_results will be
16815 * used to retrieve the correct HDD context
16816 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016817 if (pMac->sme.pLinkLayerStatsIndCallback)
16818 {
Dino Mycled3d50022014-07-07 12:58:25 +053016819 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016820 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016821 pLinkLayerStatsInd,
16822 wdiLowLevelInd->
16823 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016824 }
16825 else
16826 {
16827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16828 "%s:HDD callback is null", __func__);
16829 }
16830 break;
16831 }
16832#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16833
Dino Mycle41bdc942014-06-10 11:30:24 +053016834#ifdef WLAN_FEATURE_EXTSCAN
16835 case WDI_EXTSCAN_PROGRESS_IND:
16836 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16837 case WDI_EXTSCAN_SCAN_RESULT_IND:
16838 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016839 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016840 {
16841 void *pEXTScanData;
16842 void *pCallbackContext;
16843 tpAniSirGlobal pMac;
16844 tANI_U16 indType;
16845
16846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16847 "Received WDI_EXTSCAN Indications from FW");
16848 /*sanity check*/
16849 if (NULL == pWDA)
16850 {
16851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16852 "%s:pWDA is NULL", __func__);
16853 VOS_ASSERT(0);
16854 return;
16855 }
16856 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16857 {
16858 indType = WDA_EXTSCAN_PROGRESS_IND;
16859
16860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16861 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16862 }
16863 if (wdiLowLevelInd->wdiIndicationType ==
16864 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16865 {
16866 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16867
16868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16869 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16870 }
16871 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16872 {
16873 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16874
16875 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16876 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16877 }
16878 if (wdiLowLevelInd->wdiIndicationType ==
16879 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16880 {
16881 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16882
16883 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16884 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16885 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016886 if (wdiLowLevelInd->wdiIndicationType ==
16887 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16888 {
16889 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16890
16891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16892 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16893 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016894
16895 pEXTScanData =
16896 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16897 if (NULL == pEXTScanData)
16898 {
16899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16900 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16901 __func__);
16902 VOS_ASSERT(0);
16903 return;
16904 }
16905
16906 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16907 if (NULL == pMac)
16908 {
16909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16910 "%s:pMac is NULL", __func__);
16911 VOS_ASSERT(0);
16912 return;
16913 }
16914
16915 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16916
16917 if(pMac->sme.pEXTScanIndCb)
16918 {
16919 pMac->sme.pEXTScanIndCb(pCallbackContext,
16920 indType,
16921 pEXTScanData);
16922 }
16923 else
16924 {
16925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16926 "%s:HDD callback is null", __func__);
16927 }
16928 break;
16929 }
16930#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016931 case WDI_DEL_BA_IND:
16932 {
16933 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016934 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016935
16936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16937 "Received WDI_DEL_BA_IND from WDI ");
16938 if(NULL == pDelBAInd)
16939 {
16940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16941 "%s: VOS MEM Alloc Failure", __func__);
16942 break;
16943 }
16944 vos_mem_copy(pDelBAInd->peerMacAddr,
16945 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16946 sizeof(tSirMacAddr));
16947 vos_mem_copy(pDelBAInd->bssId,
16948 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16949 sizeof(tSirMacAddr));
16950 pDelBAInd->staIdx =
16951 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16952 pDelBAInd->baTID =
16953 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16954 pDelBAInd->baDirection =
16955 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16956 pDelBAInd->reasonCode =
16957 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16958
16959 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16960 (void *)pDelBAInd , 0) ;
16961 break;
16962 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016963 case WDI_NAN_EVENT_IND:
16964 {
16965 vos_msg_t vosMsg;
16966 tpSirNanEvent pSirNanEvent = NULL;
16967
16968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16969 "Received WDI_NAN_EVENT");
16970
16971 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16972 - sizeof( pSirNanEvent->event_data)
16973 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16974
16975 if (NULL == pSirNanEvent)
16976 {
16977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16978 "%s: VOS MEM Alloc Failure", __func__);
16979 VOS_ASSERT(0) ;
16980 break;
16981 }
16982
16983 pSirNanEvent->event_data_len =
16984 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16985
16986 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16987 {
16988 vos_mem_copy( pSirNanEvent->event_data,
16989 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16990 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16991 }
16992
16993 /* VOS message wrapper */
16994 vosMsg.type = eWNI_SME_NAN_EVENT;
16995 vosMsg.bodyptr = pSirNanEvent;
16996 vosMsg.bodyval = 0;
16997
16998 /* Send message to SME */
16999 if (VOS_STATUS_SUCCESS
17000 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17001 {
17002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17003 "post eWNI_SME_NAN_EVENT to SME Failed");
17004 vos_mem_free(pSirNanEvent);
17005 }
17006 break;
17007 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017008 case WDI_LOST_LINK_PARAMS_IND:
17009 {
17010 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17011 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017012
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017013 if (NULL == pLostLinkParamInd)
17014 {
17015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17016 "%s: VOS MEM Alloc Failure", __func__);
17017 break;
17018 }
17019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17020 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17021
17022 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17023 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17024 pLostLinkParamInd->info.bssIdx =
17025 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17026 pLostLinkParamInd->info.rssi =
17027 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17028 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17029 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17030 sizeof(tSirMacAddr));
17031 pLostLinkParamInd->info.linkFlCnt =
17032 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17033 pLostLinkParamInd->info.linkFlTx =
17034 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17035 pLostLinkParamInd->info.lastDataRate =
17036 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17037 pLostLinkParamInd->info.rsvd1 =
17038 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17039 pLostLinkParamInd->info.rsvd2 =
17040 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17041 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17042 (void *)pLostLinkParamInd , 0) ;
17043 break;
17044 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017045 case WDI_RSSI_BREACHED_IND:
17046 {
17047 WDI_RssiBreachedIndType *pRssiBreachedInd;
17048 tpAniSirGlobal pMac;
17049
17050 pRssiBreachedInd =
17051 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17053 "Received WDI_RSSI_BREACHED_IND from FW");
17054
17055 vos_mem_copy(pRssiBreachedInd,
17056 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17057 sizeof(WDI_RssiBreachedIndType));
17058
17059 /*sanity check*/
17060 if (NULL == pWDA)
17061 {
17062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17063 "%s:pWDA is NULL", __func__);
17064 vos_mem_free(pRssiBreachedInd);
17065 VOS_ASSERT(0);
17066 return;
17067 }
17068
17069 if (NULL == pRssiBreachedInd)
17070 {
17071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17072 "%s:Breach indication from FW is null can't invoke HDD callback",
17073 __func__);
17074 VOS_ASSERT(0);
17075 return;
17076 }
17077
17078 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17079 if (NULL == pMac)
17080 {
17081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17082 "%s:pMac is NULL", __func__);
17083 VOS_ASSERT(0);
17084 vos_mem_free(pRssiBreachedInd);
17085 return;
17086 }
17087
17088 if (pMac->sme.rssiThresholdBreachedCb)
17089 {
17090 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17091 }
17092 else
17093 {
17094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17095 "%s:HDD callback is null", __func__);
17096 }
17097 vos_mem_free(pRssiBreachedInd);
17098 break;
17099 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017100#ifdef FEATURE_OEM_DATA_SUPPORT
17101 case WDI_START_OEM_DATA_RSP_IND_NEW:
17102 {
17103 void *pCallbackContext;
17104 tpAniSirGlobal pMac;
17105 tANI_U16 indType;
17106 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017107 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017108
17109 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17110 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17111
17112 /*sanity check*/
17113 if (NULL == pWDA)
17114 {
17115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17116 "%s:pWDA is NULL", __func__);
17117 VOS_ASSERT(0);
17118 return;
17119 }
17120
17121 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17122 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017123 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17124 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017125 if (NULL == pOemRspNewIndData)
17126 {
17127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17128 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17129 __func__);
17130 VOS_ASSERT(0);
17131 return;
17132 }
17133
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017134 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17135 OemRspNewLen;
17136
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017137 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17138 if (NULL == pMac)
17139 {
17140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17141 "%s:pMac is NULL", __func__);
17142 VOS_ASSERT(0);
17143 return;
17144 }
17145
17146 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17147
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17149 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17150
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017151 if(pMac->sme.pOemDataIndCb)
17152 {
17153 pMac->sme.pOemDataIndCb(pCallbackContext,
17154 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017155 pOemRspNewIndData,
17156 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017157 }
17158 else
17159 {
17160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17161 "%s:HDD callback is null", __func__);
17162 }
17163 break;
17164 }
17165#endif /* FEATURE_OEM_DATA_SUPPORT */
17166
Jeff Johnson295189b2012-06-20 16:38:30 -070017167 default:
17168 {
17169 /* TODO error */
17170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17171 "Received UNKNOWN Indication from WDI ");
17172 }
17173 }
17174 return ;
17175}
17176
Jeff Johnson295189b2012-06-20 16:38:30 -070017177/*
17178 * BA related processing in WDA.
17179 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017180void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17181 void* pUserData)
17182{
17183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17184 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017185 if(NULL == pWdaParams)
17186 {
17187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017188 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017189 VOS_ASSERT(0) ;
17190 return ;
17191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017192 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017193 vos_mem_free(pWdaParams->wdaMsgParam) ;
17194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17195 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017198 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17199 {
17200 tANI_U8 i = 0 ;
17201 tBaActivityInd *baActivityInd = NULL ;
17202 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17203 tANI_U8 allocSize = sizeof(tBaActivityInd)
17204 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17205 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17206 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017207 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017208 if(NULL == baActivityInd)
17209 {
17210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017212 VOS_ASSERT(0) ;
17213 return;
17214 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017215 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17216 sizeof(tSirMacAddr)) ;
17217 baActivityInd->baCandidateCnt = baCandidateCount ;
17218
17219 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17220 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17221
17222 for(i = 0 ; i < baCandidateCount ; i++)
17223 {
17224 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017225 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17226 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017227 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17228 {
17229 baCandidate->baInfo[tid].fBaEnable =
17230 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17231 baCandidate->baInfo[tid].startingSeqNum =
17232 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17233 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017234 wdiBaCandidate++ ;
17235 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017236 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017237 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17238 }
17239 else
17240 {
17241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17242 "BA Trigger RSP with Failure received ");
17243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017244 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017245}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017246
17247
17248/*
17249 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17250 * during MCC
17251 */
17252void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17253{
17254 wpt_uint32 enabled;
17255 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17256 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17257 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17258
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017259 if (NULL == pMac )
17260 {
17261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17262 "%s: Invoked with invalid MAC context ", __func__ );
17263 VOS_ASSERT(0);
17264 return;
17265 }
17266
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017267 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17268 != eSIR_SUCCESS)
17269 {
17270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17271 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17272 return;
17273 }
17274
17275 if(!enabled)
17276 {
17277 return;
17278 }
17279
17280 if(NULL == pWDA)
17281 {
17282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17283 "%s:WDA context is NULL", __func__);
17284 VOS_ASSERT(0);
17285 return;
17286 }
17287
17288 if(activate)
17289 {
17290 if( VOS_STATUS_SUCCESS !=
17291 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17292 {
17293 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17294 "Traffic Stats Timer Start Failed ");
17295 return;
17296 }
17297 WDI_DS_ActivateTrafficStats();
17298 }
17299 else
17300 {
17301 WDI_DS_DeactivateTrafficStats();
17302 WDI_DS_ClearTrafficStats();
17303
17304 if( VOS_STATUS_SUCCESS !=
17305 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17306 {
17307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17308 "Traffic Stats Timer Stop Failed ");
17309 return;
17310 }
17311 }
17312}
17313
17314/*
17315 * Traffic Stats Timer handler
17316 */
17317void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17318{
17319 WDI_Status wdiStatus;
17320 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17321 WDI_TrafficStatsIndType trafficStatsIndParams;
17322 wpt_uint32 length, enabled;
17323 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17324
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017325 if (NULL == pMac )
17326 {
17327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17328 "%s: Invoked with invalid MAC context ", __func__ );
17329 VOS_ASSERT(0);
17330 return;
17331 }
17332
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017333 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17334 != eSIR_SUCCESS)
17335 {
17336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17337 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17338 return;
17339 }
17340
17341 if(!enabled)
17342 {
17343 WDI_DS_DeactivateTrafficStats();
17344 return;
17345 }
17346
17347 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17348
17349 if(pWdiTrafficStats != NULL)
17350 {
17351 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17352 trafficStatsIndParams.length = length;
17353 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017354 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017355 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17356 trafficStatsIndParams.pUserData = pWDA;
17357
17358 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17359
17360 if(WDI_STATUS_PENDING == wdiStatus)
17361 {
17362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17363 "Pending received for %s:%d ",__func__,__LINE__ );
17364 }
17365 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17366 {
17367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17368 "Failure in %s:%d ",__func__,__LINE__ );
17369 }
17370
17371 WDI_DS_ClearTrafficStats();
17372 }
17373 else
17374 {
17375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17376 "pWdiTrafficStats is Null");
17377 }
17378
17379 if( VOS_STATUS_SUCCESS !=
17380 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17381 {
17382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17383 "Traffic Stats Timer Start Failed ");
17384 return;
17385 }
17386}
17387
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017388bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
17389{
17390 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
17391 return true;
17392 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
17393 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
17394 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
17395 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
17396 jiffies_to_msecs(jiffies)))
17397 {
17398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17399 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
17400 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
17401 return false;
17402 }
17403 return true;
17404}
17405
Jeff Johnson295189b2012-06-20 16:38:30 -070017406/*
17407 * BA Activity check timer handler
17408 */
17409void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17410{
17411 tANI_U8 curSta = 0 ;
17412 tANI_U8 tid = 0 ;
17413 tANI_U8 size = 0 ;
17414 tANI_U8 baCandidateCount = 0 ;
17415 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017416 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017417 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017418 tpAniSirGlobal pMac;
17419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017420 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017421 {
17422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017423 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017424 VOS_ASSERT(0);
17425 return ;
17426 }
17427 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17428 {
17429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17430 "Inconsistent STA entries in WDA");
17431 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017432 }
17433 if(NULL == pWDA->pVosContext)
17434 {
17435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17436 "%s: pVosContext is NULL",__func__);
17437 VOS_ASSERT(0);
17438 return ;
17439 }
17440 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017441 if(NULL == pMac)
17442 {
17443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17444 "%s: pMac is NULL",__func__);
17445 VOS_ASSERT(0);
17446 return ;
17447 }
17448
Abhishek Singh0644e482014-10-06 18:38:23 +053017449 if (wlan_cfgGetInt(pMac,
17450 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17451 eSIR_SUCCESS)
17452 {
17453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17454 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17455 val = 0;
17456 }
17457
Jeff Johnson295189b2012-06-20 16:38:30 -070017458 /* walk through all STA entries and find out TX packet count */
17459 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17460 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017461 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017462#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017463 // We can only do BA on "hard" STAs.
17464 if (!(IS_HWSTA_IDX(curSta)))
17465 {
17466 continue;
17467 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017468#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017469 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17470 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017471 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017472 tANI_U32 txPktCount = 0 ;
17473 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017474 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017475 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17476 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017477 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17478 curSta, tid, &txPktCount)))
17479 {
17480#if 0
17481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17482 "************* %d:%d, %d ",curSta, txPktCount,
17483 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17484#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017485 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17486 (currentOperChan <= SIR_11B_CHANNEL_END)))
17487 {
17488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17489 "%s: BTC disabled aggregation - dont start "
17490 "TX ADDBA req",__func__);
17491 }
17492 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017493 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017494 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053017495 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17496 pWDA->wdaGlobalSystemRole) && txPktCount )
17497 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17498 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017499 {
17500 /* get prepare for sending message to HAL */
17501 //baCandidate[baCandidateCount].staIdx = curSta ;
17502 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17503 newBaCandidate = WDA_ENABLE_BA ;
17504 }
17505 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17506 }
17507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017508 /* fill the entry for all the sta with given TID's */
17509 if(WDA_ENABLE_BA == newBaCandidate)
17510 {
17511 /* move to next BA candidate */
17512 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17513 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17514 baCandidateCount++ ;
17515 newBaCandidate = WDA_DISABLE_BA ;
17516 }
17517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017518 /* prepare and send message to hal */
17519 if( 0 < baCandidateCount)
17520 {
17521 WDI_Status status = WDI_STATUS_SUCCESS ;
17522 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17523 tWDA_ReqParams *pWdaParams =
17524 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017525 if(NULL == pWdaParams)
17526 {
17527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017529 VOS_ASSERT(0) ;
17530 return;
17531 }
17532 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17533 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17534 if(NULL == wdiTriggerBaReq)
17535 {
17536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017538 VOS_ASSERT(0) ;
17539 vos_mem_free(pWdaParams);
17540 return;
17541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017542 do
17543 {
17544 WDI_TriggerBAReqinfoType *triggerBaInfo =
17545 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17546 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17547 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17548 * for each request */
17549 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17550 triggerBaInfo->ucBASessionID = 0;
17551 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17552 } while(0) ;
17553 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017555 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017556 pWdaParams->pWdaContext = pWDA;
17557 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17558 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017559 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017560 WDA_TriggerBaReqCallback, pWdaParams) ;
17561 if(IS_WDI_STATUS_FAILURE(status))
17562 {
17563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17564 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17565 vos_mem_free(pWdaParams->wdaMsgParam) ;
17566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17567 vos_mem_free(pWdaParams) ;
17568 }
17569 }
17570 else
17571 {
17572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17573 "There is no TID for initiating BA");
17574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017575 if( VOS_STATUS_SUCCESS !=
17576 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17577 {
17578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17579 "BA Activity Timer Stop Failed ");
17580 return ;
17581 }
17582 if( VOS_STATUS_SUCCESS !=
17583 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17584 {
17585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17586 "BA Activity Timer Start Failed ");
17587 return;
17588 }
17589 return ;
17590}
Jeff Johnson295189b2012-06-20 16:38:30 -070017591/*
17592 * WDA common routine to create timer used by WDA.
17593 */
17594static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17595{
Jeff Johnson295189b2012-06-20 16:38:30 -070017596 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17597 tANI_U32 val = 0 ;
17598 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17599
17600 if(NULL == pMac)
17601 {
17602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017603 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017604 VOS_ASSERT(0);
17605 return VOS_STATUS_E_FAILURE;
17606 }
17607 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17608 != eSIR_SUCCESS)
17609 {
17610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17611 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17612 return VOS_STATUS_E_FAILURE;
17613 }
17614 val = SYS_MS_TO_TICKS(val) ;
17615
17616 /* BA activity check timer */
17617 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17618 "BA Activity Check timer", WDA_TimerHandler,
17619 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17620 if(status != TX_SUCCESS)
17621 {
17622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17623 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017624 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017626 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017627 /* Tx Complete Timeout timer */
17628 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17629 "Tx Complete Check timer", WDA_TimerHandler,
17630 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017631 if(status != TX_SUCCESS)
17632 {
17633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17634 "Unable to create Tx Complete Timeout timer");
17635 /* Destroy timer of BA activity check timer */
17636 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17637 if(status != TX_SUCCESS)
17638 {
17639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17640 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017641 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017642 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017643 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017644 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017645
17646 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17647
17648 /* Traffic Stats timer */
17649 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17650 "Traffic Stats timer", WDA_TimerHandler,
17651 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17652 if(status != TX_SUCCESS)
17653 {
17654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17655 "Unable to create traffic stats timer");
17656 /* Destroy timer of BA activity check timer */
17657 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17658 if(status != TX_SUCCESS)
17659 {
17660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17661 "Unable to Destroy BA activity timer");
17662 }
17663 /* Destroy timer of tx complete timer */
17664 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17665 if(status != TX_SUCCESS)
17666 {
17667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17668 "Unable to Tx complete timer");
17669 }
17670 return VOS_STATUS_E_FAILURE ;
17671 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017672 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017673}
Jeff Johnson295189b2012-06-20 16:38:30 -070017674/*
17675 * WDA common routine to destroy timer used by WDA.
17676 */
17677static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17678{
17679 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017680 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17681 if(status != TX_SUCCESS)
17682 {
17683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17684 "Unable to Destroy Tx Complete Timeout timer");
17685 return eSIR_FAILURE ;
17686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017687 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17688 if(status != TX_SUCCESS)
17689 {
17690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17691 "Unable to Destroy BA activity timer");
17692 return eSIR_FAILURE ;
17693 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017694 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17695 if(status != TX_SUCCESS)
17696 {
17697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17698 "Unable to Destroy traffic stats timer");
17699 return eSIR_FAILURE ;
17700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017701 return eSIR_SUCCESS ;
17702}
Jeff Johnson295189b2012-06-20 16:38:30 -070017703/*
17704 * WDA timer handler.
17705 */
17706void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17707{
17708 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17709 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017710 /*
17711 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17712 */
17713 wdaMsg.type = timerInfo ;
17714 wdaMsg.bodyptr = NULL;
17715 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017716 /* post the message.. */
17717 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17718 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17719 {
17720 vosStatus = VOS_STATUS_E_BADMSG;
17721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017722}
Jeff Johnson295189b2012-06-20 16:38:30 -070017723/*
17724 * WDA Tx Complete timeout Indication.
17725 */
17726void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17727{
17728 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017729 tpSirTxBdStatus txBdStatus = {0};
17730
Jeff Johnson295189b2012-06-20 16:38:30 -070017731 if( pWDA->pAckTxCbFunc )
17732 {
17733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017734 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017735 /*Indicate failure*/
17736 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 pWDA->pAckTxCbFunc = NULL;
17738 }
17739 else
17740 {
17741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017742 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017744}
Jeff Johnson295189b2012-06-20 16:38:30 -070017745/*
17746 * WDA Set REG Domain to VOS NV
17747 */
Abhishek Singha306a442013-11-07 18:39:01 +053017748eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17749 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017750{
Abhishek Singha306a442013-11-07 18:39:01 +053017751 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017752 {
17753 return eHAL_STATUS_INVALID_PARAMETER;
17754 }
17755 return eHAL_STATUS_SUCCESS;
17756}
Jeff Johnson295189b2012-06-20 16:38:30 -070017757
Jeff Johnson295189b2012-06-20 16:38:30 -070017758#ifdef FEATURE_WLAN_SCAN_PNO
17759/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017760 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017761 *
17762 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017763void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017764{
17765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017766 tSirPNOScanReq *pPNOScanReqParams;
17767
Jeff Johnson295189b2012-06-20 16:38:30 -070017768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017769 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017770 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017771 {
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017773 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017774 VOS_ASSERT(0) ;
17775 return ;
17776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017777
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017778 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17779 if(pPNOScanReqParams->statusCallback)
17780 {
17781 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17782 (status == WDI_STATUS_SUCCESS) ?
17783 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17784 }
17785
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017786 if (pPNOScanReqParams->enable == 1)
17787 {
17788 if (pPNOScanReqParams->aNetworks)
17789 vos_mem_free(pPNOScanReqParams->aNetworks);
17790 if (pPNOScanReqParams->p24GProbeTemplate)
17791 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17792 if (pPNOScanReqParams->p5GProbeTemplate)
17793 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17796 vos_mem_free(pWdaParams->wdaMsgParam);
17797 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017798
17799 return ;
17800}
Jeff Johnson295189b2012-06-20 16:38:30 -070017801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017802 * FUNCTION: WDA_PNOScanReqCallback
17803 * Free memory.
17804 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17805 */
17806void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017807{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017809 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017810
17811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17813
17814 if(NULL == pWdaParams)
17815 {
17816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17817 "%s: pWdaParams received NULL", __func__);
17818 VOS_ASSERT(0);
17819 return;
17820 }
17821
17822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17823 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017824 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17825 if(pPNOScanReqParams->statusCallback)
17826 {
17827 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17828 VOS_STATUS_E_FAILURE);
17829 }
17830
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017831 if (pPNOScanReqParams->enable == 1)
17832 {
17833 if (pPNOScanReqParams->aNetworks)
17834 vos_mem_free(pPNOScanReqParams->aNetworks);
17835 if (pPNOScanReqParams->p24GProbeTemplate)
17836 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17837 if (pPNOScanReqParams->p5GProbeTemplate)
17838 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17839 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17841 vos_mem_free(pWdaParams->wdaMsgParam);
17842 vos_mem_free(pWdaParams);
17843 }
17844
17845 return;
17846}
17847/*
17848 * FUNCTION: WDA_UpdateScanParamsRespCallback
17849 *
17850 */
17851void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17852{
17853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017855 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017856 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017857 {
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017859 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017860 VOS_ASSERT(0) ;
17861 return ;
17862 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017863
17864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17865 vos_mem_free(pWdaParams->wdaMsgParam);
17866 vos_mem_free(pWdaParams);
17867
Jeff Johnson295189b2012-06-20 16:38:30 -070017868 return ;
17869}
Jeff Johnson295189b2012-06-20 16:38:30 -070017870/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017871 * FUNCTION: WDA_UpdateScanParamsReqCallback
17872 * Free memory.
17873 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17874 */
17875void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17876{
17877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17878
17879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17880 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17881
17882 if(NULL == pWdaParams)
17883 {
17884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17885 "%s: pWdaParams received NULL", __func__);
17886 VOS_ASSERT(0);
17887 return;
17888 }
17889
17890 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17891 {
17892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17893 vos_mem_free(pWdaParams->wdaMsgParam);
17894 vos_mem_free(pWdaParams);
17895 }
17896
17897 return;
17898}
17899/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017900 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17901 * Request to WDI to set Preferred Network List.Offload
17902 */
17903VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17904 tSirPNOScanReq *pPNOScanReqParams)
17905{
Jeff Johnson43971f52012-07-17 12:26:56 -070017906 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017907 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17908 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17909 tWDA_ReqParams *pWdaParams ;
17910 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017913 if(NULL == pwdiPNOScanReqInfo)
17914 {
17915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017917 VOS_ASSERT(0);
17918 return VOS_STATUS_E_NOMEM;
17919 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17921 if(NULL == pWdaParams)
17922 {
17923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017925 VOS_ASSERT(0);
17926 vos_mem_free(pwdiPNOScanReqInfo);
17927 return VOS_STATUS_E_NOMEM;
17928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017929 //
17930 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17931 //
17932 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17933 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017934 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17935 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17936 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017937 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17938 {
17939 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17940 &pPNOScanReqParams->aNetworks[i],
17941 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017943 /*Scan timer intervals*/
17944 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17945 &pPNOScanReqParams->scanTimers,
17946 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017947 /*Probe template for 2.4GHz band*/
17948 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17949 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17950 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017951 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17952 pPNOScanReqParams->p24GProbeTemplate,
17953 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017954 /*Probe template for 5GHz band*/
17955 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17956 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17957 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017958 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17959 pPNOScanReqParams->p5GProbeTemplate,
17960 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017961 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17962 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017963
Jeff Johnson295189b2012-06-20 16:38:30 -070017964 /* Store Params pass it to WDI */
17965 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17966 pWdaParams->pWdaContext = pWDA;
17967 /* Store param pointer as passed in by caller */
17968 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017969 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017970 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017971 if(IS_WDI_STATUS_FAILURE(status))
17972 {
17973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17974 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017975 if(pPNOScanReqParams->statusCallback)
17976 {
17977 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17978 VOS_STATUS_E_FAILURE);
17979 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017980 if (pPNOScanReqParams->enable == 1)
17981 {
17982 if (pPNOScanReqParams->aNetworks)
17983 vos_mem_free(pPNOScanReqParams->aNetworks);
17984 if (pPNOScanReqParams->p24GProbeTemplate)
17985 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17986 if (pPNOScanReqParams->p5GProbeTemplate)
17987 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17990 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017991
Jeff Johnson295189b2012-06-20 16:38:30 -070017992 pWdaParams->wdaWdiApiMsgParam = NULL;
17993 pWdaParams->wdaMsgParam = NULL;
17994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017995 return CONVERT_WDI2VOS_STATUS(status) ;
17996}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017997
17998#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17999
18000void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18001{
18002 /*Convert the CSR Auth types to WDI Auth types */
18003 switch (csrAuthType)
18004 {
18005 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18006 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18007 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018008#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018009 case eCSR_AUTH_TYPE_CCKM_WPA:
18010 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18011 break;
18012#endif
18013 case eCSR_AUTH_TYPE_WPA:
18014 *AuthType = eWDA_AUTH_TYPE_WPA;
18015 break;
18016 case eCSR_AUTH_TYPE_WPA_PSK:
18017 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18018 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018019#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018020 case eCSR_AUTH_TYPE_CCKM_RSN:
18021 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18022 break;
18023#endif
18024 case eCSR_AUTH_TYPE_RSN:
18025 *AuthType = eWDA_AUTH_TYPE_RSN;
18026 break;
18027 case eCSR_AUTH_TYPE_RSN_PSK:
18028 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18029 break;
18030#if defined WLAN_FEATURE_VOWIFI_11R
18031 case eCSR_AUTH_TYPE_FT_RSN:
18032 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18033 break;
18034 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18035 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18036 break;
18037#endif
18038#ifdef FEATURE_WLAN_WAPI
18039 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18040 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18041 break;
18042 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18043 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18044 break;
18045#endif /* FEATURE_WLAN_WAPI */
18046 case eCSR_AUTH_TYPE_SHARED_KEY:
18047 case eCSR_AUTH_TYPE_AUTOSWITCH:
18048 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18049 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018050#ifdef WLAN_FEATURE_11W
18051 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18052 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018053 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018054 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18055 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18056 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018057#endif
18058 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018060 "%s: Unknown Auth Type", __func__);
18061 break;
18062 }
18063}
18064void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18065{
18066 switch (csrEncrType)
18067 {
18068 case eCSR_ENCRYPT_TYPE_NONE:
18069 *EncrType = WDI_ED_NONE;
18070 break;
18071 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18072 case eCSR_ENCRYPT_TYPE_WEP40:
18073 *EncrType = WDI_ED_WEP40;
18074 break;
18075 case eCSR_ENCRYPT_TYPE_WEP104:
18076 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18077 *EncrType = WDI_ED_WEP104;
18078 break;
18079 case eCSR_ENCRYPT_TYPE_TKIP:
18080 *EncrType = WDI_ED_TKIP;
18081 break;
18082 case eCSR_ENCRYPT_TYPE_AES:
18083 *EncrType = WDI_ED_CCMP;
18084 break;
18085#ifdef WLAN_FEATURE_11W
18086 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18087 *EncrType = WDI_ED_AES_128_CMAC;
18088 break;
18089#endif
18090#ifdef FEATURE_WLAN_WAPI
18091 case eCSR_ENCRYPT_TYPE_WPI:
18092 *EncrType = WDI_ED_WPI;
18093 break;
18094#endif
18095 case eCSR_ENCRYPT_TYPE_ANY:
18096 *EncrType = WDI_ED_ANY;
18097 break;
18098
18099 default:
18100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18101 "%s: Unknown Encryption Type", __func__);
18102 break;
18103 }
18104}
18105
Kapil Gupta04ab1992016-06-26 13:36:51 +053018106#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18107VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18108 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18109{
18110 WDI_Status status;
18111 tWDA_ReqParams *pWdaParams ;
18112 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18113
18114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18115 "------> %s " ,__func__);
18116
18117 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18118 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18119 if (NULL == pwdiPERRoamOffloadScanInfo) {
18120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18121 "%s: VOS MEM Alloc Failure", __func__);
18122 VOS_ASSERT(0);
18123 return VOS_STATUS_E_NOMEM;
18124 }
18125
18126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18127 if (NULL == pWdaParams) {
18128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18129 "%s: VOS MEM Alloc Failure", __func__);
18130 VOS_ASSERT(0);
18131 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18132 return VOS_STATUS_E_NOMEM;
18133 }
18134
18135 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18136 pPERRoamOffloadScanReqParams->rateUpThreshold;
18137 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18138 pPERRoamOffloadScanReqParams->rateDownThreshold;
18139 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18140 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18141 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18142 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18143 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18144 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
18145 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18146 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18147
18148 /* Store Params pass it to WDI */
18149 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18150 pWdaParams->pWdaContext = pWDA;
18151
18152 /* Store param pointer as passed in by caller */
18153 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18154 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18155 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18156 pWdaParams);
18157
18158 if(IS_WDI_STATUS_FAILURE(status)) {
18159 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18160 "Failure in Send config PER roam params");
18161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18162 vos_mem_free(pWdaParams->wdaMsgParam);
18163 vos_mem_free(pWdaParams);
18164 }
18165 return CONVERT_WDI2VOS_STATUS(status) ;
18166}
18167#endif
18168
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018169/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018170 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018171 * Request to WDI to set Roam Offload Scan
18172 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018173VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018174 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18175{
18176 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018177 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18178 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018179 tWDA_ReqParams *pWdaParams ;
18180 v_U8_t csrAuthType;
18181 WDI_RoamNetworkType *pwdiRoamNetworkType;
18182 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18184 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018185 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018186 {
18187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18188 "%s: VOS MEM Alloc Failure", __func__);
18189 VOS_ASSERT(0);
18190 return VOS_STATUS_E_NOMEM;
18191 }
18192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18193 if (NULL == pWdaParams)
18194 {
18195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18196 "%s: VOS MEM Alloc Failure", __func__);
18197 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018198 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018199 return VOS_STATUS_E_NOMEM;
18200 }
18201
18202 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018203 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018204 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018205 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18206 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018207 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18208 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18209 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18210 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18211 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18212 sizeof(pwdiRoamNetworkType->currAPbssid));
18213 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18214 csrAuthType);
18215 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18216 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18217 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18218 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18219 pwdiRoamOffloadScanInfo->LookupThreshold =
18220 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018221 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18222 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018223 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18224 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018225 pwdiRoamOffloadScanInfo->MAWCEnabled =
18226 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018227 pwdiRoamOffloadScanInfo->Command =
18228 pRoamOffloadScanReqParams->Command ;
18229 pwdiRoamOffloadScanInfo->StartScanReason =
18230 pRoamOffloadScanReqParams->StartScanReason ;
18231 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18232 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18233 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18234 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18235 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18236 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18237 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18238 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18239 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18240 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018241 pwdiRoamOffloadScanInfo->IsESEEnabled =
18242 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018243 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18244 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18245 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18246 pwdiRoamNetworkType->ssId.ucLength =
18247 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18248 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18249 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18250 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18251 pwdiRoamNetworkType->ChannelCount =
18252 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18253 pwdiRoamOffloadScanInfo->ChannelCacheType =
18254 pRoamOffloadScanReqParams->ChannelCacheType;
18255 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18256 pRoamOffloadScanReqParams->ValidChannelList,
18257 pRoamOffloadScanReqParams->ValidChannelCount);
18258 pwdiRoamOffloadScanInfo->ValidChannelCount =
18259 pRoamOffloadScanReqParams->ValidChannelCount;
18260 pwdiRoamOffloadScanInfo->us24GProbeSize =
18261 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18262 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18263 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18264 pRoamOffloadScanReqParams->p24GProbeTemplate,
18265 pwdiRoamOffloadScanInfo->us24GProbeSize);
18266 pwdiRoamOffloadScanInfo->us5GProbeSize =
18267 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18268 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18269 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18270 pRoamOffloadScanReqParams->p5GProbeTemplate,
18271 pwdiRoamOffloadScanInfo->us5GProbeSize);
18272 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18273 pRoamOffloadScanReqParams->MDID.mdiePresent;
18274 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18275 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018276 pwdiRoamOffloadScanInfo->nProbes =
18277 pRoamOffloadScanReqParams->nProbes;
18278 pwdiRoamOffloadScanInfo->HomeAwayTime =
18279 pRoamOffloadScanReqParams->HomeAwayTime;
18280 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018281 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018282 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018283 pWdaParams->pWdaContext = pWDA;
18284 /* Store param pointer as passed in by caller */
18285 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018286 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018287 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18288 if(IS_WDI_STATUS_FAILURE(status))
18289 {
18290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18291 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18293 vos_mem_free(pWdaParams->wdaMsgParam);
18294 pWdaParams->wdaWdiApiMsgParam = NULL;
18295 pWdaParams->wdaMsgParam = NULL;
18296 }
18297 return CONVERT_WDI2VOS_STATUS(status) ;
18298}
18299#endif
18300
Jeff Johnson295189b2012-06-20 16:38:30 -070018301/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018302 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018303 *
18304 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018305void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018306{
18307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18308
18309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018310 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018311
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018312 if(NULL == pWdaParams)
18313 {
18314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018315 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018316 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018317 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018318 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018319
Jeff Johnson295189b2012-06-20 16:38:30 -070018320 vos_mem_free(pWdaParams->wdaMsgParam) ;
18321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18322 vos_mem_free(pWdaParams) ;
18323
18324 return ;
18325}
18326/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018327 * FUNCTION: WDA_RssiFilterReqCallback
18328 * Free memory.
18329 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18330 */
18331void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18332{
18333 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18334
18335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18336 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18337
18338 if(NULL == pWdaParams)
18339 {
18340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18341 "%s: pWdaParams received NULL", __func__);
18342 VOS_ASSERT(0);
18343 return;
18344 }
18345
18346 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18347 {
18348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18349 vos_mem_free(pWdaParams->wdaMsgParam);
18350 vos_mem_free(pWdaParams);
18351 }
18352
18353 return;
18354}
18355/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018356 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018357 * Request to WDI to set Preferred Network List.Offload
18358 */
18359VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18360 tSirSetRSSIFilterReq* pRssiFilterParams)
18361{
Jeff Johnson43971f52012-07-17 12:26:56 -070018362 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018363 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18364 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18365 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018367 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018368 if(NULL == pwdiSetRssiFilterReqInfo)
18369 {
18370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018371 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018372 VOS_ASSERT(0);
18373 return VOS_STATUS_E_NOMEM;
18374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18376 if(NULL == pWdaParams)
18377 {
18378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018380 VOS_ASSERT(0);
18381 vos_mem_free(pwdiSetRssiFilterReqInfo);
18382 return VOS_STATUS_E_NOMEM;
18383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018384 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018385 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18386 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018387
Jeff Johnson295189b2012-06-20 16:38:30 -070018388 /* Store Params pass it to WDI */
18389 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18390 pWdaParams->pWdaContext = pWDA;
18391 /* Store param pointer as passed in by caller */
18392 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018393 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018394 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018395 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018396 if(IS_WDI_STATUS_FAILURE(status))
18397 {
18398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18399 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18401 vos_mem_free(pWdaParams->wdaMsgParam);
18402 pWdaParams->wdaWdiApiMsgParam = NULL;
18403 pWdaParams->wdaMsgParam = NULL;
18404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018405 return CONVERT_WDI2VOS_STATUS(status) ;
18406}
18407
Jeff Johnson295189b2012-06-20 16:38:30 -070018408/*
18409 * FUNCTION: WDA_ProcessUpdateScanParams
18410 * Request to WDI to update Scan Parameters
18411 */
18412VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18413 tSirUpdateScanParams *pUpdateScanParams)
18414{
Jeff Johnson43971f52012-07-17 12:26:56 -070018415 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018416 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18417 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18418 sizeof(WDI_UpdateScanParamsInfoType)) ;
18419 tWDA_ReqParams *pWdaParams ;
18420 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018422 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018423 if(NULL == wdiUpdateScanParamsInfoType)
18424 {
18425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018427 VOS_ASSERT(0);
18428 return VOS_STATUS_E_NOMEM;
18429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18431 if ( NULL == pWdaParams )
18432 {
18433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018435 VOS_ASSERT(0);
18436 vos_mem_free(wdiUpdateScanParamsInfoType);
18437 return VOS_STATUS_E_NOMEM;
18438 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018439 //
18440 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18441 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18443 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18444 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18445 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018446 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018447 pUpdateScanParams->b11dEnabled,
18448 pUpdateScanParams->b11dResolved,
18449 pUpdateScanParams->ucChannelCount,
18450 pUpdateScanParams->usPassiveMinChTime,
18451 pUpdateScanParams->usPassiveMaxChTime,
18452 pUpdateScanParams->usActiveMinChTime,
18453 pUpdateScanParams->usActiveMaxChTime,
18454 sizeof(tSirUpdateScanParams),
18455 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18456
Jeff Johnson295189b2012-06-20 16:38:30 -070018457 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18458 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018459 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18460 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018461 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18462 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018463 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18464 pUpdateScanParams->usActiveMaxChTime;
18465 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18466 pUpdateScanParams->usActiveMinChTime;
18467 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18468 pUpdateScanParams->usPassiveMaxChTime;
18469 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18470 pUpdateScanParams->usPassiveMinChTime;
18471
Jeff Johnson295189b2012-06-20 16:38:30 -070018472 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018473 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18474 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018475
Jeff Johnson295189b2012-06-20 16:38:30 -070018476 for ( i = 0; i <
18477 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18478 i++)
18479 {
18480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18481 "Update Scan Parameters channel: %d",
18482 pUpdateScanParams->aChannels[i]);
18483
18484 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18485 pUpdateScanParams->aChannels[i];
18486 }
18487
Yue Ma7f44bbe2013-04-12 11:47:39 -070018488 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18489 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018490
Jeff Johnson295189b2012-06-20 16:38:30 -070018491 /* Store Params pass it to WDI */
18492 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18493 pWdaParams->pWdaContext = pWDA;
18494 /* Store param pointer as passed in by caller */
18495 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018496
Jeff Johnson295189b2012-06-20 16:38:30 -070018497
18498
18499 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018500 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018501 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018502 if(IS_WDI_STATUS_FAILURE(status))
18503 {
18504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18505 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18507 vos_mem_free(pWdaParams->wdaMsgParam);
18508 vos_mem_free(pWdaParams);
18509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018510 return CONVERT_WDI2VOS_STATUS(status) ;
18511}
18512#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018513
18514#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18515/*
18516 * FUNCTION: WDA_RoamOffloadScanReqCallback
18517 *
18518 */
18519void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18520{
18521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018522 vos_msg_t vosMsg;
18523 wpt_uint8 reason = 0;
18524
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018526 "<------ %s " ,__func__);
18527 if (NULL == pWdaParams)
18528 {
18529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18530 "%s: pWdaParams received NULL", __func__);
18531 VOS_ASSERT(0) ;
18532 return ;
18533 }
18534 if ( pWdaParams != NULL )
18535 {
18536 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18537 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018538 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18540 }
18541 if ( pWdaParams->wdaMsgParam != NULL)
18542 {
18543 vos_mem_free(pWdaParams->wdaMsgParam);
18544 }
18545
18546 vos_mem_free(pWdaParams) ;
18547 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018548 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18549 vosMsg.bodyptr = NULL;
18550 if (WDI_STATUS_SUCCESS != status)
18551 {
18552 reason = 0;
18553 }
18554 vosMsg.bodyval = reason;
18555 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18556 {
18557 /* free the mem and return */
18558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018559 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018560 }
18561
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018562 return ;
18563}
Kapil Gupta04ab1992016-06-26 13:36:51 +053018564
18565void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
18566{
18567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18568 vos_msg_t vosMsg;
18569 wpt_uint8 reason = 0;
18570
18571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18572 "<------ %s " ,__func__);
18573 if (NULL == pWdaParams) {
18574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18575 "%s: pWdaParams received NULL", __func__);
18576 VOS_ASSERT(0) ;
18577 return ;
18578 }
18579 if ( pWdaParams->wdaMsgParam != NULL)
18580 vos_mem_free(pWdaParams->wdaMsgParam);
18581
18582 vos_mem_free(pWdaParams) ;
18583 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
18584 vosMsg.bodyptr = NULL;
18585 if (WDI_STATUS_SUCCESS != status)
18586 reason = 0;
18587
18588 vosMsg.bodyval = reason;
18589 if (VOS_STATUS_SUCCESS !=
18590 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18591 /* free the mem and return */
18592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18593 "%s: Failed to post the rsp to UMAC", __func__);
18594 }
18595
18596 return ;
18597}
18598
18599
18600void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18601{
18602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18603 vos_msg_t vosMsg;
18604 wpt_uint8 reason = 0;
18605
18606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18607 "<------ %s " ,__func__);
18608 if (NULL == pWdaParams) {
18609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18610 "%s: pWdaParams received NULL", __func__);
18611 VOS_ASSERT(0) ;
18612 return ;
18613 }
18614 if ( pWdaParams->wdaMsgParam != NULL)
18615 vos_mem_free(pWdaParams->wdaMsgParam);
18616
18617 vos_mem_free(pWdaParams) ;
18618 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18619 vosMsg.bodyptr = NULL;
18620 if (WDI_STATUS_SUCCESS != status)
18621 reason = 0;
18622
18623 vosMsg.bodyval = reason;
18624 if (VOS_STATUS_SUCCESS !=
18625 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18626 /* free the mem and return */
18627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18628 "%s: Failed to post the rsp to UMAC", __func__);
18629 }
18630
18631 return ;
18632}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018633#endif
18634
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018635/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018636 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018637 *
18638 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018639void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018640{
18641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18642
18643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18644 "<------ %s " ,__func__);
18645
18646 if(NULL == pWdaParams)
18647 {
18648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18649 "%s: pWdaParams received NULL", __func__);
18650 VOS_ASSERT(0);
18651 return;
18652 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018653
18654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18655 vos_mem_free(pWdaParams->wdaMsgParam);
18656 vos_mem_free(pWdaParams);
18657
18658 return;
18659}
18660/*
18661 * FUNCTION: WDA_SetPowerParamsReqCallback
18662 * Free memory.
18663 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18664 */
18665void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18666{
18667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18668
18669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18670 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18671
18672 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018673 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18675 "%s: pWdaParams received NULL", __func__);
18676 VOS_ASSERT(0);
18677 return;
18678 }
18679
18680 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18681 {
18682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18683 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018684 vos_mem_free(pWdaParams);
18685 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018686
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018687 return;
18688}
18689
Jeff Johnson295189b2012-06-20 16:38:30 -070018690#ifdef WLAN_FEATURE_PACKET_FILTERING
18691/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018692 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018693 *
18694 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018695void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018696 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18697 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018698{
18699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018701 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018702 if(NULL == pWdaParams)
18703 {
18704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018705 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018706 VOS_ASSERT(0) ;
18707 return ;
18708 }
18709
18710 vos_mem_free(pWdaParams->wdaMsgParam) ;
18711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18712 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018713 //print a msg, nothing else to do
18714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018715 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018716 return ;
18717}
Jeff Johnson295189b2012-06-20 16:38:30 -070018718/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018719 * FUNCTION: WDA_8023MulticastListReqCallback
18720 * Free memory.
18721 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18722 */
18723void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18724{
18725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18726
18727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18728 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18729
18730 if(NULL == pWdaParams)
18731 {
18732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18733 "%s: pWdaParams received NULL", __func__);
18734 VOS_ASSERT(0);
18735 return;
18736 }
18737
18738 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18739 {
18740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18741 vos_mem_free(pWdaParams->wdaMsgParam);
18742 vos_mem_free(pWdaParams);
18743 }
18744
18745 return;
18746}
18747/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018748 * FUNCTION: WDA_Process8023MulticastListReq
18749 * Request to WDI to add 8023 Multicast List
18750 */
18751VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18752 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18753{
Jeff Johnson43971f52012-07-17 12:26:56 -070018754 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018755 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18756 tWDA_ReqParams *pWdaParams ;
18757 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018760 pwdiFltPktSetMcListReqParamsType =
18761 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18762 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18763 ) ;
18764 if(NULL == pwdiFltPktSetMcListReqParamsType)
18765 {
18766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018768 return VOS_STATUS_E_NOMEM;
18769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18771 if(NULL == pWdaParams)
18772 {
18773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018775 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18776 return VOS_STATUS_E_NOMEM;
18777 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018778
Jeff Johnson295189b2012-06-20 16:38:30 -070018779 //
18780 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18781 //
18782 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018783 pRcvFltMcAddrList->ulMulticastAddrCnt;
18784
18785 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18786 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18787 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18788 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18789
Jeff Johnson295189b2012-06-20 16:38:30 -070018790 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18791 {
18792 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18793 &(pRcvFltMcAddrList->multicastAddr[i]),
18794 sizeof(tSirMacAddr));
18795 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018796 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18797 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018798
Jeff Johnson295189b2012-06-20 16:38:30 -070018799 /* Store Params pass it to WDI */
18800 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18801 pWdaParams->pWdaContext = pWDA;
18802 /* Store param pointer as passed in by caller */
18803 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018804 status = WDI_8023MulticastListReq(
18805 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018806 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018807 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018808 if(IS_WDI_STATUS_FAILURE(status))
18809 {
18810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18811 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18813 vos_mem_free(pWdaParams->wdaMsgParam);
18814 vos_mem_free(pWdaParams);
18815 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018816 return CONVERT_WDI2VOS_STATUS(status) ;
18817}
Jeff Johnson295189b2012-06-20 16:38:30 -070018818/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018819 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018820 *
18821 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018822void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018823 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18824 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018825{
18826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018828 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018829 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018830 if(NULL == pWdaParams)
18831 {
18832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018833 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018834 VOS_ASSERT(0) ;
18835 return ;
18836 }
18837
18838 vos_mem_free(pWdaParams->wdaMsgParam) ;
18839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18840 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 //print a msg, nothing else to do
18842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018843 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018844 return ;
18845}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018846
18847/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018848 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18849 * Free memory.
18850 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018851 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018852void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018853 void* pUserData)
18854{
18855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18856
18857 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18858 "<------ %s, wdiStatus: %d",
18859 __func__, wdiStatus);
18860
18861 if (NULL == pWdaParams)
18862 {
18863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18864 "%s: Invalid pWdaParams pointer", __func__);
18865 VOS_ASSERT(0);
18866 return;
18867 }
18868
18869 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18870 {
18871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18872 vos_mem_free(pWdaParams->wdaMsgParam);
18873 vos_mem_free(pWdaParams);
18874 }
18875
18876 return;
18877}
18878
Jeff Johnson295189b2012-06-20 16:38:30 -070018879/*
18880 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18881 * Request to WDI to set Receive Filters
18882 */
18883VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18884 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18885{
Jeff Johnson43971f52012-07-17 12:26:56 -070018886 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018887 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18888 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18889 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18890 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18891 tWDA_ReqParams *pWdaParams ;
18892 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018895 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18896 {
18897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018899 VOS_ASSERT(0);
18900 return VOS_STATUS_E_NOMEM;
18901 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18903 if(NULL == pWdaParams)
18904 {
18905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018907 VOS_ASSERT(0);
18908 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18909 return VOS_STATUS_E_NOMEM;
18910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018911 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18912 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18913 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18914 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018915 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18916 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18917
18918 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18919 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018920
18921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18922 "FID %d FT %d NParams %d CT %d",
18923 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18924 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18925 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18926 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018927 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18928 {
18929 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18930 &pRcvPktFilterCfg->paramsData[i],
18931 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018933 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018934 pwdiSetRcvPktFilterReqParamsType->
18935 wdiPktFilterCfg.paramsData[i].protocolLayer,
18936 pwdiSetRcvPktFilterReqParamsType->
18937 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018939 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018940 pwdiSetRcvPktFilterReqParamsType->
18941 wdiPktFilterCfg.paramsData[i].dataOffset,
18942 pwdiSetRcvPktFilterReqParamsType->
18943 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018945 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018946 pwdiSetRcvPktFilterReqParamsType->
18947 wdiPktFilterCfg.paramsData[i].compareData[0],
18948 pwdiSetRcvPktFilterReqParamsType->
18949 wdiPktFilterCfg.paramsData[i].compareData[1],
18950 pwdiSetRcvPktFilterReqParamsType->
18951 wdiPktFilterCfg.paramsData[i].compareData[2],
18952 pwdiSetRcvPktFilterReqParamsType->
18953 wdiPktFilterCfg.paramsData[i].compareData[3],
18954 pwdiSetRcvPktFilterReqParamsType->
18955 wdiPktFilterCfg.paramsData[i].compareData[4],
18956 pwdiSetRcvPktFilterReqParamsType->
18957 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018959 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018960 pwdiSetRcvPktFilterReqParamsType->
18961 wdiPktFilterCfg.paramsData[i].dataMask[0],
18962 pwdiSetRcvPktFilterReqParamsType->
18963 wdiPktFilterCfg.paramsData[i].dataMask[1],
18964 pwdiSetRcvPktFilterReqParamsType->
18965 wdiPktFilterCfg.paramsData[i].dataMask[2],
18966 pwdiSetRcvPktFilterReqParamsType->
18967 wdiPktFilterCfg.paramsData[i].dataMask[3],
18968 pwdiSetRcvPktFilterReqParamsType->
18969 wdiPktFilterCfg.paramsData[i].dataMask[4],
18970 pwdiSetRcvPktFilterReqParamsType->
18971 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018972 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018973 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018974 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018975 /* Store Params pass it to WDI */
18976 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18977 pWdaParams->pWdaContext = pWDA;
18978 /* Store param pointer as passed in by caller */
18979 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018980 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018981 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018982 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018983 if(IS_WDI_STATUS_FAILURE(status))
18984 {
18985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18986 "Failure in SetFilter(),free all the memory,status %d ",status);
18987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18988 vos_mem_free(pWdaParams->wdaMsgParam);
18989 vos_mem_free(pWdaParams);
18990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018991 return CONVERT_WDI2VOS_STATUS(status) ;
18992}
Jeff Johnson295189b2012-06-20 16:38:30 -070018993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018994 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018995 *
18996 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018997void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018998 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18999 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019000{
19001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19002 tWDA_CbContext *pWDA;
19003 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19004 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19005 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19006 tANI_U8 i;
19007 vos_msg_t vosMsg;
19008
19009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019010 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19012
Jeff Johnsone7245742012-09-05 17:12:55 -070019013 if(NULL == pRcvFltPktMatchCntRsp)
19014 {
19015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019016 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019017 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019018 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019019 return ;
19020 }
19021
Jeff Johnson295189b2012-06-20 16:38:30 -070019022 if(NULL == pWdaParams)
19023 {
19024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019025 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019026 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019027 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019028 return ;
19029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19031 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019032 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19033 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19034
19035 /* Message Header */
19036 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19037 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19038
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019039 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019040
19041 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19042 {
19043 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19044 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019046 /* VOS message wrapper */
19047 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19048 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19049 vosMsg.bodyval = 0;
19050 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19051 {
19052 /* free the mem and return */
19053 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19054 }
19055
19056 vos_mem_free(pWdaParams->wdaMsgParam) ;
19057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19058 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019059
19060 return;
19061}
19062/*
19063 * FUNCTION: WDA_FilterMatchCountReqCallback
19064 * Free memory and send RSP back to SME.
19065 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19066 */
19067void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19068{
19069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19070 vos_msg_t vosMsg;
19071
19072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19073 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19074
19075 if(NULL == pWdaParams)
19076 {
19077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19078 "%s: pWdaParams received NULL", __func__);
19079 VOS_ASSERT(0);
19080 return;
19081 }
19082
19083 /* VOS message wrapper */
19084 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19085 vosMsg.bodyptr = NULL;
19086 vosMsg.bodyval = 0;
19087
19088 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19089 {
19090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19091 vos_mem_free(pWdaParams->wdaMsgParam);
19092 vos_mem_free(pWdaParams);
19093 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19094 }
19095
19096 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019097}
Jeff Johnson295189b2012-06-20 16:38:30 -070019098/*
19099 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19100 * Request to WDI to get PC Filter Match Count
19101 */
19102VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19103{
Jeff Johnson43971f52012-07-17 12:26:56 -070019104 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019105 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19106 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19107 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019110 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19111 {
19112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019114 VOS_ASSERT(0);
19115 return VOS_STATUS_E_NOMEM;
19116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19118 if(NULL == pWdaParams)
19119 {
19120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019122 VOS_ASSERT(0);
19123 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19124 return VOS_STATUS_E_NOMEM;
19125 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019126
Yue Ma7f44bbe2013-04-12 11:47:39 -070019127 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19128 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019129
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019130 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19131 pRcvFltPktMatchRsp->bssId,
19132 sizeof(wpt_macAddr));
19133
Jeff Johnson295189b2012-06-20 16:38:30 -070019134 /* Store Params pass it to WDI */
19135 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19136 pWdaParams->pWdaContext = pWDA;
19137 /* Store param pointer as passed in by caller */
19138 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019139 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019140 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019141 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019142 if(IS_WDI_STATUS_FAILURE(status))
19143 {
19144 /* failure returned by WDI API */
19145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19146 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19148 vos_mem_free(pWdaParams) ;
19149 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19150 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019152 return CONVERT_WDI2VOS_STATUS(status) ;
19153}
Jeff Johnson295189b2012-06-20 16:38:30 -070019154/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019155 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019156 *
19157 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019158void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019159 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19160 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019161{
19162 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019165/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19166 if(NULL == pWdaParams)
19167 {
19168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019169 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019170 VOS_ASSERT(0) ;
19171 return ;
19172 }
19173
19174 vos_mem_free(pWdaParams->wdaMsgParam) ;
19175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19176 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019177 //print a msg, nothing else to do
19178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019179 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019180 return ;
19181}
Jeff Johnson295189b2012-06-20 16:38:30 -070019182/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019183 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19184 * Free memory.
19185 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19186 */
19187void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19188{
19189 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19190
19191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19192 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19193
19194 if(NULL == pWdaParams)
19195 {
19196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19197 "%s: Invalid pWdaParams pointer", __func__);
19198 VOS_ASSERT(0);
19199 return;
19200 }
19201
19202 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19203 {
19204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19205 vos_mem_free(pWdaParams->wdaMsgParam);
19206 vos_mem_free(pWdaParams);
19207 }
19208
19209 return;
19210}
19211/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019212 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19213 * Request to WDI to clear Receive Filters
19214 */
19215VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19216 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19217{
Jeff Johnson43971f52012-07-17 12:26:56 -070019218 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019219 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19220 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19221 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 if(NULL == pwdiRcvFltPktClearReqParamsType)
19225 {
19226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019228 VOS_ASSERT(0);
19229 return VOS_STATUS_E_NOMEM;
19230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19232 if(NULL == pWdaParams)
19233 {
19234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019236 VOS_ASSERT(0);
19237 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19238 return VOS_STATUS_E_NOMEM;
19239 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019240 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19241 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019242 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19243 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19244 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19245 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019246
Yue Ma7f44bbe2013-04-12 11:47:39 -070019247 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019248 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019249 /* Store Params pass it to WDI */
19250 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19251 pWdaParams->pWdaContext = pWDA;
19252 /* Store param pointer as passed in by caller */
19253 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019254 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019255 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019256 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019257 if(IS_WDI_STATUS_FAILURE(status))
19258 {
19259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19260 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
19261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019262 vos_mem_free(pWdaParams->wdaMsgParam);
19263 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019265 return CONVERT_WDI2VOS_STATUS(status) ;
19266}
19267#endif // WLAN_FEATURE_PACKET_FILTERING
19268
Jeff Johnson295189b2012-06-20 16:38:30 -070019269/*
19270 * FUNCTION: WDA_ProcessSetPowerParamsReq
19271 * Request to WDI to set power params
19272 */
19273VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19274 tSirSetPowerParamsReq *pPowerParams)
19275{
Jeff Johnson43971f52012-07-17 12:26:56 -070019276 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019277 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19278 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019282 if(NULL == pwdiSetPowerParamsReqInfo)
19283 {
19284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019286 VOS_ASSERT(0);
19287 return VOS_STATUS_E_NOMEM;
19288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19290 if(NULL == pWdaParams)
19291 {
19292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019294 VOS_ASSERT(0);
19295 vos_mem_free(pwdiSetPowerParamsReqInfo);
19296 return VOS_STATUS_E_NOMEM;
19297 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019298
Jeff Johnson295189b2012-06-20 16:38:30 -070019299
19300 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19301 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019302 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19303 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019304 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19305 pPowerParams->uListenInterval;
19306 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19307 pPowerParams->uBcastMcastFilter;
19308 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19309 pPowerParams->uEnableBET;
19310 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19311 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019312 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19313 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019314 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19315 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019316
Jeff Johnson295189b2012-06-20 16:38:30 -070019317 /* Store Params pass it to WDI */
19318 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19319 pWdaParams->pWdaContext = pWDA;
19320 /* Store param pointer as passed in by caller */
19321 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019322 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019323 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019324 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019325 if(IS_WDI_STATUS_FAILURE(status))
19326 {
19327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19328 "Failure in Set power params REQ WDI API, free all the memory " );
19329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19330 vos_mem_free(pWdaParams->wdaMsgParam);
19331 pWdaParams->wdaWdiApiMsgParam = NULL;
19332 pWdaParams->wdaMsgParam = NULL;
19333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019334 return CONVERT_WDI2VOS_STATUS(status) ;
19335}
19336
19337/*
19338 * FUNCTION: WDA_SetTmLevelRspCallback
19339 * Set TM Level response
19340 */
19341void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19342{
19343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19344
19345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019347
19348 if(NULL == pWdaParams)
19349 {
19350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019351 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019352 VOS_ASSERT(0) ;
19353 return ;
19354 }
19355
19356 /* Dose not need to send notification to upper layer
19357 * Just free allocated resources */
19358 if( pWdaParams != NULL )
19359 {
19360 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19361 {
19362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19363 }
19364 vos_mem_free(pWdaParams->wdaMsgParam) ;
19365 vos_mem_free(pWdaParams) ;
19366 }
19367}
19368
19369/*
19370 * FUNCTION: WDA_ProcessSetTmLevelReq
19371 * Set TM Level request
19372 */
19373VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19374 tAniSetTmLevelReq *setTmLevelReq)
19375{
19376 WDI_Status status = WDI_STATUS_SUCCESS ;
19377 tWDA_ReqParams *pWdaParams ;
19378 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19379 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19380 sizeof(WDI_SetTmLevelReqType)) ;
19381 if(NULL == wdiSetTmLevelReq)
19382 {
19383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019385 VOS_ASSERT(0);
19386 return VOS_STATUS_E_NOMEM;
19387 }
19388
19389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19390 if(NULL == pWdaParams)
19391 {
19392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019394 VOS_ASSERT(0);
19395 vos_mem_free(wdiSetTmLevelReq);
19396 return VOS_STATUS_E_NOMEM;
19397 }
19398
19399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019401
19402 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19403 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19404
19405 pWdaParams->pWdaContext = pWDA;
19406 pWdaParams->wdaMsgParam = setTmLevelReq;
19407 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19408
19409 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19410 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19411
19412 if(IS_WDI_STATUS_FAILURE(status))
19413 {
19414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019415 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019416 vos_mem_free(pWdaParams->wdaMsgParam) ;
19417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19418 vos_mem_free(pWdaParams) ;
19419 }
19420
19421 return CONVERT_WDI2VOS_STATUS(status) ;
19422}
19423
19424VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19425 tpTxControlParams pTxCtrlParam)
19426{
19427 VOS_STATUS wdaStatus;
19428
19429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019430 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019431 if( pTxCtrlParam == NULL )
19432 {
19433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019434 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019435 return VOS_STATUS_E_FAILURE;
19436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019437 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19438 {
19439 wdaStatus = WDA_SuspendDataTx(pWDA);
19440 }
19441 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19442 {
19443 wdaStatus = WDA_ResumeDataTx(pWDA);
19444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019445 return wdaStatus;
19446}
19447
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019448void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019449{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019450 WDI_Status status;
19451 status = WDI_FWLoggingDXEdoneInd(logType);
19452
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019453 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019454 {
19455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19456 FL("Failure status %d"), status);
19457 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019458}
19459
Jeff Johnson295189b2012-06-20 16:38:30 -070019460 /* FUNCTION WDA_featureCapsExchange
19461 * WDA API to invoke capability exchange between host and FW.
19462 */
19463void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19464{
19465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019466 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019467 WDI_featureCapsExchangeReq( NULL, pVosContext);
19468}
19469
Yathish9f22e662012-12-10 14:21:35 -080019470/* FUNCTION WDA_disableCapablityFeature
19471 * WDA API to diable Active mode offload in host.
19472 */
19473void WDA_disableCapablityFeature(tANI_U8 feature_index)
19474{
19475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19476 "%s:enter", __func__ );
19477 WDI_disableCapablityFeature(feature_index);
19478}
19479
Jeff Johnson295189b2012-06-20 16:38:30 -070019480 /* FUNCTION WDA_getHostWlanFeatCaps
19481 * Wrapper for WDI API, that will return if the feature (enum value).passed
19482 * to this API is supported or not in Host
19483 * return value
19484 * 0 - implies feature is NOT Supported
19485 * any non zero value - implies feature is SUPPORTED
19486 */
19487tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19488{
19489 return WDI_getHostWlanFeatCaps(featEnumValue);
19490}
19491
19492 /* FUNCTION WDA_getFwWlanFeatCaps
19493 * Wrapper for WDI API, that will return if the feature (enum value).passed
19494 * to this API is supported or not in FW
19495 * return value
19496 * 0 - implies feature is NOT Supported
19497 * any non zero value - implies feature is SUPPORTED
19498 */
19499tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19500{
19501 return WDI_getFwWlanFeatCaps(featEnumValue);
19502}
19503
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019504
Jeff Johnson295189b2012-06-20 16:38:30 -070019505/*
19506 * FUNCTION: WDA_shutdown
19507 * Shutdown WDA/WDI without handshaking with Riva.
19508 * Synchronous function.
19509 */
19510VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19511{
19512 WDI_Status wdiStatus;
19513 //tANI_U8 eventIdx = 0;
19514 VOS_STATUS status = VOS_STATUS_SUCCESS;
19515 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019516 if (NULL == pWDA)
19517 {
19518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019519 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019520 VOS_ASSERT(0);
19521 return VOS_STATUS_E_FAILURE;
19522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019523 /* FTM mode stay START_STATE */
19524 if( (WDA_READY_STATE != pWDA->wdaState) &&
19525 (WDA_INIT_STATE != pWDA->wdaState) &&
19526 (WDA_START_STATE != pWDA->wdaState) )
19527 {
19528 VOS_ASSERT(0);
19529 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019530
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019531 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019532 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019533 if(VOS_TRUE == pWDA->wdaTimersCreated)
19534 {
19535 wdaDestroyTimers(pWDA);
19536 pWDA->wdaTimersCreated = VOS_FALSE;
19537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019538 }
Leo Chang9d76f622013-08-23 16:34:52 -070019539 else
19540 {
19541 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019542 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019543
Jeff Johnson295189b2012-06-20 16:38:30 -070019544 /* call WDI shutdown */
19545 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019546 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19547 {
19548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19549 "error in WDA Stop" );
19550 status = VOS_STATUS_E_FAILURE;
19551 }
19552 /* WDI stop is synchrnous, shutdown is complete when it returns */
19553 pWDA->wdaState = WDA_STOP_STATE;
19554
Jeff Johnson295189b2012-06-20 16:38:30 -070019555 /* shutdown should perform the stop & close actions. */
19556 /* Destroy the event */
19557 status = vos_event_destroy(&pWDA->txFrameEvent);
19558 if(!VOS_IS_STATUS_SUCCESS(status))
19559 {
19560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019561 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019562 status = VOS_STATUS_E_FAILURE;
19563 }
19564 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19565 if(!VOS_IS_STATUS_SUCCESS(status))
19566 {
19567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019568 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019569 status = VOS_STATUS_E_FAILURE;
19570 }
19571 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19572 if(!VOS_IS_STATUS_SUCCESS(status))
19573 {
19574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019575 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019576 status = VOS_STATUS_E_FAILURE;
19577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019578 /* free WDA context */
19579 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19580 if ( !VOS_IS_STATUS_SUCCESS(status) )
19581 {
19582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19583 "error in WDA close " );
19584 status = VOS_STATUS_E_FAILURE;
19585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019586 return status;
19587}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019588
Jeff Johnsone7245742012-09-05 17:12:55 -070019589/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019590 * FUNCTION: WDA_setNeedShutdown
19591 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019592 */
19593
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019594void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019595{
19596 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019597 if(pWDA == NULL)
19598 {
19599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19600 "Could not get the WDA Context pointer" );
19601 return;
19602 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019603 pWDA->needShutdown = TRUE;
19604}
19605/*
19606 * FUNCTION: WDA_needShutdown
19607 * WDA needs a shutdown
19608 */
19609
19610v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19611{
19612 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019613 if(pWDA == NULL)
19614 {
19615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19616 "Could not get the WDA Context pointer" );
19617 return 0;
19618 }
19619 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019620}
19621
Mohit Khanna4a70d262012-09-11 16:30:12 -070019622#ifdef WLAN_FEATURE_11AC
19623/*
19624 * FUNCTION: WDA_SetBeaconFilterReqCallback
19625 *
19626 */
19627void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19628{
19629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019631 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019632 if(NULL == pWdaParams)
19633 {
19634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019635 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019636 VOS_ASSERT(0) ;
19637 return ;
19638 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019639
Mohit Khanna4a70d262012-09-11 16:30:12 -070019640 vos_mem_free(pWdaParams->wdaMsgParam) ;
19641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19642 vos_mem_free(pWdaParams) ;
19643 /*
19644 * No respone required for SetBeaconFilter req so just free the request
19645 * param here
19646 */
19647
19648 return ;
19649}
19650
19651VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19652 tUpdateVHTOpMode *pData)
19653{
19654 WDI_Status status = WDI_STATUS_SUCCESS ;
19655 tWDA_ReqParams *pWdaParams ;
19656 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19657 sizeof(WDI_UpdateVHTOpMode)) ;
19658 if(NULL == wdiTemp)
19659 {
19660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019661 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019662 VOS_ASSERT(0);
19663 return VOS_STATUS_E_NOMEM;
19664 }
19665 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19666 if(NULL == pWdaParams)
19667 {
19668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019669 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019670 VOS_ASSERT(0);
19671 vos_mem_free(wdiTemp);
19672 return VOS_STATUS_E_NOMEM;
19673 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19675 "------> %s Opmode = %d and staid = %d" ,
19676 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019677 wdiTemp->opMode = pData->opMode;
19678 wdiTemp->staId = pData->staId;
19679
19680 pWdaParams->pWdaContext = pWDA;
19681 /* Store Req pointer, as this will be used for response */
19682 pWdaParams->wdaMsgParam = (void *)pData;
19683 /* store Params pass it to WDI */
19684 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19685
19686 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19687
19688 if(IS_WDI_STATUS_FAILURE(status))
19689 {
19690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19691 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19693 vos_mem_free(pWdaParams->wdaMsgParam);
19694 vos_mem_free(pWdaParams);
19695 }
19696 return CONVERT_WDI2VOS_STATUS(status) ;
19697}
19698#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019699
19700/*==========================================================================
19701 FUNCTION WDA_TransportChannelDebug
19702
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019703 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019704 Display Transport Channel debugging information
19705 User may request to display DXE channel snapshot
19706 Or if host driver detects any abnormal stcuk may display
19707
19708 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019709 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019710 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019711 debugFlags : Enable stall detect features
19712 defined by WPAL_DeviceDebugFlags
19713 These features may effect
19714 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019715
19716 RETURN VALUE
19717 NONE
19718
19719===========================================================================*/
19720void WDA_TransportChannelDebug
19721(
schang6295e542013-03-12 15:31:23 -070019722 tpAniSirGlobal pMac,
19723 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019724 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019725)
19726{
Mihir Shete40a55652014-03-02 14:14:47 +053019727 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019728 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019729}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019730
19731/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019732 FUNCTION WDA_TransportKickDxe
19733
19734 DESCRIPTION
19735 Request Kick Dxe when first hdd TX time out
19736 happens
19737
19738 PARAMETERS
19739 NONE
19740
19741 RETURN VALUE
19742 NONE
19743
19744===========================================================================*/
19745void WDA_TransportKickDxe()
19746{
19747 WDI_TransportKickDxe();
19748 return;
19749}
19750
19751
19752/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019753 FUNCTION WDA_SetEnableSSR
19754
19755 DESCRIPTION
19756 API to enable/disable SSR on WDI timeout
19757
19758 PARAMETERS
19759 enableSSR : enable/disable SSR
19760
19761 RETURN VALUE
19762 NONE
19763
19764===========================================================================*/
19765void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19766{
19767 WDI_SetEnableSSR(enableSSR);
19768}
Leo Chang9056f462013-08-01 19:21:11 -070019769
Agrawal Ashish0552be02016-03-02 18:03:43 +053019770/**
19771 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19772 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19773 *
19774 * Return: void
19775 */
19776void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19777{
19778 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19779}
19780
Leo Chang9056f462013-08-01 19:21:11 -070019781#ifdef FEATURE_WLAN_LPHB
19782/*
19783 * FUNCTION: WDA_LPHBconfRspCallback
19784 *
19785 */
19786void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19787{
19788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19789
19790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19791 "<------ %s " ,__func__);
19792 if (NULL == pWdaParams)
19793 {
19794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19795 "%s: pWdaParams received NULL", __func__);
19796 VOS_ASSERT(0) ;
19797 return ;
19798 }
19799
19800 /* Do not need to send notification to upper layer
19801 * Just free allocated resources */
19802 if (pWdaParams != NULL)
19803 {
19804 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19805 {
19806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19807 }
19808 vos_mem_free(pWdaParams->wdaMsgParam) ;
19809 vos_mem_free(pWdaParams) ;
19810 }
19811
19812 return;
19813}
19814
19815/*
19816 * FUNCTION: WDA_ProcessLPHBConfReq
19817 *
19818 */
19819VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19820 tSirLPHBReq *pData)
19821{
19822 WDI_Status wdiStatus;
19823 tWDA_ReqParams *pWdaParams ;
19824
19825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19826 "------> %s " , __func__);
19827
19828 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19829 if (NULL == pWdaParams)
19830 {
19831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19832 "%s: VOS MEM Alloc Failure", __func__);
19833 VOS_ASSERT(0);
19834 vos_mem_free(pData);
19835 return VOS_STATUS_E_NOMEM;
19836 }
19837
19838 pWdaParams->pWdaContext = pWDA;
19839 pWdaParams->wdaMsgParam = (void *)pData;
19840 pWdaParams->wdaWdiApiMsgParam = NULL;
19841
19842 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19843 if (WDI_STATUS_PENDING == wdiStatus)
19844 {
19845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19846 "Pending received for %s:%d ", __func__, __LINE__);
19847 }
19848 else if (WDI_STATUS_SUCCESS != wdiStatus)
19849 {
19850 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19851 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19852 vos_mem_free(pWdaParams->wdaMsgParam);
19853 vos_mem_free(pWdaParams);
19854 }
19855
19856 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19857}
19858#endif /* FEATURE_WLAN_LPHB */
19859
c_hpothu92367912014-05-01 15:18:17 +053019860void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19861 void* pUserData)
19862{
19863 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19864
19865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19866 "<------ %s " ,__func__);
19867 if (NULL == pBcnMissRateInfo)
19868 {
19869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19870 "%s: pWdaParams received NULL", __func__);
19871 VOS_ASSERT(0) ;
19872 return ;
19873 }
19874 if (pBcnMissRateInfo->callback)
19875 {
19876 pBcnMissRateInfo->callback(status, bcnMissRate,
19877 pBcnMissRateInfo->data);
19878 }
19879 vos_mem_free(pUserData);
19880
19881 return;
19882}
19883
19884v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19885 tSirBcnMissRateReq *pData)
19886{
19887 WDI_Status wdiStatus;
19888 tSirBcnMissRateInfo *pBcnMissRateInfo;
19889
19890 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19891 "------> %s " , __func__);
19892
19893 pBcnMissRateInfo =
19894 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19895 if (NULL == pBcnMissRateInfo)
19896 {
19897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19898 "%s: VOS MEM Alloc Failure", __func__);
19899 VOS_ASSERT(0);
19900 vos_mem_free(pData);
19901 return;
19902 }
19903
19904 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19905 pBcnMissRateInfo->data = pData->data;
19906
19907 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19908 WDA_GetBcnMissRateCallback,
19909 pData->bssid);
19910 if (WDI_STATUS_PENDING == wdiStatus)
19911 {
19912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19913 "Pending received for %s:%d ", __func__, __LINE__);
19914 }
19915 else if (WDI_STATUS_SUCCESS != wdiStatus)
19916 {
19917 if (pBcnMissRateInfo->callback)
19918 {
19919 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19920 -1, pBcnMissRateInfo->data);
19921 }
19922 }
19923 vos_mem_free(pData);
19924}
Dino Mycle41bdc942014-06-10 11:30:24 +053019925
19926#ifdef WLAN_FEATURE_EXTSCAN
19927
19928/*==========================================================================
19929 FUNCTION WDA_EXTScanStartRspCallback
19930
19931 DESCRIPTION
19932 API to send EXTScan Start Response to HDD
19933
19934 PARAMETERS
19935 pEventData: Response from FW
19936 pUserData:
19937===========================================================================*/
19938void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19939{
19940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19941 tWDA_CbContext *pWDA = NULL;
19942 void *pCallbackContext;
19943 tpAniSirGlobal pMac;
19944
19945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19946 "%s:", __func__);
19947 if (NULL == pWdaParams)
19948 {
19949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19950 "%s: pWdaParams received NULL", __func__);
19951 VOS_ASSERT(0);
19952 return;
19953 }
19954
19955 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19956
19957 if (NULL == pWDA)
19958 {
19959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19960 "%s: pWDA received NULL", __func__);
19961 VOS_ASSERT(0);
19962 goto error;
19963 }
19964
19965 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19966 if (NULL == pMac)
19967 {
19968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19969 "%s:pMac is NULL", __func__);
19970 VOS_ASSERT(0);
19971 goto error;
19972 }
19973
19974 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19975
19976 if (pMac->sme.pEXTScanIndCb)
19977 {
19978 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19979 pEventData);
19980 }
19981 else
19982 {
19983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19984 "%s:HDD callback is null", __func__);
19985 VOS_ASSERT(0);
19986 }
19987
19988error:
19989
19990 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19991 {
19992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19993 }
19994 if (pWdaParams->wdaMsgParam != NULL)
19995 {
19996 vos_mem_free(pWdaParams->wdaMsgParam);
19997 }
19998 vos_mem_free(pWdaParams) ;
19999
20000 return;
20001}
20002
20003/*==========================================================================
20004 FUNCTION WDA_EXTScanStopRspCallback
20005
20006 DESCRIPTION
20007 API to send EXTScan Stop Response to HDD
20008
20009 PARAMETERS
20010 pEventData: Response from FW
20011 pUserData:
20012===========================================================================*/
20013void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20014{
20015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20016 tWDA_CbContext *pWDA = NULL;
20017 void *pCallbackContext;
20018 tpAniSirGlobal pMac;
20019
20020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20021 "%s:", __func__);
20022 if (NULL == pWdaParams)
20023 {
20024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20025 "%s: pWdaParams received NULL", __func__);
20026 VOS_ASSERT(0);
20027 return;
20028 }
20029
20030 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20031
20032 if (NULL == pWDA)
20033 {
20034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20035 "%s: pWDA received NULL", __func__);
20036 VOS_ASSERT(0);
20037 goto error;
20038 }
20039
20040 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20041 if (NULL == pMac)
20042 {
20043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20044 "%s:pMac is NULL", __func__);
20045 VOS_ASSERT(0);
20046 goto error;
20047 }
20048 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20049
20050 if (pMac->sme.pEXTScanIndCb)
20051 {
20052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20053 "%s:HDD call back function called", __func__);
20054 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20055 pEventData);
20056 }
20057 else
20058 {
20059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20060 "%s:HDD callback is null", __func__);
20061 VOS_ASSERT(0);
20062 }
20063
20064error:
20065
20066 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20067 {
20068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20069 }
20070 if (pWdaParams->wdaMsgParam != NULL)
20071 {
20072 vos_mem_free(pWdaParams->wdaMsgParam);
20073 }
20074 vos_mem_free(pWdaParams) ;
20075
20076
20077 return;
20078}
20079
20080/*==========================================================================
20081 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20082
20083 DESCRIPTION
20084 API to send EXTScan Get Cached Results Response to HDD
20085
20086 PARAMETERS
20087 pEventData: Response from FW
20088 pUserData:
20089===========================================================================*/
20090void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20091{
20092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20093 tWDA_CbContext *pWDA = NULL;
20094 void *pCallbackContext;
20095 tpAniSirGlobal pMac;
20096
20097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20098 "%s: ", __func__);
20099 if (NULL == pWdaParams)
20100 {
20101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20102 "%s: pWdaParams received NULL", __func__);
20103 VOS_ASSERT(0);
20104 return;
20105 }
20106
20107 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20108
20109 if (NULL == pWDA)
20110 {
20111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20112 "%s: pWDA received NULL", __func__);
20113 VOS_ASSERT(0);
20114 goto error;
20115 }
20116
20117 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20118 if (NULL == pMac)
20119 {
20120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20121 "%s:pMac is NULL", __func__);
20122 VOS_ASSERT(0);
20123 goto error;
20124 }
20125
20126 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20127
20128 if (pMac->sme.pEXTScanIndCb)
20129 {
20130 pMac->sme.pEXTScanIndCb(pCallbackContext,
20131 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20132 pEventData);
20133 }
20134 else
20135 {
20136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20137 "%s:HDD callback is null", __func__);
20138 VOS_ASSERT(0);
20139 }
20140
20141
20142error:
20143
20144 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20145 {
20146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20147 }
20148 if (pWdaParams->wdaMsgParam != NULL)
20149 {
20150 vos_mem_free(pWdaParams->wdaMsgParam);
20151 }
20152 vos_mem_free(pWdaParams) ;
20153
20154 return;
20155}
20156
20157/*==========================================================================
20158 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20159
20160 DESCRIPTION
20161 API to send EXTScan Get Capabilities Response to HDD
20162
20163 PARAMETERS
20164 pEventData: Response from FW
20165 pUserData:
20166===========================================================================*/
20167void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20168{
20169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20170 tWDA_CbContext *pWDA = NULL;
20171 void *pCallbackContext;
20172 tpAniSirGlobal pMac;
20173
20174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20175 "%s:", __func__);
20176 if (NULL == pWdaParams)
20177 {
20178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20179 "%s: pWdaParams received NULL", __func__);
20180 VOS_ASSERT(0);
20181 return;
20182 }
20183
20184 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20185
20186 if (NULL == pWDA)
20187 {
20188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20189 "%s: pWDA received NULL", __func__);
20190 VOS_ASSERT(0);
20191 goto error;
20192 }
20193
20194 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20195 if (NULL == pMac)
20196 {
20197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20198 "%s:pMac is NULL", __func__);
20199 VOS_ASSERT(0);
20200 goto error;
20201 }
20202
20203 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20204
20205 if (pMac->sme.pEXTScanIndCb)
20206 {
20207 pMac->sme.pEXTScanIndCb(pCallbackContext,
20208 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20209 pEventData);
20210 }
20211 else
20212 {
20213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20214 "%s:HDD callback is null", __func__);
20215 VOS_ASSERT(0);
20216 }
20217
20218
20219error:
20220
20221 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20222 {
20223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20224 }
20225 if (pWdaParams->wdaMsgParam != NULL)
20226 {
20227 vos_mem_free(pWdaParams->wdaMsgParam);
20228 }
20229 vos_mem_free(pWdaParams) ;
20230
20231 return;
20232}
20233
20234/*==========================================================================
20235 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20236
20237 DESCRIPTION
20238 API to send EXTScan Set BSSID Hotlist Response to HDD
20239
20240 PARAMETERS
20241 pEventData: Response from FW
20242 pUserData:
20243===========================================================================*/
20244void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20245{
20246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20247 tWDA_CbContext *pWDA = NULL;
20248 void *pCallbackContext;
20249 tpAniSirGlobal pMac;
20250
20251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20252 "%s: ", __func__);
20253 if (NULL == pWdaParams)
20254 {
20255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20256 "%s: pWdaParams received NULL", __func__);
20257 VOS_ASSERT(0) ;
20258 return;
20259 }
20260
20261 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20262
20263 if (NULL == pWDA)
20264 {
20265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20266 "%s: pWDA received NULL", __func__);
20267 VOS_ASSERT(0);
20268 goto error;
20269 }
20270
20271 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20272 if (NULL == pMac)
20273 {
20274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20275 "%s:pMac is NULL", __func__);
20276 VOS_ASSERT(0);
20277 goto error;
20278 }
20279
20280 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20281
20282 if (pMac->sme.pEXTScanIndCb)
20283 {
20284 pMac->sme.pEXTScanIndCb(pCallbackContext,
20285 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20286 pEventData);
20287 }
20288 else
20289 {
20290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20291 "%s:HDD callback is null", __func__);
20292 VOS_ASSERT(0);
20293 }
20294
20295
20296error:
20297
20298 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20299 {
20300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20301 }
20302 if (pWdaParams->wdaMsgParam != NULL)
20303 {
20304 vos_mem_free(pWdaParams->wdaMsgParam);
20305 }
20306 vos_mem_free(pWdaParams) ;
20307
20308 return;
20309}
20310
20311/*==========================================================================
20312 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20313
20314 DESCRIPTION
20315 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20316
20317 PARAMETERS
20318 pEventData: Response from FW
20319 pUserData:
20320===========================================================================*/
20321void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20322{
20323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20324 tWDA_CbContext *pWDA = NULL;
20325 void *pCallbackContext;
20326 tpAniSirGlobal pMac;
20327
20328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20329 "%s:", __func__);
20330 if (NULL == pWdaParams)
20331 {
20332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20333 "%s: pWdaParams received NULL", __func__);
20334 VOS_ASSERT(0) ;
20335 return;
20336 }
20337
20338 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20339
20340 if (NULL == pWDA)
20341 {
20342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20343 "%s: pWDA received NULL", __func__);
20344 VOS_ASSERT(0);
20345 goto error;
20346 }
20347
20348 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20349 if (NULL == pMac)
20350 {
20351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20352 "%s:pMac is NULL", __func__);
20353 VOS_ASSERT(0);
20354 goto error;
20355 }
20356
20357 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20358
20359 if (pMac->sme.pEXTScanIndCb)
20360 {
20361 pMac->sme.pEXTScanIndCb(pCallbackContext,
20362 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20363 pEventData);
20364 }
20365 else
20366 {
20367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20368 "%s:HDD callback is null", __func__);
20369 VOS_ASSERT(0);
20370 }
20371
20372
20373error:
20374
20375 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20376 {
20377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20378 }
20379 if (pWdaParams->wdaMsgParam != NULL)
20380 {
20381 vos_mem_free(pWdaParams->wdaMsgParam);
20382 }
20383 vos_mem_free(pWdaParams) ;
20384
20385 return;
20386}
20387
20388/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020389 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20390
20391 DESCRIPTION
20392 API to send EXTScan Set SSID Hotlist Response to HDD
20393
20394 PARAMETERS
20395 pEventData: Response from FW
20396 pUserData:
20397===========================================================================*/
20398void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20399{
20400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20401 tWDA_CbContext *pWDA = NULL;
20402 void *pCallbackContext;
20403 tpAniSirGlobal pMac;
20404
20405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20406 "%s: ", __func__);
20407 if (NULL == pWdaParams)
20408 {
20409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20410 "%s: pWdaParams received NULL", __func__);
20411 VOS_ASSERT(0) ;
20412 return;
20413 }
20414
20415 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20416
20417 if (NULL == pWDA)
20418 {
20419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20420 "%s: pWDA received NULL", __func__);
20421 VOS_ASSERT(0);
20422 goto error;
20423 }
20424
20425 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20426 if (NULL == pMac)
20427 {
20428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20429 "%s:pMac is NULL", __func__);
20430 VOS_ASSERT(0);
20431 goto error;
20432 }
20433
20434 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20435
20436 if (pMac->sme.pEXTScanIndCb)
20437 {
20438 pMac->sme.pEXTScanIndCb(pCallbackContext,
20439 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20440 pEventData);
20441 }
20442 else
20443 {
20444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20445 "%s:HDD callback is null", __func__);
20446 VOS_ASSERT(0);
20447 }
20448
20449
20450error:
20451
20452 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20453 {
20454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20455 }
20456 if (pWdaParams->wdaMsgParam != NULL)
20457 {
20458 vos_mem_free(pWdaParams->wdaMsgParam);
20459 }
20460 vos_mem_free(pWdaParams) ;
20461
20462 return;
20463}
20464
20465/*==========================================================================
20466 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20467
20468 DESCRIPTION
20469 API to send EXTScan ReSet SSID Hotlist Response to HDD
20470
20471 PARAMETERS
20472 pEventData: Response from FW
20473 pUserData:
20474===========================================================================*/
20475void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20476{
20477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20478 tWDA_CbContext *pWDA = NULL;
20479 void *pCallbackContext;
20480 tpAniSirGlobal pMac;
20481
20482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20483 "%s:", __func__);
20484 if (NULL == pWdaParams)
20485 {
20486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20487 "%s: pWdaParams received NULL", __func__);
20488 VOS_ASSERT(0) ;
20489 return;
20490 }
20491
20492 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20493
20494 if (NULL == pWDA)
20495 {
20496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20497 "%s: pWDA received NULL", __func__);
20498 VOS_ASSERT(0);
20499 goto error;
20500 }
20501
20502 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20503 if (NULL == pMac)
20504 {
20505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20506 "%s:pMac is NULL", __func__);
20507 VOS_ASSERT(0);
20508 goto error;
20509 }
20510
20511 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20512
20513 if (pMac->sme.pEXTScanIndCb)
20514 {
20515 pMac->sme.pEXTScanIndCb(pCallbackContext,
20516 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20517 pEventData);
20518 }
20519 else
20520 {
20521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20522 "%s:HDD callback is null", __func__);
20523 VOS_ASSERT(0);
20524 }
20525
20526
20527error:
20528
20529 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20530 {
20531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20532 }
20533 if (pWdaParams->wdaMsgParam != NULL)
20534 {
20535 vos_mem_free(pWdaParams->wdaMsgParam);
20536 }
20537 vos_mem_free(pWdaParams) ;
20538
20539 return;
20540}
20541
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020542/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020543 FUNCTION WDA_ProcessEXTScanStartReq
20544
20545 DESCRIPTION
20546 API to send EXTScan Start Request to WDI
20547
20548 PARAMETERS
20549 pWDA: Pointer to WDA context
20550 wdaRequest: Pointer to EXTScan req parameters
20551===========================================================================*/
20552VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20553 tSirEXTScanStartReqParams *wdaRequest)
20554{
20555 WDI_Status status = WDI_STATUS_SUCCESS;
20556 tWDA_ReqParams *pWdaParams;
20557
20558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20559 "%s: ", __func__);
20560 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20561 if (NULL == pWdaParams)
20562 {
20563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20564 "%s: VOS MEM Alloc Failure", __func__);
20565 VOS_ASSERT(0);
20566 return VOS_STATUS_E_NOMEM;
20567 }
20568 pWdaParams->pWdaContext = pWDA;
20569 pWdaParams->wdaMsgParam = wdaRequest;
20570 pWdaParams->wdaWdiApiMsgParam = NULL;
20571
20572 status = WDI_EXTScanStartReq((void *)wdaRequest,
20573 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20574 (void *)pWdaParams);
20575 if (IS_WDI_STATUS_FAILURE(status))
20576 {
20577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20578 "Failure to request. Free all the memory " );
20579 vos_mem_free(pWdaParams->wdaMsgParam);
20580 vos_mem_free(pWdaParams);
20581 }
20582 return CONVERT_WDI2VOS_STATUS(status);
20583}
20584
20585/*==========================================================================
20586 FUNCTION WDA_ProcessEXTScanStopReq
20587
20588 DESCRIPTION
20589 API to send EXTScan Start Request to WDI
20590
20591 PARAMETERS
20592 pWDA: Pointer to WDA context
20593 wdaRequest: Pointer to EXTScan req parameters
20594===========================================================================*/
20595VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20596 tSirEXTScanStopReqParams *wdaRequest)
20597{
20598 WDI_Status status = WDI_STATUS_SUCCESS;
20599 tWDA_ReqParams *pWdaParams;
20600
20601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20602 "%s:", __func__);
20603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20604 if (NULL == pWdaParams)
20605 {
20606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20607 "%s: VOS MEM Alloc Failure", __func__);
20608 VOS_ASSERT(0);
20609 return VOS_STATUS_E_NOMEM;
20610 }
20611 pWdaParams->pWdaContext = pWDA;
20612 pWdaParams->wdaMsgParam = wdaRequest;
20613 pWdaParams->wdaWdiApiMsgParam = NULL;
20614
20615 status = WDI_EXTScanStopReq((void *)wdaRequest,
20616 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20617 (void *)pWdaParams);
20618 if (IS_WDI_STATUS_FAILURE(status))
20619 {
20620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20621 "Failure to request. Free all the memory " );
20622 vos_mem_free(pWdaParams->wdaMsgParam);
20623 vos_mem_free(pWdaParams);
20624 }
20625 return CONVERT_WDI2VOS_STATUS(status);
20626}
20627
20628/*==========================================================================
20629 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20630
20631 DESCRIPTION
20632 API to send EXTScan Get Cached Results Request to WDI
20633
20634 PARAMETERS
20635 pWDA: Pointer to WDA context
20636 wdaRequest: Pointer to EXTScan req parameters
20637===========================================================================*/
20638VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20639 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20640{
20641 WDI_Status status = WDI_STATUS_SUCCESS;
20642 tWDA_ReqParams *pWdaParams;
20643
20644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20645 "%s: ", __func__);
20646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20647 if (NULL == pWdaParams)
20648 {
20649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20650 "%s: VOS MEM Alloc Failure", __func__);
20651 VOS_ASSERT(0);
20652 return VOS_STATUS_E_NOMEM;
20653 }
20654 pWdaParams->pWdaContext = pWDA;
20655 pWdaParams->wdaMsgParam = wdaRequest;
20656 pWdaParams->wdaWdiApiMsgParam = NULL;
20657
20658 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20659 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20660 (void *)pWdaParams);
20661 if (IS_WDI_STATUS_FAILURE(status))
20662 {
20663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20664 "Failure to request. Free all the memory " );
20665 vos_mem_free(pWdaParams->wdaMsgParam);
20666 vos_mem_free(pWdaParams);
20667 }
20668 return CONVERT_WDI2VOS_STATUS(status);
20669}
20670
20671/*==========================================================================
20672 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20673
20674 DESCRIPTION
20675 API to send EXTScan Get Capabilities Request to WDI
20676
20677 PARAMETERS
20678 pWDA: Pointer to WDA context
20679 wdaRequest: Pointer to EXTScan req parameters
20680===========================================================================*/
20681VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20682 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20683{
20684 WDI_Status status = WDI_STATUS_SUCCESS;
20685 tWDA_ReqParams *pWdaParams;
20686
20687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20688 "%s:", __func__);
20689 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20690 if (NULL == pWdaParams)
20691 {
20692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20693 "%s: VOS MEM Alloc Failure", __func__);
20694 VOS_ASSERT(0);
20695 return VOS_STATUS_E_NOMEM;
20696 }
20697 pWdaParams->pWdaContext = pWDA;
20698 pWdaParams->wdaMsgParam = wdaRequest;
20699 pWdaParams->wdaWdiApiMsgParam = NULL;
20700
20701 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20702 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20703 (void *)pWdaParams);
20704 if (IS_WDI_STATUS_FAILURE(status))
20705 {
20706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20707 "Failure to request. Free all the memory " );
20708 vos_mem_free(pWdaParams->wdaMsgParam);
20709 vos_mem_free(pWdaParams);
20710 }
20711 return CONVERT_WDI2VOS_STATUS(status);
20712}
20713
20714/*==========================================================================
20715 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20716
20717 DESCRIPTION
20718 API to send Set BSSID Hotlist Request to WDI
20719
20720 PARAMETERS
20721 pWDA: Pointer to WDA context
20722 wdaRequest: Pointer to EXTScan req parameters
20723===========================================================================*/
20724VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20725 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20726{
20727 WDI_Status status = WDI_STATUS_SUCCESS;
20728 tWDA_ReqParams *pWdaParams;
20729
20730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20731 "%s: ", __func__);
20732 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20733 if (NULL == pWdaParams)
20734 {
20735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20736 "%s: VOS MEM Alloc Failure", __func__);
20737 VOS_ASSERT(0);
20738 return VOS_STATUS_E_NOMEM;
20739 }
20740 pWdaParams->pWdaContext = pWDA;
20741 pWdaParams->wdaMsgParam = wdaRequest;
20742 pWdaParams->wdaWdiApiMsgParam = NULL;
20743
20744 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20745 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20746 (void *)pWdaParams);
20747 if (IS_WDI_STATUS_FAILURE(status))
20748 {
20749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20750 "Failure to request. Free all the memory " );
20751 vos_mem_free(pWdaParams->wdaMsgParam);
20752 vos_mem_free(pWdaParams);
20753 }
20754 return CONVERT_WDI2VOS_STATUS(status);
20755}
20756
20757/*==========================================================================
20758 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20759
20760 DESCRIPTION
20761 API to send Reset BSSID Hotlist Request to WDI
20762
20763 PARAMETERS
20764 pWDA: Pointer to WDA context
20765 wdaRequest: Pointer to EXTScan req parameters
20766===========================================================================*/
20767VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20768 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20769{
20770 WDI_Status status = WDI_STATUS_SUCCESS;
20771 tWDA_ReqParams *pWdaParams;
20772
20773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20774 "%s:", __func__);
20775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20776 if (NULL == pWdaParams)
20777 {
20778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20779 "%s: VOS MEM Alloc Failure", __func__);
20780 VOS_ASSERT(0);
20781 return VOS_STATUS_E_NOMEM;
20782 }
20783 pWdaParams->pWdaContext = pWDA;
20784 pWdaParams->wdaMsgParam = wdaRequest;
20785 pWdaParams->wdaWdiApiMsgParam = NULL;
20786
20787 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20788 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20789 (void *)pWdaParams);
20790 if (IS_WDI_STATUS_FAILURE(status))
20791 {
20792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20793 "Failure to request. Free all the memory " );
20794 vos_mem_free(pWdaParams->wdaMsgParam);
20795 vos_mem_free(pWdaParams);
20796 }
20797 return CONVERT_WDI2VOS_STATUS(status);
20798}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020799
20800/*==========================================================================
20801 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20802
20803 DESCRIPTION
20804 API to send Set SSID Hotlist Request to WDI
20805
20806 PARAMETERS
20807 pWDA: Pointer to WDA context
20808 wdaRequest: Pointer to EXTScan req parameters
20809===========================================================================*/
20810VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20811 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20812{
20813 WDI_Status status = WDI_STATUS_SUCCESS;
20814 tWDA_ReqParams *pWdaParams;
20815
20816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20817 "%s: ", __func__);
20818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20819 if (NULL == pWdaParams)
20820 {
20821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20822 "%s: VOS MEM Alloc Failure", __func__);
20823 VOS_ASSERT(0);
20824 return VOS_STATUS_E_NOMEM;
20825 }
20826 pWdaParams->pWdaContext = pWDA;
20827 pWdaParams->wdaMsgParam = wdaRequest;
20828 pWdaParams->wdaWdiApiMsgParam = NULL;
20829
20830 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20831 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20832 (void *)pWdaParams);
20833 if (IS_WDI_STATUS_FAILURE(status))
20834 {
20835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20836 "Failure to request. Free all the memory " );
20837 vos_mem_free(pWdaParams->wdaMsgParam);
20838 vos_mem_free(pWdaParams);
20839 }
20840 return CONVERT_WDI2VOS_STATUS(status);
20841}
20842
20843/*==========================================================================
20844 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20845
20846 DESCRIPTION
20847 API to send Reset SSID Hotlist Request to WDI
20848
20849 PARAMETERS
20850 pWDA: Pointer to WDA context
20851 wdaRequest: Pointer to EXTScan req parameters
20852===========================================================================*/
20853VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20854 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20855{
20856 WDI_Status status = WDI_STATUS_SUCCESS;
20857 tWDA_ReqParams *pWdaParams;
20858
20859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20860 "%s:", __func__);
20861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20862 if (NULL == pWdaParams)
20863 {
20864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20865 "%s: VOS MEM Alloc Failure", __func__);
20866 VOS_ASSERT(0);
20867 return VOS_STATUS_E_NOMEM;
20868 }
20869 pWdaParams->pWdaContext = pWDA;
20870 pWdaParams->wdaMsgParam = wdaRequest;
20871 pWdaParams->wdaWdiApiMsgParam = NULL;
20872
20873 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20874 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20875 (void *)pWdaParams);
20876 if (IS_WDI_STATUS_FAILURE(status))
20877 {
20878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20879 "Failure to request. Free all the memory " );
20880 vos_mem_free(pWdaParams->wdaMsgParam);
20881 vos_mem_free(pWdaParams);
20882 }
20883 return CONVERT_WDI2VOS_STATUS(status);
20884}
20885
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020886/*==========================================================================
20887 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20888
20889 DESCRIPTION
20890 API to send Reset SSID Hotlist Request to WDI
20891
20892 PARAMETERS
20893 pWDA: Pointer to WDA context
20894 wdaRequest: Pointer to EXTScan req parameters
20895===========================================================================*/
20896VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20897 tSirHighPriorityDataInfoInd *wdaRequest)
20898{
20899 WDI_Status status = WDI_STATUS_SUCCESS;
20900
20901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20902 "%s:", __func__);
20903
20904 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20905 if (WDI_STATUS_PENDING == status)
20906 {
20907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20908 FL("pending status received "));
20909 }
20910 else if (WDI_STATUS_SUCCESS_SYNC != status)
20911 {
20912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20913 FL("Failure status %d"), status);
20914 }
20915 return CONVERT_WDI2VOS_STATUS(status);
20916}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020917
Dino Mycle41bdc942014-06-10 11:30:24 +053020918#endif /* WLAN_FEATURE_EXTSCAN */
20919
Sunil Duttbd736ed2014-05-26 21:19:41 +053020920#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20921
20922/*==========================================================================
20923 FUNCTION WDA_LLStatsSetRspCallback
20924
20925 DESCRIPTION
20926 API to process set link layer statistics response from FW
20927
20928 PARAMETERS
20929 pRsp: Pointer to set link layer statistics response
20930 pUserData: Pointer to user data
20931
20932 RETURN VALUE
20933 NONE
20934
20935===========================================================================*/
20936void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20937{
20938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20939
20940
20941 if (NULL == pWdaParams)
20942 {
20943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20944 "%s: pWdaParams received NULL", __func__);
20945 VOS_ASSERT(0) ;
20946 return ;
20947 }
20948
20949 /* Do not need to send notification to upper layer
20950 * Just free allocated resources */
20951 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20952 {
20953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20954 }
20955 if (pWdaParams->wdaMsgParam != NULL)
20956 {
20957 vos_mem_free(pWdaParams->wdaMsgParam);
20958 }
20959 vos_mem_free(pWdaParams) ;
20960
20961 return;
20962}
20963
20964/*==========================================================================
20965 FUNCTION WDA_ProcessLLStatsSetReq
20966
20967 DESCRIPTION
20968 API to send Set Link Layer Stats request to WDI
20969
20970 PARAMETERS
20971 pWDA: Pointer to WDA context
20972 wdaRequest: Pointer to set Link Layer Stats req parameters
20973===========================================================================*/
20974VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20975 tSirLLStatsSetReq *wdaRequest)
20976{
20977 WDI_Status status = WDI_STATUS_SUCCESS;
20978 tWDA_ReqParams *pWdaParams;
20979
20980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20981 if (NULL == pWdaParams)
20982 {
20983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20984 "%s: VOS MEM Alloc Failure", __func__);
20985 VOS_ASSERT(0);
20986 return VOS_STATUS_E_NOMEM;
20987 }
20988 pWdaParams->pWdaContext = pWDA;
20989 pWdaParams->wdaMsgParam = wdaRequest;
20990 pWdaParams->wdaWdiApiMsgParam = NULL;
20991
20992 status = WDI_LLStatsSetReq((void *)wdaRequest,
20993 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20994 (void *)pWdaParams);
20995 if (IS_WDI_STATUS_FAILURE(status))
20996 {
20997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20998 "Failure to request. Free all the memory " );
20999 vos_mem_free(pWdaParams->wdaMsgParam);
21000 vos_mem_free(pWdaParams);
21001 }
21002 return CONVERT_WDI2VOS_STATUS(status);
21003}
21004
21005/*==========================================================================
21006 FUNCTION WDA_LLStatsGetRspCallback
21007
21008 DESCRIPTION
21009 API to process get link layer statistics response from FW
21010
21011 PARAMETERS
21012 pRsp: Pointer to get link layer statistics response
21013 pUserData: Pointer to user data
21014
21015 RETURN VALUE
21016 NONE
21017
21018===========================================================================*/
21019void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21020{
21021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21022
21023 if (NULL == pWdaParams)
21024 {
21025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21026 "%s: pWdaParams received NULL", __func__);
21027 VOS_ASSERT(0) ;
21028 return ;
21029 }
21030
21031 /* Do not need to send notification to upper layer
21032 * Just free allocated resources */
21033 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21034 {
21035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21036 }
21037 if (pWdaParams->wdaMsgParam != NULL)
21038 {
21039 vos_mem_free(pWdaParams->wdaMsgParam);
21040 }
21041 vos_mem_free(pWdaParams) ;
21042
21043 return;
21044}
21045
21046/*==========================================================================
21047 FUNCTION WDA_ProcessLLStatsGetReq
21048
21049 DESCRIPTION
21050 API to send Get Link Layer Stats request to WDI
21051
21052 PARAMETERS
21053 pWDA: Pointer to WDA context
21054 wdaRequest: Pointer to get Link Layer Stats req parameters
21055===========================================================================*/
21056VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21057 tSirLLStatsGetReq *wdaRequest)
21058{
21059 WDI_Status status = WDI_STATUS_SUCCESS;
21060 tWDA_ReqParams *pWdaParams;
21061
21062 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21063 if (NULL == pWdaParams)
21064 {
21065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21066 "%s: VOS MEM Alloc Failure", __func__);
21067 VOS_ASSERT(0);
21068 return VOS_STATUS_E_NOMEM;
21069 }
21070 pWdaParams->pWdaContext = pWDA;
21071 pWdaParams->wdaMsgParam = wdaRequest;
21072 pWdaParams->wdaWdiApiMsgParam = NULL;
21073
21074 status = WDI_LLStatsGetReq((void *) wdaRequest,
21075 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21076 (void *)pWdaParams);
21077 if (IS_WDI_STATUS_FAILURE(status))
21078 {
21079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21080 "Failure to request. Free all the memory " );
21081 vos_mem_free(pWdaParams->wdaMsgParam);
21082 vos_mem_free(pWdaParams);
21083 }
21084 return CONVERT_WDI2VOS_STATUS(status);
21085}
21086
21087/*==========================================================================
21088 FUNCTION WDA_LLStatsClearRspCallback
21089
21090 DESCRIPTION
21091 API to process clear link layer statistics response from FW
21092
21093 PARAMETERS
21094 pRsp: Pointer to clear link layer statistics response
21095 pUserData: Pointer to user data
21096
21097 RETURN VALUE
21098 NONE
21099
21100===========================================================================*/
21101void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21102{
21103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21104
21105
21106 if (NULL == pWdaParams)
21107 {
21108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21109 "%s: pWdaParams received NULL", __func__);
21110 VOS_ASSERT(0) ;
21111 return ;
21112 }
21113 /* Do not need to send notification to upper layer
21114 * Just free allocated resources */
21115 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21116 {
21117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21118 }
21119 if (pWdaParams->wdaMsgParam != NULL)
21120 {
21121 vos_mem_free(pWdaParams->wdaMsgParam);
21122 }
21123 vos_mem_free(pWdaParams) ;
21124 return;
21125}
21126
21127/*==========================================================================
21128 FUNCTION WDA_ProcessLLStatsClearReq
21129
21130 DESCRIPTION
21131 API to send Clear Link Layer Stats request to WDI
21132
21133 PARAMETERS
21134 pWDA: Pointer to WDA context
21135 wdaRequest: Pointer to earLink Layer Stats req
21136===========================================================================*/
21137VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21138 tSirLLStatsClearReq *wdaRequest)
21139{
21140 WDI_Status status = WDI_STATUS_SUCCESS;
21141 tWDA_ReqParams *pWdaParams;
21142
21143 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21144 if (NULL == pWdaParams)
21145 {
21146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21147 "%s: VOS MEM Alloc Failure", __func__);
21148 VOS_ASSERT(0);
21149 return VOS_STATUS_E_NOMEM;
21150 }
21151 pWdaParams->pWdaContext = pWDA;
21152 pWdaParams->wdaMsgParam = wdaRequest;
21153 pWdaParams->wdaWdiApiMsgParam = NULL;
21154
21155 status = WDI_LLStatsClearReq((void *) wdaRequest,
21156 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21157 (void *)pWdaParams);
21158 if (IS_WDI_STATUS_FAILURE(status))
21159 {
21160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21161 "Failure to request. Free all the memory " );
21162 vos_mem_free(pWdaParams->wdaMsgParam);
21163 vos_mem_free(pWdaParams);
21164 }
21165 return CONVERT_WDI2VOS_STATUS(status);
21166}
21167
21168#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021169
Abhishek Singh85b74712014-10-08 11:38:19 +053021170void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21171{
21172 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21173
21174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21175 "<------ %s " ,__func__);
21176 if (NULL == fwStatsinfo)
21177 {
21178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21179 "%s: pWdaParams received NULL", __func__);
21180 VOS_ASSERT(0);
21181 return;
21182 }
21183
21184 if(fwStatsinfo->callback)
21185 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21186
21187 vos_mem_free(pUserData);
21188 return;
21189}
21190
21191
21192v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21193 tSirFWStatsGetReq *pData)
21194{
21195
21196 WDI_Status wdiStatus;
21197 tSirFWStatsInfo *fwStatsinfo;
21198
21199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21200 "------> %s" , __func__);
21201
21202 fwStatsinfo =
21203 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21204 if (NULL == fwStatsinfo)
21205 {
21206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21207 "%s: VOS MEM Alloc Failure", __func__);
21208 VOS_ASSERT(0);
21209 vos_mem_free(pData);
21210 return;
21211 }
21212
21213 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21214 fwStatsinfo->data = pData->data;
21215
21216 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21217 WDA_FWStatsGetRspCallback,
21218 pData->stats);
21219 if (WDI_STATUS_PENDING == wdiStatus)
21220 {
21221 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21222 "Pending received for %s:%d ", __func__, __LINE__);
21223 }
21224 else if (WDI_STATUS_SUCCESS != wdiStatus)
21225 {
21226 if (fwStatsinfo->callback)
21227 {
21228 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21229 }
21230 vos_mem_free(fwStatsinfo);
21231 }
21232 vos_mem_free(pData);
21233}
21234
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021235/*==========================================================================
21236 FUNCTION WDA_EncryptMsgRspCallback
21237
21238 DESCRIPTION
21239 API to send Encrypt message response to HDD
21240
21241 PARAMETERS
21242 pEventData: Response from FW
21243 pUserData: Data sent to firmware as part of request
21244===========================================================================*/
21245void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21246 void* pUserData)
21247{
21248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21249 tWDA_CbContext *pWDA = NULL;
21250 tpAniSirGlobal pMac;
21251 vos_msg_t vosMsg;
21252 tpSirEncryptedDataRspParams pEncRspParams;
21253 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21254
21255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21256 FL("%s:"), __func__);
21257 if (NULL == pWdaParams)
21258 {
21259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21260 FL("%s: pWdaParams received NULL"), __func__);
21261 VOS_ASSERT(0);
21262 return;
21263 }
21264
21265 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21266
21267 if (NULL == pWDA)
21268 {
21269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21270 FL("%s: pWDA received NULL"), __func__);
21271 VOS_ASSERT(0);
21272 goto error;
21273 }
21274
21275 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21276 if (NULL == pMac)
21277 {
21278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21279 FL("%s:pMac is NULL"), __func__);
21280 VOS_ASSERT(0);
21281 goto error;
21282 }
21283
21284 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21285
21286 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21287 if (NULL == pEncRspParams)
21288 {
21289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21290 FL("%s: VOS MEM Alloc Failure"), __func__);
21291 VOS_ASSERT(0);
21292 goto error;
21293 }
21294
21295 /* Message Header */
21296 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21297 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21298 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21299 pEncryptedDataRsp->encryptedPayload.length;
21300 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21301 pEncryptedDataRsp->encryptedPayload.data,
21302 pEncryptedDataRsp->encryptedPayload.length);
21303
21304 /* VOS message wrapper */
21305 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21306 vosMsg.bodyptr = (void *)pEncRspParams;
21307 vosMsg.bodyval = 0;
21308
21309 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21310 {
21311 /* free the mem */
21312 vos_mem_free((v_VOID_t *) pEncRspParams);
21313 }
21314
21315error:
21316
21317 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21318 {
21319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21320 }
21321 if (pWdaParams->wdaMsgParam != NULL)
21322 {
21323 vos_mem_free(pWdaParams->wdaMsgParam);
21324 }
21325 vos_mem_free(pWdaParams) ;
21326
21327 return;
21328}
21329/*==========================================================================
21330 FUNCTION WDA_ProcessEncryptMsgReq
21331
21332 DESCRIPTION
21333 API to send Encrypt message Request to WDI
21334
21335 PARAMETERS
21336 pWDA: Pointer to WDA context
21337 wdaRequest: Pointer to Encrypt_msg req parameters
21338===========================================================================*/
21339VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21340 u8 *wdaRequest)
21341{
21342 WDI_Status status = WDI_STATUS_SUCCESS;
21343 tWDA_ReqParams *pWdaParams;
21344
21345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21346 FL("%s: "), __func__);
21347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21348 if (NULL == pWdaParams)
21349 {
21350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21351 FL("%s: VOS MEM Alloc Failure"), __func__);
21352 VOS_ASSERT(0);
21353 return VOS_STATUS_E_NOMEM;
21354 }
21355 pWdaParams->pWdaContext = pWDA;
21356 pWdaParams->wdaMsgParam = wdaRequest;
21357 pWdaParams->wdaWdiApiMsgParam = NULL;
21358
21359 status = WDI_EncryptMsgReq((void *)wdaRequest,
21360 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21361 (void *)pWdaParams);
21362 if (IS_WDI_STATUS_FAILURE(status))
21363 {
21364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21365 FL("Failure to request. Free all the memory " ));
21366 vos_mem_free(pWdaParams->wdaMsgParam);
21367 vos_mem_free(pWdaParams);
21368 }
21369 return CONVERT_WDI2VOS_STATUS(status);
21370}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021371/*==========================================================================
21372 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21373
21374 DESCRIPTION
21375 API to enable/disable RTS/CTS for different modes.
21376
21377 PARAMETERS
21378 pWDA: Pointer to WDA context
21379 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21380===========================================================================*/
21381
21382VOS_STATUS
21383WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21384 tANI_U32 rtsCtsVal)
21385{
21386 WDI_Status status;
21387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21388 FL("---> %s"), __func__);
21389 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21390 if (WDI_STATUS_PENDING == status)
21391 {
21392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21393 FL("pending status received "));
21394 }
21395 else if (WDI_STATUS_SUCCESS_SYNC != status)
21396 {
21397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21398 FL("Failure status %d"), status);
21399 }
21400 return CONVERT_WDI2VOS_STATUS(status) ;
21401}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021402
21403void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021404{
21405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021406 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021407
21408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21409 "<------ %s " ,__func__);
21410 if (NULL == pWdaParams)
21411 {
21412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21413 "%s: pWdaParams received NULL", __func__);
21414 VOS_ASSERT(0) ;
21415 return ;
21416 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021417 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21418 if (pData != NULL) {
21419 pData->callback(pData->magic, pData->cmpVar);
21420 vos_mem_free(pWdaParams->wdaMsgParam);
21421 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021422 vos_mem_free(pWdaParams) ;
21423
21424 return;
21425}
21426
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021427VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021428{
21429
21430 WDI_Status status = WDI_STATUS_SUCCESS;
21431 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021432 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021433
21434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21435 FL("%s: "), __func__);
21436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21437 if (NULL == pWdaParams)
21438 {
21439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21440 FL("%s: VOS MEM Alloc Failure"), __func__);
21441 VOS_ASSERT(0);
21442 return VOS_STATUS_E_NOMEM;
21443 }
21444 pWdaParams->pWdaContext = pWDA;
21445 pWdaParams->wdaMsgParam = wdaRequest;
21446 pWdaParams->wdaWdiApiMsgParam = NULL;
21447
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021448 status = WDI_MonStartReq(pMonModeData->data,
21449 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021450 (void *)pWdaParams);
21451 if (IS_WDI_STATUS_FAILURE(status))
21452 {
21453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21454 "Failure to request. Free all the memory " );
21455 vos_mem_free(pWdaParams->wdaMsgParam);
21456 vos_mem_free(pWdaParams);
21457 }
21458 return CONVERT_WDI2VOS_STATUS(status);
21459}
21460
Katya Nigamf0511f62015-05-05 16:40:57 +053021461VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21462{
21463
21464 WDI_Status status = WDI_STATUS_SUCCESS;
21465 tWDA_ReqParams *pWdaParams;
21466
21467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21468 FL("%s: "), __func__);
21469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21470 if (NULL == pWdaParams)
21471 {
21472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21473 FL("%s: VOS MEM Alloc Failure"), __func__);
21474 VOS_ASSERT(0);
21475 return VOS_STATUS_E_NOMEM;
21476 }
21477 pWdaParams->pWdaContext = pWDA;
21478 pWdaParams->wdaMsgParam = wdaRequest;
21479 pWdaParams->wdaWdiApiMsgParam = NULL;
21480
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21482 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021483 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021484 (void *)pWdaParams);
21485
21486 if (IS_WDI_STATUS_FAILURE(status))
21487 {
21488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21489 "Failure to request. Free all the memory " );
21490 vos_mem_free(pWdaParams->wdaMsgParam);
21491 vos_mem_free(pWdaParams);
21492 }
21493 return CONVERT_WDI2VOS_STATUS(status);
21494}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021495
21496VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21497{
21498 WDI_Status status;
21499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21500 FL("---> %s"), __func__);
21501 status = WDI_EnableDisableCAEventInd(val);
21502 if (WDI_STATUS_PENDING == status)
21503 {
21504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21505 FL("pending status received "));
21506 }
21507 else if (WDI_STATUS_SUCCESS_SYNC != status)
21508 {
21509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21510 FL("Failure status %d"), status);
21511 }
21512 return CONVERT_WDI2VOS_STATUS(status) ;
21513}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021514
21515/*==========================================================================
21516 FUNCTION WDA_WifiConfigSetRspCallback
21517
21518 DESCRIPTION
21519 API to process set WifiConfig response from FW
21520
21521 PARAMETERS
21522 pRsp: Pointer to set WifiConfig response
21523 pUserData: Pointer to user data
21524
21525 RETURN VALUE
21526 NONE
21527
21528===========================================================================*/
21529void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21530{
21531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21532
21533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21534 "<------ %s " ,__func__);
21535
21536 if(NULL == pWdaParams)
21537 {
21538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21539 "%s: pWdaParams received NULL", __func__);
21540 VOS_ASSERT(0);
21541 return ;
21542 }
21543
21544 if(NULL == pWdaParams->wdaMsgParam)
21545 {
21546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21547 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21548 VOS_ASSERT(0);
21549 vos_mem_free(pWdaParams);
21550 return ;
21551 }
21552
21553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21554 vos_mem_free(pWdaParams->wdaMsgParam);
21555 vos_mem_free(pWdaParams);
21556
21557 return;
21558}
21559
21560/*==========================================================================
21561 FUNCTION WDA_ProcessWifiConfigReq
21562
21563 DESCRIPTION
21564 API to send Set WifiConfig params request to WDI
21565
21566 PARAMETERS
21567 pWDA: Pointer to WDA context
21568 wdaRequest: Pointer to set WifiConfig req parameters
21569===========================================================================*/
21570
21571VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21572 tSetWifiConfigParams *pwdaWificonfig)
21573{
21574 WDI_Status status = WDI_STATUS_SUCCESS;
21575 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21576 tWDA_ReqParams *pWdaParams ;
21577 WDI_Status wstatus;
21578
21579 /* Sanity Check*/
21580 if(NULL == pwdaWificonfig)
21581 {
21582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21583 "%s: tSetWifiConfigParams received NULL", __func__);
21584 VOS_ASSERT(0) ;
21585 return VOS_STATUS_E_FAULT;
21586 }
21587
21588 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21589 sizeof(WDI_WifiConfigSetReqType));
21590 if(NULL == pwdiWifConfigSetReqParams)
21591 {
21592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21593 "%s: VOS MEM Alloc Failure", __func__);
21594 VOS_ASSERT(0);
21595 vos_mem_free(pwdaWificonfig);
21596 return VOS_STATUS_E_NOMEM;
21597 }
21598
21599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21600 if(NULL == pWdaParams)
21601 {
21602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21603 "%s: VOS MEM Alloc Failure", __func__);
21604 VOS_ASSERT(0);
21605 vos_mem_free(pwdiWifConfigSetReqParams);
21606 vos_mem_free(pwdaWificonfig);
21607 return VOS_STATUS_E_NOMEM;
21608 }
21609 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21610 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21611 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21612 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21613
21614 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021615 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021616 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21617
21618 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21619 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21620 pWdaParams);
21621 if(IS_WDI_STATUS_FAILURE(wstatus))
21622 {
21623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21624 "Failure in sendind WifiConfigReq, free all the memory" );
21625 status = CONVERT_WDI2VOS_STATUS(wstatus);
21626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21627 vos_mem_free(pWdaParams->wdaMsgParam);
21628 vos_mem_free(pWdaParams);
21629 }
21630
21631 return status;
21632
21633}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021634
21635#ifdef FEATURE_OEM_DATA_SUPPORT
21636/*
21637 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21638 * Request to WDI.
21639 */
21640VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21641 tOemDataReqNewConfig *pOemDataReqNewConfig)
21642{
21643 VOS_STATUS status = VOS_STATUS_SUCCESS;
21644 WDI_Status wstatus;
21645 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21646
21647 /* Sanity Check*/
21648 if(NULL == pOemDataReqNewConfig)
21649 {
21650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21651 "%s: pOemDataReqNewConfig received NULL", __func__);
21652 VOS_ASSERT(0) ;
21653 return VOS_STATUS_E_FAULT;
21654 }
21655
21656 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21657 sizeof(WDI_OemDataReqNewConfig));
21658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21659 "------> %s " ,__func__);
21660
21661 if(NULL == wdiOemDataReqNewConfig)
21662 {
21663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21664 "%s: VOS MEM Alloc Failure", __func__);
21665 VOS_ASSERT(0);
21666 vos_mem_free(pOemDataReqNewConfig);
21667 return VOS_STATUS_E_NOMEM;
21668 }
21669
21670 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21671 sizeof(WDI_OemDataReqNewConfig));
21672
21673 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21674
21675 if (WDI_STATUS_PENDING == wstatus)
21676 {
21677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21678 FL("pending status received "));
21679 }
21680 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21681 {
21682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21683 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021684 }
21685
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021686 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021687 vos_mem_free(pOemDataReqNewConfig);
21688
21689 return status;
21690}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021691
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021692void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21693 void *pUserData)
21694{
21695 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21696 (tSirAntennaDiversitySelectionInfo *)pUserData;
21697
21698 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21700 "<------ %s " ,__func__);
21701 if (NULL == pAntennaDivSelInfo)
21702 {
21703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21704 "%s: pWdaParams received NULL", __func__);
21705 VOS_ASSERT(0) ;
21706 return ;
21707 }
21708 if (NULL == resParams)
21709 {
21710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21711 "%s: resParams received NULL", __func__);
21712 VOS_ASSERT(0) ;
21713 return ;
21714 }
21715
21716 if (pAntennaDivSelInfo->callback)
21717 {
21718 if (WDI_STATUS_SUCCESS == status)
21719 {
21720 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21721 pAntennaDivSelInfo->data);
21722 }
21723 else
21724 {
21725 pAntennaDivSelInfo->callback(-1,
21726 pAntennaDivSelInfo->data);
21727 }
21728 }
21729
21730 vos_mem_free(pUserData);
21731 return;
21732}
21733
21734/*
21735 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21736 * Request to WDI.
21737 */
21738v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21739 tSirAntennaDiversitySelectionReq *pData)
21740{
21741 WDI_Status wdiStatus;
21742 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21743
21744 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21745 "------> %s " , __func__);
21746
21747 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21748 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21749 if (NULL == pAntennaDivSelInfo)
21750 {
21751 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21752 "%s: VOS MEM Alloc Failure", __func__);
21753 VOS_ASSERT(0);
21754 vos_mem_free(pData);
21755 return;
21756 }
21757
21758 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21759 pAntennaDivSelInfo->data = pData->data;
21760
21761 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21762 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21763
21764 if (WDI_STATUS_PENDING == wdiStatus)
21765 {
21766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21767 "Pending received for %s:%d ", __func__, __LINE__);
21768 }
21769 else if (WDI_STATUS_SUCCESS != wdiStatus)
21770 {
21771 if (pAntennaDivSelInfo->callback)
21772 {
21773 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21774 }
21775 }
21776
21777 vos_mem_free(pData);
21778 return;
21779}
21780
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021781/*
21782 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21783 * Request to WDI.
21784 */
21785VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21786 tModifyRoamParamsReqParams *params)
21787{
21788 WDI_Status status;
21789
21790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21791 FL("---> %s"), __func__);
21792
21793 if (NULL == params)
21794 {
21795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21796 FL("tModifyRoamParamsReqParams is received NULL"));
21797 return VOS_STATUS_E_NOMEM;
21798 }
21799
21800 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21801 if (WDI_STATUS_PENDING == status)
21802 {
21803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21804 FL("pending status received "));
21805 }
21806 else if (WDI_STATUS_SUCCESS_SYNC != status)
21807 {
21808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21809 FL("Failure status %d"), status);
21810 }
21811 vos_mem_free(params);
21812 return CONVERT_WDI2VOS_STATUS(status) ;
21813}
21814
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021815#endif