blob: 751cf246c4670c2696ba38f202ef5e6fad554731 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530139#define WDA_BA_MAX_RETRY_THRESHOLD 10
140#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800141
Jeff Johnson295189b2012-06-20 16:38:30 -0700142/* extern declarations */
143extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700144extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* forward declarations */
147void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
148 void *pBodyptr, tANI_U32 bodyVal) ;
149VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
150 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
152VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
153
154extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
155 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530156void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700157void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
158 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
159void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
160 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
161void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
162 void* pUserData ) ;
163static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
164static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530165bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800167void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef WLAN_FEATURE_VOWIFI_11R
170VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
171#endif /* WLAN_FEATURE_VOWIFI_11R */
172
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
174void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
175VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700176#ifdef FEATURE_WLAN_SCAN_PNO
177static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
178static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
179static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
180#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700181#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700182VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530183VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
184 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530186void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
187void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
c_hpothu92367912014-05-01 15:18:17 +0530222v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
223 tSirBcnMissRateReq *pData);
224
Jeff Johnson295189b2012-06-20 16:38:30 -0700225VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
226 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700227#ifdef WLAN_FEATURE_11AC
228VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
229 tUpdateVHTOpMode *pData);
230#endif
Leo Chang9056f462013-08-01 19:21:11 -0700231
232#ifdef FEATURE_WLAN_LPHB
233VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
234 tSirLPHBReq *pData);
235#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530236
Abhishek Singh00b71972016-01-07 10:51:04 +0530237#ifdef WLAN_FEATURE_RMC
238void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
239 v_PVOID_t pData);
240#endif /* WLAN_FEATURE_RMC */
241
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#ifdef WLAN_FEATURE_EXTSCAN
243VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
244 tSirEXTScanStartReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStopReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
248 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
250 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
252 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530255VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
257VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530259VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
260 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530261#endif /* WLAN_FEATURE_EXTSCAN */
262
Sunil Duttbd736ed2014-05-26 21:19:41 +0530263#ifdef WLAN_FEATURE_LINK_LAYER_STATS
264VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
265 tSirLLStatsSetReq *wdaRequest);
266
267VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
268 tSirLLStatsGetReq *wdaRequest);
269
270VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
271 tSirLLStatsClearReq *wdaRequest);
272#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530273
274v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
275 tSirFWStatsGetReq *wdaRequest);
276
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530277VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
278 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530279VOS_STATUS
280WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
281 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530282
c_manjeecfd1efb2015-09-25 19:32:34 +0530283VOS_STATUS
284WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
285 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530286
Katya Nigamf0511f62015-05-05 16:40:57 +0530287VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
288VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530289VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530290
291VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
292 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530293
294VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
295 tOemDataReqNewConfig *pOemDataReqNewConfig);
296
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530297
298v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
299 tSirAntennaDiversitySelectionReq *pData);
300
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530301VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
302 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530303/*
304 * FUNCTION: WDA_ProcessNanRequest
305 * Process NAN request
306 */
307VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
308 tNanRequest *wdaRequest)
309{
310 WDI_Status status = WDI_STATUS_SUCCESS;
311 tWDA_ReqParams *pWdaParams;
312 WDI_NanRequestType *wdiRequest = NULL;
313 size_t wdiReqLength = sizeof(WDI_NanRequestType)
314 - sizeof(wdiRequest->request_data)
315 + wdaRequest->request_data_len;
316
317 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
318
319 if (NULL == wdiRequest)
320 {
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
322 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
323 wdiReqLength);
324 vos_mem_free(wdaRequest);
325 return VOS_STATUS_E_NOMEM;
326 }
327
328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
329 "WDA: Process Nan Request length: %zu", wdiReqLength);
330
331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
332 if (NULL == pWdaParams)
333 {
334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
335 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
336 VOS_ASSERT(0);
337 vos_mem_free(wdaRequest);
338 vos_mem_free(wdiRequest);
339 return VOS_STATUS_E_NOMEM;
340 }
341
342 wdiRequest->request_data_len = wdaRequest->request_data_len;
343
344 vos_mem_copy( wdiRequest->request_data,
345 wdaRequest->request_data,
346 wdaRequest->request_data_len);
347
348 vos_mem_free(wdaRequest);
349
350 pWdaParams->pWdaContext = pWDA;
351 pWdaParams->wdaMsgParam = NULL;
352 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
353
354 status = WDI_NanRequest(wdiRequest, pWdaParams);
355
356 if (IS_WDI_STATUS_FAILURE(status))
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
359 "Failure to request. Free all the memory " );
360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
361 vos_mem_free(pWdaParams);
362 }
363
364 return CONVERT_WDI2VOS_STATUS(status) ;
365}
366
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530367/**
368 * wda_state_info_dump() - prints state information of wda layer
369 */
370static void wda_state_info_dump(void)
371{
372 v_CONTEXT_t vos_ctx_ptr = NULL;
373 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530374
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
376 "<------ %s " ,__func__);
377
378 /* Get the Global VOSS Context */
379 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
380
381 if (NULL != vos_ctx_ptr)
382 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
383 vos_ctx_ptr );
384 else {
385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
386 "%s: Invalid Global VOSS Context", __func__);
387 VOS_ASSERT(0);
388 return;
389 }
390
391 if (NULL != wda)
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
393 "wdaState: %d linkState: %d", wda->wdaState,
394 wda->linkState);
395 else {
396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
397 "%s: Invalid WDA Context", __func__);
398 VOS_ASSERT(0);
399 }
400}
401
402/**
403 * wda_register_debug_callback() - registration function for wda layer
404 * to print wda state information
405 */
406static void wda_register_debug_callback(void)
407{
408 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
409}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530410
Jeff Johnson295189b2012-06-20 16:38:30 -0700411/*
412 * FUNCTION: WDA_open
413 * Allocate the WDA context
414 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530415VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 tMacOpenParameters *pMacParams )
417{
418 tWDA_CbContext *wdaContext;
419 VOS_STATUS status;
420 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530422 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
424 if(!VOS_IS_STATUS_SUCCESS(status))
425 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
427 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 return VOS_STATUS_E_NOMEM;
429 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /*__asm int 3;*/
431 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
432
433 /* Initialize data structures */
434 wdaContext->pVosContext = pVosContext;
435 wdaContext->wdaState = WDA_INIT_STATE;
436 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530437 vos_lock_init(&wdaContext->mgmt_pkt_lock);
438
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Initialize WDA-WDI synchronization event */
440 status = vos_event_init(&wdaContext->wdaWdiEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 /* Init Frame transfer event */
448 status = vos_event_init(&wdaContext->txFrameEvent);
449 if(!VOS_IS_STATUS_SUCCESS(status))
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800452 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800453 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 status = vos_event_init(&wdaContext->suspendDataTxEvent);
456 if(!VOS_IS_STATUS_SUCCESS(status))
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800459 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800460 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
463 if(!VOS_IS_STATUS_SUCCESS(status))
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800466 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800467 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530471 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 &wdiDevCapability, pMacParams->driverType))
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800476 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 else
479 {
480 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
481 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
482 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* update max STA in WDA used for BA */
484 wdaContext->wdaMaxSta = pMacParams->maxStation;
485 /* store the frameTransRequired flag in wdaContext, to send this to HAL
486 * in WDA_Start
487 */
488 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
489 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530490
491 wda_register_debug_callback();
492
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800494
495error:
496 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
497 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700498}
499
Jeff Johnson295189b2012-06-20 16:38:30 -0700500/*
501 * FUNCTION: WDA_preStart
502 * Trigger DAL-AL to start CFG download
503 */
504VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
505{
506 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
507 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /*
509 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
510 */
511 wdaMsg.type = WNI_CFG_DNLD_REQ ;
512 wdaMsg.bodyptr = NULL;
513 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 /* post the message.. */
515 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
516 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
517 {
518 vosStatus = VOS_STATUS_E_BADMSG;
519 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 return( vosStatus );
521}
Jeff Johnson295189b2012-06-20 16:38:30 -0700522/*
523 * FUNCTION: WDA_wdiStartCallback
524 * Once WDI_Start is finished, WDI start callback will be called by WDI
525 * to indicate completion of WDI_Start.
526 */
527void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
528 void *pVosContext)
529{
530 tWDA_CbContext *wdaContext;
531 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (NULL == pVosContext)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 return;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
539 if (NULL == wdaContext)
540 {
541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700542 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 return;
544 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 }
550 else
551 {
552 wdaContext->wdaState = WDA_START_STATE;
553 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* extract and save version information from the Start Response */
555 wdaContext->wcnssWlanCompiledVersion.major =
556 wdiRspParams->wlanCompiledVersion.major;
557 wdaContext->wcnssWlanCompiledVersion.minor =
558 wdiRspParams->wlanCompiledVersion.minor;
559 wdaContext->wcnssWlanCompiledVersion.version =
560 wdiRspParams->wlanCompiledVersion.version;
561 wdaContext->wcnssWlanCompiledVersion.revision =
562 wdiRspParams->wlanCompiledVersion.revision;
563 wdaContext->wcnssWlanReportedVersion.major =
564 wdiRspParams->wlanReportedVersion.major;
565 wdaContext->wcnssWlanReportedVersion.minor =
566 wdiRspParams->wlanReportedVersion.minor;
567 wdaContext->wcnssWlanReportedVersion.version =
568 wdiRspParams->wlanReportedVersion.version;
569 wdaContext->wcnssWlanReportedVersion.revision =
570 wdiRspParams->wlanReportedVersion.revision;
571 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
572 wdiRspParams->wcnssSoftwareVersion,
573 sizeof(wdaContext->wcnssSoftwareVersionString));
574 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
575 wdiRspParams->wcnssHardwareVersion,
576 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 /* Notify WDA_start that WDI_Start has completed */
578 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700579 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 return;
585}
586
Jeff Johnson295189b2012-06-20 16:38:30 -0700587/*
588 * FUNCTION: WDA_start
589 * Prepare TLV configuration and call WDI_Start.
590 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700591VOS_STATUS WDA_start(v_PVOID_t pVosContext)
592{
593 tWDA_CbContext *wdaContext;
594 VOS_STATUS status;
595 WDI_Status wdiStatus;
596 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 if (NULL == pVosContext)
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700600 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 return VOS_STATUS_E_FAILURE;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
604 if (NULL == wdaContext)
605 {
606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700607 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 return VOS_STATUS_E_FAILURE;
609 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* Non-FTM mode, WDA status for START must be INIT
611 * FTM mode, WDA Status for START can be INIT or STOP */
612 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
613 (WDA_STOP_STATE != wdaContext->wdaState) )
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* initialize the wdiStartParam. Note that we can create this on
621 the stack since we won't exit until WDI_Start() completes or
622 times out */
623 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* prepare the config TLV for the WDI */
626 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
627 if ( !VOS_IS_STATUS_SUCCESS(status) )
628 {
629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700630 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 return VOS_STATUS_E_FAILURE;
632 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* note from here onwards if an error occurs we must
634 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
636 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
637 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* initialize the WDA-WDI synchronization event */
639 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* call WDI start */
641 wdiStatus = WDI_Start(&wdiStartParam,
642 (WDI_StartRspCb)WDA_wdiStartCallback,
643 (v_VOID_t *)pVosContext);
644 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700647 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 vos_mem_free(wdiStartParam.pConfigBuffer);
649 return VOS_STATUS_E_FAILURE;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* wait for WDI start to invoke our callback */
652 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
653 WDA_WDI_START_TIMEOUT );
654 if ( !VOS_IS_STATUS_SUCCESS(status) )
655 {
656 if ( VOS_STATUS_E_TIMEOUT == status )
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700659 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 }
661 else
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
664 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700665 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 }
667 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530668 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* we no longer need the config TLV */
672 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* if we are not in the START state then WDI_Start() failed */
674 if (WDA_START_STATE != wdaContext->wdaState)
675 {
676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700677 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 return VOS_STATUS_E_FAILURE;
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* FTM mode does not need to monitor BA activity */
681 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
682 {
683 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800684 if(VOS_STATUS_SUCCESS == status)
685 {
686 wdaContext->wdaTimersCreated = VOS_TRUE;
687 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530688 else
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 FL("wda create timers failed"));
692 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 }
Leo Chang9d76f622013-08-23 16:34:52 -0700694 else
695 {
696 vos_event_init(&wdaContext->ftmStopDoneEvent);
697 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 return status;
699}
700
Jeff Johnson295189b2012-06-20 16:38:30 -0700701/*
702 * FUNCTION: WDA_prepareConfigTLV
703 * Function to prepare CFG for DAL(WDA)
704 */
705VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
706 WDI_StartReqParamsType *wdiStartParams )
707{
708 /* get pMac to acess CFG data base */
709 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
711 tHalCfg *tlvStruct = NULL ;
712 tANI_U8 *tlvStructStart = NULL ;
713 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
714 v_PVOID_t *configParam;
715 tANI_U32 configParamSize;
716 tANI_U32 *configDataValue;
717 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700718 tANI_U8 i;
719
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 if ((NULL == pMac)||(NULL == wdaContext))
721 {
722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700723 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 VOS_ASSERT(0);
725 return VOS_STATUS_E_FAILURE;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
728 WNI_CFG_STA_ID_LEN +
729 WNI_CFG_EDCA_WME_ACBK_LEN +
730 WNI_CFG_EDCA_WME_ACBE_LEN +
731 WNI_CFG_EDCA_WME_ACVI_LEN +
732 WNI_CFG_EDCA_WME_ACVO_LEN +
733 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* malloc memory for all configs in one shot */
735 configParam = vos_mem_malloc(configParamSize);
736
737 if(NULL == configParam )
738 {
739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700740 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 VOS_ASSERT(0) ;
742 return VOS_STATUS_E_NOMEM;
743 }
744 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)configParam;
747 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* TODO: Remove Later */
749 /* QWLAN_HAL_CFG_STA_ID */
750 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
751 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
752 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_STA_ID");
757 goto handle_failure;
758 }
759 tlvStruct->length = strLength ;
760 /* calculate the pad bytes to have the CFG in aligned format */
761 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
762 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
770 != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
779 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
783 eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
792 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
793 tlvStruct->length = sizeof(tANI_U32);
794 configDataValue = (tANI_U32 *)(tlvStruct + 1);
795 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
796 != eSIR_SUCCESS)
797 {
798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
799 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
800 goto handle_failure;
801 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700802 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
803 + sizeof(tHalCfg) + tlvStruct->length)) ;
804
805 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
806 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
810 configDataValue ) != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_PERIOD */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_PERIOD");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_CAL_CONTROL */
832 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_CAL_CONTROL");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_PROXIMITY */
845 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_PROXIMITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
858 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
862 != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
875 eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
884 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
897 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
923 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
936 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
949 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length));
961
962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
976 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length));
988
989 /* QWLAN_HAL_CFG_FIXED_RATE */
990 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
994 != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_FIXED_RATE");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length));
1002
1003 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1004 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1005 tlvStruct->length = sizeof(tANI_U32);
1006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1007 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1008 != eSIR_SUCCESS)
1009 {
1010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1011 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1012 goto handle_failure;
1013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1015 + sizeof(tHalCfg) + tlvStruct->length));
1016
1017 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1031 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1039 goto handle_failure;
1040 }
1041 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1044 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1070 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1071 tlvStruct->length = sizeof(tANI_U32);
1072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1073 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1074 configDataValue ) != eSIR_SUCCESS)
1075 {
1076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1077 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1078 goto handle_failure;
1079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length);
1082
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1097 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1101 configDataValue ) != eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1110 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1111 tlvStruct->length = sizeof(tANI_U32);
1112 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1113 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1114 eSIR_SUCCESS)
1115 {
1116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1117 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1118 goto handle_failure;
1119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1121 + sizeof(tHalCfg) + tlvStruct->length);
1122
1123 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1150 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1163 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1164 tlvStruct->length = sizeof(tANI_U32);
1165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1166 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1167 configDataValue ) != eSIR_SUCCESS)
1168 {
1169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1170 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1171 goto handle_failure;
1172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1174 + sizeof(tHalCfg) + tlvStruct->length);
1175
1176 /* QWLAN_HAL_CFG_STATS_PERIOD */
1177 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_STATS_PERIOD");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1190 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1194 eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1203 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1207 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1211 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1224 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1225 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1228 &strLength) != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1232 goto handle_failure;
1233 }
1234 tlvStruct->length = strLength;
1235 /* calculate the pad bytes to have the CFG in aligned format */
1236 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1237 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1239 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1241 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1242 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1245 &strLength) != eSIR_SUCCESS)
1246 {
1247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1248 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1249 goto handle_failure;
1250 }
1251 tlvStruct->length = strLength;
1252 /* calculate the pad bytes to have the CFG in aligned format */
1253 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1254 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1256 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1258 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1259 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1261 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1262 &strLength) != eSIR_SUCCESS)
1263 {
1264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1265 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1266 goto handle_failure;
1267 }
1268 tlvStruct->length = strLength;
1269 /* calculate the pad bytes to have the CFG in aligned format */
1270 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1271 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1275 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1276 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1279 &strLength) != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1283 goto handle_failure;
1284 }
1285 tlvStruct->length = strLength;
1286 /* calculate the pad bytes to have the CFG in aligned format */
1287 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1288 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1292 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1305 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1318 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1326 goto handle_failure;
1327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1383 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1391 goto handle_failure;
1392 }
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1396 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1409 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1430 goto handle_failure;
1431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1433 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1435 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1436 * into FW, so the parameters are added here.
1437 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001438 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1439 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1453 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1454 tlvStruct->length = sizeof(tANI_U32);
1455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1456 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1457 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1458 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1556 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562
Wilson Tsaof8b37942013-09-06 10:49:00 -07001563 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1564 {
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1590 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596 }
1597
1598 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1599 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1603 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1604 + sizeof(tHalCfg) + tlvStruct->length) ;
1605
1606 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1607 {
1608 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1609 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 }
1616
1617 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1618 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624
Jeff Johnson32d95a32012-09-10 13:15:23 -07001625 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001626 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1630 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1631 wcnssCompiledApiVersion.minor,
1632 wcnssCompiledApiVersion.version,
1633 wcnssCompiledApiVersion.revision);
1634 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1635 + sizeof(tHalCfg) + tlvStruct->length) ;
1636
Jeff Johnsond13512a2012-07-17 11:42:19 -07001637 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1638 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1646 goto handle_failure;
1647 }
1648
1649 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1650 + sizeof(tHalCfg) + tlvStruct->length) ;
1651 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1652 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
1665
1666 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1667 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1675 goto handle_failure;
1676 }
1677
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001681 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1682 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1683 tlvStruct->length = sizeof(tANI_U32);
1684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1685 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1686 != eSIR_SUCCESS)
1687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1690 goto handle_failure;
1691 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301692
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length);
1695
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001696#ifdef WLAN_SOFTAP_VSTA_FEATURE
1697 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1701 != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1705 goto handle_failure;
1706 }
1707
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710#endif
1711
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001712 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1713 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1714 tlvStruct->length = sizeof(tANI_U32);
1715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1716
1717 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1718 != eSIR_SUCCESS)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1721 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1722 goto handle_failure;
1723 }
1724
1725 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1726 + sizeof(tHalCfg) + tlvStruct->length) ;
1727
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301728/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1729 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1730 tlvStruct->length = sizeof(tANI_U32);
1731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1732 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1733 configDataValue ) != eSIR_SUCCESS)
1734 {
1735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1736 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1737 goto handle_failure;
1738 }
1739
1740 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1741 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301742#ifdef FEATURE_WLAN_TDLS
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756
1757 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1758 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1759 tlvStruct->length = sizeof(tANI_U32);
1760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1761 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1762 configDataValue ) != eSIR_SUCCESS)
1763 {
1764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1765 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1766 goto handle_failure;
1767 }
1768 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1769 + sizeof(tHalCfg) + tlvStruct->length) ;
1770 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1771 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1772 tlvStruct->length = sizeof(tANI_U32);
1773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1774 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1775 configDataValue ) != eSIR_SUCCESS)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1779 goto handle_failure;
1780 }
1781 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1782 + sizeof(tHalCfg) + tlvStruct->length) ;
1783 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1784 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1785 tlvStruct->length = sizeof(tANI_U32);
1786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1787 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1788 configDataValue ) != eSIR_SUCCESS)
1789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1792 goto handle_failure;
1793 }
1794 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1795 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301796 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1797 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1798 tlvStruct->length = sizeof(tANI_U32);
1799 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1800 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1805 goto handle_failure;
1806 }
1807 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1808 + sizeof(tHalCfg) + tlvStruct->length) ;
1809
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301810#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301811
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001812 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1813 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1814 tlvStruct->length = sizeof(tANI_U32);
1815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1816 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1817 configDataValue ) != eSIR_SUCCESS)
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1821 goto handle_failure;
1822 }
1823
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001826
1827 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1828 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1832 != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1836 goto handle_failure;
1837 }
1838 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1839 + sizeof(tHalCfg) + tlvStruct->length));
1840
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301841 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1842 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1843 tlvStruct->length = sizeof(tANI_U32);
1844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1845 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1846 configDataValue ) != eSIR_SUCCESS)
1847 {
1848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1849 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1850 goto handle_failure;
1851 }
1852
1853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1854 + sizeof(tHalCfg) + tlvStruct->length) ;
1855
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301856 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1857 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1858 tlvStruct->length = sizeof(tANI_U32);
1859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1860 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301870 /* QWLAN_HAL_CFG_ATH_DISABLE */
1871 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_ATH_DISABLE");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
c_hpothu6d7dc922013-12-02 12:36:41 +05301884 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1889 configDataValue ) != eSIR_SUCCESS)
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1893 goto handle_failure;
1894 }
1895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1896 + sizeof(tHalCfg) + tlvStruct->length) ;
1897
1898 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1899 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1900 tlvStruct->length = sizeof(tANI_U32);
1901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1921 goto handle_failure;
1922 }
1923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
1926 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1927 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301940 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1941 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1955 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1959 configDataValue ) != eSIR_SUCCESS)
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1963 goto handle_failure;
1964 }
1965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1966 + sizeof(tHalCfg) + tlvStruct->length) ;
1967
1968 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1969 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1970 tlvStruct->length = sizeof(tANI_U32);
1971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1972 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001982 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1983 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1987 configDataValue ) != eSIR_SUCCESS)
1988 {
1989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1990 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1991 goto handle_failure;
1992 }
1993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1994 + sizeof(tHalCfg) + tlvStruct->length) ;
1995
c_hpothu5bd1ae42014-03-07 20:28:22 +05301996 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1997 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1998 tlvStruct->length = sizeof(tANI_U32);
1999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2000
2001 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2002 configDataValue ) != eSIR_SUCCESS)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2005 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2006 goto handle_failure;
2007 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2009 + sizeof(tHalCfg) + tlvStruct->length) ;
2010
2011 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2012 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2013 tlvStruct->length = sizeof(tANI_U32);
2014 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2015
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2021 goto handle_failure;
2022 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302025
c_hpothu2d0f1c42014-04-01 18:38:51 +05302026 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2027 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2036 goto handle_failure;
2037 }
2038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2042 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2051 goto handle_failure;
2052 }
2053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
2055
2056 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2057 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2062 configDataValue ) != eSIR_SUCCESS)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2065 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2072 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2077 configDataValue ) != eSIR_SUCCESS)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2080 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2081 goto handle_failure;
2082 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
Mihir Shetec34258c2014-07-30 17:50:27 +05302086 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2087 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2102 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2111 goto handle_failure;
2112 }
2113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
2115
2116 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2117 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2122 configDataValue ) != eSIR_SUCCESS)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2125 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
2131 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2132 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2137 configDataValue ) != eSIR_SUCCESS)
2138 {
2139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2140 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
2146 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2147 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2152 configDataValue ) != eSIR_SUCCESS)
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
2160
2161 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2162 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2167 configDataValue ) != eSIR_SUCCESS)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
2176 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2177 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2178 tlvStruct->length = sizeof(tANI_U32);
2179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2180
2181 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2182 configDataValue ) != eSIR_SUCCESS)
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2185 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2186 goto handle_failure;
2187 }
2188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2189 + sizeof(tHalCfg) + tlvStruct->length) ;
2190
2191 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2192 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2193 tlvStruct->length = sizeof(tANI_U32);
2194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2195
2196 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2197 configDataValue ) != eSIR_SUCCESS)
2198 {
2199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2200 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2201 goto handle_failure;
2202 }
2203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2204 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302205
2206 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2207 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2208 tlvStruct->length = sizeof(tANI_U32);
2209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2210
2211 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2212 configDataValue ) != eSIR_SUCCESS)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2215 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2216 goto handle_failure;
2217 }
2218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2219 + sizeof(tHalCfg) + tlvStruct->length) ;
2220
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302221 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2223 tlvStruct->length = sizeof(tANI_U32);
2224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2225
2226 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2227 configDataValue ) != eSIR_SUCCESS)
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2230 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2231 goto handle_failure;
2232 }
2233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2234 + sizeof(tHalCfg) + tlvStruct->length) ;
2235
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302236 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2237 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2238 tlvStruct->length = sizeof(tANI_U32);
2239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2240
2241 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2242 configDataValue ) != eSIR_SUCCESS)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2246 goto handle_failure;
2247 }
2248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2249 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302250
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302251 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2252 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2257 configDataValue ) != eSIR_SUCCESS)
2258 {
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2260 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2261 goto handle_failure;
2262 }
2263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
Sachin Ahuja41b61902015-06-18 18:32:15 +05302266
2267 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2269 tlvStruct->length = sizeof(tANI_U32);
2270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2271
2272 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2273 configDataValue ) != eSIR_SUCCESS)
2274 {
2275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2276 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2277 goto handle_failure;
2278 }
2279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2280 + sizeof(tHalCfg) + tlvStruct->length) ;
2281
2282 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2284 tlvStruct->length = sizeof(tANI_U32);
2285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2286
2287 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2288 configDataValue ) != eSIR_SUCCESS)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2291 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2292 goto handle_failure;
2293 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2295 + sizeof(tHalCfg) + tlvStruct->length) ;
2296
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302297 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2298 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2299 tlvStruct->length = sizeof(tANI_U32);
2300 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2301
2302 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2303 configDataValue ) != eSIR_SUCCESS)
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2307 goto handle_failure;
2308 }
2309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2310 + sizeof(tHalCfg) + tlvStruct->length) ;
2311
2312 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2313 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2314 tlvStruct->length = sizeof(tANI_U32);
2315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2316
2317 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2318 configDataValue ) != eSIR_SUCCESS)
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2321 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2322 goto handle_failure;
2323 }
2324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2325 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302326
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302327 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2328 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331
2332 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2333 configDataValue ) != eSIR_SUCCESS)
2334 {
2335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2336 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2337 goto handle_failure;
2338 }
2339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2340 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302341 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2342 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2343 tlvStruct->length = sizeof(tANI_U32);
2344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2345 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2346 configDataValue ) != eSIR_SUCCESS)
2347 {
2348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2349 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2350 goto handle_failure;
2351 }
2352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2353 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302354
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302355 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2356 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2357 tlvStruct->length = sizeof(tANI_U32);
2358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2359
2360 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2361 configDataValue ) != eSIR_SUCCESS)
2362 {
2363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2364 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2365 goto handle_failure;
2366 }
2367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2368 + sizeof(tHalCfg) + tlvStruct->length) ;
2369
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302370 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2371 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2372 tlvStruct->length = sizeof(tANI_U32);
2373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2374
2375 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2376 configDataValue ) != eSIR_SUCCESS)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2379 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2380 goto handle_failure;
2381 }
2382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2383 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302384
2385 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2386 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2387 tlvStruct->length = sizeof(tANI_U32);
2388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2389
2390 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2391 configDataValue ) != eSIR_SUCCESS)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2394 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2395 goto handle_failure;
2396 }
2397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2398 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302399 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2400 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2401 tlvStruct->length = sizeof(tANI_U32);
2402 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2403
2404 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2405 configDataValue ) != eSIR_SUCCESS)
2406 {
2407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2408 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2409 goto handle_failure;
2410 }
2411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2412 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302413
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302415
2416 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2417 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2418 tlvStruct->length = sizeof(tANI_U32);
2419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2420
2421 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2422 configDataValue ) != eSIR_SUCCESS)
2423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2425 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2426 goto handle_failure;
2427 }
2428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2429 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302430
2431 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2432 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2433 tlvStruct->length = sizeof(tANI_U32);
2434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2435 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2436 != eSIR_SUCCESS)
2437 {
2438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2439 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2440 goto handle_failure;
2441 }
2442
2443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2444 + sizeof(tHalCfg) + tlvStruct->length);
2445
2446 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2447 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2448 tlvStruct->length = sizeof(tANI_U32);
2449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2450 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2451 != eSIR_SUCCESS)
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2455 goto handle_failure;
2456 }
2457
2458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2459 + sizeof(tHalCfg) + tlvStruct->length);
2460
Jeff Johnson295189b2012-06-20 16:38:30 -07002461#ifdef WLAN_DEBUG
2462 {
2463 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2465 "****** Dumping CFG TLV ***** ");
2466 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2469 "%02x %02x %02x %02x %02x %02x %02x %02x",
2470 tlvStructStart[i],
2471 tlvStructStart[i+1],
2472 tlvStructStart[i+2],
2473 tlvStructStart[i+3],
2474 tlvStructStart[i+4],
2475 tlvStructStart[i+5],
2476 tlvStructStart[i+6],
2477 tlvStructStart[i+7]);
2478 }
2479 /* Dump the bytes in the last line*/
2480 for (; i < wdiStartParams->usConfigBufferLen; i++)
2481 {
2482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2483 "%02x ",tlvStructStart[i]);
2484 }
2485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2486 "**************************** ");
2487 }
2488#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490handle_failure:
2491 vos_mem_free(configParam);
2492 return VOS_STATUS_E_FAILURE;
2493}
Jeff Johnson295189b2012-06-20 16:38:30 -07002494/*
2495 * FUNCTION: WDA_wdiCompleteCB
2496 * call the voss call back function
2497 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002498void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002499{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2501 tWDA_CbContext *wdaContext;
2502
2503 if(NULL == pWdaParams)
2504 {
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002507 VOS_ASSERT(0) ;
2508 return ;
2509 }
2510
2511 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2512
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 if (NULL == wdaContext)
2514 {
2515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002516 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 return ;
2518 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002519
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002521 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002525 vos_mem_free(pWdaParams);
2526
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 if(WDI_STATUS_SUCCESS != status)
2528 {
2529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2530 "WDI stop callback returned failure" );
2531 VOS_ASSERT(0) ;
2532 }
2533 else
2534 {
2535 wdaContext->wdaState = WDA_STOP_STATE;
2536 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002537
Leo Chang9d76f622013-08-23 16:34:52 -07002538 /* FTM Driver stop procedure should be synced.
2539 * Stop and Close will happen on same context */
2540 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2541 {
2542 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2543 {
2544 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2545 "%s: FTM Stop Event Set Fail", __func__);
2546 VOS_ASSERT(0);
2547 }
2548 }
2549
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002551 vos_WDAComplete_cback(wdaContext->pVosContext);
2552
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 return ;
2554}
Jeff Johnson295189b2012-06-20 16:38:30 -07002555/*
2556 * FUNCTION: WDA_stop
2557 * call WDI_stop
2558 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002559VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2560{
2561 WDI_Status wdiStatus;
2562 VOS_STATUS status = VOS_STATUS_SUCCESS;
2563 WDI_StopReqParamsType *wdiStopReq;
2564 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002565 tWDA_ReqParams *pWdaParams ;
2566
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 if (NULL == pWDA)
2568 {
2569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002570 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 VOS_ASSERT(0);
2572 return VOS_STATUS_E_FAILURE;
2573 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002574 if (pWDA->wdiFailed == true)
2575 {
2576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002577 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002578 return VOS_STATUS_E_ALREADY;
2579 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002580
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 /* FTM mode stay START_STATE */
2582 if( (WDA_READY_STATE != pWDA->wdaState) &&
2583 (WDA_INIT_STATE != pWDA->wdaState) &&
2584 (WDA_START_STATE != pWDA->wdaState) )
2585 {
2586 VOS_ASSERT(0);
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 wdiStopReq = (WDI_StopReqParamsType *)
2589 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2590 if(NULL == wdiStopReq)
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 VOS_ASSERT(0);
2595 return VOS_STATUS_E_NOMEM;
2596 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002597
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 wdiStopReq->wdiStopReason = reason;
2599 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302600
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2602 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 {
2604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 VOS_ASSERT(0);
2607 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002608 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002610
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002611 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2612 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 {
2614 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002615 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002617
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002618 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2619 pWdaParams->wdaMsgParam = NULL;
2620 pWdaParams->pWdaContext = pWDA;
2621
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* call WDI stop */
2623 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002624 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2625
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2627 {
2628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2629 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2631 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 status = VOS_STATUS_E_FAILURE;
2633 }
Leo Chang9d76f622013-08-23 16:34:52 -07002634
2635 /* FTM Driver stop procedure should be synced.
2636 * Stop and Close will happen on same context */
2637 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2638 {
2639 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2640 WDI_RESPONSE_TIMEOUT);
2641 if (status != VOS_STATUS_SUCCESS)
2642 {
2643 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2644 "%s: FTM Stop Timepoout", __func__);
2645 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002646 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302647 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 return status;
2650}
Jeff Johnson295189b2012-06-20 16:38:30 -07002651/*
2652 * FUNCTION: WDA_close
2653 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302654 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002655VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2656{
Jeff Johnson43971f52012-07-17 12:26:56 -07002657 VOS_STATUS status = VOS_STATUS_SUCCESS;
2658 WDI_Status wstatus;
2659 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 if (NULL == wdaContext)
2662 {
2663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002664 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 return VOS_STATUS_E_FAILURE;
2666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2668 (WDA_STOP_STATE != wdaContext->wdaState))
2669 {
2670 VOS_ASSERT(0);
2671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002673 wstatus = WDI_Close();
2674 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 {
2676 status = VOS_STATUS_E_FAILURE;
2677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002680 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2681 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 {
2683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002684 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 status = VOS_STATUS_E_FAILURE;
2686 }
2687
Jeff Johnson43971f52012-07-17 12:26:56 -07002688 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002689 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 {
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002692 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 status = VOS_STATUS_E_FAILURE;
2694 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002695 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002696 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 {
2698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002699 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 status = VOS_STATUS_E_FAILURE;
2701 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002702 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002703 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002706 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 status = VOS_STATUS_E_FAILURE;
2708 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302709
2710 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
2711
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002713 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002714 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 {
2716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2717 "error in WDA close " );
2718 status = VOS_STATUS_E_FAILURE;
2719 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302720
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 return status;
2722}
Jeff Johnson295189b2012-06-20 16:38:30 -07002723/*
2724 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2725 * returns 1 if the compiled version is greater than or equal to the input version
2726 */
2727
2728uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2729{
2730 VOS_STATUS status = VOS_STATUS_SUCCESS;
2731 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2732 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2735 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2736 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2737 (compiledVersion.revision >= revision)))
2738 return 1;
2739 else
2740 return 0;
2741}
Jeff Johnson295189b2012-06-20 16:38:30 -07002742/*
2743 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2744 * returns 1 if the compiled version is greater than or equal to the input version
2745 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002746uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2747{
2748 VOS_STATUS status = VOS_STATUS_SUCCESS;
2749 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2750 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2753 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2754 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2755 (reportedVersion.revision >= revision)))
2756 return 1;
2757 else
2758 return 0;
2759}
Jeff Johnson295189b2012-06-20 16:38:30 -07002760/*
2761 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2762 * Returns the version of the WCNSS WLAN API with which the HOST
2763 * device driver was compiled
2764 */
2765VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2766 tSirVersionType *pVersion)
2767{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302768 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 if ((NULL == pvosGCtx) || (NULL == pVersion))
2770 {
2771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: Invoked with invalid parameter", __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 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2777 if (NULL == pWDA )
2778 {
2779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 VOS_ASSERT(0);
2782 return VOS_STATUS_E_FAILURE;
2783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 *pVersion = pWDA->wcnssWlanCompiledVersion;
2785 return VOS_STATUS_SUCCESS;
2786}
Jeff Johnson295189b2012-06-20 16:38:30 -07002787/*
2788 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2789 * Returns the version of the WCNSS WLAN API with which the WCNSS
2790 * device driver was compiled
2791 */
2792VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2793 tSirVersionType *pVersion)
2794{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302795 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 if ((NULL == pvosGCtx) || (NULL == pVersion))
2797 {
2798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002799 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 VOS_ASSERT(0);
2801 return VOS_STATUS_E_FAILURE;
2802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2804 if (NULL == pWDA )
2805 {
2806 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002807 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 VOS_ASSERT(0);
2809 return VOS_STATUS_E_FAILURE;
2810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 *pVersion = pWDA->wcnssWlanReportedVersion;
2812 return VOS_STATUS_SUCCESS;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_GetWcnssSoftwareVersion
2816 * Returns the WCNSS Software version string
2817 */
2818VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2819 tANI_U8 *pVersion,
2820 tANI_U32 versionBufferSize)
2821{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302822 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002824 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 if ((NULL == pvosGCtx) || (NULL == pVersion))
2826 {
2827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002828 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 VOS_ASSERT(0);
2830 return VOS_STATUS_E_FAILURE;
2831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2833 if (NULL == pWDA )
2834 {
2835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002836 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 VOS_ASSERT(0);
2838 return VOS_STATUS_E_FAILURE;
2839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2841 return VOS_STATUS_SUCCESS;
2842}
Jeff Johnson295189b2012-06-20 16:38:30 -07002843/*
2844 * FUNCTION: WDA_GetWcnssHardwareVersion
2845 * Returns the WCNSS Hardware version string
2846 */
2847VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2848 tANI_U8 *pVersion,
2849 tANI_U32 versionBufferSize)
2850{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302851 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002853 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if ((NULL == pvosGCtx) || (NULL == pVersion))
2855 {
2856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002857 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_ASSERT(0);
2859 return VOS_STATUS_E_FAILURE;
2860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2862 if (NULL == pWDA )
2863 {
2864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002865 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 VOS_ASSERT(0);
2867 return VOS_STATUS_E_FAILURE;
2868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2870 return VOS_STATUS_SUCCESS;
2871}
Jeff Johnson295189b2012-06-20 16:38:30 -07002872/*
2873 * FUNCTION: WDA_WniCfgDnld
2874 * Trigger CFG Download
2875 */
2876VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2877{
2878 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302879 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002880
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 if (NULL == pMac )
2882 {
2883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002884 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 VOS_ASSERT(0);
2886 return VOS_STATUS_E_FAILURE;
2887 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302888 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 return vosStatus;
2890}
Jeff Johnson295189b2012-06-20 16:38:30 -07002891/* -----------------------------------------------------------------
2892 * WDI interface
2893 * -----------------------------------------------------------------
2894 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002895/*
2896 * FUNCTION: WDA_suspendDataTxCallback
2897 * call back function called from TL after suspend Transmission
2898 */
2899VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2900 v_U8_t* ucSTAId,
2901 VOS_STATUS vosStatus)
2902{
2903 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002905 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 if (NULL == pWDA )
2907 {
2908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 VOS_ASSERT(0);
2911 return VOS_STATUS_E_FAILURE;
2912 }
2913 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2914 {
2915 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2916 }
2917 else
2918 {
2919 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 /* Trigger the event to bring the WDA TL suspend function to come
2922 * out of wait*/
2923 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2924 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2925 {
2926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002927 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 /* If TL suspended had timedout before this callback was called, resume back
2930 * TL.*/
2931 if (pWDA->txSuspendTimedOut)
2932 {
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002934 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 WDA_ResumeDataTx(pWDA);
2936 pWDA->txSuspendTimedOut = FALSE;
2937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 return VOS_STATUS_SUCCESS;
2939}
Jeff Johnson295189b2012-06-20 16:38:30 -07002940/*
2941 * FUNCTION: WDA_suspendDataTx
2942 * Update TL to suspend the data Transmission
2943 */
2944VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2945{
2946 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2947 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948
2949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002950 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 if (pWDA->txSuspendTimedOut)
2953 {
2954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002955 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 return status;
2957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 /* Reset the event to be not signalled */
2959 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2960 if(!VOS_IS_STATUS_SUCCESS(status))
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002963 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 return VOS_STATUS_E_FAILURE;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002967 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 WDA_SuspendDataTxCallback);
2969 if(status != VOS_STATUS_SUCCESS)
2970 {
2971 return status;
2972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 /* Wait for the event to be set by the TL, to get the response of
2974 * suspending the TX queues, this event should be set by the Callback
2975 * function called by TL*/
2976 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2977 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2978 if(!VOS_IS_STATUS_SUCCESS(status))
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2981 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002982 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 /* Set this flag to true when TL suspend times out, so that when TL
2984 * suspend eventually happens and calls the callback, TL can be resumed
2985 * right away by looking at this flag when true.*/
2986 pWDA->txSuspendTimedOut = TRUE;
2987 }
2988 else
2989 {
2990 pWDA->txSuspendTimedOut = FALSE;
2991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2993 {
2994 status = VOS_STATUS_SUCCESS;
2995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 return status;
2997}
Jeff Johnson295189b2012-06-20 16:38:30 -07002998/*
2999 * FUNCTION: WDA_resumeDataTx
3000 * Update TL to resume the data Transmission
3001 */
3002VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3003{
3004 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003005
3006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003008
3009 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 return status;
3011}
Jeff Johnson295189b2012-06-20 16:38:30 -07003012/*
3013 * FUNCTION: WDA_InitScanReqCallback
3014 * Trigger Init SCAN callback
3015 */
3016void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3017{
3018 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3019 tWDA_CbContext *pWDA;
3020 tInitScanParams *pWDA_ScanParam ;
3021 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 if(NULL == pWdaParams)
3025 {
3026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003027 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 VOS_ASSERT(0) ;
3029 return ;
3030 }
3031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3032 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 if(NULL == pWDA_ScanParam)
3034 {
3035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003036 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003037 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3039 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 return ;
3041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 if(WDI_STATUS_SUCCESS != wdiStatus)
3043 {
3044 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(VOS_STATUS_SUCCESS != status)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 }
3050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 /* free WDI command buffer */
3052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303054
3055
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003057 /* without converting the Status to Failure or Success Just
3058 pass the same status to lim */
3059 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 /* send SCAN RSP message back to PE */
3061 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 return ;
3063}
3064
3065/*
3066 * FUNCTION: WDA_ProcessInitScanReq
3067 * Trigger Init SCAN in DAL
3068 */
3069VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3070 tInitScanParams *initScanParams)
3071{
3072 WDI_Status status = WDI_STATUS_SUCCESS ;
3073 WDI_InitScanReqParamsType *wdiInitScanParam =
3074 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3075 sizeof(WDI_InitScanReqParamsType)) ;
3076 tWDA_ReqParams *pWdaParams;
3077 tANI_U8 i = 0;
3078
3079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003080 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 if(NULL == wdiInitScanParam)
3082 {
3083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003084 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 VOS_ASSERT(0);
3086 return VOS_STATUS_E_NOMEM;
3087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3089 if(NULL == pWdaParams)
3090 {
3091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_ASSERT(0);
3094 vos_mem_free(wdiInitScanParam);
3095 return VOS_STATUS_E_NOMEM;
3096 }
3097
3098 /* Copy init Scan params to WDI structure */
3099 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3100 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3101 sizeof(tSirMacAddr)) ;
3102 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3103 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3104 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3106 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3108 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3110 {
3111 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3112 initScanParams->scanEntry.bssIdx[i] ;
3113 }
3114
3115 /* if Frame length, copy macMgmtHdr or WDI structure */
3116 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3117 {
3118 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3119 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3120 }
3121 wdiInitScanParam->wdiReqStatusCB = NULL ;
3122
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* Store Init Req pointer, as this will be used for response */
3124 pWdaParams->pWdaContext = pWDA;
3125 pWdaParams->wdaMsgParam = initScanParams;
3126 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 /* first try to suspend TX */
3128 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 if(WDI_STATUS_SUCCESS != status)
3130 {
3131 goto handleWdiFailure;
3132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 /* call DAL API to pass init scan request to DAL */
3134 status = WDI_InitScanReq(wdiInitScanParam,
3135 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 if(IS_WDI_STATUS_FAILURE(status))
3137 {
3138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3139 "error in WDA Init Scan, Resume Tx " );
3140 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 VOS_ASSERT(0) ;
3142
3143 goto handleWdiFailure;
3144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003146handleWdiFailure:
3147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3148 "Failure in WDI Api, free all the memory " );
3149 /* free WDI command buffer */
3150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3151 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 /* send Failure to PE */
3153 initScanParams->status = eSIR_FAILURE ;
3154 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 return CONVERT_WDI2VOS_STATUS(status) ;
3156}
3157
Jeff Johnson295189b2012-06-20 16:38:30 -07003158/*
3159 * FUNCTION: WDA_StartScanReqCallback
3160 * send Start SCAN RSP back to PE
3161 */
3162void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3163 void* pUserData)
3164{
3165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3166 tWDA_CbContext *pWDA;
3167 tStartScanParams *pWDA_ScanParam;
3168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 if(NULL == pWdaParams)
3171 {
3172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 VOS_ASSERT(0) ;
3175 return ;
3176 }
3177 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3178 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(NULL == pWDA_ScanParam)
3180 {
3181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003182 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003184 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 return ;
3186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003192 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3196 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003197
Jeff Johnson295189b2012-06-20 16:38:30 -07003198
3199 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003200 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 /* send SCAN RSP message back to PE */
3202 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return ;
3204}
3205
Jeff Johnson295189b2012-06-20 16:38:30 -07003206/*
3207 * FUNCTION: WDA_ProcessStartScanReq
3208 * Trigger start SCAN in WDI
3209 */
3210VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3211 tStartScanParams *startScanParams)
3212{
3213 WDI_Status status = WDI_STATUS_SUCCESS;
3214 WDI_StartScanReqParamsType *wdiStartScanParams =
3215 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3216 sizeof(WDI_StartScanReqParamsType)) ;
3217 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003219 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 if(NULL == wdiStartScanParams)
3221 {
3222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 VOS_ASSERT(0);
3225 return VOS_STATUS_E_NOMEM;
3226 }
3227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3228 if(NULL == pWdaParams)
3229 {
3230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 VOS_ASSERT(0);
3233 vos_mem_free(wdiStartScanParams);
3234 return VOS_STATUS_E_NOMEM;
3235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 /* Copy init Scan params to WDI structure */
3237 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3238 wdiStartScanParams->wdiReqStatusCB = NULL ;
3239
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 /* Store Init Req pointer, as this will be used for response */
3241 /* store Params pass it to WDI */
3242 pWdaParams->pWdaContext = pWDA;
3243 pWdaParams->wdaMsgParam = startScanParams;
3244 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 /* call DAL API to pass init scan request to DAL */
3246 status = WDI_StartScanReq(wdiStartScanParams,
3247 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 /* failure returned by WDI API */
3249 if(IS_WDI_STATUS_FAILURE(status))
3250 {
3251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3252 "Failure in Start Scan WDI API, free all the memory "
3253 "It should be due to previous abort scan." );
3254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3255 vos_mem_free(pWdaParams) ;
3256 startScanParams->status = eSIR_FAILURE ;
3257 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 return CONVERT_WDI2VOS_STATUS(status) ;
3260}
Jeff Johnson295189b2012-06-20 16:38:30 -07003261/*
3262 * FUNCTION: WDA_EndScanReqCallback
3263 * END SCAN callback
3264 */
3265void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3266{
3267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3268 tWDA_CbContext *pWDA;
3269 tEndScanParams *endScanParam;
3270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 if(NULL == pWdaParams)
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 VOS_ASSERT(0) ;
3277 return ;
3278 }
3279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3280 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 if(NULL == endScanParam)
3282 {
3283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003284 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3287 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return ;
3289 }
3290
3291 /* Free WDI command buffer */
3292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3293 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003295 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 /* send response back to PE */
3297 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3298 return ;
3299}
3300
Jeff Johnson295189b2012-06-20 16:38:30 -07003301/*
3302 * FUNCTION: WDA_ProcessEndScanReq
3303 * Trigger END SCAN in WDI
3304 */
3305VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3306 tEndScanParams *endScanParams)
3307{
3308 WDI_Status status = WDI_STATUS_SUCCESS;
3309 WDI_EndScanReqParamsType *wdiEndScanParams =
3310 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3311 sizeof(WDI_EndScanReqParamsType)) ;
3312 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003314 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 if(NULL == wdiEndScanParams)
3316 {
3317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 VOS_ASSERT(0);
3320 return VOS_STATUS_E_NOMEM;
3321 }
3322 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3323 if(NULL == pWdaParams)
3324 {
3325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 VOS_ASSERT(0);
3328 vos_mem_free(wdiEndScanParams);
3329 return VOS_STATUS_E_NOMEM;
3330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 /* Copy init Scan params to WDI structure */
3332 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3333 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 /* Store Init Req pointer, as this will be used for response */
3335 /* store Params pass it to WDI */
3336 pWdaParams->pWdaContext = pWDA;
3337 pWdaParams->wdaMsgParam = endScanParams;
3338 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 /* call DAL API to pass init scan request to DAL */
3340 status = WDI_EndScanReq(wdiEndScanParams,
3341 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 if(IS_WDI_STATUS_FAILURE(status))
3343 {
3344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3345 "Failure in End Scan WDI API, free all the memory "
3346 "It should be due to previous abort scan." );
3347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3348 vos_mem_free(pWdaParams) ;
3349 endScanParams->status = eSIR_FAILURE ;
3350 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 return CONVERT_WDI2VOS_STATUS(status) ;
3353}
Jeff Johnson295189b2012-06-20 16:38:30 -07003354/*
3355 * FUNCTION: WDA_FinishScanReqCallback
3356 * Trigger Finish SCAN callback
3357 */
3358void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3359{
3360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3361 tWDA_CbContext *pWDA;
3362 tFinishScanParams *finishScanParam;
3363 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003365 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 if(NULL == pWdaParams)
3367 {
3368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 VOS_ASSERT(0) ;
3371 return ;
3372 }
3373
3374 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3375 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 if(NULL == finishScanParam)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003379 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3382 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 return ;
3384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3386 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 /*
3388 * Now Resume TX, if we reached here means, TX is already suspended, we
3389 * have to resume it unconditionaly
3390 */
3391 status = WDA_ResumeDataTx(pWDA) ;
3392
3393 if(VOS_STATUS_SUCCESS != status)
3394 {
3395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003396 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003398 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3400 return ;
3401}
Jeff Johnson295189b2012-06-20 16:38:30 -07003402/*
3403 * FUNCTION: WDA_ProcessFinshScanReq
3404 * Trigger Finish SCAN in WDI
3405 */
3406VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3407 tFinishScanParams *finishScanParams)
3408{
3409 WDI_Status status = WDI_STATUS_SUCCESS;
3410 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3411 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3412 sizeof(WDI_FinishScanReqParamsType)) ;
3413 tWDA_ReqParams *pWdaParams ;
3414 tANI_U8 i = 0;
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 if(NULL == wdiFinishScanParams)
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 VOS_ASSERT(0);
3422 return VOS_STATUS_E_NOMEM;
3423 }
3424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3425 if(NULL == pWdaParams)
3426 {
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 VOS_ASSERT(0);
3430 vos_mem_free(wdiFinishScanParams);
3431 return VOS_STATUS_E_NOMEM;
3432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 /* Copy init Scan params to WDI structure */
3434 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3435 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3436 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3438 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3439 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3440 finishScanParams->frameLength ;
3441 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3442 finishScanParams->currentOperChannel ;
3443 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3444 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3445 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3447 {
3448 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3449 finishScanParams->scanEntry.bssIdx[i] ;
3450 }
3451
3452
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 /* if Frame length, copy macMgmtHdr ro WDI structure */
3454 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3455 {
3456 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3457 &finishScanParams->macMgmtHdr,
3458 sizeof(WDI_MacMgmtHdr)) ;
3459 }
3460 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 /* Store Init Req pointer, as this will be used for response */
3462 /* store Params pass it to WDI */
3463 pWdaParams->pWdaContext = pWDA;
3464 pWdaParams->wdaMsgParam = finishScanParams;
3465 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 /* call DAL API to pass init scan request to DAL */
3467 status = WDI_FinishScanReq(wdiFinishScanParams,
3468 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003469
Jeff Johnson295189b2012-06-20 16:38:30 -07003470
3471 /*
3472 * WDI API returns failure..
3473 */
3474 if(IS_WDI_STATUS_FAILURE( status))
3475 {
3476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3477 "Failure in Finish Scan WDI API, free all the memory " );
3478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3479 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 finishScanParams->status = eSIR_FAILURE ;
3481 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 return CONVERT_WDI2VOS_STATUS(status) ;
3484}
Jeff Johnson295189b2012-06-20 16:38:30 -07003485/*---------------------------------------------------------------------
3486 * ASSOC API's
3487 *---------------------------------------------------------------------
3488 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003489/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303490 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 * Trigger Init SCAN callback
3492 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303493void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003494{
3495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3496 tWDA_CbContext *pWDA;
3497 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003499 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 if(NULL == pWdaParams)
3501 {
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003504 VOS_ASSERT(0) ;
3505 return ;
3506 }
3507 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3508 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3510 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 /* reset macBSSID */
3512 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003513 /* reset macSTASelf */
3514 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003515 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 return ;
3518}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303519
3520/*
3521 * FUNCTION: WDA_JoinReqCallback
3522 * Free memory and send SWITCH CHANNEL RSP back to PE.
3523 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3524 */
3525void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3526{
3527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3528 tWDA_CbContext *pWDA;
3529 tSwitchChannelParams *joinReqParam;
3530
3531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3532 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3533
3534 if(NULL == pWdaParams)
3535 {
3536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3537 "%s: pWdaParams received NULL", __func__);
3538 VOS_ASSERT(0);
3539 return;
3540 }
3541
3542 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3543 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3544 joinReqParam->status = wdiStatus;
3545
3546 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3547 {
3548 /* reset macBSSID */
3549 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3550 /* reset macSTASelf */
3551 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3552
3553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3554 vos_mem_free(pWdaParams);
3555 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3556 }
3557
3558 return;
3559}
3560
Jeff Johnson295189b2012-06-20 16:38:30 -07003561/*
3562 * FUNCTION: WDA_ProcessJoinReq
3563 * Trigger Join REQ in WDI
3564 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003565VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3566 tSwitchChannelParams* joinReqParam)
3567{
3568 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 WDI_JoinReqParamsType *wdiJoinReqParam =
3570 (WDI_JoinReqParamsType *)vos_mem_malloc(
3571 sizeof(WDI_JoinReqParamsType)) ;
3572 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(NULL == wdiJoinReqParam)
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003580 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 return VOS_STATUS_E_NOMEM;
3582 }
3583 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3584 if(NULL == pWdaParams)
3585 {
3586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 VOS_ASSERT(0);
3589 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003590 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 return VOS_STATUS_E_NOMEM;
3592 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003593
3594 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3595 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3596 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3597 {
3598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3599 "%s: received join request when BSSID or self-STA is NULL "
3600 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003601 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003602 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3603 VOS_ASSERT(0);
3604 vos_mem_free(wdiJoinReqParam);
3605 vos_mem_free(pWdaParams);
3606 joinReqParam->status = eSIR_FAILURE ;
3607 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3608 return VOS_STATUS_E_INVAL;
3609 }
3610
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 /* copy the BSSID for pWDA */
3612 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3613 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3615 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3617 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003618#ifdef WLAN_FEATURE_VOWIFI
3619 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3620 joinReqParam->maxTxPower ;
3621#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3623 joinReqParam->localPowerConstraint ;
3624#endif
3625 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3626 joinReqParam->secondaryChannelOffset ;
3627 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3628
Sachin Ahuja935eda782014-07-30 14:57:41 +05303629 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3630 wdiJoinReqParam->pUserData = pWdaParams;
3631
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 /* Store Init Req pointer, as this will be used for response */
3633 /* store Params pass it to WDI */
3634 pWdaParams->pWdaContext = pWDA;
3635 pWdaParams->wdaMsgParam = joinReqParam;
3636 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303638 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 if(IS_WDI_STATUS_FAILURE(status))
3640 {
3641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3642 "Failure in Join WDI API, free all the memory " );
3643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3644 vos_mem_free(pWdaParams) ;
3645 joinReqParam->status = eSIR_FAILURE ;
3646 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 return CONVERT_WDI2VOS_STATUS(status) ;
3649}
Jeff Johnson295189b2012-06-20 16:38:30 -07003650/*
3651 * FUNCTION: WDA_SwitchChannelReqCallback
3652 * send Switch channel RSP back to PE
3653 */
3654void WDA_SwitchChannelReqCallback(
3655 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3656{
3657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3658 tWDA_CbContext *pWDA;
3659 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003661 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if(NULL == pWdaParams)
3663 {
3664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 VOS_ASSERT(0) ;
3667 return ;
3668 }
3669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3670 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3671
3672#ifdef WLAN_FEATURE_VOWIFI
3673 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3674#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3676 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003677 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003678 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003680 return ;
3681}
Jeff Johnson295189b2012-06-20 16:38:30 -07003682/*
3683 * FUNCTION: WDA_ProcessChannelSwitchReq
3684 * Request to WDI to switch channel REQ params.
3685 */
3686VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3687 tSwitchChannelParams *pSwitchChanParams)
3688{
3689 WDI_Status status = WDI_STATUS_SUCCESS ;
3690 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3691 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3692 sizeof(WDI_SwitchChReqParamsType)) ;
3693 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003695 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 if(NULL == wdiSwitchChanParam)
3697 {
3698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 VOS_ASSERT(0);
3701 return VOS_STATUS_E_NOMEM;
3702 }
3703 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3704 if(NULL == pWdaParams)
3705 {
3706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 VOS_ASSERT(0);
3709 vos_mem_free(wdiSwitchChanParam);
3710 return VOS_STATUS_E_NOMEM;
3711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3713#ifndef WLAN_FEATURE_VOWIFI
3714 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3715 pSwitchChanParams->localPowerConstraint;
3716#endif
3717 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3718 pSwitchChanParams->secondaryChannelOffset;
3719 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003720 /* Store req pointer, as this will be used for response */
3721 /* store Params pass it to WDI */
3722 pWdaParams->pWdaContext = pWDA;
3723 pWdaParams->wdaMsgParam = pSwitchChanParams;
3724 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725#ifdef WLAN_FEATURE_VOWIFI
3726 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3727 = pSwitchChanParams->maxTxPower;
3728 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3729 pSwitchChanParams ->selfStaMacAddr,
3730 sizeof(tSirMacAddr));
3731#endif
3732 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3733 pSwitchChanParams->bssId,
3734 sizeof(tSirMacAddr));
3735
3736 status = WDI_SwitchChReq(wdiSwitchChanParam,
3737 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 if(IS_WDI_STATUS_FAILURE(status))
3739 {
3740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3741 "Failure in process channel switch Req WDI API, free all the memory " );
3742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3743 vos_mem_free(pWdaParams) ;
3744 pSwitchChanParams->status = eSIR_FAILURE ;
3745 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 return CONVERT_WDI2VOS_STATUS(status) ;
3748}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003749
3750/*
3751 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3752 * send Switch channel RSP back to PE
3753 */
3754void WDA_SwitchChannelReqCallback_V1(
3755 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3756 void* pUserData)
3757{
3758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3759 tWDA_CbContext *pWDA;
3760 tSwitchChannelParams *pSwitchChanParams;
3761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3762 "<------ %s " ,__func__);
3763
3764 if (NULL == pWdaParams)
3765 {
3766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3767 "%s: pWdaParams received NULL", __func__);
3768 VOS_ASSERT(0);
3769 return ;
3770 }
3771 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3772 pSwitchChanParams =
3773 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3774 pSwitchChanParams->channelSwitchSrc =
3775 wdiSwitchChanRsp->channelSwitchSrc;
3776#ifdef WLAN_FEATURE_VOWIFI
3777 pSwitchChanParams->txMgmtPower =
3778 wdiSwitchChanRsp->ucTxMgmtPower;
3779#endif
3780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3781 vos_mem_free(pWdaParams);
3782 pSwitchChanParams->status =
3783 wdiSwitchChanRsp->wdiStatus ;
3784 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3785 (void *)pSwitchChanParams , 0);
3786 return;
3787}
3788
3789/*
3790 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3791 * Request to WDI to switch channel REQ params.
3792 */
3793VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3794 tSwitchChannelParams *pSwitchChanParams)
3795{
3796 WDI_Status status = WDI_STATUS_SUCCESS ;
3797 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3798 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3799 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3800 tWDA_ReqParams *pWdaParams ;
3801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3802 "------> %s " ,__func__);
3803 if (NULL == wdiSwitchChanParam)
3804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3806 "%s: VOS MEM Alloc Failure", __func__);
3807 VOS_ASSERT(0);
3808 return VOS_STATUS_E_NOMEM;
3809 }
3810 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3811 if (NULL == pWdaParams)
3812 {
3813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3814 "%s: VOS MEM Alloc Failure", __func__);
3815 VOS_ASSERT(0);
3816 vos_mem_free(wdiSwitchChanParam);
3817 return VOS_STATUS_E_NOMEM;
3818 }
3819 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3820 pSwitchChanParams->channelSwitchSrc;
3821
3822 wdiSwitchChanParam->wdiChInfo.ucChannel =
3823 pSwitchChanParams->channelNumber;
3824#ifndef WLAN_FEATURE_VOWIFI
3825 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3826 pSwitchChanParams->localPowerConstraint;
3827#endif
3828 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3829 pSwitchChanParams->secondaryChannelOffset;
3830 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3831 /* Store req pointer, as this will be used for response */
3832 /* store Params pass it to WDI */
3833 pWdaParams->pWdaContext = pWDA;
3834 pWdaParams->wdaMsgParam = pSwitchChanParams;
3835 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3836#ifdef WLAN_FEATURE_VOWIFI
3837 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3838 pSwitchChanParams->maxTxPower;
3839 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3840 pSwitchChanParams ->selfStaMacAddr,
3841 sizeof(tSirMacAddr));
3842#endif
3843 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3844 pSwitchChanParams->bssId,
3845 sizeof(tSirMacAddr));
3846
3847 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3848 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3849 pWdaParams);
3850 if (IS_WDI_STATUS_FAILURE(status))
3851 {
3852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3853 "Failure in process channel switch Req WDI "
3854 "API, free all the memory " );
3855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3856 vos_mem_free(pWdaParams) ;
3857 pSwitchChanParams->status = eSIR_FAILURE ;
3858 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3859 (void *)pSwitchChanParams, 0) ;
3860 }
3861 return CONVERT_WDI2VOS_STATUS(status) ;
3862}
3863
Jeff Johnson295189b2012-06-20 16:38:30 -07003864/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303865 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 * config BSS Req Callback, called by WDI
3867 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303868void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 ,void* pUserData)
3870{
3871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3872 tWDA_CbContext *pWDA;
3873 tAddBssParams *configBssReqParam;
3874 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 if(NULL == pWdaParams)
3878 {
3879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003880 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 VOS_ASSERT(0) ;
3882 return ;
3883 }
3884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3885 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3886 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003888 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3890 {
3891 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3892 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3894 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3895 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3896
3897 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3898 {
3899 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3900 {
3901 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3902 staConfigBssParam->staType = STA_ENTRY_BSSID;
3903 }
3904 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3905 (staConfigBssParam->staType == STA_ENTRY_SELF))
3906 {
3907 /* This is the 1st add BSS Req for the BTAMP STA */
3908 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3909 staConfigBssParam->staType = STA_ENTRY_BSSID;
3910 }
3911 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3912 (staConfigBssParam->staType == STA_ENTRY_PEER))
3913 {
3914 /* This is the 2nd ADD BSS Request that is sent
3915 * on the BTAMP STA side. The Sta type is
3916 * set to STA_ENTRY_PEER here.*/
3917 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3918 }
3919 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3920 (staConfigBssParam->staType == STA_ENTRY_SELF))
3921 {
3922 /* statype is already set by PE.
3923 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3924 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3925 staConfigBssParam->staType = STA_ENTRY_BSSID;
3926 }
3927 else
3928 {
3929 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3930 staConfigBssParam->staType = STA_ENTRY_PEER;
3931 }
3932 }
3933 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3934 {
3935 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3936 staConfigBssParam->staType = STA_ENTRY_SELF;
3937 }
3938 else
3939 {
3940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3941 "Invalid operation mode specified");
3942 VOS_ASSERT(0);
3943 }
3944
3945 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3950 sizeof(tSirMacAddr));
3951 staConfigBssParam->txChannelWidthSet =
3952 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3954 staConfigBssParam->htCapable)
3955 {
3956 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3957 wdiConfigBssRsp->ucBSSIdx;
3958 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3959 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303960 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3961 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3964 wdiConfigBssRsp->ucBSSIdx,
3965 wdiConfigBssRsp->ucSTAIdx))
3966 {
3967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003968 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 VOS_ASSERT(0) ;
3970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3972 {
3973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003974 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 VOS_ASSERT(0) ;
3976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003977#ifdef WLAN_FEATURE_VOWIFI
3978 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3979#endif
3980 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303981 else
3982 {
3983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3984 "%s: Failure with status %d", __func__,
3985 wdiConfigBssRsp->wdiStatus);
3986 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3987 WLAN_LOG_INDICATOR_HOST_DRIVER,
3988 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3989 FALSE, TRUE);
3990 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303991 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3992 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3994 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 return ;
3997}
Jeff Johnson295189b2012-06-20 16:38:30 -07003998/*
3999 * FUNCTION: WDA_UpdateEdcaParamsForAC
4000 * Update WDI EDCA params with PE edca params
4001 */
4002void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4003 WDI_EdcaParamRecord *wdiEdcaParam,
4004 tSirMacEdcaParamRecord *macEdcaParam)
4005{
4006 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4007 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4008 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4009 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4010 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4011 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4012}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304013void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4014 void* pUserData)
4015{
4016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4017 tWDA_CbContext *pWDA;
4018 tAddBssParams *addBssParams;
4019
4020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4021 "<------ %s, wdiStatus: %d",
4022 __func__, wdiStatus);
4023
4024 if (NULL == pWdaParams)
4025 {
4026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4027 "%s: Invalid pWdaParams pointer", __func__);
4028 VOS_ASSERT(0);
4029 return;
4030 }
4031
4032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4033 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4034
4035 addBssParams->status = wdiStatus;
4036
4037 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4038 {
4039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4040 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304041 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4042 WLAN_LOG_INDICATOR_HOST_DRIVER,
4043 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4044 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304045 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4046 }
4047
4048 return ;
4049}
4050
Jeff Johnson295189b2012-06-20 16:38:30 -07004051/*
4052 * FUNCTION: WDA_ProcessConfigBssReq
4053 * Configure BSS before starting Assoc with AP
4054 */
4055VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4056 tAddBssParams* configBssReqParam)
4057{
4058 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304059 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004062 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304063 if (NULL == configBssReqParam)
4064 {
4065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4066 "%s: configBssReqParam is NULL", __func__);
4067 return VOS_STATUS_E_INVAL;
4068 }
4069
4070 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4071 sizeof(WDI_ConfigBSSReqParamsType)) ;
4072
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 if(NULL == wdiConfigBssReqParam)
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 VOS_ASSERT(0);
4078 return VOS_STATUS_E_NOMEM;
4079 }
4080 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4081 if(NULL == pWdaParams)
4082 {
4083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004084 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 VOS_ASSERT(0);
4086 vos_mem_free(wdiConfigBssReqParam);
4087 return VOS_STATUS_E_NOMEM;
4088 }
Kiran4a17ebe2013-01-31 10:43:43 -08004089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4090 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4093 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304094 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4095 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 /* Store Init Req pointer, as this will be used for response */
4097 /* store Params pass it to WDI */
4098 pWdaParams->pWdaContext = pWDA;
4099 pWdaParams->wdaMsgParam = configBssReqParam;
4100 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304102 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(IS_WDI_STATUS_FAILURE(status))
4104 {
4105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4106 "Failure in Config BSS WDI API, free all the memory " );
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return CONVERT_WDI2VOS_STATUS(status) ;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114#ifdef ENABLE_HAL_COMBINED_MESSAGES
4115/*
4116 * FUNCTION: WDA_PostAssocReqCallback
4117 * Post ASSOC req callback, send RSP back to PE
4118 */
4119void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4120 void* pUserData)
4121{
4122 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4123 tPostAssocParams *postAssocReqParam =
4124 (tPostAssocParams *)pWDA->wdaMsgParam ;
4125 /*STA context within the BSS Params*/
4126 tAddStaParams *staPostAssocParam =
4127 &postAssocReqParam->addBssParams.staContext ;
4128 /*STA Params for self STA*/
4129 tAddStaParams *selfStaPostAssocParam =
4130 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004134 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4136 {
4137 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4138 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4139 sizeof(tSirMacAddr)) ;
4140 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4141 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4142 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4144 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304145 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4147 pWDA->wdaWdiApiMsgParam = NULL;
4148 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 return ;
4151}
Jeff Johnson295189b2012-06-20 16:38:30 -07004152/*
4153 * FUNCTION: WDA_ProcessPostAssocReq
4154 * Trigger POST ASSOC processing in WDI
4155 */
4156VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4157 tPostAssocParams *postAssocReqParam)
4158{
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 WDI_Status status = WDI_STATUS_SUCCESS ;
4160
4161 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4162 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4163 sizeof(WDI_PostAssocReqParamsType)) ;
4164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004165 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 if(NULL == wdiPostAssocReqParam)
4168 {
4169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 VOS_ASSERT(0);
4172 return VOS_STATUS_E_NOMEM;
4173 }
4174
4175 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4176 {
4177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004178 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 VOS_ASSERT(0);
4180 return VOS_STATUS_E_FAILURE;
4181 }
4182
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 /* update BSS params into WDI structure */
4184 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4185 &postAssocReqParam->addBssParams) ;
4186 /* update STA params into WDI structure */
4187 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4188 &postAssocReqParam->addStaParams) ;
4189
4190 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4191 postAssocReqParam->addBssParams.highPerformance;
4192 WDA_UpdateEdcaParamsForAC(pWDA,
4193 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4194 &postAssocReqParam->addBssParams.acbe);
4195 WDA_UpdateEdcaParamsForAC(pWDA,
4196 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4197 &postAssocReqParam->addBssParams.acbk);
4198 WDA_UpdateEdcaParamsForAC(pWDA,
4199 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4200 &postAssocReqParam->addBssParams.acvi);
4201 WDA_UpdateEdcaParamsForAC(pWDA,
4202 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4203 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 /* Store Init Req pointer, as this will be used for response */
4205 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 /* store Params pass it to WDI */
4207 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4209 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 if(IS_WDI_STATUS_FAILURE(status))
4211 {
4212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4213 "Failure in Post Assoc WDI API, free all the memory " );
4214 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4215 pWDA->wdaWdiApiMsgParam = NULL;
4216 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 return CONVERT_WDI2VOS_STATUS(status) ;
4221}
4222#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004223/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304224 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 * ADD STA req callback, send RSP back to PE
4226 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304227void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 void* pUserData)
4229{
4230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4231 tWDA_CbContext *pWDA;
4232 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 if(NULL == pWdaParams)
4236 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 VOS_ASSERT(0) ;
4239 return ;
4240 }
4241 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4242 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004244 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4246 {
4247 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4248 /*TODO: UMAC structure doesn't have these fields*/
4249 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4250 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4251 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4252 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4253 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4254 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004255#ifdef FEATURE_WLAN_TDLS
4256 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4257 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4258#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004260#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004261 {
4262 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4263 wdiConfigStaRsp->ucBssIdx;
4264 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4265 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304266 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4267 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 }
4269 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_ASSERT(0) ;
4274 return ;
4275 }
4276 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304277 else
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4280 "%s: Failure with status %d", __func__,
4281 wdiConfigStaRsp->wdiStatus);
4282 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4283 WLAN_LOG_INDICATOR_HOST_DRIVER,
4284 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4285 FALSE, TRUE);
4286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 return ;
4291}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304292void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4293 void* pUserData)
4294{
4295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4296 tWDA_CbContext *pWDA;
4297 tAddStaParams *addStaParams;
4298
4299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4300 "<------ %s, wdiStatus: %d",
4301 __func__, wdiStatus);
4302
4303 if (NULL == pWdaParams)
4304 {
4305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4306 "%s: Invalid pWdaParams pointer", __func__);
4307 VOS_ASSERT(0);
4308 return;
4309 }
4310
4311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4312 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4313
4314 addStaParams->status = wdiStatus;
4315
4316 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4317 {
4318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4319 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304320 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4321 WLAN_LOG_INDICATOR_HOST_DRIVER,
4322 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4323 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304324 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4325 }
4326
4327 return ;
4328}
4329
Jeff Johnson295189b2012-06-20 16:38:30 -07004330/*
4331 * FUNCTION: WDA_ConfigStaReq
4332 * Trigger Config STA processing in WDI
4333 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304334VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 tAddStaParams *addStaReqParam)
4336{
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4339 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4340 sizeof(WDI_ConfigSTAReqParamsType)) ;
4341 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 if(NULL == wdiConfigStaReqParam)
4345 {
4346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 VOS_ASSERT(0);
4349 return VOS_STATUS_E_NOMEM;
4350 }
4351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4352 if(NULL == pWdaParams)
4353 {
4354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 VOS_ASSERT(0);
4357 vos_mem_free(wdiConfigStaReqParam);
4358 return VOS_STATUS_E_NOMEM;
4359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 /* update STA params into WDI structure */
4362 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4363 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304364 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4365 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 /* Store Init Req pointer, as this will be used for response */
4367 /* store Params pass it to WDI */
4368 pWdaParams->pWdaContext = pWDA;
4369 pWdaParams->wdaMsgParam = addStaReqParam;
4370 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304371
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304373 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 if(IS_WDI_STATUS_FAILURE(status))
4375 {
4376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4377 "Failure in Config STA WDI API, free all the memory " );
4378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4379 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 return CONVERT_WDI2VOS_STATUS(status) ;
4384}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304385
Jeff Johnson295189b2012-06-20 16:38:30 -07004386/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304387 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304389 */
4390void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 void* pUserData)
4392{
4393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4394 tWDA_CbContext *pWDA;
4395 tDeleteBssParams *delBssReqParam;
4396 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 if(NULL == pWdaParams)
4400 {
4401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004402 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 VOS_ASSERT(0) ;
4404 return ;
4405 }
4406 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4407 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004408 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4410 {
4411 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4412 sizeof(tSirMacAddr)) ;
4413 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304414 else
4415 {
4416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4417 "%s: Failure with status %d", __func__,
4418 wdiDelBssRsp->wdiStatus);
4419 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4420 WLAN_LOG_INDICATOR_HOST_DRIVER,
4421 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4422 FALSE, TRUE);
4423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4425 {
4426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004427 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 VOS_ASSERT(0) ;
4429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4431 {
4432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004433 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 VOS_ASSERT(0) ;
4435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4437 {
4438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 VOS_ASSERT(0) ;
4441 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304442
4443 WLANTL_StartForwarding(staIdx,0,0);
4444
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4446 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 /* reset the the system role*/
4448 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4449
4450 /* Reset the BA related information */
4451 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4452 {
4453 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4454 {
4455 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4456 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304457 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 /* Reset framesTxed counters here */
4459 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4460 {
4461 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4462 }
4463 }
4464 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304465
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 return ;
4468}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304469void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4470 void* pUserData)
4471{
4472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4473 tWDA_CbContext *pWDA;
4474 tDeleteBssParams *delbssParams;
4475
4476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4477 "<------ %s, wdiStatus: %d",
4478 __func__, wdiStatus);
4479
4480 if (NULL == pWdaParams)
4481 {
4482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4483 "%s: Invalid pWdaParams pointer", __func__);
4484 VOS_ASSERT(0);
4485 return;
4486 }
4487
4488 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4489 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4490
4491 delbssParams->status = wdiStatus ;
4492
4493 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4494 {
4495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4496 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304497 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4498 WLAN_LOG_INDICATOR_HOST_DRIVER,
4499 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4500 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304501 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4502 }
4503
4504 return ;
4505}
Jeff Johnson295189b2012-06-20 16:38:30 -07004506
Jeff Johnson295189b2012-06-20 16:38:30 -07004507/*
4508 * FUNCTION: WDA_ProcessDelBssReq
4509 * Init DEL BSS req with WDI
4510 */
4511VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4512 tDeleteBssParams *delBssParam)
4513{
4514 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4516 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4517 sizeof(WDI_DelBSSReqParamsType)) ;
4518 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 if(NULL == wdiDelBssReqParam)
4522 {
4523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 VOS_ASSERT(0);
4526 return VOS_STATUS_E_NOMEM;
4527 }
4528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4529 if(NULL == pWdaParams)
4530 {
4531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 VOS_ASSERT(0);
4534 vos_mem_free(wdiDelBssReqParam);
4535 return VOS_STATUS_E_NOMEM;
4536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304538 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4539 wdiDelBssReqParam->pUserData = pWdaParams;
4540
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 /* Store Init Req pointer, as this will be used for response */
4542 /* store Params pass it to WDI */
4543 pWdaParams->pWdaContext = pWDA;
4544 pWdaParams->wdaMsgParam = delBssParam;
4545 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304546
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304548 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 if(IS_WDI_STATUS_FAILURE(status))
4550 {
4551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4552 "Failure in Del BSS WDI API, free all the memory " );
4553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4554 vos_mem_free(pWdaParams) ;
4555 delBssParam->status = eSIR_FAILURE ;
4556 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 return CONVERT_WDI2VOS_STATUS(status) ;
4559}
Jeff Johnson295189b2012-06-20 16:38:30 -07004560/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304561 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304563 */
4564void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 void* pUserData)
4566{
4567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4568 tWDA_CbContext *pWDA;
4569 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 if(NULL == pWdaParams)
4573 {
4574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004575 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304576 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 return ;
4578 }
4579 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4580 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004581 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4583 {
4584 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4585 {
4586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004587 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 VOS_ASSERT(0) ;
4589 }
4590 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304591 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304593 else
4594 {
4595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4596 "%s: Failure with status %d", __func__,
4597 wdiDelStaRsp->wdiStatus);
4598 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4599 WLAN_LOG_INDICATOR_HOST_DRIVER,
4600 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4601 FALSE, TRUE);
4602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4604 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 /*Reset the BA information corresponding to this STAIdx */
4606 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4607 WDA_INVALID_STA_INDEX;
4608 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304609 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 return ;
4612}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304613void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4614 void* pUserData)
4615{
4616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4617 tWDA_CbContext *pWDA;
4618 tDeleteStaParams *delStaParams;
4619
4620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4621 "<------ %s, wdiStatus: %d",
4622 __func__, wdiStatus);
4623
4624 if (NULL == pWdaParams)
4625 {
4626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4627 "%s: Invalid pWdaParams pointer", __func__);
4628 VOS_ASSERT(0);
4629 return;
4630 }
4631
4632 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4633 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4634
4635 delStaParams->status = wdiStatus ;
4636
4637 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4638 {
4639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4640 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304641 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4642 WLAN_LOG_INDICATOR_HOST_DRIVER,
4643 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4644 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304645 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4646 }
4647
4648 return ;
4649}
4650
Jeff Johnson295189b2012-06-20 16:38:30 -07004651/*
4652 * FUNCTION: WDA_ProcessDelStaReq
4653 * Init DEL STA req with WDI
4654 */
4655VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4656 tDeleteStaParams *delStaParam)
4657{
4658 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4660 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4661 sizeof(WDI_DelSTAReqParamsType)) ;
4662 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004664 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 if(NULL == wdiDelStaReqParam)
4666 {
4667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 VOS_ASSERT(0);
4670 return VOS_STATUS_E_NOMEM;
4671 }
4672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4673 if(NULL == pWdaParams)
4674 {
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 VOS_ASSERT(0);
4678 vos_mem_free(wdiDelStaReqParam);
4679 return VOS_STATUS_E_NOMEM;
4680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304682 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4683 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 /* Store Init Req pointer, as this will be used for response */
4685 /* store Params pass it to WDI */
4686 pWdaParams->pWdaContext = pWDA;
4687 pWdaParams->wdaMsgParam = delStaParam;
4688 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304689
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304691 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 if(IS_WDI_STATUS_FAILURE(status))
4693 {
4694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4695 "Failure in Del STA WDI API, free all the memory status = %d",
4696 status );
4697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4698 vos_mem_free(pWdaParams) ;
4699 delStaParam->status = eSIR_FAILURE ;
4700 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 return CONVERT_WDI2VOS_STATUS(status) ;
4703}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304704void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004705{
4706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4707 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304708 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 if(NULL == pWdaParams)
4712 {
4713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004714 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 VOS_ASSERT(0) ;
4716 return ;
4717 }
4718 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4719 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4721 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4723 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4724 pwdiAddSTASelfRsp->macSelfSta,
4725 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304726 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4727 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4728 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4729 {
4730 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4731 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4733 "%s: Failure with status %d failcnter %d", __func__,
4734 pwdiAddSTASelfRsp->wdiStatus,
4735 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4736 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4737 WLAN_LOG_INDICATOR_HOST_DRIVER,
4738 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4739 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 return ;
4743}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304744void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4745 void* pUserData)
4746{
4747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4748 tWDA_CbContext *pWDA;
4749 tAddStaSelfParams *addStaSelfParams;
4750
4751 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4752 "<------ %s, wdiStatus: %d",
4753 __func__, wdiStatus);
4754
4755 if (NULL == pWdaParams)
4756 {
4757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4758 "%s: Invalid pWdaParams pointer", __func__);
4759 VOS_ASSERT(0);
4760 return;
4761 }
4762
4763 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4764 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4765
4766 addStaSelfParams->status = wdiStatus ;
4767
4768 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4769 {
4770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4771 vos_mem_free(pWdaParams) ;
4772 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4773 = WDA_ADDSTA_REQ_WDI_FAIL;
4774 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4776 "%s: Failure with status %d failcnter %d", __func__,
4777 wdiStatus,
4778 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4779 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4780 WLAN_LOG_INDICATOR_HOST_DRIVER,
4781 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4782 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304783 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4784 }
4785
4786 return ;
4787}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304788
Jeff Johnson295189b2012-06-20 16:38:30 -07004789/*
4790 * FUNCTION: WDA_ProcessAddStaSelfReq
4791 *
4792 */
4793VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4794{
4795 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004796 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4798 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4799 sizeof(WDI_AddSTASelfReqParamsType)) ;
4800 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004802 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304803 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 if( NULL == wdiAddStaSelfReq )
4805 {
4806 VOS_ASSERT( 0 );
4807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004808 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304809 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4810 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 return( VOS_STATUS_E_NOMEM );
4812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 if( NULL == pWdaParams )
4815 {
4816 VOS_ASSERT( 0 );
4817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004818 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304819 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4820 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 vos_mem_free(wdiAddStaSelfReq) ;
4822 return( VOS_STATUS_E_NOMEM );
4823 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304824 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4825 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004827 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 /* Store Init Req pointer, as this will be used for response */
4829 /* store Params pass it to WDI */
4830 pWdaParams->pWdaContext = pWDA;
4831 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304832 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4833
4834 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4835 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004836
Jeff Johnson43971f52012-07-17 12:26:56 -07004837 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 {
4839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4840 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004841 wstatus );
4842 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4844 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304845 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4846 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 pAddStaSelfReq->status = eSIR_FAILURE ;
4848 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4849 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004850 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851}
Jeff Johnson295189b2012-06-20 16:38:30 -07004852/*
4853 * FUNCTION: WDA_DelSTASelfRespCallback
4854 *
4855 */
4856void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4857 wdiDelStaSelfRspParams , void* pUserData)
4858{
4859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4860 tWDA_CbContext *pWDA;
4861 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004863 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 if (NULL == pWdaParams)
4865 {
4866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004867 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 VOS_ASSERT(0);
4869 return;
4870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4872 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004874 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875
4876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4877 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304878 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304879 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4881 "%s: Failure with status %d", __func__,
4882 wdiDelStaSelfRspParams->wdiStatus);
4883 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4884 WLAN_LOG_INDICATOR_HOST_DRIVER,
4885 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4886 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 return ;
4890}
Jeff Johnson295189b2012-06-20 16:38:30 -07004891/*
4892 * FUNCTION: WDA_DelSTASelfReqCallback
4893 *
4894 */
4895void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4896 void* pUserData)
4897{
4898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4899 tWDA_CbContext *pWDA;
4900 tDelStaSelfParams *delStaSelfParams;
4901
4902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304903 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004904 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004905
4906 if (NULL == pWdaParams)
4907 {
4908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004909 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_ASSERT(0);
4911 return;
4912 }
4913
4914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4915 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4916
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004917 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004918
4919 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4920 {
4921 VOS_ASSERT(0);
4922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4923 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304924 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4925 WLAN_LOG_INDICATOR_HOST_DRIVER,
4926 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4927 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4929 }
4930
4931 return ;
4932}
4933
4934/*
4935 * FUNCTION: WDA_DelSTASelfReq
4936 * Trigger Config STA processing in WDI
4937 */
4938VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4939 tDelStaSelfParams* pDelStaSelfReqParam)
4940{
4941 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004942 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 tWDA_ReqParams *pWdaParams = NULL;
4944 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4945 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4946 sizeof(WDI_DelSTASelfReqParamsType)) ;
4947
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 if( NULL == wdiDelStaSelfReq )
4951 {
4952 VOS_ASSERT( 0 );
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004954 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 return( VOS_STATUS_E_NOMEM );
4956 }
4957
4958 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4959 if( NULL == pWdaParams )
4960 {
4961 VOS_ASSERT( 0 );
4962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004963 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 vos_mem_free(wdiDelStaSelfReq) ;
4965 return( VOS_STATUS_E_NOMEM );
4966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 pWdaParams->pWdaContext = pWDA;
4968 /* Store param pointer as passed in by caller */
4969 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4970 /* store Params pass it to WDI */
4971 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4973 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4974
4975 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4976 wdiDelStaSelfReq->pUserData = pWdaParams;
4977
Jeff Johnson43971f52012-07-17 12:26:56 -07004978 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4980
Jeff Johnson43971f52012-07-17 12:26:56 -07004981 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 {
4983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4984 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4985 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004986 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4988 vos_mem_free(pWdaParams) ;
4989 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4990 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4991 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004992 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004993}
4994
Jeff Johnson295189b2012-06-20 16:38:30 -07004995/*
4996 * FUNCTION: WDA_SendMsg
4997 * Send Message back to PE
4998 */
4999void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5000 void *pBodyptr, tANI_U32 bodyVal)
5001{
5002 tSirMsgQ msg = {0} ;
5003 tANI_U32 status = VOS_STATUS_SUCCESS ;
5004 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 msg.type = msgType;
5006 msg.bodyval = bodyVal;
5007 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 if (VOS_STATUS_SUCCESS != status)
5010 {
5011 if(NULL != pBodyptr)
5012 {
5013 vos_mem_free(pBodyptr);
5014 }
5015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005016 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 VOS_ASSERT(0) ;
5018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 return ;
5020}
Jeff Johnson295189b2012-06-20 16:38:30 -07005021/*
5022 * FUNCTION: WDA_UpdateBSSParams
5023 * Translated WDA/PE BSS info into WDI BSS info..
5024 */
5025void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5026 WDI_ConfigBSSReqInfoType *wdiBssParams,
5027 tAddBssParams *wdaBssParams)
5028{
5029 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305030 v_U8_t i = 0;
5031
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 /* copy bssReq Params to WDI structure */
5033 vos_mem_copy(wdiBssParams->macBSSID,
5034 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5035 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5036 sizeof(tSirMacAddr)) ;
5037 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5038 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5039 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 wdiBssParams->ucShortSlotTimeSupported =
5041 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5043 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5044 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5045 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5046 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5047
5048 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5049 wdiBssParams->ucTXOPProtectionFullSupport =
5050 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5052 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5055 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5056 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5057 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5058
Chet Lanctot186b5732013-03-18 10:26:30 -07005059 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5060
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 /* copy SSID into WDI structure */
5062 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5063 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5064 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005065 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5066 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068#ifdef WLAN_FEATURE_VOWIFI
5069 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5070#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073#ifdef WLAN_FEATURE_VOWIFI_11R
5074 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 if(wdiBssParams->bExtSetStaKeyParamValid)
5076 {
5077 /* copy set STA key params to WDI structure */
5078 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5079 wdaBssParams->extSetStaKeyParam.staIdx;
5080 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5081 wdaBssParams->extSetStaKeyParam.encType;
5082 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5083 wdaBssParams->extSetStaKeyParam.wepType;
5084 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5085 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5087 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005088 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5090 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5091 {
5092 WDA_GetWepKeysFromCfg( pWDA,
5093 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5094 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5095 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5096 }
5097 else
5098 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5100 keyIndex++)
5101 {
5102 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5103 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5104 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5105 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5106 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5107 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305108
5109 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5110 {
5111 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5112 {
5113 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5114 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5115 }
5116
5117 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5118 {
5119 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5120 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5121 }
5122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5123 FL("%s: Negated Keys"), __func__);
5124 }
5125 else
5126 {
5127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5128 FL("%s: No change in Keys "), __func__);
5129 vos_mem_copy(
5130 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5131 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5132 WLAN_MAX_KEY_RSC_LEN);
5133 vos_mem_copy(
5134 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5135 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5136 SIR_MAC_MAX_KEY_LENGTH);
5137 }
5138
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5140 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5141 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5142 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305144 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 }
5147 }
5148 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5149 }
5150 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5151 {
5152 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5153 sizeof(wdaBssParams->extSetStaKeyParam) );
5154 }
5155#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005156#ifdef WLAN_FEATURE_11AC
5157 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5158 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5159#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005160
5161 return ;
5162}
Jeff Johnson295189b2012-06-20 16:38:30 -07005163/*
5164 * FUNCTION: WDA_UpdateSTAParams
5165 * Translated WDA/PE BSS info into WDI BSS info..
5166 */
5167void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5168 WDI_ConfigStaReqInfoType *wdiStaParams,
5169 tAddStaParams *wdaStaParams)
5170{
5171 tANI_U8 i = 0;
5172 /* Update STA params */
5173 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5174 sizeof(tSirMacAddr)) ;
5175 wdiStaParams->usAssocId = wdaStaParams->assocId;
5176 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005177 wdiStaParams->staIdx = wdaStaParams->staIdx;
5178
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 wdiStaParams->ucShortPreambleSupported =
5180 wdaStaParams->shortPreambleSupported;
5181 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5182 sizeof(tSirMacAddr)) ;
5183 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5184
5185 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5186
5187 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5188 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5189 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5190 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5191 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5192 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5193 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5194
5195 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5196 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 wdiStaParams->wdiSupportedRates.opRateMode =
5198 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5200 {
5201 wdiStaParams->wdiSupportedRates.llbRates[i] =
5202 wdaStaParams->supportedRates.llbRates[i];
5203 }
5204 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5205 {
5206 wdiStaParams->wdiSupportedRates.llaRates[i] =
5207 wdaStaParams->supportedRates.llaRates[i];
5208 }
5209 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5210 {
5211 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5212 wdaStaParams->supportedRates.aniLegacyRates[i];
5213 }
5214 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5215 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005216#ifdef WLAN_FEATURE_11AC
5217 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5218 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5219 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5220 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5221#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5223 {
5224 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5225 wdaStaParams->supportedRates.supportedMCSSet[i];
5226 }
5227 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5228 wdaStaParams->supportedRates.rxHighestDataRate;
5229
5230 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5231
5232 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5233
5234 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5235 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5236 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5237
5238 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5239 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5240 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5241 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005243#ifdef WLAN_FEATURE_11AC
5244 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5245 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005246 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305247 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5248 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5249 * must be set by default */
5250 if ( wdiStaParams->vhtTxMUBformeeCapable )
5251 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005252#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005253 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5254 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 return ;
5256}
Jeff Johnson295189b2012-06-20 16:38:30 -07005257/*
5258 * -------------------------------------------------------------------------
5259 * CFG update to WDI
5260 * -------------------------------------------------------------------------
5261 */
5262
5263 /*
5264 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5265 * Convert the WNI CFG ID to HAL CFG ID
5266 */
mukul sharma6b53e202016-11-23 19:29:18 +05305267static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005268{
5269 switch(wniCfgId)
5270 {
5271 case WNI_CFG_STA_ID:
5272 return QWLAN_HAL_CFG_STA_ID;
5273 case WNI_CFG_CURRENT_TX_ANTENNA:
5274 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5275 case WNI_CFG_CURRENT_RX_ANTENNA:
5276 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5277 case WNI_CFG_LOW_GAIN_OVERRIDE:
5278 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5279 case WNI_CFG_POWER_STATE_PER_CHAIN:
5280 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5281 case WNI_CFG_CAL_PERIOD:
5282 return QWLAN_HAL_CFG_CAL_PERIOD;
5283 case WNI_CFG_CAL_CONTROL:
5284 return QWLAN_HAL_CFG_CAL_CONTROL;
5285 case WNI_CFG_PROXIMITY:
5286 return QWLAN_HAL_CFG_PROXIMITY;
5287 case WNI_CFG_NETWORK_DENSITY:
5288 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5289 case WNI_CFG_MAX_MEDIUM_TIME:
5290 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5291 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5292 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5293 case WNI_CFG_RTS_THRESHOLD:
5294 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5295 case WNI_CFG_SHORT_RETRY_LIMIT:
5296 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5297 case WNI_CFG_LONG_RETRY_LIMIT:
5298 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5299 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5300 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5301 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5302 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5303 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5304 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5305 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5306 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5307 case WNI_CFG_FIXED_RATE:
5308 return QWLAN_HAL_CFG_FIXED_RATE;
5309 case WNI_CFG_RETRYRATE_POLICY:
5310 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5311 case WNI_CFG_RETRYRATE_SECONDARY:
5312 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5313 case WNI_CFG_RETRYRATE_TERTIARY:
5314 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5315 case WNI_CFG_FORCE_POLICY_PROTECTION:
5316 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5317 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5318 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5319 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5320 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5321 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5322 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5323 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5324 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5325 case WNI_CFG_MAX_BA_SESSIONS:
5326 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5327 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5328 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5329 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5330 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5331 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5332 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5333 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5334 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5335 case WNI_CFG_STATS_PERIOD:
5336 return QWLAN_HAL_CFG_STATS_PERIOD;
5337 case WNI_CFG_CFP_MAX_DURATION:
5338 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5339#if 0 /*This is not part of CFG*/
5340 case WNI_CFG_FRAME_TRANS_ENABLED:
5341 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5342#endif
5343 case WNI_CFG_DTIM_PERIOD:
5344 return QWLAN_HAL_CFG_DTIM_PERIOD;
5345 case WNI_CFG_EDCA_WME_ACBK:
5346 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5347 case WNI_CFG_EDCA_WME_ACBE:
5348 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5349 case WNI_CFG_EDCA_WME_ACVI:
5350 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5351 case WNI_CFG_EDCA_WME_ACVO:
5352 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5353#if 0
5354 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5355 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5356 case WNI_CFG_TELE_BCN_TRANS_LI:
5357 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5358 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5359 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5360 case WNI_CFG_TELE_BCN_MAX_LI:
5361 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5362 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5363 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5364#endif
5365 case WNI_CFG_ENABLE_CLOSE_LOOP:
5366 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005367 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5368 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305369 case WNI_CFG_ENABLE_CONC_BMISS:
5370 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5371 case WNI_CFG_ENABLE_UNITS_BWAIT:
5372 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305373 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5374 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305375 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5376 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 default:
5378 {
5379 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005380 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305382 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 }
5384 }
5385}
Jeff Johnson295189b2012-06-20 16:38:30 -07005386/*
5387 * FUNCTION: WDA_UpdateCfgCallback
5388 *
5389 */
5390void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5391{
5392 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5393 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5394 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005396 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /*
5398 * currently there is no response message is expected between PE and
5399 * WDA, Failure return from WDI is a ASSERT condition
5400 */
5401 if(WDI_STATUS_SUCCESS != wdiStatus)
5402 {
5403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005404 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5406 }
5407
5408 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5409 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5410 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 return ;
5412}
Jeff Johnson295189b2012-06-20 16:38:30 -07005413/*
5414 * FUNCTION: WDA_UpdateCfg
5415 *
5416 */
5417VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5418{
5419
5420 WDI_Status status = WDI_STATUS_SUCCESS ;
5421 tANI_U32 val =0;
5422 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5423 tHalCfg *configData;
5424 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5425 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 if (NULL == pMac )
5429 {
5430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 return VOS_STATUS_E_FAILURE;
5433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005434 if(WDA_START_STATE != pWDA->wdaState)
5435 {
5436 return VOS_STATUS_E_FAILURE;
5437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5439 {
5440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005441 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 VOS_ASSERT(0);
5443 return VOS_STATUS_E_FAILURE;
5444 }
mukul sharma6b53e202016-11-23 19:29:18 +05305445
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5447 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005448 if(NULL == wdiCfgReqParam)
5449 {
5450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 VOS_ASSERT(0);
5453 return VOS_STATUS_E_NOMEM;
5454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5456 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 if(NULL == wdiCfgReqParam->pConfigBuffer)
5458 {
5459 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 vos_mem_free(wdiCfgReqParam);
5462 VOS_ASSERT(0);
5463 return VOS_STATUS_E_NOMEM;
5464 }
mukul sharma6b53e202016-11-23 19:29:18 +05305465
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 /*convert the WNI CFG Id to HAL CFG Id*/
5467 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5468 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5469
5470 /*TODO: revisit this for handling string parameters */
5471 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5472 &val) != eSIR_SUCCESS)
5473 {
5474 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005475 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5477 vos_mem_free(wdiCfgReqParam);
5478 return eSIR_FAILURE;
5479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5481 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5482 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5483 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5484 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5485
5486 /* store Params pass it to WDI */
5487 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5489 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5490 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 if(IS_WDI_STATUS_FAILURE(status))
5492 {
5493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5494 "Failure in Update CFG WDI API, free all the memory " );
5495 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5496 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5497 pWDA->wdaWdiCfgApiMsgParam = NULL;
5498 /* Failure is not expected */
5499 VOS_ASSERT(0) ;
5500 }
5501#else
5502 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5503 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5504 pWDA->wdaWdiCfgApiMsgParam = NULL;
5505#endif
5506 return CONVERT_WDI2VOS_STATUS(status) ;
5507}
5508
mukul sharma6b53e202016-11-23 19:29:18 +05305509/*
5510 * FUNCTION: WDA_UpdateCfgIntParamCb
5511 *
5512 */
5513void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5514{
5515 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5516 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5517 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
5518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5519 "<------ %s " ,__func__);
5520 /*
5521 * currently there is no response message is expected between PE and
5522 * WDA, Failure return from WDI is a ASSERT condition
5523 */
5524 if (WDI_STATUS_SUCCESS != wdiStatus)
5525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5526 "%s: CFG (%d) config failure", __func__,
5527 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5528
5529 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
5530 {
5531 vos_mem_free(wdiCfgParam->pConfigBuffer);
5532 wdiCfgParam->pConfigBuffer = NULL;
5533 }
5534
5535 if (pWDA->wdaWdiCfgUpdateIntMsg)
5536 {
5537 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5538 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
5539 }
5540
5541 return ;
5542}
5543
5544/*
5545 * FUNCTION: WDA_UpdateCfgIntParam
5546 *
5547 */
5548VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
5549 tSirUpdateCfgIntParam *cfgParam)
5550{
5551
5552 WDI_Status status = WDI_STATUS_SUCCESS ;
5553 tANI_U32 val =0;
5554 tpAniSirGlobal pMac;
5555 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5556 tHalCfg *tlvStruct = NULL ;
5557 tANI_U8 *tlvStructStart = NULL ;
5558 v_PVOID_t *configParam;
5559 tANI_U32 configParamSize;
5560 tANI_U32 *configDataValue;
5561 tANI_U32 cfgId;
5562 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
5563
5564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5565 " ------> %s " ,__func__);
5566
5567 if (cfgParam)
5568 {
5569 cfgId = cfgParam->cfgId;
5570 }
5571 else
5572 {
5573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5574 FL("Invoked with NULL cfgParam"));
5575 return VOS_STATUS_E_FAILURE;
5576 }
5577
5578 if (!pWDA)
5579 {
5580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5581 FL("Invoked with invalid WDA context"));
5582 return VOS_STATUS_E_FAILURE;
5583 }
5584
5585 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
5586 {
5587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5588 FL("wdaWdiCfgApiMsgParam is not NULL"));
5589
5590 return VOS_STATUS_E_FAILURE;
5591 }
5592
5593 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5594 if (NULL == pMac)
5595 {
5596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5597 FL("Invoked with invalid MAC context "));
5598 return VOS_STATUS_E_FAILURE;
5599 }
5600
5601 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
5602 {
5603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5604 FL("Fail to cfg get id %d"), cfgId);
5605 return VOS_STATUS_E_FAILURE;
5606 }
5607
5608 /* Get TLV type */
5609 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
5610 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
5611 {
5612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5613 "Failed to Convert cfg to hal id %d", cfgId);
5614 return VOS_STATUS_E_FAILURE;
5615 }
5616
5617 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5618 sizeof(WDI_UpdateCfgReqParamsType)) ;
5619 if (NULL == wdiCfgReqParam)
5620 {
5621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5622 "%s: VOS MEM Alloc Failure", __func__);
5623 return VOS_STATUS_E_NOMEM;
5624 }
5625
5626 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
5627 configParam = vos_mem_malloc(configParamSize);
5628 if (NULL == configParam)
5629 {
5630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5631 "%s: VOS MEM Alloc Failure", __func__);
5632 vos_mem_free(wdiCfgReqParam);
5633 return VOS_STATUS_E_NOMEM;
5634 }
5635
5636 vos_mem_set(configParam, configParamSize, 0);
5637 wdiCfgReqParam->pConfigBuffer = configParam;
5638 tlvStruct = (tHalCfg *)configParam;
5639 tlvStructStart = (tANI_U8 *)configParam;
5640 /* Set TLV type */
5641 tlvStruct->type = tlv_type;
5642 tlvStruct->length = sizeof(tANI_U32);
5643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
5644 *configDataValue = (tANI_U32)val;
5645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5646 "cfg_id %d tlv_type %d tlv_value %d \n",
5647 cfgId, tlvStruct->type, val);
5648 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
5649 + sizeof(tHalCfg) + tlvStruct->length)) ;
5650 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
5651 wdiCfgReqParam->wdiReqStatusCB = NULL;
5652 /* store Params pass it to WDI */
5653 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
5654 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5655 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
5656 if (IS_WDI_STATUS_FAILURE(status))
5657 {
5658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5659 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
5660 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5661 wdiCfgReqParam->pConfigBuffer = NULL;
5662 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5663 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
5664 }
5665
5666 return CONVERT_WDI2VOS_STATUS(status);
5667}
5668
Jeff Johnson295189b2012-06-20 16:38:30 -07005669VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5670 v_U8_t *pDefaultKeyId,
5671 v_U8_t *pNumKeys,
5672 WDI_KeysType *pWdiKeys )
5673{
5674 v_U32_t i, j, defKeyId = 0;
5675 v_U32_t val = SIR_MAC_KEY_LENGTH;
5676 VOS_STATUS status = WDI_STATUS_SUCCESS;
5677 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 if (NULL == pMac )
5679 {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005681 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005682 return VOS_STATUS_E_FAILURE;
5683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5685 &defKeyId ))
5686 {
5687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5688 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5689 }
5690
5691 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 /* Need to extract ALL of the configured WEP Keys */
5693 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5694 {
5695 val = SIR_MAC_KEY_LENGTH;
5696 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5697 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5698 pWdiKeys[j].key,
5699 &val ))
5700 {
5701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005702 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 }
5704 else
5705 {
5706 pWdiKeys[j].keyId = (tANI_U8) i;
5707 /*
5708 * Actually, a DC (Don't Care) because
5709 * this is determined (and set) by PE/MLME
5710 */
5711 pWdiKeys[j].unicast = 0;
5712 /*
5713 * Another DC (Don't Care)
5714 */
5715 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5716 /* Another DC (Don't Care). Unused for WEP */
5717 pWdiKeys[j].paeRole = 0;
5718 /* Determined from wlan_cfgGetStr() above.*/
5719 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 j++;
5721 *pNumKeys = (tANI_U8) j;
5722 }
5723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 return status;
5725}
Jeff Johnson295189b2012-06-20 16:38:30 -07005726/*
5727 * FUNCTION: WDA_SetBssKeyReqCallback
5728 * send SET BSS key RSP back to PE
5729 */
5730void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5731{
5732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5733 tWDA_CbContext *pWDA;
5734 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005736 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 if(NULL == pWdaParams)
5738 {
5739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005740 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 VOS_ASSERT(0) ;
5742 return ;
5743 }
5744 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5745 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305746 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5747 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5749 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005750 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 return ;
5753}
Jeff Johnson295189b2012-06-20 16:38:30 -07005754/*
5755 * FUNCTION: WDA_ProcessSetBssKeyReq
5756 * Request to WDI for programming the BSS key( key for
5757 * broadcast/multicast frames Encryption)
5758 */
5759VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5760 tSetBssKeyParams *setBssKeyParams )
5761{
5762 WDI_Status status = WDI_STATUS_SUCCESS ;
5763 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5764 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5765 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5766 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005767 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005769 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 if(NULL == wdiSetBssKeyParam)
5771 {
5772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005774 VOS_ASSERT(0);
5775 return VOS_STATUS_E_NOMEM;
5776 }
5777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5778 if(NULL == pWdaParams)
5779 {
5780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 VOS_ASSERT(0);
5783 vos_mem_free(wdiSetBssKeyParam);
5784 return VOS_STATUS_E_NOMEM;
5785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 /* copy set BSS params to WDI structure */
5788 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5789 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5790 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 if(setBssKeyParams->encType != eSIR_ED_NONE)
5792 {
5793 if( setBssKeyParams->numKeys == 0 &&
5794 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5795 setBssKeyParams->encType == eSIR_ED_WEP104))
5796 {
5797 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5799 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5800 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5801 }
5802 else
5803 {
5804 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5805 {
5806 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5807 setBssKeyParams->key[keyIndex].keyId;
5808 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5809 setBssKeyParams->key[keyIndex].unicast;
5810 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5811 setBssKeyParams->key[keyIndex].keyDirection;
5812 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5813 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5814 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5815 setBssKeyParams->key[keyIndex].paeRole;
5816 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5817 setBssKeyParams->key[keyIndex].keyLength;
5818 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5819 setBssKeyParams->key[keyIndex].key,
5820 SIR_MAC_MAX_KEY_LENGTH);
5821 }
5822 }
5823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5825 setBssKeyParams->singleTidRc;
5826 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005827 /* Store set key pointer, as this will be used for response */
5828 /* store Params pass it to WDI */
5829 pWdaParams->pWdaContext = pWDA;
5830 pWdaParams->wdaMsgParam = setBssKeyParams;
5831 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5833 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5834
5835 if(IS_WDI_STATUS_FAILURE(status))
5836 {
5837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5838 "Failure in Set BSS Key Req WDI API, free all the memory " );
5839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5840 vos_mem_free(pWdaParams) ;
5841 setBssKeyParams->status = eSIR_FAILURE ;
5842 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 return CONVERT_WDI2VOS_STATUS(status) ;
5845}
Jeff Johnson295189b2012-06-20 16:38:30 -07005846/*
5847 * FUNCTION: WDA_RemoveBssKeyReqCallback
5848 * send SET BSS key RSP back to PE
5849 */
5850void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5851{
5852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5853 tWDA_CbContext *pWDA;
5854 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005856 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 if(NULL == pWdaParams)
5858 {
5859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005860 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 VOS_ASSERT(0) ;
5862 return ;
5863 }
5864 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5865 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5867 vos_mem_free(pWdaParams) ;
5868
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005869 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 return ;
5872}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305873
5874/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305875 * FUNCTION: WDA_GetFrameLogRspCallback
5876 * recieves get frame log response from FW
5877 */
5878void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5879 void* pUserData)
5880{
5881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5882 tWDA_CbContext *pWDA = NULL;
5883 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5884
5885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5886 "<------ Entering: %s " ,__func__);
5887 if(NULL == pWdaParams)
5888 {
5889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5890 "%s: pWdaParams received NULL", __func__);
5891 VOS_ASSERT(0) ;
5892 return ;
5893 }
5894
5895 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5896 if (NULL == pWDA)
5897 {
5898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5899 "%s:pWDA is NULL", __func__);
5900 VOS_ASSERT(0);
5901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5902 vos_mem_free(pWdaParams);
5903 return ;
5904 }
5905
5906 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5907 if(NULL == pGetFrameLogReqParams)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5910 "%s: pGetFrameLogReqParams received NULL", __func__);
5911 VOS_ASSERT(0);
5912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5913 vos_mem_free(pWdaParams);
5914 return;
5915 }
5916
Siddharth Bhal64246172015-02-27 01:04:37 +05305917 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305919 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5920 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305921 }
5922
5923 /* free WDI command buffer only */
5924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5925 vos_mem_free(pWdaParams->wdaMsgParam);
5926 vos_mem_free(pWdaParams);
5927
5928 return ;
5929
5930}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305931
5932/*
5933 * FUNCTION: WDA_RssiMonitorStopRspCallback
5934 * recieves Rssi Monitor stop response from FW
5935 */
5936void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5937 void* pUserData)
5938{
5939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5940 tSirRssiMonitorReq *pRssiMonitorReqParams;
5941
5942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5943 "<------ %s " ,__func__);
5944
5945 if(NULL == pWdaParams)
5946 {
5947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5948 "%s: pWdaParams received NULL", __func__);
5949 VOS_ASSERT(0);
5950 return ;
5951 }
5952
5953 if(NULL == pWdaParams->wdaMsgParam)
5954 {
5955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5956 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5957 VOS_ASSERT(0);
5958 vos_mem_free(pWdaParams);
5959 return ;
5960 }
5961
5962 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5963
5964 if(pRssiMonitorReqParams->rssiMonitorCallback)
5965 {
5966 pRssiMonitorReqParams->rssiMonitorCallback(
5967 pRssiMonitorReqParams->rssiMonitorCbContext,
5968 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5969 }
5970 else
5971 {
5972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5973 "%s: pFWLoggingInitParams callback is NULL", __func__);
5974 }
5975
5976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5977 vos_mem_free(pWdaParams->wdaMsgParam);
5978 vos_mem_free(pWdaParams);
5979
5980 return;
5981}
5982
5983/*
5984 * FUNCTION: WDA_RssiMonitorStartRspCallback
5985 * recieves Rssi Monitor start response from FW
5986 */
5987void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5988 void* pUserData)
5989{
5990 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5991 tSirRssiMonitorReq *pRssiMonitorReqParams;
5992
5993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5994 "<------ %s " ,__func__);
5995
5996 if(NULL == pWdaParams)
5997 {
5998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5999 "%s: pWdaParams received NULL", __func__);
6000 VOS_ASSERT(0);
6001 return ;
6002 }
6003
6004 if(NULL == pWdaParams->wdaMsgParam)
6005 {
6006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6007 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6008 VOS_ASSERT(0);
6009 vos_mem_free(pWdaParams);
6010 return ;
6011 }
6012
6013 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6014
6015 if(pRssiMonitorReqParams->rssiMonitorCallback)
6016 {
6017 pRssiMonitorReqParams->rssiMonitorCallback(
6018 pRssiMonitorReqParams->rssiMonitorCbContext,
6019 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6020 }
6021 else
6022 {
6023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6024 "%s: pFWLoggingInitParams callback is NULL", __func__);
6025 }
6026
6027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6028 vos_mem_free(pWdaParams->wdaMsgParam);
6029 vos_mem_free(pWdaParams);
6030
6031 return;
6032}
6033
Siddharth Bhal64246172015-02-27 01:04:37 +05306034/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306035 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306036 * recieves Mgmt Logging init response from FW
6037 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306038void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306039 void* pUserData)
6040{
6041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306042 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306043 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306044
6045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6046 "<------ %s " ,__func__);
6047
6048 if(NULL == pWdaParams)
6049 {
6050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6051 "%s: pWdaParams received NULL", __func__);
6052 VOS_ASSERT(0);
6053 return ;
6054 }
6055
6056 if(NULL == pWdaParams->wdaMsgParam)
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6059 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6060 VOS_ASSERT(0);
6061 vos_mem_free(pWdaParams);
6062 return ;
6063 }
6064
c_manjeecfd1efb2015-09-25 19:32:34 +05306065 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6066 if(NULL == pWdaParams)
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6069 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6070 VOS_ASSERT(0);
6071 vos_mem_free(pWdaParams);
6072 return;
6073 }
6074
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306075 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306076 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306077
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306078 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306079 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306080 pFWLoggingInitParams->fwlogInitCallback(
6081 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306082 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306083 }
6084 else
6085 {
6086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306087 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306088 }
6089
c_manjeecfd1efb2015-09-25 19:32:34 +05306090 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6092 vos_mem_free(pWdaParams->wdaMsgParam);
6093 vos_mem_free(pWdaParams);
6094
6095 return;
6096}
6097
6098/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306099 * FUNCTION: WDA_SpoofMacAddrRspCallback
6100 * recieves spoof mac addr response from FW
6101 */
6102void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6103{
6104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6105 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306106
Siddharth Bhal171788a2014-09-29 21:02:40 +05306107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6108 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306109
Siddharth Bhal171788a2014-09-29 21:02:40 +05306110 if(NULL == pWdaParams)
6111 {
6112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6113 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306114 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306115 return ;
6116 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306118
Siddharth Bhal029d6732014-10-09 21:31:23 +05306119 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306121 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306122 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306123 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6124 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306125
Siddharth Bhal171788a2014-09-29 21:02:40 +05306126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306127 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306128 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306129
6130 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306131}
6132
Jeff Johnson295189b2012-06-20 16:38:30 -07006133/*
6134 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6135 * Request to WDI to remove the BSS key( key for broadcast/multicast
6136 * frames Encryption)
6137 */
6138VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6139 tRemoveBssKeyParams *removeBssKeyParams )
6140{
6141 WDI_Status status = WDI_STATUS_SUCCESS ;
6142 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6143 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6144 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6145 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006147 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 if(NULL == wdiRemoveBssKeyParam)
6149 {
6150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 VOS_ASSERT(0);
6153 return VOS_STATUS_E_NOMEM;
6154 }
6155 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6156 if(NULL == pWdaParams)
6157 {
6158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 VOS_ASSERT(0);
6161 vos_mem_free(wdiRemoveBssKeyParam);
6162 return VOS_STATUS_E_NOMEM;
6163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 /* copy Remove BSS key params to WDI structure*/
6165 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6166 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6167 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6168 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6169 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 /* Store remove key pointer, as this will be used for response */
6171 /* store Params pass it to WDI */
6172 pWdaParams->pWdaContext = pWDA;
6173 pWdaParams->wdaMsgParam = removeBssKeyParams;
6174 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6176 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 if(IS_WDI_STATUS_FAILURE(status))
6178 {
6179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6180 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6182 vos_mem_free(pWdaParams) ;
6183 removeBssKeyParams->status = eSIR_FAILURE ;
6184 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 return CONVERT_WDI2VOS_STATUS(status) ;
6187}
Jeff Johnson295189b2012-06-20 16:38:30 -07006188/*
6189 * FUNCTION: WDA_SetBssKeyReqCallback
6190 * send SET BSS key RSP back to PE
6191 */
6192void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6193{
6194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6195 tWDA_CbContext *pWDA;
6196 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 if(NULL == pWdaParams)
6200 {
6201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006202 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_ASSERT(0) ;
6204 return ;
6205 }
6206 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6207 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306208 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6209 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6211 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006212 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 return ;
6215}
Jeff Johnson295189b2012-06-20 16:38:30 -07006216/*
6217 * FUNCTION: WDA_ProcessSetStaKeyReq
6218 * Request to WDI for programming the STA key( key for Unicast frames
6219 * Encryption)
6220 */
6221VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6222 tSetStaKeyParams *setStaKeyParams )
6223{
6224 WDI_Status status = WDI_STATUS_SUCCESS ;
6225 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6226 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6227 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6228 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006231 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 if(NULL == wdiSetStaKeyParam)
6233 {
6234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 VOS_ASSERT(0);
6237 return VOS_STATUS_E_NOMEM;
6238 }
6239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6240 if(NULL == pWdaParams)
6241 {
6242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 VOS_ASSERT(0);
6245 vos_mem_free(wdiSetStaKeyParam);
6246 return VOS_STATUS_E_NOMEM;
6247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 /* copy set STA key params to WDI structure */
6251 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6252 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6253 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6254 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(setStaKeyParams->encType != eSIR_ED_NONE)
6256 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006257 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6259 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6260 {
6261 WDA_GetWepKeysFromCfg( pWDA,
6262 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6263 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6264 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6265 }
6266 else
6267 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6269 keyIndex++)
6270 {
6271 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6272 setStaKeyParams->key[keyIndex].keyId;
6273 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6274 setStaKeyParams->key[keyIndex].unicast;
6275 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6276 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6278 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6279 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6280 setStaKeyParams->key[keyIndex].paeRole;
6281 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6282 setStaKeyParams->key[keyIndex].keyLength;
6283 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6284 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6285 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6286 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6287 {
6288 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6289 }
6290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6292 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 }
6294 }
6295 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6296 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 /* Store set key pointer, as this will be used for response */
6298 /* store Params pass it to WDI */
6299 pWdaParams->pWdaContext = pWDA;
6300 pWdaParams->wdaMsgParam = setStaKeyParams;
6301 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6303 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 if(IS_WDI_STATUS_FAILURE(status))
6305 {
6306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6307 "Failure in set STA Key Req WDI API, free all the memory " );
6308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6309 vos_mem_free(pWdaParams) ;
6310 setStaKeyParams->status = eSIR_FAILURE ;
6311 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 return CONVERT_WDI2VOS_STATUS(status) ;
6314}
Jeff Johnson295189b2012-06-20 16:38:30 -07006315/*
6316 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6317 * send SET Bcast STA key RSP back to PE
6318 */
6319void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6320{
6321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6322 tWDA_CbContext *pWDA;
6323 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 if(NULL == pWdaParams)
6327 {
6328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 VOS_ASSERT(0) ;
6331 return ;
6332 }
6333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6334 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6336 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006337 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 return ;
6340}
6341
Jeff Johnson295189b2012-06-20 16:38:30 -07006342/*
6343 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6344 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6345 * Encryption)
6346 */
6347VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6348 tSetStaKeyParams *setStaKeyParams )
6349{
6350 WDI_Status status = WDI_STATUS_SUCCESS ;
6351 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6352 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6353 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6354 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006357 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 if(NULL == wdiSetStaKeyParam)
6359 {
6360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_ASSERT(0);
6363 return VOS_STATUS_E_NOMEM;
6364 }
6365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6366 if(NULL == pWdaParams)
6367 {
6368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 VOS_ASSERT(0);
6371 vos_mem_free(wdiSetStaKeyParam);
6372 return VOS_STATUS_E_NOMEM;
6373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 /* copy set STA key params to WDI structure */
6377 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6378 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6379 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6380 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 if(setStaKeyParams->encType != eSIR_ED_NONE)
6382 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6384 keyIndex++)
6385 {
6386 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6387 setStaKeyParams->key[keyIndex].keyId;
6388 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6389 setStaKeyParams->key[keyIndex].unicast;
6390 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6391 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6393 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6394 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6395 setStaKeyParams->key[keyIndex].paeRole;
6396 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6397 setStaKeyParams->key[keyIndex].keyLength;
6398 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6399 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6402 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 }
6404 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 /* Store set key pointer, as this will be used for response */
6406 /* store Params pass it to WDI */
6407 pWdaParams->pWdaContext = pWDA;
6408 pWdaParams->wdaMsgParam = setStaKeyParams;
6409 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6411 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 if(IS_WDI_STATUS_FAILURE(status))
6413 {
6414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6415 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6417 vos_mem_free(pWdaParams) ;
6418 setStaKeyParams->status = eSIR_FAILURE ;
6419 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 return CONVERT_WDI2VOS_STATUS(status) ;
6422}
Jeff Johnson295189b2012-06-20 16:38:30 -07006423/*
6424 * FUNCTION: WDA_RemoveStaKeyReqCallback
6425 * send SET BSS key RSP back to PE
6426 */
6427void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6428{
6429 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6430 tWDA_CbContext *pWDA;
6431 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 if(NULL == pWdaParams)
6435 {
6436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 VOS_ASSERT(0) ;
6439 return ;
6440 }
6441 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6442 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6444 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006445 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 return ;
6448}
6449
Jeff Johnson295189b2012-06-20 16:38:30 -07006450/*
6451 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6452 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6453 */
6454VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6455 tRemoveStaKeyParams *removeStaKeyParams )
6456{
6457 WDI_Status status = WDI_STATUS_SUCCESS ;
6458 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6459 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6460 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6461 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006463 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 if(NULL == wdiRemoveStaKeyParam)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 VOS_ASSERT(0);
6469 return VOS_STATUS_E_NOMEM;
6470 }
6471 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6472 if(NULL == pWdaParams)
6473 {
6474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006475 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 VOS_ASSERT(0);
6477 vos_mem_free(wdiRemoveStaKeyParam);
6478 return VOS_STATUS_E_NOMEM;
6479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 /* copy remove STA key params to WDI structure*/
6481 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6482 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6483 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6484 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6485 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 /* Store remove key pointer, as this will be used for response */
6487 /* store Params pass it to WDI */
6488 pWdaParams->pWdaContext = pWDA;
6489 pWdaParams->wdaMsgParam = removeStaKeyParams;
6490 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006491 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6492 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 if(IS_WDI_STATUS_FAILURE(status))
6494 {
6495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6496 "Failure in remove STA Key Req WDI API, free all the memory " );
6497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6498 vos_mem_free(pWdaParams) ;
6499 removeStaKeyParams->status = eSIR_FAILURE ;
6500 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 return CONVERT_WDI2VOS_STATUS(status) ;
6503}
Jeff Johnson295189b2012-06-20 16:38:30 -07006504/*
6505 * FUNCTION: WDA_IsHandleSetLinkStateReq
6506 * Update the WDA state and return the status to handle this message or not
6507 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006508WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6509 tWDA_CbContext *pWDA,
6510 tLinkStateParams *linkStateParams)
6511{
6512 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 switch(linkStateParams->state)
6514 {
6515 case eSIR_LINK_PREASSOC_STATE:
6516 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6517 /*
6518 * set the WDA state to PRE ASSOC
6519 * copy the BSSID into pWDA to use it in join request and return,
6520 * No need to handle these messages.
6521 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006522 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6523 {
6524 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006526 }
6527 else
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006530 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006531 VOS_ASSERT(0);
6532 }
6533
6534 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6535 {
6536 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006538 }
6539 else
6540 {
6541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006542 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006543 VOS_ASSERT(0);
6544 }
6545
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6547 *channel and after ) so reset the WDA state to ready when the second
6548 * time UMAC issue the link state with PREASSOC
6549 */
6550 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6551 {
6552 /* RESET WDA state back to WDA_READY_STATE */
6553 pWDA->wdaState = WDA_READY_STATE;
6554 }
6555 else
6556 {
6557 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6558 }
6559 //populate linkState info in WDACbCtxt
6560 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 default:
6563 if(pWDA->wdaState != WDA_READY_STATE)
6564 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006565 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6566 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6567 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6568 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6569 *the ASSERT in WDA_Stop during module unload.*/
6570 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6571 {
6572 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006573 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006574 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006575 else
6576 {
6577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006578 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006579 status = WDA_IGNORE_SET_LINK_STATE;
6580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 }
6582 break;
6583 }
6584
6585 return status;
6586}
Jeff Johnson295189b2012-06-20 16:38:30 -07006587/*
6588 * FUNCTION: WDA_SetLinkStateCallback
6589 * call back function for set link state from WDI
6590 */
6591void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6592{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306593 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 tLinkStateParams *linkStateParams;
6595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006597 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306598 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 {
6600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 VOS_ASSERT(0) ;
6603 return ;
6604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306606 if (NULL == pWDA)
6607 {
6608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6609 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6611 vos_mem_free(pWdaParams->wdaMsgParam);
6612 vos_mem_free(pWdaParams);
6613
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306614 VOS_ASSERT(0);
6615 return ;
6616 }
6617
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 /*
6620 * In STA mode start the BA activity check timer after association
6621 * and in AP mode start BA activity check timer after BSS start */
6622 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6623 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006624 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6625 ((status == WDI_STATUS_SUCCESS) &&
6626 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006627 {
6628 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 /*
6632 * No respone required for WDA_SET_LINK_STATE so free the request
6633 * param here
6634 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6636 vos_mem_free(pWdaParams);
6637
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 return ;
6639}
Jeff Johnson295189b2012-06-20 16:38:30 -07006640/*
6641 * FUNCTION: WDA_ProcessSetLinkState
6642 * Request to WDI to set the link status.
6643 */
6644VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6645 tLinkStateParams *linkStateParams)
6646{
6647 WDI_Status status = WDI_STATUS_SUCCESS ;
6648 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6649 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6650 sizeof(WDI_SetLinkReqParamsType)) ;
6651 tWDA_ReqParams *pWdaParams ;
6652 tpAniSirGlobal pMac;
6653 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6654
6655 if(NULL == pMac)
6656 {
6657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006658 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006660 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 return VOS_STATUS_E_FAILURE;
6662 }
6663
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006665 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 if(NULL == wdiSetLinkStateParam)
6667 {
6668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 VOS_ASSERT(0);
6671 return VOS_STATUS_E_NOMEM;
6672 }
6673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6674 if(NULL == pWdaParams)
6675 {
6676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006678 VOS_ASSERT(0);
6679 vos_mem_free(wdiSetLinkStateParam);
6680 return VOS_STATUS_E_NOMEM;
6681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 if(WDA_IGNORE_SET_LINK_STATE ==
6683 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6684 {
6685 status = WDI_STATUS_E_FAILURE;
6686 }
6687 else
6688 {
6689 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6690 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6692 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6694 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 pWdaParams->pWdaContext = pWDA;
6696 /* Store remove key pointer, as this will be used for response */
6697 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 /* store Params pass it to WDI */
6699 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6700 /* Stop Timer only other than GO role and concurrent session */
6701 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006702 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6704 {
6705 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6708 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 if(IS_WDI_STATUS_FAILURE(status))
6710 {
6711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6712 "Failure in set link state Req WDI API, free all the memory " );
6713 }
6714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 if(IS_WDI_STATUS_FAILURE(status))
6716 {
6717 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006718 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 vos_mem_free(pWdaParams);
6720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 return CONVERT_WDI2VOS_STATUS(status) ;
6722}
Jeff Johnson295189b2012-06-20 16:38:30 -07006723/*
6724 * FUNCTION: WDA_GetStatsReqParamsCallback
6725 * send the response to PE with Stats received from WDI
6726 */
6727void WDA_GetStatsReqParamsCallback(
6728 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6729 void* pUserData)
6730{
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306732 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006733
6734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006735 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 pGetPEStatsRspParams =
6737 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6738 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6739
6740 if(NULL == pGetPEStatsRspParams)
6741 {
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 VOS_ASSERT(0);
6745 return;
6746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306748 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6750 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006751
6752 //Fill the Session Id Properly in PE
6753 pGetPEStatsRspParams->sessionId = 0;
6754 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006755 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6757 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 vos_mem_copy( pGetPEStatsRspParams + 1,
6759 wdiGetStatsRsp + 1,
6760 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306761
6762 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6763 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6764 vosMsg.bodyval = 0;
6765 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6766 (vos_msg_t*)&vosMsg))
6767 {
6768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6769 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6770 vos_mem_free(pGetPEStatsRspParams);
6771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006772
6773 return;
6774}
6775
Jeff Johnson295189b2012-06-20 16:38:30 -07006776/*
6777 * FUNCTION: WDA_ProcessGetStatsReq
6778 * Request to WDI to get the statistics
6779 */
6780VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6781 tAniGetPEStatsReq *pGetStatsParams)
6782{
6783 WDI_Status status = WDI_STATUS_SUCCESS ;
6784 WDI_GetStatsReqParamsType wdiGetStatsParam;
6785 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306786 vos_msg_t vosMsg;
6787
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006789 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6791 pGetStatsParams->staId;
6792 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6793 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 status = WDI_GetStatsReq(&wdiGetStatsParam,
6796 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 if(IS_WDI_STATUS_FAILURE(status))
6798 {
6799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6800 "Failure in Get Stats Req WDI API, free all the memory " );
6801 pGetPEStatsRspParams =
6802 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6803 if(NULL == pGetPEStatsRspParams)
6804 {
6805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006808 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 return VOS_STATUS_E_NOMEM;
6810 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306811 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6813 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6814 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306815
6816 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6817 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6818 vosMsg.bodyval = 0;
6819 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6820 (vos_msg_t*)&vosMsg))
6821 {
6822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6823 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6824 vos_mem_free(pGetPEStatsRspParams);
6825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 /* Free the request message */
6828 vos_mem_free(pGetStatsParams);
6829 return CONVERT_WDI2VOS_STATUS(status);
6830}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006831
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006832#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006833/*
6834 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6835 * send the response to PE with roam Rssi received from WDI
6836 */
6837void WDA_GetRoamRssiReqParamsCallback(
6838 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6839 void* pUserData)
6840{
6841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6842 tWDA_CbContext *pWDA = NULL;
6843 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6844 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6846 "<------ %s " ,__func__);
6847 if(NULL == pWdaParams)
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6850 "%s: pWdaParams received NULL", __func__);
6851 VOS_ASSERT(0) ;
6852 return ;
6853 }
6854 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6855 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6856
6857 if(NULL == pGetRoamRssiReqParams)
6858 {
6859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6860 "%s: pGetRoamRssiReqParams received NULL", __func__);
6861 VOS_ASSERT(0);
6862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6863 vos_mem_free(pWdaParams);
6864 return ;
6865 }
6866 pGetRoamRssiRspParams =
6867 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6868
6869 if(NULL == pGetRoamRssiRspParams)
6870 {
6871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6872 "%s: VOS MEM Alloc Failure", __func__);
6873 VOS_ASSERT(0);
6874 return;
6875 }
6876 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6877 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006878 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006879 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6880 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6881
6882 /* Assign get roam rssi req (backup) in to the response */
6883 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6884
6885 /* free WDI command buffer */
6886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6887 vos_mem_free(pWdaParams) ;
6888
6889 /* send response to UMAC*/
6890 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6891
6892 return;
6893}
6894
6895
6896
6897/*
6898 * FUNCTION: WDA_ProcessGetRoamRssiReq
6899 * Request to WDI to get the statistics
6900 */
6901VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6902 tAniGetRssiReq *pGetRoamRssiParams)
6903{
6904 WDI_Status status = WDI_STATUS_SUCCESS ;
6905 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6906 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6907 tWDA_ReqParams *pWdaParams = NULL;
6908
6909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6910 "------> %s " ,__func__);
6911 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6912 pGetRoamRssiParams->staId;
6913 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6914
6915 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6916 if(NULL == pWdaParams)
6917 {
6918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6919 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306920 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006921 VOS_ASSERT(0);
6922 return VOS_STATUS_E_NOMEM;
6923 }
6924
6925 /* Store Init Req pointer, as this will be used for response */
6926 pWdaParams->pWdaContext = pWDA;
6927
6928 /* Take Get roam Rssi req backup as it stores the callback to be called after
6929 receiving the response */
6930 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6931 pWdaParams->wdaWdiApiMsgParam = NULL;
6932
6933 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6934 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6935 if(IS_WDI_STATUS_FAILURE(status))
6936 {
6937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6938 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6939 pGetRoamRssiRspParams =
6940 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6941 if(NULL == pGetRoamRssiRspParams)
6942 {
6943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6944 "%s: VOS MEM Alloc Failure", __func__);
6945 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306946 vos_mem_free(pGetRoamRssiParams);
6947 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006948 return VOS_STATUS_E_NOMEM;
6949 }
6950 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6951 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6952 pGetRoamRssiRspParams->rssi = 0;
6953 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6954 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6955 (void *)pGetRoamRssiRspParams, 0) ;
6956 }
6957 return CONVERT_WDI2VOS_STATUS(status);
6958}
6959#endif
6960
6961
Jeff Johnson295189b2012-06-20 16:38:30 -07006962/*
6963 * FUNCTION: WDA_UpdateEDCAParamCallback
6964 * call back function for Update EDCA params from WDI
6965 */
6966void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6967{
6968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6969 tEdcaParams *pEdcaParams;
6970
6971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006972 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 if(NULL == pWdaParams)
6974 {
6975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 VOS_ASSERT(0) ;
6978 return ;
6979 }
6980 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6982 vos_mem_free(pWdaParams);
6983 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 return ;
6985}
Jeff Johnson295189b2012-06-20 16:38:30 -07006986/*
6987 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6988 * Request to WDI to Update the EDCA params.
6989 */
6990VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6991 tEdcaParams *pEdcaParams)
6992{
6993 WDI_Status status = WDI_STATUS_SUCCESS ;
6994 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6995 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6996 sizeof(WDI_UpdateEDCAParamsType)) ;
6997 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 if(NULL == wdiEdcaParam)
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007005 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 return VOS_STATUS_E_NOMEM;
7007 }
7008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7009 if(NULL == pWdaParams)
7010 {
7011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 VOS_ASSERT(0);
7014 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007015 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007016 return VOS_STATUS_E_NOMEM;
7017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007019 /*
7020 Since firmware is not using highperformance flag, we have removed
7021 this flag from wdiEDCAInfo structure to match sizeof the structure
7022 between host and firmware.In future if we are planning to use
7023 highperformance flag then Please define this flag in wdiEDCAInfo
7024 structure, update it here and send it to firmware. i.e.
7025 Following is the original line which we removed as part of the fix
7026 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7027 pEdcaParams->highPerformance;
7028 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7030 &pEdcaParams->acbe);
7031 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7032 &pEdcaParams->acbk);
7033 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7034 &pEdcaParams->acvi);
7035 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7036 &pEdcaParams->acvo);
7037 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 pWdaParams->pWdaContext = pWDA;
7039 /* Store remove key pointer, as this will be used for response */
7040 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 /* store Params pass it to WDI */
7042 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7044 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 if(IS_WDI_STATUS_FAILURE(status))
7046 {
7047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7048 "Failure in Update EDCA Params WDI API, free all the memory " );
7049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7050 vos_mem_free(pWdaParams);
7051 vos_mem_free(pEdcaParams);
7052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 return CONVERT_WDI2VOS_STATUS(status) ;
7054}
Jeff Johnson295189b2012-06-20 16:38:30 -07007055/*
7056 * FUNCTION: WDA_AddBAReqCallback
7057 * send ADD BA RSP back to PE
7058 */
7059void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7060 void* pUserData)
7061{
7062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7063 tWDA_CbContext *pWDA;
7064 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007066 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307067 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 {
7069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 VOS_ASSERT(0) ;
7072 return ;
7073 }
7074 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307075 if (NULL == pWDA)
7076 {
7077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7078 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7080 vos_mem_free(pWdaParams->wdaMsgParam);
7081 vos_mem_free(pWdaParams);
7082
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307083 VOS_ASSERT(0);
7084 return ;
7085 }
7086
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7089 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007090 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 return ;
7093}
7094
Jeff Johnson295189b2012-06-20 16:38:30 -07007095/*
7096 * FUNCTION: WDA_ProcessAddBAReq
7097 * Request to WDI to Update the ADDBA REQ params.
7098 */
7099VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307100 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007101{
Jeff Johnson43971f52012-07-17 12:26:56 -07007102 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7104 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7105 sizeof(WDI_AddBAReqParamsType)) ;
7106 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007108 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 if(NULL == wdiAddBAReqParam)
7110 {
7111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 VOS_ASSERT(0);
7114 return VOS_STATUS_E_NOMEM;
7115 }
7116 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7117 if(NULL == pWdaParams)
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 vos_mem_free(wdiAddBAReqParam);
7123 return VOS_STATUS_E_NOMEM;
7124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 do
7126 {
7127 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 wdiAddBaInfo->ucSTAIdx = staIdx ;
7129 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307130 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 } while(0) ;
7132 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 pWdaParams->pWdaContext = pWDA;
7134 /* store Params pass it to WDI */
7135 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7136 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007137 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7138 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139
Jeff Johnson43971f52012-07-17 12:26:56 -07007140 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007143 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7144 status = CONVERT_WDI2VOS_STATUS(wstatus);
7145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 vos_mem_free(pWdaParams);
7147 pAddBAReqParams->status = eSIR_FAILURE;
7148 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7149 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007150 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007151}
Jeff Johnson295189b2012-06-20 16:38:30 -07007152/*
7153 * FUNCTION: WDA_AddBASessionReqCallback
7154 * send ADD BA SESSION RSP back to PE/(or TL)
7155 */
7156void WDA_AddBASessionReqCallback(
7157 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7158{
7159 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307161 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 if(NULL == pWdaParams)
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007168 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 VOS_ASSERT(0) ;
7170 return ;
7171 }
7172 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307173 if (NULL == pWDA)
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7176 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7178 vos_mem_free(pWdaParams->wdaMsgParam);
7179 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307180 VOS_ASSERT(0);
7181 return ;
7182 }
7183
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 if( NULL == pAddBAReqParams )
7186 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007188 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 return ;
7193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7195 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007196 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307197 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 * another request to HAL(/WDI) (ADD_BA_REQ)
7199 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 if((VOS_STATUS_SUCCESS ==
7201 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307202 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 {
7204 /* Update TL with BA info received from HAL/WDI */
7205 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7206 wdiAddBaSession->usBaSessionID,
7207 wdiAddBaSession->ucSTAIdx,
7208 wdiAddBaSession->ucBaTID,
7209 wdiAddBaSession->ucBaBufferSize,
7210 wdiAddBaSession->ucWinSize,
7211 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007212 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307213 wdiAddBaSession->ucSTAIdx,
7214 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 }
7216 else
7217 {
7218 pAddBAReqParams->status =
7219 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7220
7221 /* Setting Flag to indicate that Set BA is success */
7222 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7223 {
7224 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7225 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7226 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 /*Reset the WDA state to READY */
7231 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 return ;
7233}
7234
Jeff Johnson295189b2012-06-20 16:38:30 -07007235/*
7236 * FUNCTION: WDA_ProcessAddBASessionReq
7237 * Request to WDI to Update the ADDBA REQ params.
7238 */
7239VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7240 tAddBAParams *pAddBAReqParams)
7241{
7242 WDI_Status status = WDI_STATUS_SUCCESS ;
7243 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7244 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7245 sizeof(WDI_AddBASessionReqParamsType)) ;
7246 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007247 WLANTL_STAStateType tlSTAState = 0;
7248
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007250 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 if(NULL == wdiAddBASessionReqParam)
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 VOS_ASSERT(0);
7256 return VOS_STATUS_E_NOMEM;
7257 }
7258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7259 if(NULL == pWdaParams)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 VOS_ASSERT(0);
7264 vos_mem_free(wdiAddBASessionReqParam);
7265 return VOS_STATUS_E_NOMEM;
7266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 /*
7268 * Populate ADD BA parameters and pass these paarmeters to WDI.
7269 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7270 * the state to track if these is BA recipient case or BA initiator
7271 * case.
7272 */
7273 do
7274 {
7275 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7276 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7277 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7278 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7279 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7280 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7281 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7284 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7285 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7286 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7287 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307288
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 }while(0) ;
7290 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 pWdaParams->pWdaContext = pWDA;
7292 /* Store ADD BA pointer, as this will be used for response */
7293 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7294 /* store Params pass it to WDI */
7295 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007296
7297 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7298 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7299 */
7300 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7301 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7302 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007304 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007305 status = WDI_STATUS_E_NOT_ALLOWED;
7306 pAddBAReqParams->status =
7307 CONVERT_WDI2SIR_STATUS(status) ;
7308 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7309 /*Reset the WDA state to READY */
7310 pWDA->wdaState = WDA_READY_STATE;
7311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7312 vos_mem_free(pWdaParams);
7313
7314 return CONVERT_WDI2VOS_STATUS(status) ;
7315 }
7316
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7318 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 if(IS_WDI_STATUS_FAILURE(status))
7320 {
7321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007322 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007324 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007325 pAddBAReqParams->status =
7326 CONVERT_WDI2SIR_STATUS(status) ;
7327 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007328 /*Reset the WDA state to READY */
7329 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 vos_mem_free(pWdaParams);
7332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007334}
Jeff Johnson295189b2012-06-20 16:38:30 -07007335/*
7336 * FUNCTION: WDA_DelBANotifyTL
7337 * send DEL BA IND to TL
7338 */
7339void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7340 tDelBAParams *pDelBAReqParams)
7341{
7342 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7343 //tSirMsgQ msg;
7344 vos_msg_t vosMsg;
7345 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 if(NULL == pDelBAInd)
7347 {
7348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 VOS_ASSERT(0) ;
7351 return;
7352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7354 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7355 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7356 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007357
Jeff Johnson295189b2012-06-20 16:38:30 -07007358
7359 vosMsg.type = WDA_DELETEBA_IND;
7360 vosMsg.bodyptr = pDelBAInd;
7361 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7362 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7363 {
7364 vosStatus = VOS_STATUS_E_BADMSG;
7365 }
7366}
Jeff Johnson295189b2012-06-20 16:38:30 -07007367/*
7368 * FUNCTION: WDA_DelBAReqCallback
7369 * send DEL BA RSP back to PE
7370 */
7371void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7372{
7373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7374 tWDA_CbContext *pWDA;
7375 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007377 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 if(NULL == pWdaParams)
7379 {
7380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007381 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 VOS_ASSERT(0) ;
7383 return ;
7384 }
7385 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307386
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 /* Notify TL about DEL BA in case of recipinet */
7389 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7390 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7391 {
7392 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 /*
7395 * No respone required for WDA_DELBA_IND so just free the request
7396 * param here
7397 */
7398 vos_mem_free(pDelBAReqParams);
7399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7400 vos_mem_free(pWdaParams);
7401 return ;
7402}
7403
Jeff Johnson295189b2012-06-20 16:38:30 -07007404/*
7405 * FUNCTION: WDA_ProcessDelBAReq
7406 * Request to WDI to Update the DELBA REQ params.
7407 */
7408VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7409 tDelBAParams *pDelBAReqParams)
7410{
7411 WDI_Status status = WDI_STATUS_SUCCESS ;
7412 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7413 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7414 sizeof(WDI_DelBAReqParamsType)) ;
7415 tWDA_ReqParams *pWdaParams ;
7416 tANI_U16 staIdx = 0;
7417 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 if(NULL == wdiDelBAReqParam)
7421 {
7422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_ASSERT(0);
7425 return VOS_STATUS_E_NOMEM;
7426 }
7427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7428 if(NULL == pWdaParams)
7429 {
7430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 VOS_ASSERT(0);
7433 vos_mem_free(wdiDelBAReqParam);
7434 return VOS_STATUS_E_NOMEM;
7435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7437 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7438 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7439 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 pWdaParams->pWdaContext = pWDA;
7441 /* Store DEL BA pointer, as this will be used for response */
7442 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 /* store Params pass it to WDI */
7444 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7446 * maintained in WDA, so that WDA can retry for another BA session
7447 */
7448 staIdx = pDelBAReqParams->staIdx;
7449 tid = pDelBAReqParams->baTID;
7450 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 status = WDI_DelBAReq(wdiDelBAReqParam,
7452 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 if(IS_WDI_STATUS_FAILURE(status))
7454 {
7455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7456 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7458 vos_mem_free(pWdaParams->wdaMsgParam);
7459 vos_mem_free(pWdaParams);
7460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007462}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007463
7464/*
7465 * FUNCTION: WDA_UpdateChReqCallback
7466 *
7467 */
7468void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7469{
Siddharth Bhala006c122014-05-03 12:13:27 +05307470 tWDA_ReqParams *pWdaParams;
7471 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7472 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7473 WDI_UpdateChannelReqinfoType *pChanInfoType;
7474 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007475
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7477 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307478 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007479 {
7480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307481 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007482 VOS_ASSERT(0);
7483 return;
7484 }
7485
Siddharth Bhala006c122014-05-03 12:13:27 +05307486 pWdaParams = (tWDA_ReqParams *)pUserData;
7487 pwdiUpdateChReqParam =
7488 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7489 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7490 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7491 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007492 /*
7493 * currently there is no response message is expected between PE and
7494 * WDA, Failure return from WDI is a ASSERT condition
7495 */
7496 vos_mem_free(pChanInfoType);
7497 vos_mem_free(pChanList);
7498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7499 vos_mem_free(pWdaParams);
7500
7501 return;
7502}
7503
7504/*
7505 * FUNCTION: WDA_ProcessUpdateChannelList
7506 * Request to WDI to Update the ChannelList params.
7507 */
7508VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7509 tSirUpdateChanList *pChanList)
7510{
7511 WDI_Status status = WDI_STATUS_SUCCESS;
7512 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7513 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7514 WDI_UpdateChannelReqinfoType *pChanInfoType;
7515 tWDA_ReqParams *pWdaParams;
7516 wpt_uint8 i;
7517
7518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7519 "------> %s " ,__func__);
7520 if(NULL == pChanList)
7521 {
7522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7523 "%s: NULL pChanList", __func__);
7524 VOS_ASSERT(0);
7525 return VOS_STATUS_E_INVAL;
7526 }
7527
7528 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7529 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307530 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007531 "Update channel list capability Not Supported");
7532 vos_mem_free(pChanList);
7533 return VOS_STATUS_E_INVAL;
7534 }
7535
7536 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7537 sizeof(WDI_UpdateChReqParamsType));
7538 if(NULL == pwdiUpdateChReqParam)
7539 {
7540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7541 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7542 __func__);
7543 VOS_ASSERT(0);
7544 vos_mem_free(pChanList);
7545 return VOS_STATUS_E_NOMEM;
7546 }
7547 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7548 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7549 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7550 pChanList->numChan);
7551 if(NULL == pChanInfoType)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7554 "%s: VOS MEM Alloc Failure", __func__);
7555 VOS_ASSERT(0);
7556 vos_mem_free(pChanList);
7557 vos_mem_free(pwdiUpdateChReqParam);
7558 return VOS_STATUS_E_NOMEM;
7559 }
7560 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7561 * pChanList->numChan);
7562 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7563
7564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7565 if(NULL == pWdaParams)
7566 {
7567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7568 "%s: VOS MEM Alloc Failure", __func__);
7569 VOS_ASSERT(0);
7570 vos_mem_free(pChanList);
7571 vos_mem_free(pChanInfoType);
7572 vos_mem_free(pwdiUpdateChReqParam);
7573 return VOS_STATUS_E_NOMEM;
7574 }
7575 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7576
7577 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7578 {
7579 pChanInfoType->mhz =
7580 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7581
7582 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7583 pChanInfoType->band_center_freq2 = 0;
7584
7585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7586 "chan[%d] = %u", i, pChanInfoType->mhz);
7587 if (pChanList->chanParam[i].dfsSet)
7588 {
7589 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7591 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7592 pChanList->chanParam[i].dfsSet);
7593 }
7594
7595 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7596 {
7597 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7598 }
7599 else
7600 {
7601 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7602 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7603 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7604 }
7605
7606 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7607 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307608 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007609 pChanInfoType++;
7610 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007611 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7612 pWdaParams->pWdaContext = pWDA;
7613 pWdaParams->wdaMsgParam = (void *)pChanList;
7614 /* store Params pass it to WDI */
7615 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7616 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7617 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7618 if(IS_WDI_STATUS_FAILURE(status))
7619 {
7620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7621 "Failure in Update Channel REQ Params WDI API, free all the memory");
7622 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7623 vos_mem_free(pwdiUpdateChReqParam);
7624 vos_mem_free(pWdaParams->wdaMsgParam);
7625 vos_mem_free(pWdaParams);
7626 }
7627 return CONVERT_WDI2VOS_STATUS(status);
7628}
7629
Jeff Johnson295189b2012-06-20 16:38:30 -07007630/*
7631 * FUNCTION: WDA_AddTSReqCallback
7632 * send ADD TS RSP back to PE
7633 */
7634void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7635{
7636 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307637 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007638 tAddTsParams *pAddTsReqParams;
7639
7640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007641 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007642 if(NULL == pWdaParams)
7643 {
7644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007645 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 VOS_ASSERT(0) ;
7647 return ;
7648 }
7649 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307650 if (NULL == pWDA)
7651 {
7652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7653 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7655 vos_mem_free(pWdaParams->wdaMsgParam);
7656 vos_mem_free(pWdaParams);
7657
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307658 VOS_ASSERT(0);
7659 return ;
7660 }
7661
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7664 vos_mem_free(pWdaParams);
7665
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007666 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007668 return ;
7669}
7670
Jeff Johnson295189b2012-06-20 16:38:30 -07007671/*
7672 * FUNCTION: WDA_ProcessAddTSReq
7673 * Request to WDI to Update the ADD TS REQ params.
7674 */
7675VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7676 tAddTsParams *pAddTsReqParams)
7677{
7678 WDI_Status status = WDI_STATUS_SUCCESS ;
7679 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7680 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7681 sizeof(WDI_AddTSReqParamsType)) ;
7682 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007684 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 if(NULL == wdiAddTSReqParam)
7686 {
7687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 VOS_ASSERT(0);
7690 return VOS_STATUS_E_NOMEM;
7691 }
7692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7693 if(NULL == pWdaParams)
7694 {
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 VOS_ASSERT(0);
7698 vos_mem_free(wdiAddTSReqParam);
7699 return VOS_STATUS_E_NOMEM;
7700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007701 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7702 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 //TS IE
7704 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7705 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7706 pAddTsReqParams->tspec.length;
7707
7708 //TS IE : TS INFO : TRAFFIC
7709 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7710 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7711 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7712 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7713 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7714 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7715 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7716 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7717 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7718 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7719 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7720 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7721 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7722 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7723 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7724 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7725
7726 //TS IE : TS INFO : SCHEDULE
7727 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7728 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7729 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7730 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 //TS IE
7732 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7733 pAddTsReqParams->tspec.nomMsduSz;
7734 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7735 pAddTsReqParams->tspec.maxMsduSz;
7736 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7737 pAddTsReqParams->tspec.minSvcInterval;
7738 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7739 pAddTsReqParams->tspec.maxSvcInterval;
7740 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7741 pAddTsReqParams->tspec.inactInterval;
7742 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7743 pAddTsReqParams->tspec.suspendInterval;
7744 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7745 pAddTsReqParams->tspec.svcStartTime;
7746 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7747 pAddTsReqParams->tspec.minDataRate;
7748 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7749 pAddTsReqParams->tspec.meanDataRate;
7750 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7751 pAddTsReqParams->tspec.peakDataRate;
7752 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7753 pAddTsReqParams->tspec.maxBurstSz;
7754 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7755 pAddTsReqParams->tspec.delayBound;
7756 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7757 pAddTsReqParams->tspec.minPhyRate;
7758 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7759 pAddTsReqParams->tspec.surplusBw;
7760 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7761 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 /* TODO: tAddTsParams doesn't have the following fields */
7763#if 0
7764 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7765 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7766 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7767 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7768#endif
7769 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7770
7771 pWdaParams->pWdaContext = pWDA;
7772 /* Store ADD TS pointer, as this will be used for response */
7773 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 /* store Params pass it to WDI */
7775 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 status = WDI_AddTSReq(wdiAddTSReqParam,
7777 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 if(IS_WDI_STATUS_FAILURE(status))
7779 {
7780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7781 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7783 vos_mem_free(pWdaParams);
7784 pAddTsReqParams->status = eSIR_FAILURE ;
7785 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007788}
7789
Jeff Johnson295189b2012-06-20 16:38:30 -07007790/*
7791 * FUNCTION: WDA_DelTSReqCallback
7792 * send DEL TS RSP back to PE
7793 */
7794void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7795{
7796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7800 vos_mem_free(pWdaParams->wdaMsgParam) ;
7801 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 /*
7803 * No respone required for WDA_DEL_TS_REQ so just free the request
7804 * param here
7805 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 return ;
7807}
7808
Jeff Johnson295189b2012-06-20 16:38:30 -07007809/*
7810 * FUNCTION: WDA_ProcessDelTSReq
7811 * Request to WDI to Update the DELTS REQ params.
7812 */
7813VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7814 tDelTsParams *pDelTSReqParams)
7815{
7816 WDI_Status status = WDI_STATUS_SUCCESS ;
7817 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7818 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7819 sizeof(WDI_DelTSReqParamsType)) ;
7820 tWDA_ReqParams *pWdaParams ;
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 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 if(NULL == wdiDelTSReqParam)
7824 {
7825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 VOS_ASSERT(0);
7828 return VOS_STATUS_E_NOMEM;
7829 }
7830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7831 if(NULL == pWdaParams)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_ASSERT(0);
7836 vos_mem_free(wdiDelTSReqParam);
7837 return VOS_STATUS_E_NOMEM;
7838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7840 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7841 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7842 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7843 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 pWdaParams->pWdaContext = pWDA;
7845 /* Store DEL TS pointer, as this will be used for response */
7846 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 /* store Params pass it to WDI */
7848 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 status = WDI_DelTSReq(wdiDelTSReqParam,
7850 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 if(IS_WDI_STATUS_FAILURE(status))
7852 {
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7854 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7856 vos_mem_free(pWdaParams->wdaMsgParam);
7857 vos_mem_free(pWdaParams);
7858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007860}
Jeff Johnson295189b2012-06-20 16:38:30 -07007861/*
7862 * FUNCTION: WDA_UpdateBeaconParamsCallback
7863 * Free the memory. No need to send any response to PE in this case
7864 */
7865void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7866{
7867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 if(NULL == pWdaParams)
7871 {
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007873 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 VOS_ASSERT(0) ;
7875 return ;
7876 }
7877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7878 vos_mem_free(pWdaParams->wdaMsgParam) ;
7879 vos_mem_free(pWdaParams);
7880 /*
7881 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7882 * param here
7883 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 return ;
7885}
Jeff Johnson295189b2012-06-20 16:38:30 -07007886/*
7887 * FUNCTION: WDA_ProcessUpdateBeaconParams
7888 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7889 */
7890VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7891 tUpdateBeaconParams *pUpdateBeaconParams)
7892{
7893 WDI_Status status = WDI_STATUS_SUCCESS ;
7894 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7895 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7896 sizeof(WDI_UpdateBeaconParamsType)) ;
7897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 if(NULL == wdiUpdateBeaconParams)
7901 {
7902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 VOS_ASSERT(0);
7905 return VOS_STATUS_E_NOMEM;
7906 }
7907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7908 if(NULL == pWdaParams)
7909 {
7910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 VOS_ASSERT(0);
7913 vos_mem_free(wdiUpdateBeaconParams);
7914 return VOS_STATUS_E_NOMEM;
7915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7917 pUpdateBeaconParams->bssIdx;
7918 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7919 pUpdateBeaconParams->fShortPreamble;
7920 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7921 pUpdateBeaconParams->fShortSlotTime;
7922 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7923 pUpdateBeaconParams->beaconInterval;
7924 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7925 pUpdateBeaconParams->llaCoexist;
7926 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7927 pUpdateBeaconParams->llbCoexist;
7928 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7929 pUpdateBeaconParams->llgCoexist;
7930 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7931 pUpdateBeaconParams->ht20MhzCoexist;
7932 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7933 pUpdateBeaconParams->llnNonGFCoexist;
7934 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7935 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7936 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7937 pUpdateBeaconParams->fRIFSMode;
7938 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7939 pUpdateBeaconParams->paramChangeBitmap;
7940 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7941
7942 pWdaParams->pWdaContext = pWDA;
7943 /* Store UpdateBeacon Req pointer, as this will be used for response */
7944 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 /* store Params pass it to WDI */
7946 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7948 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7949 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 if(IS_WDI_STATUS_FAILURE(status))
7951 {
7952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7953 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7955 vos_mem_free(pWdaParams->wdaMsgParam);
7956 vos_mem_free(pWdaParams);
7957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007959}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007960#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007961/*
7962 * FUNCTION: WDA_TSMStatsReqCallback
7963 * send TSM Stats RSP back to PE
7964 */
7965void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7966{
7967 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7968 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007969 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7970 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971
7972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007973 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 if(NULL == pWdaParams)
7975 {
7976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007977 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 VOS_ASSERT(0) ;
7979 return ;
7980 }
7981 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307982 if (NULL == pWDA)
7983 {
7984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7985 "%s:pWDA is NULL", __func__);
7986 VOS_ASSERT(0);
7987 return ;
7988 }
7989
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007990 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7991
7992 if(NULL == pGetTsmStatsReqParams)
7993 {
7994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7995 "%s: pGetTsmStatsReqParams received NULL", __func__);
7996 VOS_ASSERT(0);
7997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7998 vos_mem_free(pWdaParams);
7999 return;
8000 }
8001
8002 pTsmRspParams =
8003 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 if( NULL == pTsmRspParams )
8005 {
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 VOS_ASSERT( 0 );
8009 return ;
8010 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008011 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8012 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8013 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8014
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8016 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8017 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8018 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8019 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8020 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8021 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8022 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8023 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8024 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008025
8026 /* Assign get tsm stats req req (backup) in to the response */
8027 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8028
8029 /* free WDI command buffer */
8030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8031 vos_mem_free(pWdaParams);
8032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 return ;
8035}
8036
8037
Jeff Johnson295189b2012-06-20 16:38:30 -07008038/*
8039 * FUNCTION: WDA_ProcessTsmStatsReq
8040 * Request to WDI to get the TSM Stats params.
8041 */
8042VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008043 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008044{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008045 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008047 tWDA_ReqParams *pWdaParams = NULL;
8048 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8049
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008051 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8053 sizeof(WDI_TSMStatsReqParamsType));
8054 if(NULL == wdiTSMReqParam)
8055 {
8056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 VOS_ASSERT(0);
8059 return VOS_STATUS_E_NOMEM;
8060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8062 if(NULL == pWdaParams)
8063 {
8064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 VOS_ASSERT(0);
8067 vos_mem_free(wdiTSMReqParam);
8068 return VOS_STATUS_E_NOMEM;
8069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8071 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8072 pTsmStats->bssId,
8073 sizeof(wpt_macAddr));
8074 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8075
8076 pWdaParams->pWdaContext = pWDA;
8077 /* Store TSM Stats pointer, as this will be used for response */
8078 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008079 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 status = WDI_TSMStatsReq(wdiTSMReqParam,
8081 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 if(IS_WDI_STATUS_FAILURE(status))
8083 {
8084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8085 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008086 vos_mem_free(pWdaParams);
8087
8088 pGetTsmStatsRspParams =
8089 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8090 if(NULL == pGetTsmStatsRspParams)
8091 {
8092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8093 "%s: VOS MEM Alloc Failure", __func__);
8094 VOS_ASSERT(0);
8095 vos_mem_free(pTsmStats);
8096 return VOS_STATUS_E_NOMEM;
8097 }
8098 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8099 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8100 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8101
8102 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 return CONVERT_WDI2VOS_STATUS(status) ;
8105}
8106#endif
8107/*
8108 * FUNCTION: WDA_SendBeaconParamsCallback
8109 * No need to send any response to PE in this case
8110 */
8111void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8112{
8113
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008115 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 return ;
8117}
Jeff Johnson295189b2012-06-20 16:38:30 -07008118/*
8119 * FUNCTION: WDA_ProcessSendBeacon
8120 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8121 * start beacon trasmission
8122 */
8123VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8124 tSendbeaconParams *pSendbeaconParams)
8125{
8126 WDI_Status status = WDI_STATUS_SUCCESS ;
8127 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008129 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8131 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8132 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8133 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8135 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308136 /* p2pIeOffset should be atleast greater than timIeOffset */
8137 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8138 (pSendbeaconParams->p2pIeOffset <
8139 pSendbeaconParams->timIeOffset))
8140 {
8141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8142 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308143 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308144 VOS_ASSERT( 0 );
8145 return WDI_STATUS_E_FAILURE;
8146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8148 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 /* Copy the beacon template to local buffer */
8150 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8151 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8152 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8153
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8155 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 if(IS_WDI_STATUS_FAILURE(status))
8157 {
8158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8159 "Failure in SEND BEACON REQ Params WDI API" );
8160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 vos_mem_free(pSendbeaconParams);
8162 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008163}
Jeff Johnson295189b2012-06-20 16:38:30 -07008164/*
8165 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8166 * No need to send any response to PE in this case
8167 */
8168void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8169{
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 return ;
8173}
8174
Jeff Johnson295189b2012-06-20 16:38:30 -07008175/*
8176 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8177 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8178 * send probe response
8179 */
8180VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8181 tSendProbeRespParams *pSendProbeRspParams)
8182{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008183 WDI_Status status = WDI_STATUS_SUCCESS;
8184 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8185 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008187 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008188
8189 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308190 {
8191 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008192 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308193 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008194
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008196 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008198 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 /* Copy the Probe Response template to local buffer */
8201 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008202 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 pSendProbeRspParams->pProbeRespTemplate,
8204 pSendProbeRspParams->probeRespTemplateLen);
8205 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008206 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8208 WDI_PROBE_REQ_BITMAP_IE_LEN);
8209
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008210 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008211
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008212 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 if(IS_WDI_STATUS_FAILURE(status))
8215 {
8216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "Failure in SEND Probe RSP Params WDI API" );
8218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008220 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008222}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008223#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008224/*
8225 * FUNCTION: WDA_SetMaxTxPowerCallBack
8226 * send the response to PE with power value received from WDI
8227 */
8228void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8229 void* pUserData)
8230{
8231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8232 tWDA_CbContext *pWDA = NULL;
8233 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8234
8235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 if(NULL == pWdaParams)
8238 {
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 VOS_ASSERT(0) ;
8242 return ;
8243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308245 if (NULL == pWDA)
8246 {
8247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8248 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8250 vos_mem_free(pWdaParams->wdaMsgParam);
8251 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308252 VOS_ASSERT(0);
8253 return ;
8254 }
8255
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 if( NULL == pMaxTxPowerParams )
8258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008260 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008261 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8263 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 return ;
8265 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008266
Jeff Johnson295189b2012-06-20 16:38:30 -07008267
8268 /*need to free memory for the pointers used in the
8269 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8271 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008273
Jeff Johnson295189b2012-06-20 16:38:30 -07008274
8275 /* send response to UMAC*/
8276 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8277
8278 return;
8279}
Jeff Johnson295189b2012-06-20 16:38:30 -07008280/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008281 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 * Request to WDI to send set Max Tx Power Request
8283 */
8284 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8285 tMaxTxPowerParams *MaxTxPowerParams)
8286{
8287 WDI_Status status = WDI_STATUS_SUCCESS;
8288 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8289 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008290
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008292 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008293
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8295 sizeof(WDI_SetMaxTxPowerParamsType));
8296 if(NULL == wdiSetMaxTxPowerParams)
8297 {
8298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 VOS_ASSERT(0);
8301 return VOS_STATUS_E_NOMEM;
8302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8304 if(NULL == pWdaParams)
8305 {
8306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 vos_mem_free(wdiSetMaxTxPowerParams);
8309 VOS_ASSERT(0);
8310 return VOS_STATUS_E_NOMEM;
8311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 /* Copy.Max.Tx.Power Params to WDI structure */
8313 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8314 MaxTxPowerParams->bssId,
8315 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008316 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8317 MaxTxPowerParams->selfStaMacAddr,
8318 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8320 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 pWdaParams->pWdaContext = pWDA;
8323 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 /* store Params pass it to WDI */
8325 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8327 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 if(IS_WDI_STATUS_FAILURE(status))
8329 {
8330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8331 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8333 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008334 /* send response to UMAC*/
8335 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 }
8337 return CONVERT_WDI2VOS_STATUS(status);
8338
8339}
Jeff Johnson295189b2012-06-20 16:38:30 -07008340#endif
schang86c22c42013-03-13 18:41:24 -07008341
8342/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008343 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8344 * send the response to PE with power value received from WDI
8345 */
8346void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8347 *pwdiSetMaxTxPowerPerBandRsp,
8348 void* pUserData)
8349{
8350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8351 tWDA_CbContext *pWDA = NULL;
8352 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8353
8354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8355 "<------ %s ", __func__);
8356 if (NULL == pWdaParams)
8357 {
8358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8359 "%s: pWdaParams received NULL", __func__);
8360 VOS_ASSERT(0);
8361 return ;
8362 }
8363 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308364 if (NULL == pWDA)
8365 {
8366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8367 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8369 vos_mem_free(pWdaParams->wdaMsgParam);
8370 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308371 VOS_ASSERT(0);
8372 return ;
8373 }
8374
Arif Hussaina5ebce02013-08-09 15:09:58 -07008375 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8376 if ( NULL == pMxTxPwrPerBandParams )
8377 {
8378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8379 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8380 VOS_ASSERT(0);
8381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8382 vos_mem_free(pWdaParams);
8383 return;
8384 }
8385
8386 /*need to free memory for the pointers used in the
8387 WDA Process.Set Max Tx Power Req function*/
8388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8389 vos_mem_free(pWdaParams);
8390 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8391
8392 /* send response to UMAC*/
8393 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8394 pMxTxPwrPerBandParams, 0);
8395
8396 return;
8397}
8398
8399/*
8400 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8401 * Request to WDI to send set Max Tx Power Per band Request
8402 */
8403 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8404 tMaxTxPowerPerBandParams
8405 *MaxTxPowerPerBandParams)
8406{
8407 WDI_Status status = WDI_STATUS_SUCCESS;
8408 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8409 tWDA_ReqParams *pWdaParams = NULL;
8410
8411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8412 "------> %s ", __func__);
8413
8414 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8415 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8416
8417 if (NULL == wdiSetMxTxPwrPerBandParams)
8418 {
8419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8420 "%s: VOS MEM Alloc Failure", __func__);
8421 VOS_ASSERT(0);
8422 return VOS_STATUS_E_NOMEM;
8423 }
8424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8425 if (NULL == pWdaParams)
8426 {
8427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8428 "%s: VOS MEM Alloc Failure", __func__);
8429 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8430 VOS_ASSERT(0);
8431 return VOS_STATUS_E_NOMEM;
8432 }
8433 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8434 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8435 MaxTxPowerPerBandParams->bandInfo;
8436 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8437 MaxTxPowerPerBandParams->power;
8438 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8439 pWdaParams->pWdaContext = pWDA;
8440 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8441 /* store Params pass it to WDI */
8442 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8443 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8444 WDA_SetMaxTxPowerPerBandCallBack,
8445 pWdaParams);
8446 if (IS_WDI_STATUS_FAILURE(status))
8447 {
8448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8449 "Failure in SET MAX TX Power REQ Params WDI API,"
8450 " free all the memory");
8451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8452 vos_mem_free(pWdaParams);
8453 /* send response to UMAC*/
8454 WDA_SendMsg(pWDA,
8455 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8456 MaxTxPowerPerBandParams, 0);
8457 }
8458 return CONVERT_WDI2VOS_STATUS(status);
8459}
8460
8461/*
schang86c22c42013-03-13 18:41:24 -07008462 * FUNCTION: WDA_SetTxPowerCallBack
8463 * send the response to PE with power value received from WDI
8464 */
8465void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8466 void* pUserData)
8467{
8468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8469 tWDA_CbContext *pWDA = NULL;
8470 tSirSetTxPowerReq *pTxPowerParams = NULL;
8471
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8473 "<------ %s ", __func__);
8474 if(NULL == pWdaParams)
8475 {
8476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8477 "%s: pWdaParams received NULL", __func__);
8478 VOS_ASSERT(0) ;
8479 return ;
8480 }
8481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308482 if (NULL == pWDA)
8483 {
8484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8485 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8487 vos_mem_free(pWdaParams->wdaMsgParam);
8488 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308489 VOS_ASSERT(0);
8490 return ;
8491 }
8492
schang86c22c42013-03-13 18:41:24 -07008493 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8494 if(NULL == pTxPowerParams)
8495 {
8496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8497 "%s: pTxPowerParams received NULL " ,__func__);
8498 VOS_ASSERT(0);
8499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8500 vos_mem_free(pWdaParams);
8501 return ;
8502 }
8503
8504 /*need to free memory for the pointers used in the
8505 WDA Process.Set Max Tx Power Req function*/
8506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8507 vos_mem_free(pWdaParams);
8508
8509 /* send response to UMAC*/
8510 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8511 return;
8512}
8513
8514/*
8515 * FUNCTION: WDA_ProcessSetTxPowerReq
8516 * Request to WDI to send set Tx Power Request
8517 */
8518 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8519 tSirSetTxPowerReq *txPowerParams)
8520{
8521 WDI_Status status = WDI_STATUS_SUCCESS;
8522 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8523 tWDA_ReqParams *pWdaParams = NULL;
8524
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8526 "------> %s ", __func__);
8527
8528 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8529 sizeof(WDI_SetTxPowerParamsType));
8530 if(NULL == wdiSetTxPowerParams)
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8533 "%s: VOS MEM Alloc Failure", __func__);
8534 VOS_ASSERT(0);
8535 return VOS_STATUS_E_NOMEM;
8536 }
8537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8538 if(NULL == pWdaParams)
8539 {
8540 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8541 "%s: VOS MEM Alloc Failure", __func__);
8542 vos_mem_free(wdiSetTxPowerParams);
8543 VOS_ASSERT(0);
8544 return VOS_STATUS_E_NOMEM;
8545 }
8546 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8547 txPowerParams->bssIdx;
8548 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8549 txPowerParams->mwPower;
8550 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8551 pWdaParams->pWdaContext = pWDA;
8552 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8553 /* store Params pass it to WDI */
8554 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8555 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8556 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8557 if(IS_WDI_STATUS_FAILURE(status))
8558 {
8559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8560 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8562 vos_mem_free(pWdaParams);
8563 /* send response to UMAC*/
8564 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8565 }
8566 return CONVERT_WDI2VOS_STATUS(status);
8567}
8568
Jeff Johnson295189b2012-06-20 16:38:30 -07008569/*
8570 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8571 * Free the memory. No need to send any response to PE in this case
8572 */
8573void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8574{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8576
Jeff Johnson295189b2012-06-20 16:38:30 -07008577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008578 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008579
8580 if(NULL == pWdaParams)
8581 {
8582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008583 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008584 VOS_ASSERT(0) ;
8585 return ;
8586 }
8587
8588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8589 vos_mem_free(pWdaParams->wdaMsgParam) ;
8590 vos_mem_free(pWdaParams);
8591
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 /*
8593 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8594 * so just free the request param here
8595 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008596 return ;
8597}
8598
Jeff Johnson295189b2012-06-20 16:38:30 -07008599/*
8600 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8601 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8602 */
8603VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8604 tP2pPsParams *pP2pPsConfigParams)
8605{
8606 WDI_Status status = WDI_STATUS_SUCCESS ;
8607 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8608 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8609 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008610 tWDA_ReqParams *pWdaParams = NULL;
8611
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008613 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008614 if(NULL == wdiSetP2PGONOAReqParam)
8615 {
8616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008617 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308618 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 VOS_ASSERT(0);
8620 return VOS_STATUS_E_NOMEM;
8621 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008622
8623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8624 if(NULL == pWdaParams)
8625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008627 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008628 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008629 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008630 VOS_ASSERT(0);
8631 return VOS_STATUS_E_NOMEM;
8632 }
8633
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8635 pP2pPsConfigParams->opp_ps;
8636 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8637 pP2pPsConfigParams->ctWindow;
8638 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8639 pP2pPsConfigParams->count;
8640 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8641 pP2pPsConfigParams->duration;
8642 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8643 pP2pPsConfigParams->interval;
8644 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8645 pP2pPsConfigParams->single_noa_duration;
8646 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8647 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008648
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8650 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8652
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008654 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8655 pWdaParams->pWdaContext = pWDA;
8656
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008658 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8659
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 if(IS_WDI_STATUS_FAILURE(status))
8661 {
8662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8663 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8665 vos_mem_free(pWdaParams->wdaMsgParam);
8666 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 return CONVERT_WDI2VOS_STATUS(status);
8669
Jeff Johnson295189b2012-06-20 16:38:30 -07008670}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308671
8672#ifdef FEATURE_WLAN_TDLS
8673/*
8674 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8675 * Free the memory. No need to send any response to PE in this case
8676 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308677void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8678 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308679{
8680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8681 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308682 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308683
8684
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8686 "<------ %s " ,__func__);
8687 if(NULL == pWdaParams)
8688 {
8689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8690 "%s: pWdaParams received NULL", __func__);
8691 VOS_ASSERT(0) ;
8692 return ;
8693 }
8694 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8695
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308696 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308697 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8699 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8701 vos_mem_free(pWdaParams->wdaMsgParam);
8702 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308703 VOS_ASSERT(0);
8704 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308705 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308706
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308707 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8708 if( NULL == pTdlsLinkEstablishParams )
8709 {
8710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8711 "%s: pTdlsLinkEstablishParams "
8712 "received NULL " ,__func__);
8713 VOS_ASSERT(0);
8714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8715 vos_mem_free(pWdaParams);
8716 return ;
8717 }
8718 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8719 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308721 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308722 /* send response to UMAC*/
8723 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8724
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308725 return ;
8726}
8727
8728VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8729 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8730{
8731 WDI_Status status = WDI_STATUS_SUCCESS ;
8732 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8733 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8734 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8735 tWDA_ReqParams *pWdaParams = NULL;
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8737 "------> %s " ,__func__);
8738 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8739 {
8740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8741 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308742 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308743 VOS_ASSERT(0);
8744 return VOS_STATUS_E_NOMEM;
8745 }
8746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8747 if(NULL == pWdaParams)
8748 {
8749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8750 "%s: VOS MEM Alloc Failure", __func__);
8751 vos_mem_free(pTdlsLinkEstablishParams);
8752 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8753 VOS_ASSERT(0);
8754 return VOS_STATUS_E_NOMEM;
8755 }
8756 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308757 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308758 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308759 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308760 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308761 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308762 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308763 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308764 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308765 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308766 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8767 pTdlsLinkEstablishParams->isOffChannelSupported;
8768
8769 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8770 pTdlsLinkEstablishParams->validChannels,
8771 pTdlsLinkEstablishParams->validChannelsLen);
8772
8773 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8774 pTdlsLinkEstablishParams->validChannelsLen;
8775
8776 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8777 pTdlsLinkEstablishParams->validOperClasses,
8778 pTdlsLinkEstablishParams->validOperClassesLen);
8779 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8780 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308781
8782 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8783 /* Store msg pointer from PE, as this will be used for response */
8784 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8785 /* store Params pass it to WDI */
8786 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8787 pWdaParams->pWdaContext = pWDA;
8788
8789 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8790 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8791 WDA_SetTDLSLinkEstablishReqParamsCallback,
8792 pWdaParams);
8793 if(IS_WDI_STATUS_FAILURE(status))
8794 {
8795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8796 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8798 vos_mem_free(pWdaParams->wdaMsgParam);
8799 vos_mem_free(pWdaParams);
8800 }
8801 return CONVERT_WDI2VOS_STATUS(status);
8802}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308803
8804// tdlsoffchan
8805void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8806 void* pUserData)
8807{
8808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8809 tWDA_CbContext *pWDA = NULL;
8810 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8811
8812
8813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8814 "<------ %s " ,__func__);
8815 if(NULL == pWdaParams)
8816 {
8817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8818 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308819 VOS_ASSERT(0) ;
8820 return ;
8821 }
8822 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8823
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308824 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308825 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8827 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8829 vos_mem_free(pWdaParams->wdaMsgParam);
8830 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308831 VOS_ASSERT(0);
8832 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308833 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308834
Atul Mittalc0f739f2014-07-31 13:47:47 +05308835 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308836 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308837 {
8838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8839 "%s: pTdlsChanSwitchParams "
8840 "received NULL " ,__func__);
8841 VOS_ASSERT(0);
8842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8843 vos_mem_free(pWdaParams);
8844 return ;
8845 }
8846 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8847 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8849 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308850 /* send response to UMAC*/
8851 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308852
8853 return ;
8854}
8855VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8856 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8857{
8858 WDI_Status status = WDI_STATUS_SUCCESS ;
8859 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8860 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8861 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8862 tWDA_ReqParams *pWdaParams = NULL;
8863
8864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8865 "Enter: %s ",__func__);
8866 if(NULL == wdiSetTDLSChanSwitchReqParam)
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308870 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308871 VOS_ASSERT(0);
8872 return VOS_STATUS_E_NOMEM;
8873 }
8874
8875 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8876 if(NULL == pWdaParams)
8877 {
8878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8879 "%s: VOS MEM Alloc Failure", __func__);
8880 vos_mem_free(pTdlsChanSwitchParams);
8881 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8882 VOS_ASSERT(0);
8883 return VOS_STATUS_E_NOMEM;
8884 }
8885 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8886 pTdlsChanSwitchParams->staIdx;
8887 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8888 pTdlsChanSwitchParams->tdlsSwMode;
8889 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8890 pTdlsChanSwitchParams->operClass;
8891 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8892 pTdlsChanSwitchParams->tdlsOffCh;
8893 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8894 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8895
8896
8897 /* Store msg pointer from PE, as this will be used for response */
8898 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8899 /* store Params pass it to WDI */
8900 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8901 pWdaParams->pWdaContext = pWDA;
8902 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8903 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8904 WDA_SetTDLSChanSwitchReqParamsCallback,
8905 pWdaParams);
8906 if(IS_WDI_STATUS_FAILURE(status))
8907 {
8908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8909 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8911 vos_mem_free(pWdaParams->wdaMsgParam);
8912 vos_mem_free(pWdaParams);
8913 }
8914 return CONVERT_WDI2VOS_STATUS(status);
8915}
8916#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308917
8918
Jeff Johnson295189b2012-06-20 16:38:30 -07008919#ifdef WLAN_FEATURE_VOWIFI_11R
8920/*
8921 * FUNCTION: WDA_AggrAddTSReqCallback
8922 * send ADD AGGREGATED TS RSP back to PE
8923 */
8924void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8925{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308927 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008928 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008931 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008932 if(NULL == pWdaParams)
8933 {
8934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008935 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008936 VOS_ASSERT(0) ;
8937 return ;
8938 }
8939
8940 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308941 if (NULL == pWDA)
8942 {
8943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8944 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8946 vos_mem_free(pWdaParams->wdaMsgParam);
8947 vos_mem_free(pWdaParams);
8948
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308949 VOS_ASSERT(0);
8950 return ;
8951 }
8952
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008953 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008954
8955 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8956 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008957 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008960
8961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 return ;
8964}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008965/*
8966 * FUNCTION: WDA_ProcessAddTSReq
8967 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8968 */
8969VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8970 tAggrAddTsParams *pAggrAddTsReqParams)
8971{
8972 WDI_Status status = WDI_STATUS_SUCCESS ;
8973 int i;
8974 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008975 tWDA_ReqParams *pWdaParams = NULL;
8976
8977
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8981 sizeof(WDI_AggrAddTSReqParamsType)) ;
8982 if(NULL == wdiAggrAddTSReqParam)
8983 {
8984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008985 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308986 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008987 VOS_ASSERT(0);
8988 return VOS_STATUS_E_NOMEM;
8989 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008990
8991
8992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8993 if(NULL == pWdaParams)
8994 {
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008997 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008998 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008999 VOS_ASSERT(0);
9000 return VOS_STATUS_E_NOMEM;
9001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9003 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9004 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9006 {
9007 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9008 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9009 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9011 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9012 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9013 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9014 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9015 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9016 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9017 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9018 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9019 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9020 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9021 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9022 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9023 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9024 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9025 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9027 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9029 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9030 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9031 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9032 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9033 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9034 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9035 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9036 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9037 pAggrAddTsReqParams->tspec[i].inactInterval;
9038 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9039 pAggrAddTsReqParams->tspec[i].suspendInterval;
9040 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9041 pAggrAddTsReqParams->tspec[i].svcStartTime;
9042 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9043 pAggrAddTsReqParams->tspec[i].minDataRate;
9044 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9045 pAggrAddTsReqParams->tspec[i].meanDataRate;
9046 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9047 pAggrAddTsReqParams->tspec[i].peakDataRate;
9048 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9049 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9050 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9051 pAggrAddTsReqParams->tspec[i].delayBound;
9052 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9053 pAggrAddTsReqParams->tspec[i].minPhyRate;
9054 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9055 pAggrAddTsReqParams->tspec[i].surplusBw;
9056 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9057 pAggrAddTsReqParams->tspec[i].mediumTime;
9058 }
9059
9060 /* TODO: tAggrAddTsParams doesn't have the following fields */
9061#if 0
9062 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9063 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9064 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9065 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9066#endif
9067 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9068
9069 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009070 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009072 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9073
9074 pWdaParams->pWdaContext = pWDA;
9075
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009077 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9078
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 if(IS_WDI_STATUS_FAILURE(status))
9080 {
9081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9082 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009083
9084 /* send the failure response back to PE*/
9085 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9086 {
9087 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9088 }
9089
9090 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9091 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309092
9093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9094 vos_mem_free(pWdaParams);
9095
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 return CONVERT_WDI2VOS_STATUS(status) ;
9098}
9099#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009100/*
Mihir Shetea4306052014-03-25 00:02:54 +05309101 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 * send Enter IMPS RSP back to PE
9103 */
Mihir Shetea4306052014-03-25 00:02:54 +05309104void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009105{
Mihir Shetea4306052014-03-25 00:02:54 +05309106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309107 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309108
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309110 "<------ %s status=%d" ,__func__,status);
9111 if(NULL == pWdaParams)
9112 {
9113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9114 "%s: pWdaParams received NULL", __func__);
9115 VOS_ASSERT(0);
9116 return;
9117 }
9118
9119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309120 if (NULL == pWDA)
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9123 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9125 vos_mem_free(pWdaParams->wdaMsgParam);
9126 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309127 VOS_ASSERT(0);
9128 return ;
9129 }
Mihir Shetea4306052014-03-25 00:02:54 +05309130
9131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9132 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309133 if (WDI_STATUS_SUCCESS != status)
9134 {
9135 pWDA->failureCounts.enterImpsFailureCount++;
9136 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9137 pWDA->failureCounts.enterImpsFailureCount)
9138 {
9139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9140 "%s: Status %d fail count %d", __func__, status,
9141 pWDA->failureCounts.enterImpsFailureCount);
9142 pWDA->failureCounts.enterImpsFailureCount = 0;
9143 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9144 WLAN_LOG_INDICATOR_HOST_DRIVER,
9145 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9146 FALSE, TRUE);
9147 }
9148 }
9149 else
9150 {
9151 pWDA->failureCounts.enterImpsFailureCount = 0;
9152 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009153 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 return ;
9155}
Mihir Shetea4306052014-03-25 00:02:54 +05309156
9157
9158/*
9159 * FUNCTION: WDA_EnterImpsReqCallback
9160 * Free memory and send Enter IMPS RSP back to PE.
9161 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9162 */
9163void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9164{
9165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309166 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309167
9168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9169 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9170
9171 if(NULL == pWdaParams)
9172 {
9173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9174 "%s: pWdaParams received NULL", __func__);
9175 VOS_ASSERT(0);
9176 return;
9177 }
9178
9179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309180 if (NULL == pWDA)
9181 {
9182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9183 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9185 vos_mem_free(pWdaParams->wdaMsgParam);
9186 vos_mem_free(pWdaParams);
9187
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309188 VOS_ASSERT(0);
9189 return ;
9190 }
9191
Mihir Shetea4306052014-03-25 00:02:54 +05309192
9193 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9194 {
9195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9196 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309197 pWDA->failureCounts.enterImpsFailureCount++;
9198 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9199 pWDA->failureCounts.enterImpsFailureCount)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9202 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9203 pWDA->failureCounts.enterImpsFailureCount);
9204 pWDA->failureCounts.enterImpsFailureCount = 0;
9205 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9206 WLAN_LOG_INDICATOR_HOST_DRIVER,
9207 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9208 FALSE, TRUE);
9209 }
Mihir Shetea4306052014-03-25 00:02:54 +05309210 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9211 CONVERT_WDI2SIR_STATUS(wdiStatus));
9212 }
9213
9214 return;
9215}
Jeff Johnson295189b2012-06-20 16:38:30 -07009216/*
9217 * FUNCTION: WDA_ProcessEnterImpsReq
9218 * Request to WDI to Enter IMPS power state.
9219 */
9220VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9221{
9222 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309223 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9224 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309225 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009227 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309228
9229
9230 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9231 if (NULL == wdiEnterImpsReqParams)
9232 {
9233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9234 "%s: VOS MEM Alloc Failure", __func__);
9235 VOS_ASSERT(0);
9236 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9237 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9238 return VOS_STATUS_E_NOMEM;
9239 }
9240
9241 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9242 if (NULL == pWdaParams)
9243 {
9244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9245 "%s: VOS MEM Alloc Failure", __func__);
9246 VOS_ASSERT(0);
9247 vos_mem_free(wdiEnterImpsReqParams);
9248 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9249 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9250 return VOS_STATUS_E_NOMEM;
9251 }
9252
9253 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9254 wdiEnterImpsReqParams->pUserData = pWdaParams;
9255
9256 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9257 pWdaParams->wdaMsgParam = NULL;
9258 pWdaParams->pWdaContext = pWDA;
9259
9260 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9261 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9262 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 if(IS_WDI_STATUS_FAILURE(status))
9264 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309265 if (! (failcnt & 0xF))
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9267 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9268 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309269 vos_mem_free(wdiEnterImpsReqParams);
9270 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009271 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 return CONVERT_WDI2VOS_STATUS(status) ;
9274}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309275
9276/*
9277 * FUNCTION: WDA_ExitImpsRespCallback
9278 * send Exit IMPS RSP back to PE
9279 */
9280void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9281{
9282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9283 tWDA_CbContext *pWDA;
9284
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9286 "<------ %s " ,__func__);
9287
9288 if (NULL == pWdaParams)
9289 {
9290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9291 "%s: pWdaParams received NULL", __func__);
9292 VOS_ASSERT(0);
9293 return;
9294 }
9295 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9296
9297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9298 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309299 if (WDI_STATUS_SUCCESS != status)
9300 {
9301 pWDA->failureCounts.exitImpsFailureCount++;
9302 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9303 pWDA->failureCounts.exitImpsFailureCount)
9304 {
9305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9306 "%s: Status %d fail count %d", __func__,
9307 status,
9308 pWDA->failureCounts.exitImpsFailureCount);
9309 pWDA->failureCounts.exitImpsFailureCount = 0;
9310 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9311 WLAN_LOG_INDICATOR_HOST_DRIVER,
9312 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9313 FALSE, TRUE);
9314 }
9315 }
9316 else
9317 {
9318 pWDA->failureCounts.exitImpsFailureCount = 0;
9319 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309320
9321 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9322 return;
9323}
9324
Jeff Johnson295189b2012-06-20 16:38:30 -07009325/*
9326 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 */
9328void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9329{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309331 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309334 if(NULL == pWdaParams)
9335 {
9336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9337 "%s: pWdaParams received NULL", __func__);
9338 VOS_ASSERT(0);
9339 return;
9340 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309341 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309342 if (IS_WDI_STATUS_FAILURE(status))
9343 {
9344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9345 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309346
9347 pWDA->failureCounts.exitImpsFailureCount++;
9348 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9349 pWDA->failureCounts.exitImpsFailureCount)
9350 {
9351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9352 "%s: wdiStatus %d fail count %d", __func__,
9353 status,
9354 pWDA->failureCounts.exitImpsFailureCount);
9355 pWDA->failureCounts.exitImpsFailureCount = 0;
9356 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9357 WLAN_LOG_INDICATOR_HOST_DRIVER,
9358 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9359 FALSE, TRUE);
9360 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309361 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9362 {
9363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9364 FL("reload wlan driver"));
9365 wpalWlanReload();
9366 }
9367 }
9368 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309370
Jeff Johnson295189b2012-06-20 16:38:30 -07009371/*
9372 * FUNCTION: WDA_ProcessExitImpsReq
9373 * Request to WDI to Exit IMPS power state.
9374 */
9375VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9376{
9377 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309378 tWDA_ReqParams *pWdaParams;
9379 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9380
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009382 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309383 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9384 sizeof(WDI_ExitImpsReqParamsType));
9385 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9388 "%s: VOS MEM Alloc Failure", __func__);
9389 VOS_ASSERT(0);
9390 return VOS_STATUS_E_NOMEM;
9391 }
9392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9396 "%s: VOS MEM Alloc Failure", __func__);
9397 VOS_ASSERT(0);
9398 vos_mem_free(wdiExitImpsReqParams);
9399 return VOS_STATUS_E_NOMEM;
9400 }
9401 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9402 wdiExitImpsReqParams->pUserData = pWdaParams;
9403
9404 /* Store param pointer as passed in by caller */
9405 /* store Params pass it to WDI */
9406 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9407 pWdaParams->pWdaContext = pWDA;
9408 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9409 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9410 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9411 pWdaParams);
9412 if (IS_WDI_STATUS_FAILURE(status))
9413 {
9414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9415 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9417 vos_mem_free(pWdaParams);
9418 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 return CONVERT_WDI2VOS_STATUS(status) ;
9421}
Jeff Johnson295189b2012-06-20 16:38:30 -07009422/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009423 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 * send Enter BMPS RSP back to PE
9425 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009426void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009427{
9428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309429 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009430 tEnterBmpsParams *pEnterBmpsRspParams;
9431
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 if(NULL == pWdaParams)
9435 {
9436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 VOS_ASSERT(0) ;
9439 return ;
9440 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009441
9442 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309443 if (NULL == pWDA)
9444 {
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9446 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309447
9448 if(pWdaParams->wdaWdiApiMsgParam)
9449 {
9450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9451 }
9452 vos_mem_free(pWdaParams);
9453
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309454 VOS_ASSERT(0);
9455 return ;
9456 }
9457
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009458 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9459
9460 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009461 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009462
9463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309465 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9466 {
9467 pWDA->failureCounts.enterBmpsFailureCount++;
9468 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9469 pWDA->failureCounts.enterBmpsFailureCount)
9470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9472 "%s: wdiStatus %d fail count %d", __func__,
9473 pwdiEnterBmpsRsp->wdiStatus,
9474 pWDA->failureCounts.enterBmpsFailureCount);
9475 pWDA->failureCounts.enterBmpsFailureCount = 0;
9476 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9477 WLAN_LOG_INDICATOR_HOST_DRIVER,
9478 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9479 FALSE, TRUE);
9480 }
9481 }
9482 else
9483 {
9484 pWDA->failureCounts.enterBmpsFailureCount = 0;
9485 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009486 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9487
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 return ;
9489}
Jeff Johnson295189b2012-06-20 16:38:30 -07009490/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009491 * FUNCTION: WDA_EnterBmpsReqCallback
9492 * Free memory and send Enter BMPS RSP back to PE.
9493 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9494 */
9495void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9496{
9497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309498 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499 tEnterBmpsParams *pEnterBmpsRspParams;
9500
9501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9502 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9503
9504 if(NULL == pWdaParams)
9505 {
9506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9507 "%s: pWdaParams received NULL", __func__);
9508 VOS_ASSERT(0);
9509 return;
9510 }
9511
9512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309513 if (NULL == pWDA)
9514 {
9515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9516 "%s:pWDA is NULL", __func__);
9517 VOS_ASSERT(0);
9518 return ;
9519 }
9520
Yue Ma7f44bbe2013-04-12 11:47:39 -07009521 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9522 pEnterBmpsRspParams->status = wdiStatus;
9523
9524 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9525 {
9526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9527 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309528 pWDA->failureCounts.enterBmpsFailureCount++;
9529 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9530 pWDA->failureCounts.enterBmpsFailureCount)
9531 {
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9533 "%s: wdiStatus %d fail count %d", __func__,
9534 wdiStatus,
9535 pWDA->failureCounts.enterBmpsFailureCount);
9536 pWDA->failureCounts.enterBmpsFailureCount = 0;
9537 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9538 WLAN_LOG_INDICATOR_HOST_DRIVER,
9539 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9540 FALSE, TRUE);
9541 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009542 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9543 }
9544
9545 return;
9546}
9547/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 * FUNCTION: WDA_ProcessEnterBmpsReq
9549 * Request to WDI to Enter BMPS power state.
9550 */
9551VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9552 tEnterBmpsParams *pEnterBmpsReqParams)
9553{
9554 WDI_Status status = WDI_STATUS_SUCCESS;
9555 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9556 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009562 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 VOS_ASSERT(0);
9564 return VOS_STATUS_E_FAILURE;
9565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9567 if (NULL == wdiEnterBmpsReqParams)
9568 {
9569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009572 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9573 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 return VOS_STATUS_E_NOMEM;
9575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9577 if (NULL == pWdaParams)
9578 {
9579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 VOS_ASSERT(0);
9582 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009583 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9584 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009585 return VOS_STATUS_E_NOMEM;
9586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9588 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9589 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9590 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009591 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9593 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9594 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009595 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9596 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009597
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 /* Store param pointer as passed in by caller */
9599 /* store Params pass it to WDI */
9600 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009601 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009604 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 if (IS_WDI_STATUS_FAILURE(status))
9606 {
9607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9608 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009610 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009612 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009614 return CONVERT_WDI2VOS_STATUS(status);
9615}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009616
9617
9618static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9619 WDI_Status wdiStatus,
9620 tExitBmpsParams *pExitBmpsReqParams)
9621{
9622 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9623
9624 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9625}
9626
9627
Jeff Johnson295189b2012-06-20 16:38:30 -07009628/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009629 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 * send Exit BMPS RSP back to PE
9631 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009632void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009633{
9634 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309635 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009636 tExitBmpsParams *pExitBmpsRspParams;
9637
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009639 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 if(NULL == pWdaParams)
9641 {
9642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009643 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 VOS_ASSERT(0) ;
9645 return ;
9646 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009647
9648 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309649 if (NULL == pWDA)
9650 {
9651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9652 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309653
9654 if(pWdaParams->wdaWdiApiMsgParam)
9655 {
9656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9657 }
9658 vos_mem_free(pWdaParams);
9659
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309660 VOS_ASSERT(0);
9661 return ;
9662 }
9663
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009664 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9665
9666 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009667 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009668
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309670 vos_mem_free(pWdaParams);
9671
9672 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9673 {
9674 pWDA->failureCounts.exitBmpsFailureCount++;
9675 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9676 pWDA->failureCounts.exitBmpsFailureCount)
9677 {
9678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9679 "%s: Status %d fail count %d", __func__,
9680 pExitBmpsRspParams->status,
9681 pWDA->failureCounts.exitBmpsFailureCount);
9682 pWDA->failureCounts.exitBmpsFailureCount = 0;
9683 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9684 WLAN_LOG_INDICATOR_HOST_DRIVER,
9685 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9686 FALSE, TRUE);
9687 }
9688 }
9689 else
9690 {
9691 pWDA->failureCounts.exitBmpsFailureCount = 0;
9692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009693
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009694 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 return ;
9696}
Jeff Johnson295189b2012-06-20 16:38:30 -07009697/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009698 * FUNCTION: WDA_ExitBmpsReqCallback
9699 * Free memory and send Exit BMPS RSP back to PE.
9700 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9701 */
9702void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9703{
9704 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309705 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009706 tExitBmpsParams *pExitBmpsRspParams;
9707
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9709 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9710
9711 if(NULL == pWdaParams)
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9714 "%s: pWdaParams received NULL", __func__);
9715 VOS_ASSERT(0);
9716 return;
9717 }
9718
9719 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309720 if (NULL == pWDA)
9721 {
9722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9723 "%s:pWDA is NULL", __func__);
9724 VOS_ASSERT(0);
9725 return ;
9726 }
9727
Yue Ma7f44bbe2013-04-12 11:47:39 -07009728 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9729 pExitBmpsRspParams->status = wdiStatus;
9730
9731 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9732 {
9733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9734 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309735 pWDA->failureCounts.exitBmpsFailureCount++;
9736 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9737 pWDA->failureCounts.exitBmpsFailureCount)
9738 {
9739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9740 "%s: wdiStatus %d fail count %d", __func__,
9741 wdiStatus,
9742 pWDA->failureCounts.exitBmpsFailureCount);
9743 pWDA->failureCounts.exitBmpsFailureCount = 0;
9744 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9745 WLAN_LOG_INDICATOR_HOST_DRIVER,
9746 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9747 FALSE, TRUE);
9748 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009749 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9750 }
9751
9752 return;
9753}
9754/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009755 * FUNCTION: WDA_ProcessExitBmpsReq
9756 * Request to WDI to Exit BMPS power state.
9757 */
9758VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9759 tExitBmpsParams *pExitBmpsReqParams)
9760{
9761 WDI_Status status = WDI_STATUS_SUCCESS ;
9762 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9763 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9764 sizeof(WDI_ExitBmpsReqParamsType)) ;
9765 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 if(NULL == wdiExitBmpsReqParams)
9769 {
9770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009772 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009773 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009774 return VOS_STATUS_E_NOMEM;
9775 }
9776 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9777 if(NULL == pWdaParams)
9778 {
9779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 VOS_ASSERT(0);
9782 vos_mem_free(wdiExitBmpsReqParams);
9783 return VOS_STATUS_E_NOMEM;
9784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009785 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009786
9787 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9788
Yue Ma7f44bbe2013-04-12 11:47:39 -07009789 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9790 wdiExitBmpsReqParams->pUserData = pWdaParams;
9791
Jeff Johnson295189b2012-06-20 16:38:30 -07009792 /* Store param pointer as passed in by caller */
9793 /* store Params pass it to WDI */
9794 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9795 pWdaParams->pWdaContext = pWDA;
9796 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009797 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009798 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 if(IS_WDI_STATUS_FAILURE(status))
9800 {
9801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9802 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9804 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009805 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 return CONVERT_WDI2VOS_STATUS(status) ;
9808}
Jeff Johnson295189b2012-06-20 16:38:30 -07009809/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009810 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 * send Enter UAPSD RSP back to PE
9812 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009813void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009814{
9815 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309816 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009817 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009819 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 if(NULL == pWdaParams)
9821 {
9822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009823 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 VOS_ASSERT(0) ;
9825 return ;
9826 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009827
9828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309829 if (NULL == pWDA)
9830 {
9831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9832 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309833
9834 if(pWdaParams->wdaWdiApiMsgParam)
9835 {
9836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9837 }
9838 vos_mem_free(pWdaParams);
9839
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309840 VOS_ASSERT(0);
9841 return ;
9842 }
9843
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009844 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9845
9846 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009847 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009848
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9850 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009851 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 return ;
9853}
Jeff Johnson295189b2012-06-20 16:38:30 -07009854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009855 * FUNCTION: WDA_EnterUapsdReqCallback
9856 * Free memory and send Enter UAPSD RSP back to PE.
9857 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9858 */
9859void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9860{
9861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9862 tWDA_CbContext *pWDA;
9863 tUapsdParams *pEnterUapsdRsqParams;
9864
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9866 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9867
9868 if(NULL == pWdaParams)
9869 {
9870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9871 "%s: pWdaParams received NULL", __func__);
9872 VOS_ASSERT(0);
9873 return;
9874 }
9875
9876 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309877 if (NULL == pWDA)
9878 {
9879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9880 "%s:pWDA is NULL", __func__);
9881 VOS_ASSERT(0);
9882 return ;
9883 }
9884
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9886 pEnterUapsdRsqParams->status = wdiStatus;
9887
9888 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9889 {
9890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9891 vos_mem_free(pWdaParams);
9892 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9893 }
9894
9895 return;
9896}
9897/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 * FUNCTION: WDA_ProcessEnterUapsdReq
9899 * Request to WDI to Enter UAPSD power state.
9900 */
9901VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9902 tUapsdParams *pEnterUapsdReqParams)
9903{
9904 WDI_Status status = WDI_STATUS_SUCCESS ;
9905 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9906 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9907 sizeof(WDI_EnterUapsdReqParamsType)) ;
9908 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 if(NULL == wdiEnterUapsdReqParams)
9912 {
9913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 VOS_ASSERT(0);
9916 return VOS_STATUS_E_NOMEM;
9917 }
9918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9919 if(NULL == pWdaParams)
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 VOS_ASSERT(0);
9924 vos_mem_free(wdiEnterUapsdReqParams);
9925 return VOS_STATUS_E_NOMEM;
9926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9928 pEnterUapsdReqParams->beDeliveryEnabled;
9929 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9930 pEnterUapsdReqParams->beTriggerEnabled;
9931 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9932 pEnterUapsdReqParams->bkDeliveryEnabled;
9933 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9934 pEnterUapsdReqParams->bkTriggerEnabled;
9935 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9936 pEnterUapsdReqParams->viDeliveryEnabled;
9937 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9938 pEnterUapsdReqParams->viTriggerEnabled;
9939 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9940 pEnterUapsdReqParams->voDeliveryEnabled;
9941 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9942 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009943 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009944
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9946 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 /* Store param pointer as passed in by caller */
9949 /* store Params pass it to WDI */
9950 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9951 pWdaParams->pWdaContext = pWDA;
9952 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009954 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 if(IS_WDI_STATUS_FAILURE(status))
9956 {
9957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9958 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9959 vos_mem_free(pWdaParams->wdaMsgParam) ;
9960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9961 vos_mem_free(pWdaParams) ;
9962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 return CONVERT_WDI2VOS_STATUS(status) ;
9964}
Jeff Johnson295189b2012-06-20 16:38:30 -07009965/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009966 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 * send Exit UAPSD RSP back to PE
9968 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009969void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009970{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009971
9972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9973 tWDA_CbContext *pWDA;
9974 tExitUapsdParams *pExitUapsdRspParams;
9975
Jeff Johnson295189b2012-06-20 16:38:30 -07009976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009977 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009978 if(NULL == pWdaParams)
9979 {
9980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009981 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009982 VOS_ASSERT(0);
9983 return;
9984 }
9985
9986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9987 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9988
9989 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009990 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009991
9992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9993 vos_mem_free(pWdaParams) ;
9994
9995 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 return ;
9997}
Jeff Johnson295189b2012-06-20 16:38:30 -07009998/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009999 * FUNCTION: WDA_ExitUapsdReqCallback
10000 * Free memory and send Exit UAPSD RSP back to PE.
10001 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10002 */
10003void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10004{
10005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010006 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010007 tExitUapsdParams *pExitUapsdRspParams;
10008
10009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10010 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10011
10012 if(NULL == pWdaParams)
10013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10015 "%s: pWdaParams received NULL", __func__);
10016 VOS_ASSERT(0);
10017 return;
10018 }
10019
10020 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010021 if (NULL == pWDA)
10022 {
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10024 "%s:pWDA is NULL", __func__);
10025 VOS_ASSERT(0);
10026 return ;
10027 }
10028
Yue Ma7f44bbe2013-04-12 11:47:39 -070010029 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10030 pExitUapsdRspParams->status = wdiStatus;
10031
10032 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10033 {
10034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10035 vos_mem_free(pWdaParams);
10036 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10037 }
10038
10039 return;
10040}
10041/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 * FUNCTION: WDA_ProcessExitUapsdReq
10043 * Request to WDI to Exit UAPSD power state.
10044 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010045VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10046 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010047{
10048 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010049 tWDA_ReqParams *pWdaParams ;
10050 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10051 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10052 sizeof(WDI_ExitUapsdReqParamsType)) ;
10053
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010055 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010056
10057 if(NULL == wdiExitUapsdReqParams)
10058 {
10059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010060 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010061 VOS_ASSERT(0);
10062 return VOS_STATUS_E_NOMEM;
10063 }
10064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10065 if(NULL == pWdaParams)
10066 {
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010068 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010069 VOS_ASSERT(0);
10070 vos_mem_free(wdiExitUapsdReqParams);
10071 return VOS_STATUS_E_NOMEM;
10072 }
10073
10074 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010075 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10076 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010077
10078 /* Store param pointer as passed in by caller */
10079 /* store Params pass it to WDI */
10080 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10081 pWdaParams->pWdaContext = pWDA;
10082 pWdaParams->wdaMsgParam = pExitUapsdParams;
10083
Yue Ma7f44bbe2013-04-12 11:47:39 -070010084 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 if(IS_WDI_STATUS_FAILURE(status))
10086 {
10087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10088 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010089 vos_mem_free(pWdaParams->wdaMsgParam) ;
10090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10091 vos_mem_free(pWdaParams) ;
10092
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 return CONVERT_WDI2VOS_STATUS(status) ;
10095}
10096
Jeff Johnson295189b2012-06-20 16:38:30 -070010097/*
10098 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10099 *
10100 */
10101void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10102{
10103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010105 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 if(NULL == pWdaParams)
10107 {
10108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010109 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 VOS_ASSERT(0) ;
10111 return ;
10112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 if( pWdaParams != NULL )
10114 {
10115 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10116 {
10117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10118 }
10119 if( pWdaParams->wdaMsgParam != NULL )
10120 {
10121 vos_mem_free(pWdaParams->wdaMsgParam) ;
10122 }
10123 vos_mem_free(pWdaParams) ;
10124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 return ;
10126}
Jeff Johnson295189b2012-06-20 16:38:30 -070010127/*
10128 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10129 * Request to WDI to set the power save params at start.
10130 */
10131VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10132 tSirPowerSaveCfg *pPowerSaveCfg)
10133{
10134 WDI_Status status = WDI_STATUS_SUCCESS ;
10135 tHalCfg *tlvStruct = NULL ;
10136 tANI_U8 *tlvStructStart = NULL ;
10137 v_PVOID_t *configParam;
10138 tANI_U32 configParamSize;
10139 tANI_U32 *configDataValue;
10140 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10141 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10145 {
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010147 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010149 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 return VOS_STATUS_E_FAILURE;
10151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10153 if (NULL == wdiPowerSaveCfg)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010158 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 return VOS_STATUS_E_NOMEM;
10160 }
10161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10162 if(NULL == pWdaParams)
10163 {
10164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 VOS_ASSERT(0);
10167 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010168 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 return VOS_STATUS_E_NOMEM;
10170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10172 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 if(NULL == configParam)
10174 {
10175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010176 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010177 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 vos_mem_free(pWdaParams);
10179 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010180 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010181 return VOS_STATUS_E_NOMEM;
10182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 vos_mem_set(configParam, configParamSize, 0);
10184 wdiPowerSaveCfg->pConfigBuffer = configParam;
10185 tlvStruct = (tHalCfg *)configParam;
10186 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10188 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10189 tlvStruct->length = sizeof(tANI_U32);
10190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10191 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10193 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10195 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10196 tlvStruct->length = sizeof(tANI_U32);
10197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10198 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10200 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010201 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10202 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10203 tlvStruct->length = sizeof(tANI_U32);
10204 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10205 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10207 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10209 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10210 tlvStruct->length = sizeof(tANI_U32);
10211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10212 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10214 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10216 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10217 tlvStruct->length = sizeof(tANI_U32);
10218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10219 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10221 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10223 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10224 tlvStruct->length = sizeof(tANI_U32);
10225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10226 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10228 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10230 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10231 tlvStruct->length = sizeof(tANI_U32);
10232 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10233 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10235 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10237 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10238 tlvStruct->length = sizeof(tANI_U32);
10239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10240 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10241 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10242 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10244 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10245 tlvStruct->length = sizeof(tANI_U32);
10246 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10247 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10248 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10249 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10251 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10252 tlvStruct->length = sizeof(tANI_U32);
10253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10254 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10256 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010257 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10258 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10259 tlvStruct->length = sizeof(tANI_U32);
10260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10261 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10263 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 /* store Params pass it to WDI */
10267 pWdaParams->wdaMsgParam = configParam;
10268 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10269 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10271 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 if(IS_WDI_STATUS_FAILURE(status))
10273 {
10274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10275 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10276 vos_mem_free(pWdaParams->wdaMsgParam);
10277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10278 vos_mem_free(pWdaParams);
10279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 return CONVERT_WDI2VOS_STATUS(status);
10282}
Jeff Johnson295189b2012-06-20 16:38:30 -070010283/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010284 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 *
10286 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010287void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010288{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10290
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010292 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010293
10294 if(NULL == pWdaParams)
10295 {
10296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10297 "%s: pWdaParams received NULL", __func__);
10298 VOS_ASSERT(0);
10299 return ;
10300 }
10301
10302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 vos_mem_free(pWdaParams);
10304
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 return ;
10306}
Jeff Johnson295189b2012-06-20 16:38:30 -070010307/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010308 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10309 * Free memory.
10310 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10311 */
10312void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10313{
10314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10315
10316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10317 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10318
10319 if(NULL == pWdaParams)
10320 {
10321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10322 "%s: pWdaParams received NULL", __func__);
10323 VOS_ASSERT(0);
10324 return;
10325 }
10326
10327 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10328 {
10329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10330 vos_mem_free(pWdaParams);
10331 }
10332
10333 return;
10334}
10335/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 * FUNCTION: WDA_SetUapsdAcParamsReq
10337 * Request to WDI to set the UAPSD params for an ac (sta mode).
10338 */
10339VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10340 tUapsdInfo *pUapsdInfo)
10341{
10342 WDI_Status status = WDI_STATUS_SUCCESS;
10343 tWDA_CbContext *pWDA = NULL ;
10344 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10345 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10346 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10347 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010349 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 if(NULL == wdiUapsdParams)
10351 {
10352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 VOS_ASSERT(0);
10355 return VOS_STATUS_E_NOMEM;
10356 }
10357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10358 if(NULL == pWdaParams)
10359 {
10360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010362 VOS_ASSERT(0);
10363 vos_mem_free(wdiUapsdParams);
10364 return VOS_STATUS_E_NOMEM;
10365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10367 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10368 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10369 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10370 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10371 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010372 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10373 wdiUapsdParams->pUserData = pWdaParams;
10374
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 pWdaParams->pWdaContext = pWDA;
10377 /* Store param pointer as passed in by caller */
10378 pWdaParams->wdaMsgParam = pUapsdInfo;
10379 /* store Params pass it to WDI */
10380 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010382 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 if(IS_WDI_STATUS_FAILURE(status))
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10387 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10389 vos_mem_free(pWdaParams);
10390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10392 return VOS_STATUS_SUCCESS;
10393 else
10394 return VOS_STATUS_E_FAILURE;
10395
Jeff Johnson295189b2012-06-20 16:38:30 -070010396}
10397/*
10398 * FUNCTION: WDA_ClearUapsdAcParamsReq
10399 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10400 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10401 * and again enter the UPASD with the modified params. Hence the disable
10402 * function was kept empty.
10403 *
10404 */
10405VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10406{
10407 /* do nothing */
10408 return VOS_STATUS_SUCCESS;
10409}
Jeff Johnson295189b2012-06-20 16:38:30 -070010410/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010411 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 *
10413 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010414void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010415{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10417
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010419 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010420
10421 if(NULL == pWdaParams)
10422 {
10423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010424 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010425 VOS_ASSERT(0) ;
10426 return ;
10427 }
10428
10429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10430 vos_mem_free(pWdaParams->wdaMsgParam);
10431 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010432
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 //print a msg, nothing else to do
10434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010435 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010436 return ;
10437}
Jeff Johnson295189b2012-06-20 16:38:30 -070010438/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010439 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10440 * Free memory.
10441 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10442 */
10443void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10444{
10445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10446
10447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10449
10450 if(NULL == pWdaParams)
10451 {
10452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10453 "%s: pWdaParams received NULL", __func__);
10454 VOS_ASSERT(0);
10455 return;
10456 }
10457
10458 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10459 {
10460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10461 vos_mem_free(pWdaParams->wdaMsgParam);
10462 vos_mem_free(pWdaParams);
10463 }
10464
10465 return;
10466}
10467/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 * FUNCTION: WDA_UpdateUapsdParamsReq
10469 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10470 */
10471VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10472 tUpdateUapsdParams* pUpdateUapsdInfo)
10473{
10474 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010475 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010476 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10477 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10478 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010479 tWDA_ReqParams *pWdaParams = NULL;
10480
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 if(NULL == wdiUpdateUapsdParams)
10484 {
10485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 VOS_ASSERT(0);
10488 return VOS_STATUS_E_NOMEM;
10489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010490 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10491 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10492 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010493 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10494 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010495
10496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10497 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 {
10499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010502 vos_mem_free(pUpdateUapsdInfo);
10503 vos_mem_free(wdiUpdateUapsdParams);
10504 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010507 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010508 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010509 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10510 pWdaParams->pWdaContext = pWDA;
10511
Jeff Johnson43971f52012-07-17 12:26:56 -070010512 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010513 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010514 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010515
Jeff Johnson43971f52012-07-17 12:26:56 -070010516 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 {
10518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10519 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010520 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10522 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010523 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010525 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010526}
Jeff Johnson295189b2012-06-20 16:38:30 -070010527/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010528 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 *
10530 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010531void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010532{
10533 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010535 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 if(WDI_STATUS_SUCCESS != wdiStatus)
10537 {
10538 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010539 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 if(NULL == pWdaParams)
10542 {
10543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 VOS_ASSERT(0) ;
10546 return ;
10547 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10549 vos_mem_free(pWdaParams->wdaMsgParam);
10550 vos_mem_free(pWdaParams);
10551 return ;
10552}
Jeff Johnson295189b2012-06-20 16:38:30 -070010553/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010554 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10555 * Free memory.
10556 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10557 */
10558void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10559{
10560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10561
10562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10563 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10564
10565 if(NULL == pWdaParams)
10566 {
10567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10568 "%s: pWdaParams received NULL", __func__);
10569 VOS_ASSERT(0);
10570 return;
10571 }
10572
10573 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10574 {
10575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10576 vos_mem_free(pWdaParams->wdaMsgParam);
10577 vos_mem_free(pWdaParams);
10578 }
10579
10580 return;
10581}
10582/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10584 *
10585 */
10586VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10587 tSirWlanSetRxpFilters *pWlanSuspendParam)
10588{
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010590 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010591 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010593 /* Sanity Check
10594 * This is very unlikely and add assert to collect more info next time */
10595 if(NULL == pWlanSuspendParam)
10596 {
10597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10598 "%s: pWlanSuspendParam received NULL", __func__);
10599 VOS_ASSERT(0) ;
10600 return VOS_STATUS_E_FAULT;
10601 }
10602 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10603 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 if(NULL == wdiRxpFilterParams)
10607 {
10608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010610 VOS_ASSERT(0);
10611 vos_mem_free(pWlanSuspendParam);
10612 return VOS_STATUS_E_NOMEM;
10613 }
10614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10615 if(NULL == pWdaParams)
10616 {
10617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010619 VOS_ASSERT(0);
10620 vos_mem_free(wdiRxpFilterParams);
10621 vos_mem_free(pWlanSuspendParam);
10622 return VOS_STATUS_E_NOMEM;
10623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10625 pWlanSuspendParam->setMcstBcstFilter;
10626 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10627 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10628
Yue Ma7f44bbe2013-04-12 11:47:39 -070010629 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10630 wdiRxpFilterParams->pUserData = pWdaParams;
10631
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 pWdaParams->pWdaContext = pWDA;
10633 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010635 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010636 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010637 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010638 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 {
10640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10641 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010642 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10644 vos_mem_free(pWdaParams->wdaMsgParam);
10645 vos_mem_free(pWdaParams);
10646 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010647 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010649
10650/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010651 * FUNCTION: WDA_ProcessGetFrameLogReq
10652 * Request to WDI to get the Frame Log.
10653 */
10654VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10655 tAniGetFrameLogReq *pGetFrameLog)
10656{
10657 VOS_STATUS status = VOS_STATUS_SUCCESS;
10658 WDI_Status wstatus;
10659 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10660 tWDA_ReqParams *pWdaParams ;
10661
10662 /* Sanity Check*/
10663 if(NULL == pGetFrameLog)
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010666 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010667 VOS_ASSERT(0) ;
10668 return VOS_STATUS_E_FAULT;
10669 }
10670
10671 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10672 sizeof(WDI_GetFrameLogReqInfoType));
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10674 "------> %s " ,__func__);
10675
10676 if(NULL == wdiGetFrameLogInfo)
10677 {
10678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10679 "%s: VOS MEM Alloc Failure", __func__);
10680 VOS_ASSERT(0);
10681 vos_mem_free(pGetFrameLog);
10682 return VOS_STATUS_E_NOMEM;
10683 }
10684
10685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10686 if(NULL == pWdaParams)
10687 {
10688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10689 "%s: VOS MEM Alloc Failure", __func__);
10690 VOS_ASSERT(0);
10691 vos_mem_free(wdiGetFrameLogInfo);
10692 vos_mem_free(pGetFrameLog);
10693 return VOS_STATUS_E_NOMEM;
10694 }
10695
10696 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10697
10698 pWdaParams->pWdaContext = pWDA;
10699 pWdaParams->wdaMsgParam = pGetFrameLog;
10700 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10701
10702 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10703 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10704 pWdaParams);
10705 if(IS_WDI_STATUS_FAILURE(wstatus))
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10708 "Failure in get frame log REQ WDI API, free all the memory" );
10709 status = CONVERT_WDI2VOS_STATUS(wstatus);
10710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10711 vos_mem_free(pWdaParams->wdaMsgParam);
10712 vos_mem_free(pWdaParams);
10713 }
10714 return status;
10715}
10716
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010717
10718/*
10719 * FUNCTION: WDA_FatalEventLogsRspCallback
10720 * recieves Flush Logs response from FW
10721 */
10722
10723void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10724 void* pUserData)
10725{
10726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10727
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10729 "<------ %s,wdiStatus:%d " ,
10730 __func__, wdiRsp->wdiStatus);
10731 if(NULL == pWdaParams)
10732 {
10733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10734 "%s: pWdaParams received NULL", __func__);
10735 VOS_ASSERT(0);
10736 return ;
10737 }
10738
10739 if(NULL == pWdaParams->wdaMsgParam)
10740 {
10741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10742 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10743 VOS_ASSERT(0);
10744 vos_mem_free(pWdaParams);
10745 return ;
10746 }
10747
10748 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10749 {
10750 /*
10751 * If it is failure, it means JOb is already posted by FW
10752 * for logging, so for failure scenario also we will get the
10753 * done indication
10754 */
10755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10756 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10757 __func__, wdiRsp->wdiStatus);
10758 }
10759
10760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10761 vos_mem_free(pWdaParams->wdaMsgParam);
10762 vos_mem_free(pWdaParams);
10763
10764 return;
10765
10766}
10767
10768/*
10769 * FUNCTION: WDA_ProcessFatalEventLogsReq
10770 * Request to WDI to send the fatal Event Logs Req.
10771 */
10772
10773VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10774 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10775{
10776 VOS_STATUS status = VOS_STATUS_SUCCESS;
10777 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10778 tWDA_ReqParams *pWdaParams ;
10779 WDI_Status wstatus;
10780
10781
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10783 "------> %s " ,__func__);
10784 if (NULL == pFatalEventLogsReqParam)
10785 {
10786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10787 "%s: pMgmtLoggingInitParam received NULL", __func__);
10788 VOS_ASSERT(0) ;
10789 return VOS_STATUS_E_FAULT;
10790 }
10791 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10792 sizeof(WDI_FatalEventLogsReqInfoType));
10793 if(NULL == wdiFatalEventLogsReqInfo)
10794 {
10795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10796 "%s: VOS MEM Alloc Failure", __func__);
10797 VOS_ASSERT(0);
10798 vos_mem_free(pFatalEventLogsReqParam);
10799 return VOS_STATUS_E_NOMEM;
10800 }
10801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10802 if(NULL == pWdaParams)
10803 {
10804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10805 "%s: VOS MEM Alloc Failure", __func__);
10806 VOS_ASSERT(0);
10807 vos_mem_free(wdiFatalEventLogsReqInfo);
10808 vos_mem_free(pFatalEventLogsReqParam);
10809 return VOS_STATUS_E_NOMEM;
10810 }
10811 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10812 pWdaParams->pWdaContext = pWDA;
10813 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10814 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10815
10816 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10817 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10818 pWdaParams);
10819 if(IS_WDI_STATUS_FAILURE(wstatus))
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10822 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10823 status = CONVERT_WDI2VOS_STATUS(wstatus);
10824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10825 vos_mem_free(pWdaParams->wdaMsgParam);
10826 vos_mem_free(pWdaParams);
10827 }
10828
10829 return status;
10830
10831}
10832
Siddharth Bhal64246172015-02-27 01:04:37 +053010833/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010834 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010835 *
10836 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010837VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10838 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010839{
10840 VOS_STATUS status = VOS_STATUS_SUCCESS;
10841 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010842 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010843 tWDA_ReqParams *pWdaParams ;
10844
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10846 "------> %s " ,__func__);
10847
10848 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010849 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010850 {
10851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010852 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010853 VOS_ASSERT(0) ;
10854 return VOS_STATUS_E_FAULT;
10855 }
10856
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010857 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10858 sizeof(WDI_FWLoggingInitReqInfoType));
10859 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010860 {
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10862 "%s: VOS MEM Alloc Failure", __func__);
10863 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010864 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010865 return VOS_STATUS_E_NOMEM;
10866 }
10867
10868 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10869 if(NULL == pWdaParams)
10870 {
10871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10872 "%s: VOS MEM Alloc Failure", __func__);
10873 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010874 vos_mem_free(wdiFWLoggingInitInfo);
10875 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010876 return VOS_STATUS_E_NOMEM;
10877 }
10878
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010879 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10880 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10881 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10882 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10883 wdiFWLoggingInitInfo->continuousFrameLogging =
10884 pFWLoggingInitParam->continuousFrameLogging;
10885 wdiFWLoggingInitInfo->minLogBufferSize=
10886 pFWLoggingInitParam->minLogBufferSize;
10887 wdiFWLoggingInitInfo->maxLogBufferSize=
10888 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010889
10890 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010891 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10892 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010893
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010894 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10895 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010896 pWdaParams);
10897 if(IS_WDI_STATUS_FAILURE(wstatus))
10898 {
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10900 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10901 status = CONVERT_WDI2VOS_STATUS(wstatus);
10902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10903 vos_mem_free(pWdaParams->wdaMsgParam);
10904 vos_mem_free(pWdaParams);
10905 }
10906
10907 return status;
10908}
10909
Jeff Johnson295189b2012-06-20 16:38:30 -070010910/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010911 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10912 *
10913 */
10914VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10915 tSirRssiMonitorReq *pRssiMonitorReqParam)
10916{
10917 VOS_STATUS status = VOS_STATUS_SUCCESS;
10918 WDI_Status wstatus;
10919 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10920 tWDA_ReqParams *pWdaParams ;
10921
10922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10923 "------> %s " ,__func__);
10924
10925 /* Sanity Check*/
10926 if(NULL == pRssiMonitorReqParam)
10927 {
10928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10929 "%s: pRssiMonitorReqParam received NULL", __func__);
10930 VOS_ASSERT(0) ;
10931 return VOS_STATUS_E_FAULT;
10932 }
10933
10934 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10935 sizeof(WDI_RssiMonitorReqInfoType));
10936 if(NULL == wdiRssiMonitorInfo)
10937 {
10938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10939 "%s: VOS MEM Alloc Failure", __func__);
10940 VOS_ASSERT(0);
10941 vos_mem_free(pRssiMonitorReqParam);
10942 return VOS_STATUS_E_NOMEM;
10943 }
10944
10945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10946 if(NULL == pWdaParams)
10947 {
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10949 "%s: VOS MEM Alloc Failure", __func__);
10950 VOS_ASSERT(0);
10951 vos_mem_free(wdiRssiMonitorInfo);
10952 vos_mem_free(pRssiMonitorReqParam);
10953 return VOS_STATUS_E_NOMEM;
10954 }
10955
10956 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10957 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10958 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10959 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10960 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10961
10962 pWdaParams->pWdaContext = pWDA;
10963 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10964 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10965
10966 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10967 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10968 pWdaParams);
10969 if(IS_WDI_STATUS_FAILURE(wstatus))
10970 {
10971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10972 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10973 status = CONVERT_WDI2VOS_STATUS(wstatus);
10974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10975 vos_mem_free(pWdaParams->wdaMsgParam);
10976 vos_mem_free(pWdaParams);
10977 }
10978
10979 return status;
10980}
10981
10982/*
10983 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10984 *
10985 */
10986VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10987 tSirRssiMonitorReq *pRssiMonitorReqParam)
10988{
10989 VOS_STATUS status = VOS_STATUS_SUCCESS;
10990 WDI_Status wstatus;
10991 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10992 tWDA_ReqParams *pWdaParams ;
10993
10994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10995 "------> %s " ,__func__);
10996
10997 /* Sanity Check*/
10998 if(NULL == pRssiMonitorReqParam)
10999 {
11000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11001 "%s: pRssiMonitorReqParam received NULL", __func__);
11002 VOS_ASSERT(0) ;
11003 return VOS_STATUS_E_FAULT;
11004 }
11005
11006 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11007 sizeof(WDI_RssiMonitorReqInfoType));
11008 if(NULL == wdiRssiMonitorInfo)
11009 {
11010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11011 "%s: VOS MEM Alloc Failure", __func__);
11012 VOS_ASSERT(0);
11013 vos_mem_free(pRssiMonitorReqParam);
11014 return VOS_STATUS_E_NOMEM;
11015 }
11016
11017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11018 if(NULL == pWdaParams)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11021 "%s: VOS MEM Alloc Failure", __func__);
11022 VOS_ASSERT(0);
11023 vos_mem_free(wdiRssiMonitorInfo);
11024 vos_mem_free(pRssiMonitorReqParam);
11025 return VOS_STATUS_E_NOMEM;
11026 }
11027
11028 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11029 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11030 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11031
11032 pWdaParams->pWdaContext = pWDA;
11033 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11034 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11035
11036 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11037 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11038 pWdaParams);
11039 if(IS_WDI_STATUS_FAILURE(wstatus))
11040 {
11041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11042 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11043 status = CONVERT_WDI2VOS_STATUS(wstatus);
11044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11045 vos_mem_free(pWdaParams->wdaMsgParam);
11046 vos_mem_free(pWdaParams);
11047 }
11048
11049 return status;
11050}
11051
11052
11053/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011054 * FUNCTION: WDA_WdiIndicationCallback
11055 *
11056 */
11057void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11058 void* pUserData)
11059{
11060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011062}
Jeff Johnson295189b2012-06-20 16:38:30 -070011063/*
11064 * FUNCTION: WDA_ProcessWlanSuspendInd
11065 *
11066 */
11067VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11068 tSirWlanSuspendParam *pWlanSuspendParam)
11069{
11070 WDI_Status wdiStatus;
11071 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11075 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11076 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11077 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11080 if(WDI_STATUS_PENDING == wdiStatus)
11081 {
11082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011083 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 }
11085 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011088 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 vos_mem_free(pWlanSuspendParam);
11091 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11092}
11093
Chet Lanctot186b5732013-03-18 10:26:30 -070011094#ifdef WLAN_FEATURE_11W
11095/*
11096 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11097 *
11098 */
11099VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11100 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11101{
11102 WDI_Status wdiStatus;
11103 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11105 "------> %s ", __func__);
11106
11107 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11108 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11109 sizeof(tSirMacAddr));
11110
11111 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11112 wdiExclUnencryptParams.pUserData = pWDA;
11113
11114 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11115 if(WDI_STATUS_PENDING == wdiStatus)
11116 {
11117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11118 "Pending received for %s:%d ", __func__, __LINE__ );
11119 }
11120 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "Failure in %s:%d ", __func__, __LINE__ );
11124 }
11125 vos_mem_free(pExclUnencryptParam);
11126 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11127}
11128#endif
11129
Jeff Johnson295189b2012-06-20 16:38:30 -070011130/*
11131 * FUNCTION: WDA_ProcessWlanResumeCallback
11132 *
11133 */
11134void WDA_ProcessWlanResumeCallback(
11135 WDI_SuspendResumeRspParamsType *resumeRspParams,
11136 void* pUserData)
11137{
11138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011140 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011141 if(NULL == pWdaParams)
11142 {
11143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011144 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 VOS_ASSERT(0) ;
11146 return ;
11147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011148 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11149 {
11150 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011151 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11154 vos_mem_free(pWdaParams->wdaMsgParam);
11155 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 return ;
11157}
Jeff Johnson295189b2012-06-20 16:38:30 -070011158/*
11159 * FUNCTION: WDA_ProcessWlanResumeReq
11160 *
11161 */
11162VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11163 tSirWlanResumeParam *pWlanResumeParam)
11164{
11165 WDI_Status wdiStatus;
11166 WDI_ResumeParamsType *wdiResumeParams =
11167 (WDI_ResumeParamsType *)vos_mem_malloc(
11168 sizeof(WDI_ResumeParamsType) ) ;
11169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 if(NULL == wdiResumeParams)
11173 {
11174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 VOS_ASSERT(0);
11177 return VOS_STATUS_E_NOMEM;
11178 }
11179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11180 if(NULL == pWdaParams)
11181 {
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011184 VOS_ASSERT(0);
11185 vos_mem_free(wdiResumeParams);
11186 return VOS_STATUS_E_NOMEM;
11187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11189 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 wdiResumeParams->wdiReqStatusCB = NULL;
11192 pWdaParams->wdaMsgParam = pWlanResumeParam;
11193 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11194 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11196 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11197 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11199 {
11200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11201 "Failure in Host Resume REQ WDI API, free all the memory " );
11202 VOS_ASSERT(0);
11203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11204 vos_mem_free(pWdaParams->wdaMsgParam);
11205 vos_mem_free(pWdaParams);
11206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11208}
11209
Jeff Johnson295189b2012-06-20 16:38:30 -070011210/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011211 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 *
11213 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011214void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011215{
11216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 if(NULL == pWdaParams)
11220 {
11221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011222 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 VOS_ASSERT(0) ;
11224 return ;
11225 }
11226
11227 vos_mem_free(pWdaParams->wdaMsgParam) ;
11228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11229 vos_mem_free(pWdaParams) ;
11230 /*
11231 * No respone required for SetBeaconFilter req so just free the request
11232 * param here
11233 */
11234
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 return ;
11236}
Jeff Johnson295189b2012-06-20 16:38:30 -070011237/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011238 * FUNCTION: WDA_SetBeaconFilterReqCallback
11239 * Free memory.
11240 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11241 */
11242void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11243{
11244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11245
11246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11247 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11248
11249 if(NULL == pWdaParams)
11250 {
11251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11252 "%s: pWdaParams received NULL", __func__);
11253 VOS_ASSERT(0);
11254 return;
11255 }
11256
11257 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11258 {
11259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11260 vos_mem_free(pWdaParams->wdaMsgParam);
11261 vos_mem_free(pWdaParams);
11262 }
11263
11264 return;
11265}
11266/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 * FUNCTION: WDA_SetBeaconFilterReq
11268 * Request to WDI to send the beacon filtering related information.
11269 */
11270VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11271 tBeaconFilterMsg* pBeaconFilterInfo)
11272{
11273 WDI_Status status = WDI_STATUS_SUCCESS;
11274 tANI_U8 *dstPtr, *srcPtr;
11275 tANI_U8 filterLength;
11276 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11277 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11278 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 if(NULL == wdiBeaconFilterInfo)
11283 {
11284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011286 VOS_ASSERT(0);
11287 return VOS_STATUS_E_NOMEM;
11288 }
11289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11290 if(NULL == pWdaParams)
11291 {
11292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 VOS_ASSERT(0);
11295 vos_mem_free(wdiBeaconFilterInfo);
11296 return VOS_STATUS_E_NOMEM;
11297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11299 pBeaconFilterInfo->beaconInterval;
11300 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11301 pBeaconFilterInfo->capabilityInfo;
11302 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11303 pBeaconFilterInfo->capabilityMask;
11304 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011305
11306 //Fill the BssIdx
11307 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11308
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 //Fill structure with info contained in the beaconFilterTable
11310 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11311 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11312 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11313 if(WDI_BEACON_FILTER_LEN < filterLength)
11314 {
11315 filterLength = WDI_BEACON_FILTER_LEN;
11316 }
11317 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011318 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11319 wdiBeaconFilterInfo->pUserData = pWdaParams;
11320
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 /* Store param pointer as passed in by caller */
11322 /* store Params pass it to WDI */
11323 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11324 pWdaParams->pWdaContext = pWDA;
11325 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11326
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011328 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 if(IS_WDI_STATUS_FAILURE(status))
11330 {
11331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11332 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11333 vos_mem_free(pWdaParams->wdaMsgParam) ;
11334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11335 vos_mem_free(pWdaParams) ;
11336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 return CONVERT_WDI2VOS_STATUS(status) ;
11338}
Jeff Johnson295189b2012-06-20 16:38:30 -070011339/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011340 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 *
11342 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011343void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011344{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11346
Jeff Johnson295189b2012-06-20 16:38:30 -070011347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011348 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011349
11350 if(NULL == pWdaParams)
11351 {
11352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011353 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011354 VOS_ASSERT(0) ;
11355 return ;
11356 }
11357
11358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11359 vos_mem_free(pWdaParams->wdaMsgParam);
11360 vos_mem_free(pWdaParams);
11361
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 //print a msg, nothing else to do
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011364 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 return ;
11366}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011367/*
11368 * FUNCTION: WDA_RemBeaconFilterReqCallback
11369 * Free memory.
11370 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11371 */
11372void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11373{
11374 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11375
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11377 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11378
11379 if(NULL == pWdaParams)
11380 {
11381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11382 "%s: pWdaParams received NULL", __func__);
11383 VOS_ASSERT(0);
11384 return;
11385 }
11386
11387 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11388 {
11389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11390 vos_mem_free(pWdaParams->wdaMsgParam);
11391 vos_mem_free(pWdaParams);
11392 }
11393
11394 return;
11395}
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 // TODO: PE does not have this feature for now implemented,
11397 // but the support for removing beacon filter exists between
11398 // HAL and FW. This function can be called whenever PE defines
11399 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011400/*
11401 * FUNCTION: WDA_RemBeaconFilterReq
11402 * Request to WDI to send the removal of beacon filtering related information.
11403 */
11404VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11405 tRemBeaconFilterMsg* pBeaconFilterInfo)
11406{
11407 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011408 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011409 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11410 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11411 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011412 tWDA_ReqParams *pWdaParams ;
11413
Jeff Johnson295189b2012-06-20 16:38:30 -070011414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011415 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 if(NULL == wdiBeaconFilterInfo)
11417 {
11418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 VOS_ASSERT(0);
11421 return VOS_STATUS_E_NOMEM;
11422 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11424 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 {
11426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011429 vos_mem_free(wdiBeaconFilterInfo);
11430 vos_mem_free(pBeaconFilterInfo);
11431 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011433
11434 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11435 pBeaconFilterInfo->ucIeCount;
11436 //Fill structure with info contained in the ucRemIeId
11437 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11438 pBeaconFilterInfo->ucRemIeId,
11439 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11440 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11441 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011442
11443 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011444 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011446 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11447
11448 pWdaParams->pWdaContext = pWDA;
11449
Jeff Johnson43971f52012-07-17 12:26:56 -070011450 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011451 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011452 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011453 {
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11455 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011456 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11458 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011459 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011461 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011462}
Jeff Johnson295189b2012-06-20 16:38:30 -070011463/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011464 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 *
11466 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011467void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011468{
11469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011471 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 if(NULL == pWdaParams)
11473 {
11474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011475 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 VOS_ASSERT(0) ;
11477 return ;
11478 }
11479
11480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11481 vos_mem_free(pWdaParams) ;
11482
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 return ;
11484}
Jeff Johnson295189b2012-06-20 16:38:30 -070011485/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011486 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11487 * Free memory.
11488 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11489 */
11490void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11491{
11492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11493
11494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11495 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11496
11497 if(NULL == pWdaParams)
11498 {
11499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11500 "%s: pWdaParams received NULL", __func__);
11501 VOS_ASSERT(0);
11502 return;
11503 }
11504
11505 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11506 {
11507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11508 vos_mem_free(pWdaParams);
11509 }
11510
11511 return;
11512}
11513/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 * FUNCTION: WDA_SetRSSIThresholdsReq
11515 * Request to WDI to set the RSSI thresholds (sta mode).
11516 */
11517VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11518{
11519 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011520 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 tWDA_CbContext *pWDA = NULL ;
11522 v_PVOID_t pVosContext = NULL;
11523 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11524 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11525 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11526 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 if(NULL == wdiRSSIThresholdsInfo)
11530 {
11531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 VOS_ASSERT(0);
11534 return VOS_STATUS_E_NOMEM;
11535 }
11536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11537 if(NULL == pWdaParams)
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 VOS_ASSERT(0);
11542 vos_mem_free(wdiRSSIThresholdsInfo);
11543 return VOS_STATUS_E_NOMEM;
11544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11547 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11548 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11550 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11551 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11553 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11554 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011555 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11556 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11558 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11559
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 /* Store param pointer as passed in by caller */
11561 /* store Params pass it to WDI */
11562 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11563 pWdaParams->pWdaContext = pWDA;
11564 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011565 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011566 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011567 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 {
11569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11570 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011571 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11573 vos_mem_free(pWdaParams) ;
11574 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011575 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011576
11577}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011578/*
Yue Madb90ac12013-04-04 13:39:13 -070011579 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011580 *
11581 */
Yue Madb90ac12013-04-04 13:39:13 -070011582void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011583{
11584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11585
11586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011587 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 if(NULL == pWdaParams)
11589 {
11590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011591 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 VOS_ASSERT(0) ;
11593 return ;
11594 }
11595
11596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11597 vos_mem_free(pWdaParams->wdaMsgParam);
11598 vos_mem_free(pWdaParams) ;
11599
11600 //print a msg, nothing else to do
11601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011602 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 return ;
11604}
Jeff Johnson295189b2012-06-20 16:38:30 -070011605/*
Yue Madb90ac12013-04-04 13:39:13 -070011606 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011607 * Free memory.
11608 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011609 */
11610void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11611{
11612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11613
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11615 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11616
11617 if(NULL == pWdaParams)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11620 "%s: Invalid pWdaParams pointer", __func__);
11621 VOS_ASSERT(0);
11622 return;
11623 }
11624
11625 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11626 {
11627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11628 vos_mem_free(pWdaParams->wdaMsgParam);
11629 vos_mem_free(pWdaParams);
11630 }
11631
11632 return;
11633}
11634/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 * FUNCTION: WDA_ProcessHostOffloadReq
11636 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11637 * to broadcast traffic (sta mode).
11638 */
11639VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11640 tSirHostOffloadReq *pHostOffloadParams)
11641{
11642 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011643 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011644 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11645 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11646 sizeof(WDI_HostOffloadReqParamsType)) ;
11647 tWDA_ReqParams *pWdaParams ;
11648
11649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011650 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011651
11652 if(NULL == wdiHostOffloadInfo)
11653 {
11654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 VOS_ASSERT(0);
11657 return VOS_STATUS_E_NOMEM;
11658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11660 if(NULL == pWdaParams)
11661 {
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_ASSERT(0);
11665 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011666 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 return VOS_STATUS_E_NOMEM;
11668 }
11669
11670 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11671 pHostOffloadParams->offloadType;
11672 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11673 pHostOffloadParams->enableOrDisable;
11674
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011675 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11676 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11677
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11679 {
11680 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11681 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11682 pHostOffloadParams->params.hostIpv4Addr,
11683 4);
11684 break;
11685 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11686 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11687 pHostOffloadParams->params.hostIpv6Addr,
11688 16);
11689 break;
11690 case SIR_IPV6_NS_OFFLOAD:
11691 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11692 pHostOffloadParams->params.hostIpv6Addr,
11693 16);
11694
11695#ifdef WLAN_NS_OFFLOAD
11696 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11697 {
11698 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11699 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11700 16);
11701 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11702 }
11703 else
11704 {
11705 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11706 }
11707
11708 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11709 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11710 16);
11711 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11712 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11713 6);
11714
11715 //Only two are supported so let's go through them without a loop
11716 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11717 {
11718 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11719 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11720 16);
11721 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11722 }
11723 else
11724 {
11725 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11726 }
11727
11728 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11729 {
11730 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11731 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11732 16);
11733 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11734 }
11735 else
11736 {
11737 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11738 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011739 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11740 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 break;
11742#endif //WLAN_NS_OFFLOAD
11743 default:
11744 {
11745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "No Handling for Offload Type %x in WDA "
11747 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11748 //WDA_VOS_ASSERT(0) ;
11749 }
11750 }
Yue Madb90ac12013-04-04 13:39:13 -070011751 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11752 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011753
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011755 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 /* store Params pass it to WDI */
11757 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11758 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011759
Jeff Johnson295189b2012-06-20 16:38:30 -070011760
Jeff Johnson43971f52012-07-17 12:26:56 -070011761 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011762 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011763
Jeff Johnson43971f52012-07-17 12:26:56 -070011764 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011765 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053011766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053011767 "Failure in host offload REQ WDI API, free all the memory %d",
11768 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011769 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11771 vos_mem_free(pWdaParams->wdaMsgParam);
11772 vos_mem_free(pWdaParams) ;
11773 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011774 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011775
11776}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011777/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011778 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 *
11780 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011781void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011782{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11784
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__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011787
11788 if(NULL == pWdaParams)
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011791 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011792 VOS_ASSERT(0) ;
11793 return ;
11794 }
11795
11796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11797 vos_mem_free(pWdaParams->wdaMsgParam);
11798 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011799
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 //print a msg, nothing else to do
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011802 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 return ;
11804}
Jeff Johnson295189b2012-06-20 16:38:30 -070011805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011806 * FUNCTION: WDA_KeepAliveReqCallback
11807 * Free memory.
11808 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11809 */
11810void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11811{
11812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11813
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11815 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11816
11817 if(NULL == pWdaParams)
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "%s: pWdaParams received NULL", __func__);
11821 VOS_ASSERT(0);
11822 return;
11823 }
11824
11825 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11826 {
11827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11828 vos_mem_free(pWdaParams->wdaMsgParam);
11829 vos_mem_free(pWdaParams);
11830 }
11831
11832 return;
11833}
11834/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 * FUNCTION: WDA_ProcessKeepAliveReq
11836 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11837 * wakeup due to broadcast traffic (sta mode).
11838 */
11839VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11840 tSirKeepAliveReq *pKeepAliveParams)
11841{
11842 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011843 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11845 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11846 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011847 tWDA_ReqParams *pWdaParams;
11848
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011850 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 if(NULL == wdiKeepAliveInfo)
11852 {
11853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011856 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 return VOS_STATUS_E_NOMEM;
11858 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011859
11860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11861 if(NULL == pWdaParams)
11862 {
11863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011864 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011865 VOS_ASSERT(0);
11866 vos_mem_free(wdiKeepAliveInfo);
11867 vos_mem_free(pKeepAliveParams);
11868 return VOS_STATUS_E_NOMEM;
11869 }
11870
Jeff Johnson295189b2012-06-20 16:38:30 -070011871 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11872 pKeepAliveParams->packetType;
11873 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11874 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011875
11876 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11877 pKeepAliveParams->bssId,
11878 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011879
11880 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11881 {
11882 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11883 pKeepAliveParams->hostIpv4Addr,
11884 SIR_IPV4_ADDR_LEN);
11885 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11886 pKeepAliveParams->destIpv4Addr,
11887 SIR_IPV4_ADDR_LEN);
11888 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11889 pKeepAliveParams->destMacAddr,
11890 SIR_MAC_ADDR_LEN);
11891 }
11892 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11893 {
11894 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11895 SIR_IPV4_ADDR_LEN,
11896 0);
11897 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11898 SIR_IPV4_ADDR_LEN,
11899 0);
11900 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11901 SIR_MAC_ADDR_LEN,
11902 0);
11903 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011904 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11905 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011906
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011908 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011910 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11911 pWdaParams->pWdaContext = pWDA;
11912
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11914 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11915 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11916 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11917 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11919 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11920 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11921 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11922 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11924 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11925 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11926 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11927 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11928 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11929 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11930 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11932 "TimePeriod %d PacketType %d",
11933 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11934 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011935 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011936 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011937
Jeff Johnson43971f52012-07-17 12:26:56 -070011938 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011939 {
11940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11941 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011942 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11944 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011945 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011947 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011948
11949}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011950/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011951 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 *
11953 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011954void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011955 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11956 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011957{
11958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011960 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011961 if(NULL == pWdaParams)
11962 {
11963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011964 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 VOS_ASSERT(0) ;
11966 return ;
11967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11969 vos_mem_free(pWdaParams->wdaMsgParam);
11970 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 return ;
11972}
Jeff Johnson295189b2012-06-20 16:38:30 -070011973/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011974 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11975 * Free memory.
11976 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11977 */
11978void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11979{
11980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11981
11982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11983 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11984
11985 if(NULL == pWdaParams)
11986 {
11987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11988 "%s: pWdaParams received NULL", __func__);
11989 VOS_ASSERT(0);
11990 return;
11991 }
11992
11993 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11994 {
11995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11996 vos_mem_free(pWdaParams->wdaMsgParam);
11997 vos_mem_free(pWdaParams);
11998 }
11999
12000 return;
12001}
12002
12003/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012004 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12005 * Request to WDI to add WOWL Bcast pattern
12006 */
12007VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12008 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12009{
12010 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012011 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012012 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12013 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12014 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12015 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012018 if(NULL == wdiWowlAddBcPtrnInfo)
12019 {
12020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012022 VOS_ASSERT(0);
12023 return VOS_STATUS_E_NOMEM;
12024 }
12025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12026 if(NULL == pWdaParams)
12027 {
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012030 VOS_ASSERT(0);
12031 vos_mem_free(wdiWowlAddBcPtrnInfo);
12032 return VOS_STATUS_E_NOMEM;
12033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12035 pWowlAddBcPtrnParams->ucPatternId;
12036 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12037 pWowlAddBcPtrnParams->ucPatternByteOffset;
12038 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12039 pWowlAddBcPtrnParams->ucPatternMaskSize;
12040 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12041 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12043 {
12044 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12045 pWowlAddBcPtrnParams->ucPattern,
12046 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12047 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12048 pWowlAddBcPtrnParams->ucPatternMask,
12049 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12050 }
12051 else
12052 {
12053 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12054 pWowlAddBcPtrnParams->ucPattern,
12055 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12056 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12057 pWowlAddBcPtrnParams->ucPatternMask,
12058 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12059
12060 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12061 pWowlAddBcPtrnParams->ucPatternExt,
12062 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12063 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12064 pWowlAddBcPtrnParams->ucPatternMaskExt,
12065 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12066 }
12067
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012068 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12069 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12070
Yue Ma7f44bbe2013-04-12 11:47:39 -070012071 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12072 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 /* Store param pointer as passed in by caller */
12074 /* store Params pass it to WDI */
12075 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12076 pWdaParams->pWdaContext = pWDA;
12077 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012078 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012079 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012080 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12083 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012084 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 vos_mem_free(pWdaParams->wdaMsgParam) ;
12086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12087 vos_mem_free(pWdaParams) ;
12088 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012089 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012090
12091}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012092/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012093 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 *
12095 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012096void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012097 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12098 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012099{
12100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012102 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 if(NULL == pWdaParams)
12104 {
12105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 VOS_ASSERT(0) ;
12108 return ;
12109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12111 vos_mem_free(pWdaParams->wdaMsgParam);
12112 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 return ;
12114}
Jeff Johnson295189b2012-06-20 16:38:30 -070012115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012116 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12117 * Free memory.
12118 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12119 */
12120void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12121{
12122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12123
12124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12125 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12126
12127 if(NULL == pWdaParams)
12128 {
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12130 "%s: pWdaParams received NULL", __func__);
12131 VOS_ASSERT(0);
12132 return;
12133 }
12134
12135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12136 {
12137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12138 vos_mem_free(pWdaParams->wdaMsgParam);
12139 vos_mem_free(pWdaParams);
12140 }
12141
12142 return;
12143}
12144/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012145 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12146 * Request to WDI to delete WOWL Bcast pattern
12147 */
12148VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12149 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12150{
12151 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012152 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12154 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12155 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12156 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 if(NULL == wdiWowlDelBcPtrnInfo)
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 VOS_ASSERT(0);
12164 return VOS_STATUS_E_NOMEM;
12165 }
12166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12167 if(NULL == pWdaParams)
12168 {
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012171 VOS_ASSERT(0);
12172 vos_mem_free(wdiWowlDelBcPtrnInfo);
12173 return VOS_STATUS_E_NOMEM;
12174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012175 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12176 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012177
12178 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12179 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12180
Yue Ma7f44bbe2013-04-12 11:47:39 -070012181 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12182 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012183 /* Store param pointer as passed in by caller */
12184 /* store Params pass it to WDI */
12185 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12186 pWdaParams->pWdaContext = pWDA;
12187 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012188 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012189 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012190 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 {
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12193 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012194 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012195 vos_mem_free(pWdaParams->wdaMsgParam) ;
12196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12197 vos_mem_free(pWdaParams) ;
12198 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012199 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012200
12201}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012202/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012203 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 *
12205 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012206void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012207{
12208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012209 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012210 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 if(NULL == pWdaParams)
12214 {
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012217 VOS_ASSERT(0) ;
12218 return ;
12219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012221 if (NULL == pWDA)
12222 {
12223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12224 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012225
12226 if(pWdaParams->wdaWdiApiMsgParam)
12227 {
12228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12229 }
12230 vos_mem_free(pWdaParams);
12231
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012232 VOS_ASSERT(0);
12233 return ;
12234 }
12235
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12237
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012238 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12239
Jeff Johnson295189b2012-06-20 16:38:30 -070012240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12241 vos_mem_free(pWdaParams) ;
12242
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012243 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012244 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012245 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 return ;
12247}
Jeff Johnson295189b2012-06-20 16:38:30 -070012248/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012249 * FUNCTION: WDA_WowlEnterReqCallback
12250 * Free memory and send WOWL Enter RSP back to PE.
12251 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12252 */
12253void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12254{
12255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012256 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012257 tSirHalWowlEnterParams *pWowlEnterParams;
12258
12259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12260 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12261
12262 if(NULL == pWdaParams)
12263 {
12264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12265 "%s: pWdaParams received NULL", __func__);
12266 VOS_ASSERT(0);
12267 return;
12268 }
12269
12270 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012271 if (NULL == pWDA)
12272 {
12273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12274 "%s:pWDA is NULL", __func__);
12275 VOS_ASSERT(0);
12276 return ;
12277 }
12278
Yue Ma7f44bbe2013-04-12 11:47:39 -070012279 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12280 pWowlEnterParams->status = wdiStatus;
12281
12282 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12283 {
12284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12285 vos_mem_free(pWdaParams);
12286 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12287 }
12288
12289 return;
12290}
12291/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 * FUNCTION: WDA_ProcessWowlEnterReq
12293 * Request to WDI to enter WOWL
12294 */
12295VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12296 tSirHalWowlEnterParams *pWowlEnterParams)
12297{
12298 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012299 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12301 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12302 sizeof(WDI_WowlEnterReqParamsType)) ;
12303 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012306 if(NULL == wdiWowlEnterInfo)
12307 {
12308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 VOS_ASSERT(0);
12311 return VOS_STATUS_E_NOMEM;
12312 }
12313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12314 if(NULL == pWdaParams)
12315 {
12316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012318 VOS_ASSERT(0);
12319 vos_mem_free(wdiWowlEnterInfo);
12320 return VOS_STATUS_E_NOMEM;
12321 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012322
12323 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12324
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12326 pWowlEnterParams->magicPtrn,
12327 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012328 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12329 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12331 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12333 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12335 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12337 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12339 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12341 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012342 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12343 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012344#ifdef WLAN_WAKEUP_EVENTS
12345 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12346 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12347
12348 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12349 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12350
12351 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12352 pWowlEnterParams->ucWowNetScanOffloadMatch;
12353
12354 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12355 pWowlEnterParams->ucWowGTKRekeyError;
12356
12357 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12358 pWowlEnterParams->ucWoWBSSConnLoss;
12359#endif // WLAN_WAKEUP_EVENTS
12360
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012361 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12362 pWowlEnterParams->bssIdx;
12363
Yue Ma7f44bbe2013-04-12 11:47:39 -070012364 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12365 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 /* Store param pointer as passed in by caller */
12367 /* store Params pass it to WDI */
12368 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12369 pWdaParams->pWdaContext = pWDA;
12370 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012371 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012372 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012373 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012374 {
12375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12376 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012377 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012378 vos_mem_free(pWdaParams->wdaMsgParam) ;
12379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12380 vos_mem_free(pWdaParams) ;
12381 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012382 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012383
12384}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012385/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012386 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012387 *
12388 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012389void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012390{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012392 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012393 tSirHalWowlExitParams *pWowlExitParams;
12394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012395 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012396 if(NULL == pWdaParams)
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012399 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012400 VOS_ASSERT(0) ;
12401 return ;
12402 }
12403 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012404 if (NULL == pWDA)
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12407 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012408
12409 if(pWdaParams->wdaWdiApiMsgParam)
12410 {
12411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12412 }
12413 vos_mem_free(pWdaParams);
12414
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012415 VOS_ASSERT(0);
12416 return ;
12417 }
12418
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012419 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12420
12421 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012422 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012423
12424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12425 vos_mem_free(pWdaParams) ;
12426
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012428 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012429 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012430 return ;
12431}
Jeff Johnson295189b2012-06-20 16:38:30 -070012432/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012433 * FUNCTION: WDA_WowlExitReqCallback
12434 * Free memory and send WOWL Exit RSP back to PE.
12435 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12436 */
12437void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12438{
12439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012440 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012441 tSirHalWowlExitParams *pWowlExitParams;
12442
12443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12444 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12445
12446 if(NULL == pWdaParams)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12449 "%s: pWdaParams received NULL", __func__);
12450 VOS_ASSERT(0);
12451 return;
12452 }
12453
12454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012455 if (NULL == pWDA)
12456 {
12457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12458 "%s:pWDA is NULL", __func__);
12459 VOS_ASSERT(0);
12460 return ;
12461 }
12462
Yue Ma7f44bbe2013-04-12 11:47:39 -070012463 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12464 pWowlExitParams->status = wdiStatus;
12465
12466 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12467 {
12468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12469 vos_mem_free(pWdaParams);
12470 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12471 }
12472
12473 return;
12474}
12475/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 * FUNCTION: WDA_ProcessWowlExitReq
12477 * Request to WDI to add WOWL Bcast pattern
12478 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012479VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12480 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012481{
12482 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012483 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012484 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12485 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12486 sizeof(WDI_WowlExitReqParamsType)) ;
12487 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012489 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012490 if(NULL == wdiWowlExitInfo)
12491 {
12492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012493 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012494 VOS_ASSERT(0);
12495 return VOS_STATUS_E_NOMEM;
12496 }
12497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12498 if(NULL == pWdaParams)
12499 {
12500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012501 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012502 VOS_ASSERT(0);
12503 vos_mem_free(wdiWowlExitInfo);
12504 return VOS_STATUS_E_NOMEM;
12505 }
12506
12507 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12508 pWowlExitParams->bssIdx;
12509
Yue Ma7f44bbe2013-04-12 11:47:39 -070012510 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12511 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012512
12513 /* Store param pointer as passed in by caller */
12514 /* store Params pass it to WDI */
12515 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12516 pWdaParams->pWdaContext = pWDA;
12517 pWdaParams->wdaMsgParam = pWowlExitParams;
12518
12519 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012520 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521
Jeff Johnson43971f52012-07-17 12:26:56 -070012522 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 {
12524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12525 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012526 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12528 vos_mem_free(pWdaParams->wdaMsgParam);
12529 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012531 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012533/*
12534 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12535 * Request to WDI to determine whether a given station is capable of
12536 * using HW-based frame translation
12537 */
12538v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12539 tANI_U8 staIdx)
12540{
12541 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12542}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012543
12544/*
12545 * FUNCTION: WDA_IsSelfSTA
12546 * Request to WDI to determine whether a given STAID is self station
12547 * index.
12548 */
12549v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12550{
12551
12552 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12553
Girish Gowli05cf44e2014-06-12 21:53:37 +053012554 if (NULL != pWDA)
12555 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12556 else
12557 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012558}
Jeff Johnson295189b2012-06-20 16:38:30 -070012559/*
12560 * FUNCTION: WDA_NvDownloadReqCallback
12561 * send NV Download RSP back to PE
12562 */
12563void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12564 void* pUserData)
12565{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012566
12567 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012568 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012569
Jeff Johnson295189b2012-06-20 16:38:30 -070012570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012571 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012572
12573 if(NULL == pWdaParams)
12574 {
12575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012576 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012577 VOS_ASSERT(0) ;
12578 return ;
12579 }
12580
12581 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012582 if (NULL == pWDA)
12583 {
12584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12585 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012586
12587 if(pWdaParams->wdaWdiApiMsgParam)
12588 {
12589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12590 }
12591 vos_mem_free(pWdaParams);
12592
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012593 VOS_ASSERT(0);
12594 return ;
12595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012596
Jeff Johnson295189b2012-06-20 16:38:30 -070012597 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12599 vos_mem_free(pWdaParams);
12600
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012602 return ;
12603}
Jeff Johnson295189b2012-06-20 16:38:30 -070012604/*
12605 * FUNCTION: WDA_ProcessNvDownloadReq
12606 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12607 */
12608VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12609{
12610 /* Initialize the local Variables*/
12611 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12612 v_VOID_t *pNvBuffer=NULL;
12613 v_SIZE_t bufferSize = 0;
12614 WDI_Status status = WDI_STATUS_E_FAILURE;
12615 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012616 tWDA_ReqParams *pWdaParams ;
12617
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012619 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012620 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012621 {
12622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012623 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012624 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 return VOS_STATUS_E_FAILURE;
12626 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012627
Jeff Johnson295189b2012-06-20 16:38:30 -070012628 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012629 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12630
Jeff Johnson295189b2012-06-20 16:38:30 -070012631 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12632 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 if(NULL == wdiNvDownloadReqParam)
12634 {
12635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012637 VOS_ASSERT(0);
12638 return VOS_STATUS_E_NOMEM;
12639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 /* Copy Params to wdiNvDownloadReqParam*/
12641 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12642 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012643
12644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12645 if(NULL == pWdaParams)
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012648 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012649 VOS_ASSERT(0);
12650 vos_mem_free(wdiNvDownloadReqParam);
12651 return VOS_STATUS_E_NOMEM;
12652 }
12653
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012655 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12656 pWdaParams->wdaMsgParam = NULL;
12657 pWdaParams->pWdaContext = pWDA;
12658
12659
Jeff Johnson295189b2012-06-20 16:38:30 -070012660 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012661
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012663 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12664
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 if(IS_WDI_STATUS_FAILURE(status))
12666 {
12667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12668 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12670 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012673}
12674/*
12675 * FUNCTION: WDA_FlushAcReqCallback
12676 * send Flush AC RSP back to TL
12677 */
12678void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12679{
12680 vos_msg_t wdaMsg = {0} ;
12681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12682 tFlushACReq *pFlushACReqParams;
12683 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012685 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012686 if(NULL == pWdaParams)
12687 {
12688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012689 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012690 VOS_ASSERT(0) ;
12691 return ;
12692 }
12693
12694 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12695 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12696 if(NULL == pFlushACRspParams)
12697 {
12698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012701 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012702 return ;
12703 }
12704 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12705 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12706 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12707 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12708 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012709 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012710 vos_mem_free(pWdaParams->wdaMsgParam) ;
12711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12712 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012713 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12714 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12715 // POST message to TL
12716 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12717
Jeff Johnson295189b2012-06-20 16:38:30 -070012718 return ;
12719}
Jeff Johnson295189b2012-06-20 16:38:30 -070012720/*
12721 * FUNCTION: WDA_ProcessFlushAcReq
12722 * Request to WDI to Update the DELBA REQ params.
12723 */
12724VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12725 tFlushACReq *pFlushAcReqParams)
12726{
12727 WDI_Status status = WDI_STATUS_SUCCESS ;
12728 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12729 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12730 sizeof(WDI_FlushAcReqParamsType)) ;
12731 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012732 if(NULL == wdiFlushAcReqParam)
12733 {
12734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012736 VOS_ASSERT(0);
12737 return VOS_STATUS_E_NOMEM;
12738 }
12739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12740 if(NULL == pWdaParams)
12741 {
12742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012744 VOS_ASSERT(0);
12745 vos_mem_free(wdiFlushAcReqParam);
12746 return VOS_STATUS_E_NOMEM;
12747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012749 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012750 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12751 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12752 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12753 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012754 /* Store Flush AC pointer, as this will be used for response */
12755 /* store Params pass it to WDI */
12756 pWdaParams->pWdaContext = pWDA;
12757 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12758 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012759 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12760 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012761 if(IS_WDI_STATUS_FAILURE(status))
12762 {
12763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12764 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12765 vos_mem_free(pWdaParams->wdaMsgParam) ;
12766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12767 vos_mem_free(pWdaParams) ;
12768 //TODO: respond to TL with failure
12769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012771}
Jeff Johnson295189b2012-06-20 16:38:30 -070012772/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012773 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012774 *
12775 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012776void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012777{
12778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012779 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012780 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012781
12782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012784 if(NULL == pWdaParams)
12785 {
12786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012788 VOS_ASSERT(0) ;
12789 return ;
12790 }
12791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012792 if (NULL == pWDA)
12793 {
12794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12795 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012796 vos_mem_free(pWdaParams->wdaMsgParam) ;
12797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12798 vos_mem_free(pWdaParams) ;
12799
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012800 VOS_ASSERT(0);
12801 return ;
12802 }
12803
Jeff Johnson295189b2012-06-20 16:38:30 -070012804 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12805 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12806 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12807 {
12808 pWDA->wdaAmpSessionOn = VOS_FALSE;
12809 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 vos_mem_free(pWdaParams->wdaMsgParam) ;
12811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12812 vos_mem_free(pWdaParams) ;
12813 /*
12814 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12815 * param here
12816 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012817 return ;
12818}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012819/*
12820 * FUNCTION: WDA_BtAmpEventReqCallback
12821 * Free memory.
12822 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12823 */
12824void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12825{
12826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012827 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012828 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012829
Yue Ma7f44bbe2013-04-12 11:47:39 -070012830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12831 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12832
12833 if(NULL == pWdaParams)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12836 "%s: pWdaParams received NULL", __func__);
12837 VOS_ASSERT(0);
12838 return;
12839 }
12840
12841 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012842 if (NULL == pWDA)
12843 {
12844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12845 "%s:pWDA is NULL", __func__);
12846 VOS_ASSERT(0);
12847 return ;
12848 }
12849
Yue Ma7f44bbe2013-04-12 11:47:39 -070012850 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12851
12852 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12853 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12854 {
12855 pWDA->wdaAmpSessionOn = VOS_FALSE;
12856 }
12857
12858 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12859 {
12860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12861 vos_mem_free(pWdaParams->wdaMsgParam);
12862 vos_mem_free(pWdaParams);
12863 }
12864
12865 return;
12866}
Jeff Johnson295189b2012-06-20 16:38:30 -070012867/*
12868 * FUNCTION: WDA_ProcessBtAmpEventReq
12869 * Request to WDI to Update with BT AMP events.
12870 */
12871VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12872 tSmeBtAmpEvent *pBtAmpEventParams)
12873{
12874 WDI_Status status = WDI_STATUS_SUCCESS ;
12875 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12876 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12877 sizeof(WDI_BtAmpEventParamsType)) ;
12878 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 if(NULL == wdiBtAmpEventParam)
12882 {
12883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012885 VOS_ASSERT(0);
12886 return VOS_STATUS_E_NOMEM;
12887 }
12888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12889 if(NULL == pWdaParams)
12890 {
12891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012893 VOS_ASSERT(0);
12894 vos_mem_free(wdiBtAmpEventParam);
12895 return VOS_STATUS_E_NOMEM;
12896 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12898 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012899 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12900 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 /* Store BT AMP event pointer, as this will be used for response */
12902 /* store Params pass it to WDI */
12903 pWdaParams->pWdaContext = pWDA;
12904 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12905 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012906 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012907 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012908 if(IS_WDI_STATUS_FAILURE(status))
12909 {
12910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12911 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12912 vos_mem_free(pWdaParams->wdaMsgParam) ;
12913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12914 vos_mem_free(pWdaParams) ;
12915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012916 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12917 {
12918 pWDA->wdaAmpSessionOn = VOS_TRUE;
12919 }
12920 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012921}
12922
Jeff Johnson295189b2012-06-20 16:38:30 -070012923/*
12924 * FUNCTION: WDA_FTMCommandReqCallback
12925 * Handle FTM CMD response came from HAL
12926 * Route responce to HDD FTM
12927 */
12928void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12929 void *usrData)
12930{
12931 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12933 {
12934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012935 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 return;
12937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 /* Release Current FTM Command Request */
12939 vos_mem_free(pWDA->wdaFTMCmdReq);
12940 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 /* Post FTM Responce to HDD FTM */
12942 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 return;
12944}
Jeff Johnson295189b2012-06-20 16:38:30 -070012945/*
12946 * FUNCTION: WDA_ProcessFTMCommand
12947 * Send FTM command to WDI
12948 */
12949VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12950 tPttMsgbuffer *pPTTFtmCmd)
12951{
12952 WDI_Status status = WDI_STATUS_SUCCESS;
12953 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 ftmCMDReq = (WDI_FTMCommandReqType *)
12955 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12956 if(NULL == ftmCMDReq)
12957 {
12958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12959 "WDA FTM Command buffer alloc fail");
12960 return VOS_STATUS_E_NOMEM;
12961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12963 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 /* Send command to WDI */
12966 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 return status;
12968}
Jeff Johnsone7245742012-09-05 17:12:55 -070012969#ifdef FEATURE_OEM_DATA_SUPPORT
12970/*
12971 * FUNCTION: WDA_StartOemDataReqCallback
12972 *
12973 */
12974void WDA_StartOemDataReqCallback(
12975 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12976 void* pUserData)
12977{
12978 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012980 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012981 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012982
Jeff Johnsone7245742012-09-05 17:12:55 -070012983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012984 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012985
12986 if(NULL == pWdaParams)
12987 {
12988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012989 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012990 VOS_ASSERT(0) ;
12991 return ;
12992 }
12993 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12994
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012995 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012998 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012999 VOS_ASSERT(0);
13000 return ;
13001 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013002
Jeff Johnsone7245742012-09-05 17:12:55 -070013003 /*
13004 * Allocate memory for response params sent to PE
13005 */
13006 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13007
13008 // Check if memory is allocated for OemdataMeasRsp Params.
13009 if(NULL == pOemDataRspParams)
13010 {
13011 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13012 "OEM DATA WDA callback alloc fail");
13013 VOS_ASSERT(0) ;
13014 return;
13015 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013016
Jeff Johnsone7245742012-09-05 17:12:55 -070013017 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13019 vos_mem_free(pWdaParams->wdaMsgParam);
13020 vos_mem_free(pWdaParams) ;
13021
Jeff Johnsone7245742012-09-05 17:12:55 -070013022 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013023 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013024 * Also, here success always means that we have atleast one BSSID.
13025 */
13026 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13027
13028 //enable Tx
13029 status = WDA_ResumeDataTx(pWDA);
13030 if(status != VOS_STATUS_SUCCESS)
13031 {
13032 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13033 }
13034 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13035 return ;
13036}
13037/*
13038 * FUNCTION: WDA_ProcessStartOemDataReq
13039 * Send Start Oem Data Req to WDI
13040 */
13041VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13042 tStartOemDataReq *pOemDataReqParams)
13043{
13044 WDI_Status status = WDI_STATUS_SUCCESS;
13045 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013046 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013047
13048 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13049
13050 if(NULL == wdiOemDataReqParams)
13051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013054 VOS_ASSERT(0);
13055 return VOS_STATUS_E_NOMEM;
13056 }
13057
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013058 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13059 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13060 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13061 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013062
13063 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13064
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13066 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013067 {
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013070 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013071 vos_mem_free(pOemDataReqParams);
13072 VOS_ASSERT(0);
13073 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013074 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013075
Bernald44a1ae2013-01-09 08:30:39 -080013076 pWdaParams->pWdaContext = (void*)pWDA;
13077 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13078 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013079
13080 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13081 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013082
13083 if(IS_WDI_STATUS_FAILURE(status))
13084 {
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13086 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13088 vos_mem_free(pWdaParams->wdaMsgParam);
13089 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013090 }
13091 return CONVERT_WDI2VOS_STATUS(status) ;
13092}
13093#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013094/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013095 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 *
13097 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013098void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013099{
13100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013102 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 if(NULL == pWdaParams)
13104 {
13105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013107 VOS_ASSERT(0) ;
13108 return ;
13109 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013110
13111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13112 vos_mem_free(pWdaParams->wdaMsgParam);
13113 vos_mem_free(pWdaParams);
13114
13115 return ;
13116}
13117/*
13118 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13119 * Free memory.
13120 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13121 */
13122void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13123{
13124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13125
13126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13127 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13128
13129 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13132 "%s: pWdaParams received NULL", __func__);
13133 VOS_ASSERT(0);
13134 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013135 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013136
13137 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013138 {
13139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013140 vos_mem_free(pWdaParams->wdaMsgParam);
13141 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013143
13144 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013145}
Jeff Johnson295189b2012-06-20 16:38:30 -070013146#ifdef WLAN_FEATURE_GTK_OFFLOAD
13147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013148 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 *
13150 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013151void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013152 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013153{
13154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13155
13156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013157 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013158 if(NULL == pWdaParams)
13159 {
13160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13161 "%s: pWdaParams received NULL", __func__);
13162 VOS_ASSERT(0);
13163 return;
13164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013165
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 vos_mem_free(pWdaParams->wdaMsgParam) ;
13167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13168 vos_mem_free(pWdaParams) ;
13169
13170 //print a msg, nothing else to do
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013172 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013173
13174 return ;
13175}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013176/*
13177 * FUNCTION: WDA_GTKOffloadReqCallback
13178 * Free memory.
13179 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13180 */
13181void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13182{
13183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013184
Yue Ma7f44bbe2013-04-12 11:47:39 -070013185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13186 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13187
13188 if(NULL == pWdaParams)
13189 {
13190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13191 "%s: pWdaParams received NULL", __func__);
13192 VOS_ASSERT(0);
13193 return;
13194 }
13195
13196 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13197 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013198 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13199 sizeof(WDI_GtkOffloadReqMsg));
13200 vos_mem_zero(pWdaParams->wdaMsgParam,
13201 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13203 vos_mem_free(pWdaParams->wdaMsgParam);
13204 vos_mem_free(pWdaParams);
13205 }
13206
13207 return;
13208}
Jeff Johnson295189b2012-06-20 16:38:30 -070013209/*
13210 * FUNCTION: WDA_ProcessGTKOffloadReq
13211 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13212 * to broadcast traffic (sta mode).
13213 */
13214VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13215 tpSirGtkOffloadParams pGtkOffloadParams)
13216{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013217 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13219 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13220 sizeof(WDI_GtkOffloadReqMsg)) ;
13221 tWDA_ReqParams *pWdaParams ;
13222
13223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013224 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013225
13226 if(NULL == wdiGtkOffloadReqMsg)
13227 {
13228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013230 VOS_ASSERT(0);
13231 return VOS_STATUS_E_NOMEM;
13232 }
13233
13234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13235 if(NULL == pWdaParams)
13236 {
13237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013239 VOS_ASSERT(0);
13240 vos_mem_free(wdiGtkOffloadReqMsg);
13241 return VOS_STATUS_E_NOMEM;
13242 }
13243
13244 //
13245 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13246 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013247
13248 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013249 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013250
Jeff Johnson295189b2012-06-20 16:38:30 -070013251 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13252 // Copy KCK
13253 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13254 // Copy KEK
13255 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13256 // Copy KeyReplayCounter
13257 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13258 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13259
Yue Ma7f44bbe2013-04-12 11:47:39 -070013260 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13261 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013262
Jeff Johnson295189b2012-06-20 16:38:30 -070013263
13264 /* Store Params pass it to WDI */
13265 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13266 pWdaParams->pWdaContext = pWDA;
13267 /* Store param pointer as passed in by caller */
13268 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13269
Yue Ma7f44bbe2013-04-12 11:47:39 -070013270 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013271
13272 if(IS_WDI_STATUS_FAILURE(status))
13273 {
13274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13275 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013276 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13277 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13279 vos_mem_free(pWdaParams->wdaMsgParam);
13280 vos_mem_free(pWdaParams);
13281 }
13282
13283 return CONVERT_WDI2VOS_STATUS(status) ;
13284}
13285
13286/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013287 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013288 *
13289 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013290void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013291 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013292{
13293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13294 tWDA_CbContext *pWDA;
13295 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013296 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 vos_msg_t vosMsg;
13298
13299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013300 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013301
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013302 if(NULL == pWdaParams)
13303 {
13304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13305 "%s: pWdaParams received NULL", __func__);
13306 VOS_ASSERT(0);
13307 return;
13308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013309
Nirav Shah374de6e2014-02-13 16:40:01 +053013310 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13311 if(NULL == pGtkOffloadGetInfoRsp)
13312 {
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13314 "%s: vos_mem_malloc failed ", __func__);
13315 VOS_ASSERT(0);
13316 return;
13317 }
13318
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13320 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13321
13322 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13323 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13324
13325 /* Message Header */
13326 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013327 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013328
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013329 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13330 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13331 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13332 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13333 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013334
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013335 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13336 pwdiGtkOffloadGetInfoRsparams->bssId,
13337 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 /* VOS message wrapper */
13339 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13340 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13341 vosMsg.bodyval = 0;
13342
13343 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13344 {
13345 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013346 vos_mem_zero(pGtkOffloadGetInfoRsp,
13347 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13349 }
13350
13351 vos_mem_free(pWdaParams->wdaMsgParam) ;
13352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13353 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013354
13355 return;
13356}
13357/*
13358 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13359 * Free memory and send RSP back to SME.
13360 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13361 */
13362void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13363{
13364 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13365 vos_msg_t vosMsg;
13366
13367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13368 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13369
13370 if(NULL == pWdaParams)
13371 {
13372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13373 "%s: pWdaParams received NULL", __func__);
13374 VOS_ASSERT(0);
13375 return;
13376 }
13377
13378 /* VOS message wrapper */
13379 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13380 vosMsg.bodyptr = NULL;
13381 vosMsg.bodyval = 0;
13382
13383 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13384 {
13385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13386 vos_mem_free(pWdaParams->wdaMsgParam);
13387 vos_mem_free(pWdaParams);
13388 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13389 }
13390
13391 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013392}
13393#endif
13394
13395/*
13396 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13397 * Request to WDI to set Tx Per Tracking configurations
13398 */
13399VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13400{
13401 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013402 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013403 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13404 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13405 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13406 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013408 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 if(NULL == pwdiSetTxPerTrackingReqParams)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 vos_mem_free(pTxPerTrackingParams);
13414 VOS_ASSERT(0);
13415 return VOS_STATUS_E_NOMEM;
13416 }
13417 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13418 if(NULL == pWdaParams)
13419 {
13420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013422 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13423 vos_mem_free(pTxPerTrackingParams);
13424 VOS_ASSERT(0);
13425 return VOS_STATUS_E_NOMEM;
13426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013427 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13428 pTxPerTrackingParams->ucTxPerTrackingEnable;
13429 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13430 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13431 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13432 pTxPerTrackingParams->ucTxPerTrackingRatio;
13433 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13434 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013435 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13436 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 /* Store param pointer as passed in by caller */
13438 /* store Params pass it to WDI
13439 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13440 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13441 pWdaParams->pWdaContext = pWDA;
13442 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013443 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013444 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013445 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 {
13447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13448 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013449 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013450 vos_mem_free(pWdaParams->wdaMsgParam) ;
13451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13452 vos_mem_free(pWdaParams) ;
13453 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013454 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013455
13456}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013457/*
13458 * FUNCTION: WDA_HALDumpCmdCallback
13459 * Send the VOS complete .
13460 */
13461void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13462 void* pUserData)
13463{
13464 tANI_U8 *buffer = NULL;
13465 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013466 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 if(NULL == pWdaParams)
13468 {
13469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013470 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013471 VOS_ASSERT(0) ;
13472 return ;
13473 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013474
13475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13476 "%s: WDA HAL DUMP Resp Received",__func__);
13477
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 pWDA = pWdaParams->pWdaContext;
13479 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 if(wdiRspParams->usBufferLen > 0)
13481 {
13482 /*Copy the Resp data to UMAC supplied buffer*/
13483 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13484 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013485
13486 if (!pWdaParams->wdaHALDumpAsync)
13487 {/* Indicate VOSS about the start complete */
13488 vos_WDAComplete_cback(pWDA->pVosContext);
13489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 return ;
13493}
13494
Jeff Johnson295189b2012-06-20 16:38:30 -070013495/*
13496 * FUNCTION: WDA_ProcessHALDumpCmdReq
13497 * Send Dump command to WDI
13498 */
13499VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13500 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013501 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013502{
13503 WDI_Status status = WDI_STATUS_SUCCESS;
13504 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13505 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013506 tWDA_HalDumpReqParams *pWdaParams ;
13507
Jeff Johnson295189b2012-06-20 16:38:30 -070013508 pVosContextType pVosContext = NULL;
13509 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13511 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013512 if(pVosContext)
13513 {
13514 if (pVosContext->isLogpInProgress)
13515 {
13516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13517 "%s:LOGP in Progress. Ignore!!!", __func__);
13518 return VOS_STATUS_E_BUSY;
13519 }
13520 }
13521 else
13522 {
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13524 "%s: VOS Context Null", __func__);
13525 return VOS_STATUS_E_RESOURCES;
13526 }
13527
Siddharth Bhal68115602015-01-18 20:44:55 +053013528 if (NULL == pVosContext->pWDAContext)
13529 {
13530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13531 "%s: WDA Context Null", __func__);
13532 return VOS_STATUS_E_RESOURCES;
13533 }
13534 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013535 if(NULL == pWdaParams)
13536 {
13537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013539 return VOS_STATUS_E_NOMEM;
13540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013541 /* Allocate memory WDI request structure*/
13542 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13543 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13544 if(NULL == wdiHALDumpCmdReqParam)
13545 {
13546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13547 "WDA HAL DUMP Command buffer alloc fail");
13548 vos_mem_free(pWdaParams);
13549 return WDI_STATUS_E_FAILURE;
13550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013551 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013552 /* Extract the arguments */
13553 wdiHalDumpCmdInfo->command = cmd;
13554 wdiHalDumpCmdInfo->argument1 = arg1;
13555 wdiHalDumpCmdInfo->argument2 = arg2;
13556 wdiHalDumpCmdInfo->argument3 = arg3;
13557 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013558 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013559 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013560 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013561
13562 /* Response message will be passed through the buffer */
13563 pWdaParams->wdaMsgParam = (void *)pBuffer;
13564
13565 /* store Params pass it to WDI */
13566 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013567
13568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13569 "%s: WDA HAL DUMP Command sent",__func__);
13570
Jeff Johnson295189b2012-06-20 16:38:30 -070013571 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013572 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13573 pWdaParams);
13574 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13575 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013576 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013577 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13578 WDA_DUMPCMD_WAIT_TIMEOUT );
13579 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013581 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13582 {
13583 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13584 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13585 }
13586 else
13587 {
13588 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13589 "%s: WDA_HALDUMP reporting other error",__func__);
13590 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053013591 if (!(vos_isLoadUnloadInProgress() ||
13592 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
13593 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 }
13596 return status;
13597}
Jeff Johnson295189b2012-06-20 16:38:30 -070013598#ifdef WLAN_FEATURE_GTK_OFFLOAD
13599/*
13600 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13601 * Request to WDI to get GTK Offload Information
13602 */
13603VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13604 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13605{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013606 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013607 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13608 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13609 tWDA_ReqParams *pWdaParams ;
13610
13611 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13612 {
13613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 VOS_ASSERT(0);
13616 return VOS_STATUS_E_NOMEM;
13617 }
13618
13619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13620 if(NULL == pWdaParams)
13621 {
13622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 VOS_ASSERT(0);
13625 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13626 return VOS_STATUS_E_NOMEM;
13627 }
13628
Yue Ma7f44bbe2013-04-12 11:47:39 -070013629 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13630 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013631
Jeff Johnson295189b2012-06-20 16:38:30 -070013632 /* Store Params pass it to WDI */
13633 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13634 pWdaParams->pWdaContext = pWDA;
13635 /* Store param pointer as passed in by caller */
13636 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13637
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013638 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013639 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013640
Yue Ma7f44bbe2013-04-12 11:47:39 -070013641 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013642
13643 if(IS_WDI_STATUS_FAILURE(status))
13644 {
13645 /* failure returned by WDI API */
13646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13647 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13649 vos_mem_free(pWdaParams) ;
13650 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13651 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13652 }
13653
13654 return CONVERT_WDI2VOS_STATUS(status) ;
13655}
13656#endif // WLAN_FEATURE_GTK_OFFLOAD
13657
13658/*
Yue Mab9c86f42013-08-14 15:59:08 -070013659 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13660 *
13661 */
13662VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13663 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13664{
13665 WDI_Status wdiStatus;
13666 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13667
13668 addPeriodicTxPtrnParams =
13669 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13670
13671 if (NULL == addPeriodicTxPtrnParams)
13672 {
13673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13674 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13675 __func__);
13676
13677 return VOS_STATUS_E_NOMEM;
13678 }
13679
13680 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13681 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13682
13683 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13684 addPeriodicTxPtrnParams->pUserData = pWDA;
13685
13686 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13687
13688 if (WDI_STATUS_PENDING == wdiStatus)
13689 {
13690 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13691 "Pending received for %s:%d", __func__, __LINE__ );
13692 }
13693 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13694 {
13695 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13696 "Failure in %s:%d", __func__, __LINE__ );
13697 }
13698
13699 vos_mem_free(addPeriodicTxPtrnParams);
13700
13701 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13702}
13703
13704/*
13705 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13706 *
13707 */
13708VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13709 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13710{
13711 WDI_Status wdiStatus;
13712 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13713
13714 delPeriodicTxPtrnParams =
13715 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13716
13717 if (NULL == delPeriodicTxPtrnParams)
13718 {
13719 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13720 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13721 __func__);
13722
13723 return VOS_STATUS_E_NOMEM;
13724 }
13725
13726 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13727 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13728
13729 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13730 delPeriodicTxPtrnParams->pUserData = pWDA;
13731
13732 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13733
13734 if (WDI_STATUS_PENDING == wdiStatus)
13735 {
13736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13737 "Pending received for %s:%d", __func__, __LINE__ );
13738 }
13739 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13740 {
13741 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13742 "Failure in %s:%d", __func__, __LINE__ );
13743 }
13744
13745 vos_mem_free(delPeriodicTxPtrnParams);
13746
13747 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13748}
13749
Abhishek Singh00b71972016-01-07 10:51:04 +053013750/*
13751 * FUNCTION: WDA_ProcessRateUpdateInd
13752 *
13753 */
13754VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13755 tSirRateUpdateInd *pRateUpdateParams)
13756{
13757 WDI_Status wdiStatus;
13758 WDI_RateUpdateIndParams rateUpdateParams;
13759
13760 vos_mem_copy(rateUpdateParams.bssid,
13761 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13762
13763 rateUpdateParams.ucastDataRateTxFlag =
13764 pRateUpdateParams->ucastDataRateTxFlag;
13765 rateUpdateParams.rmcDataRateTxFlag =
13766 pRateUpdateParams->rmcDataRateTxFlag;
13767 rateUpdateParams.mcastDataRate24GHzTxFlag =
13768 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13769 rateUpdateParams.mcastDataRate5GHzTxFlag =
13770 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13771
13772 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13773 rateUpdateParams.rmcDataRate =
13774 pRateUpdateParams->rmcDataRate;
13775 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13776 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13777
13778 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13779 rateUpdateParams.pUserData = pWDA;
13780
13781 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13782
13783 if (WDI_STATUS_PENDING == wdiStatus)
13784 {
13785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13786 "Pending received for %s:%d", __func__, __LINE__ );
13787 }
13788 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13789 {
13790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13791 "Failure in %s:%d", __func__, __LINE__ );
13792 }
13793
13794 vos_mem_free(pRateUpdateParams);
13795
13796 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13797}
13798
13799
Rajeev79dbe4c2013-10-05 11:03:42 +053013800#ifdef FEATURE_WLAN_BATCH_SCAN
13801/*
13802 * FUNCTION: WDA_ProcessStopBatchScanInd
13803 *
13804 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13805 *
13806 * PARAM:
13807 * pWDA: pointer to WDA context
13808 * pReq: pointer to stop batch scan request
13809 */
13810VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13811 tSirStopBatchScanInd *pReq)
13812{
13813 WDI_Status wdiStatus;
13814 WDI_StopBatchScanIndType wdiReq;
13815
13816 wdiReq.param = pReq->param;
13817
13818 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13819
13820 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13821 {
13822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13823 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13824 }
13825
13826 vos_mem_free(pReq);
13827
13828 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13829}
13830/*==========================================================================
13831 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13832
13833 DESCRIPTION
13834 API to pull batch scan result from FW
13835
13836 PARAMETERS
13837 pWDA: Pointer to WDA context
13838 pGetBatchScanReq: Pointer to get batch scan result indication
13839
13840 RETURN VALUE
13841 NONE
13842
13843===========================================================================*/
13844VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13845 tSirTriggerBatchScanResultInd *pReq)
13846{
13847 WDI_Status wdiStatus;
13848 WDI_TriggerBatchScanResultIndType wdiReq;
13849
13850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13851 "------> %s " ,__func__);
13852
13853 wdiReq.param = pReq->param;
13854
13855 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13856
13857 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13858 {
13859 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13860 "Trigger batch scan result ind failed %s:%d",
13861 __func__, wdiStatus);
13862 }
13863
13864 vos_mem_free(pReq);
13865
13866 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13867}
13868
13869/*==========================================================================
13870 FUNCTION WDA_SetBatchScanRespCallback
13871
13872 DESCRIPTION
13873 API to process set batch scan response from FW
13874
13875 PARAMETERS
13876 pRsp: Pointer to set batch scan response
13877 pUserData: Pointer to user data
13878
13879 RETURN VALUE
13880 NONE
13881
13882===========================================================================*/
13883void WDA_SetBatchScanRespCallback
13884(
13885 WDI_SetBatchScanRspType *pRsp,
13886 void* pUserData
13887)
13888{
13889 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13890 tpAniSirGlobal pMac;
13891 void *pCallbackContext;
13892 tWDA_CbContext *pWDA = NULL ;
13893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13894
13895
13896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13897 "<------ %s " ,__func__);
13898 if (NULL == pWdaParams)
13899 {
13900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13901 "%s: pWdaParams received NULL", __func__);
13902 VOS_ASSERT(0) ;
13903 return ;
13904 }
13905
13906 /*extract WDA context*/
13907 pWDA = pWdaParams->pWdaContext;
13908 if (NULL == pWDA)
13909 {
13910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13911 "%s:pWDA is NULL can't invole HDD callback",
13912 __func__);
13913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13914 vos_mem_free(pWdaParams->wdaMsgParam);
13915 vos_mem_free(pWdaParams);
13916 VOS_ASSERT(0);
13917 return;
13918 }
13919
13920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13921 vos_mem_free(pWdaParams->wdaMsgParam);
13922 vos_mem_free(pWdaParams);
13923
13924 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13925 if (NULL == pMac)
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13928 "%s:pMac is NULL", __func__);
13929 VOS_ASSERT(0);
13930 return;
13931 }
13932
13933 pHddSetBatchScanRsp =
13934 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13935 if (NULL == pHddSetBatchScanRsp)
13936 {
13937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13938 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13939 VOS_ASSERT(0);
13940 return;
13941 }
13942
13943 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13944
13945 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13946 /*call hdd callback with set batch scan response data*/
13947 if(pMac->pmc.setBatchScanReqCallback)
13948 {
13949 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13950 }
13951 else
13952 {
13953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13954 "%s:HDD callback is null", __func__);
13955 VOS_ASSERT(0);
13956 }
13957
13958 vos_mem_free(pHddSetBatchScanRsp);
13959 return ;
13960}
13961
13962/*==========================================================================
13963 FUNCTION WDA_ProcessSetBatchScanReq
13964
13965 DESCRIPTION
13966 API to send set batch scan request to WDI
13967
13968 PARAMETERS
13969 pWDA: Pointer to WDA context
13970 pSetBatchScanReq: Pointer to set batch scan req
13971
13972 RETURN VALUE
13973 NONE
13974
13975===========================================================================*/
13976VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13977 tSirSetBatchScanReq *pSetBatchScanReq)
13978{
13979 WDI_Status status;
13980 tWDA_ReqParams *pWdaParams ;
13981 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13982
13983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13984 "------> %s " ,__func__);
13985
13986 pWdiSetBatchScanReq =
13987 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13988 if (NULL == pWdiSetBatchScanReq)
13989 {
13990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13991 "%s: VOS MEM Alloc Failure", __func__);
13992 vos_mem_free(pSetBatchScanReq);
13993 VOS_ASSERT(0);
13994 return VOS_STATUS_E_NOMEM;
13995 }
13996
13997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13998 if (NULL == pWdaParams)
13999 {
14000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14001 "%s: VOS MEM Alloc Failure", __func__);
14002 VOS_ASSERT(0);
14003 vos_mem_free(pSetBatchScanReq);
14004 vos_mem_free(pWdiSetBatchScanReq);
14005 return VOS_STATUS_E_NOMEM;
14006 }
14007
14008 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14009 pWdiSetBatchScanReq->numberOfScansToBatch =
14010 pSetBatchScanReq->numberOfScansToBatch;
14011 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14012 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14013 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14014
14015 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14016 pWdaParams->pWdaContext = pWDA;
14017 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14018
14019 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14020 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14021 if (IS_WDI_STATUS_FAILURE(status))
14022 {
14023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14024 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14026 vos_mem_free(pWdaParams->wdaMsgParam);
14027 vos_mem_free(pWdaParams);
14028 }
14029 return CONVERT_WDI2VOS_STATUS(status);
14030}
14031
14032#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014033/*
14034 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14035 *
14036 * DESCRIPTION: This function sends start/update OBSS scan
14037 * inidcation message to WDI
14038 *
14039 * PARAM:
14040 * pWDA: pointer to WDA context
14041 * pReq: pointer to start OBSS scan request
14042 */
14043VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14044 tSirHT40OBSSScanInd *pReq)
14045{
14046 WDI_Status status;
14047 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14048 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014049
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14051 "------> %s " ,__func__);
14052 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14053 wdiOBSSScanParams.pUserData = pWDA;
14054
14055 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14056 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14057 pWdiOBSSScanInd->scanType = pReq->scanType;
14058 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14059 pReq->OBSSScanActiveDwellTime;
14060 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14061 pReq->OBSSScanPassiveDwellTime;
14062 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14063 pReq->BSSChannelWidthTriggerScanInterval;
14064 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14065 pReq->BSSWidthChannelTransitionDelayFactor;
14066 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14067 pReq->OBSSScanActiveTotalPerChannel;
14068 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14069 pReq->OBSSScanPassiveTotalPerChannel;
14070 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14071 pReq->OBSSScanActivityThreshold;
14072 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14073 vos_mem_copy(pWdiOBSSScanInd->channels,
14074 pReq->channels,
14075 pReq->channelCount);
14076 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14077 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14078 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14079 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14080 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14081
14082 vos_mem_copy(pWdiOBSSScanInd->ieField,
14083 pReq->ieField,
14084 pReq->ieFieldLen);
14085
14086 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14087 if (WDI_STATUS_PENDING == status)
14088 {
14089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14090 "Pending received for %s:%d ",__func__,__LINE__ );
14091 }
14092 else if (WDI_STATUS_SUCCESS_SYNC != status)
14093 {
14094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14095 "Failure in %s:%d ",__func__,__LINE__ );
14096 }
14097 return CONVERT_WDI2VOS_STATUS(status) ;
14098}
14099/*
14100 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14101 *
14102 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14103 *
14104 * PARAM:
14105 * pWDA: pointer to WDA context
14106 * pReq: pointer to stop batch scan request
14107 */
14108VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14109 tANI_U8 *bssIdx)
14110{
14111 WDI_Status status;
14112
14113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14114 "------> %s " ,__func__);
14115
14116 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14117 if (WDI_STATUS_PENDING == status)
14118 {
14119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14120 "Pending received for %s:%d ",__func__,__LINE__ );
14121 }
14122 else if (WDI_STATUS_SUCCESS_SYNC != status)
14123 {
14124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14125 "Failure in %s:%d ",__func__,__LINE__ );
14126 }
14127 return CONVERT_WDI2VOS_STATUS(status) ;
14128}
Yue Mab9c86f42013-08-14 15:59:08 -070014129/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014130 * -------------------------------------------------------------------------
14131 * DATA interface with WDI for Mgmt Frames
14132 * -------------------------------------------------------------------------
14133 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014134/*
14135 * FUNCTION: WDA_TxComplete
14136 * Callback function for the WDA_TxPacket
14137 */
14138VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14139 VOS_STATUS status )
14140{
14141
14142 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14143 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014144 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014145
Mihir Shete63341222015-03-24 15:39:18 +053014146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14147
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 if(NULL == wdaContext)
14149 {
14150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14151 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014152 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014153 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014154 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 return VOS_STATUS_E_FAILURE;
14156 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014157
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014158 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014159 /*Check if frame was timed out or not*/
14160 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14161 (v_PVOID_t)&uUserData);
14162
14163 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14164 {
14165 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14167 "%s: MGMT Frame Tx timed out",
14168 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014169 vos_pkt_return_packet(pData);
14170 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014171 return VOS_STATUS_SUCCESS;
14172 }
14173
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14175 if( NULL!=wdaContext->pTxCbFunc)
14176 {
14177 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014178 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014179 {
14180 wdaContext->pTxCbFunc(pMac, pData);
14181 }
14182 else
14183 {
14184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014185 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014186 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014188 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 return status;
14190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014191 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014192 else {
14193 wdaContext->mgmt_pktfree_fail++;
14194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14195 "%s:packet (%p) userData (%lx) is not freed",
14196 __func__, pData, uUserData);
14197 }
14198 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014199
14200 /*
14201 * Trigger the event to bring the HAL TL Tx complete function to come
14202 * out of wait
14203 * Let the coe above to complete the packet first. When this event is set,
14204 * the thread waiting for the event may run and set Vospacket_freed causing the original
14205 * packet not being freed.
14206 */
14207 status = vos_event_set(&wdaContext->txFrameEvent);
14208 if(!VOS_IS_STATUS_SUCCESS(status))
14209 {
14210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014211 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 return status;
14214}
Jeff Johnson295189b2012-06-20 16:38:30 -070014215/*
14216 * FUNCTION: WDA_TxPacket
14217 * Forward TX management frame to WDI
14218 */
14219VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14220 void *pFrmBuf,
14221 tANI_U16 frmLen,
14222 eFrameType frmType,
14223 eFrameTxDir txDir,
14224 tANI_U8 tid,
14225 pWDATxRxCompFunc pCompFunc,
14226 void *pData,
14227 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014228 tANI_U32 txFlag,
14229 tANI_U32 txBdToken
14230 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014231{
14232 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14233 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14234 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14235 tANI_U8 eventIdx = 0;
14236 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14237 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014238 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014239 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014240
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 if((NULL == pWDA)||(NULL == pFrmBuf))
14242 {
14243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014244 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014245 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 VOS_ASSERT(0);
14247 return VOS_STATUS_E_FAILURE;
14248 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014249
Jeff Johnson295189b2012-06-20 16:38:30 -070014250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014251 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14252 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14254 if(NULL == pMac)
14255 {
14256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014257 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014258 VOS_ASSERT(0);
14259 return VOS_STATUS_E_FAILURE;
14260 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014261
Jeff Johnson295189b2012-06-20 16:38:30 -070014262 /* store the call back function in WDA context */
14263 pWDA->pTxCbFunc = pCompFunc;
14264 /* store the call back for the function of ackTxComplete */
14265 if( pAckTxComp )
14266 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014267 if( NULL != pWDA->pAckTxCbFunc )
14268 {
14269 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014271 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014272 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014273 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014274
Jeff Johnsone7245742012-09-05 17:12:55 -070014275 if( VOS_STATUS_SUCCESS !=
14276 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14277 {
14278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14279 "Tx Complete timeout Timer Stop Failed ");
14280 }
14281 else
14282 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014284 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014285 }
14286 }
14287
14288 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14289 pWDA->pAckTxCbFunc = pAckTxComp;
14290 if( VOS_STATUS_SUCCESS !=
14291 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14292 {
14293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14294 "Tx Complete Timer Start Failed ");
14295 pWDA->pAckTxCbFunc = NULL;
14296 return eHAL_STATUS_FAILURE;
14297 }
14298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 /* Reset the event to be not signalled */
14300 status = vos_event_reset(&pWDA->txFrameEvent);
14301 if(!VOS_IS_STATUS_SUCCESS(status))
14302 {
14303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014304 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014305 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14306 if( pAckTxComp )
14307 {
14308 pWDA->pAckTxCbFunc = NULL;
14309 if( VOS_STATUS_SUCCESS !=
14310 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14311 {
14312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14313 "Tx Complete timeout Timer Stop Failed ");
14314 }
14315 }
14316 return VOS_STATUS_E_FAILURE;
14317 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014318
14319 /* If Peer Sta mask is set don't overwrite to self sta */
14320 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014321 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014322 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014323 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014324 else
14325 {
Ganesh K08bce952012-12-13 15:04:41 -080014326 /* Get system role, use the self station if in unknown role or STA role */
14327 systemRole = wdaGetGlobalSystemRole(pMac);
14328 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14329 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014330#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014331 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014332#endif
Ganesh K08bce952012-12-13 15:04:41 -080014333 ))
14334 {
14335 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14336 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014338
Jeff Johnsone7245742012-09-05 17:12:55 -070014339 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14340 disassoc frame reaches the HW, HAL has already deleted the peer station */
14341 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014342 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014343 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014344 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014345 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014346 /*Send Probe request frames on self sta idx*/
14347 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014349 /* Since we donot want probe responses to be retried, send probe responses
14350 through the NO_ACK queues */
14351 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14352 {
14353 //probe response is sent out using self station and no retries options.
14354 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14355 }
14356 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14357 {
14358 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14359 }
14360 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014361#ifdef FEATURE_WLAN_TDLS
14362 /* TDLS Management frames are sent using Peer Sta mask */
14363 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14364 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14365 {
14366 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14367
14368 }
14369#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014370 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014371
14372 /*Set frame tag to 0
14373 We will use the WDA user data in order to tag a frame as expired*/
14374 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14375 (v_PVOID_t)0);
14376
14377
14378 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014379 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14380 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014381 {
14382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014383 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014384 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014385 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 -070014386 if( pAckTxComp )
14387 {
14388 pWDA->pAckTxCbFunc = NULL;
14389 if( VOS_STATUS_SUCCESS !=
14390 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14391 {
14392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14393 "Tx Complete timeout Timer Stop Failed ");
14394 }
14395 }
14396 return VOS_STATUS_E_FAILURE;
14397 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014398 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014399 /*
14400 * Wait for the event to be set by the TL, to get the response of TX
14401 * complete, this event should be set by the Callback function called by TL
14402 */
14403 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14404 &eventIdx);
14405 if(!VOS_IS_STATUS_SUCCESS(status))
14406 {
14407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14408 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014409 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014410 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014411 /*Tag Frame as timed out for later deletion*/
14412 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14413 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014414 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14415 after the packet gets completed(packet freed once)*/
14416
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014417 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14418
14419 /*
14420 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14421 * TX completion call back
14422 */
14423 VOS_SMP_MB;
14424 vos_lock_release(&pWDA->mgmt_pkt_lock);
14425
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014426 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014427 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014428
Abhishek Singh837adf22015-10-01 17:37:37 +053014429 if (vos_isFatalEventEnabled())
14430 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14431 WLAN_LOG_INDICATOR_HOST_DRIVER,
14432 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14433 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014434
Jeff Johnson295189b2012-06-20 16:38:30 -070014435 if( pAckTxComp )
14436 {
14437 pWDA->pAckTxCbFunc = NULL;
14438 if( VOS_STATUS_SUCCESS !=
14439 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14440 {
14441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14442 "Tx Complete timeout Timer Stop Failed ");
14443 }
14444 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014445 pWDA->mgmtTxfailureCnt++;
14446
14447 /* SSR if timeout continously for
14448 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14449 */
14450 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14451 pWDA->mgmtTxfailureCnt)
14452 {
14453 vos_wlanRestart();
14454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014455 status = VOS_STATUS_E_FAILURE;
14456 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014457
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014458#ifdef WLAN_DUMP_MGMTFRAMES
14459 if (VOS_IS_STATUS_SUCCESS(status))
14460 {
14461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14462 "%s() TX packet : SubType %d", __func__,pFc->subType);
14463 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14464 pData, frmLen);
14465 }
14466#endif
14467
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014468 if (VOS_IS_STATUS_SUCCESS(status))
14469 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014470 pWDA->mgmtTxfailureCnt = 0;
14471 if ((vos_timer_get_system_time() - time_snapshot) >=
14472 WDA_TX_TIME_THRESHOLD)
14473 {
14474 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14475 "Tx Complete took %lu ms",
14476 vos_timer_get_system_time() - time_snapshot);
14477 }
14478
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014479 if (pMac->fEnableDebugLog & 0x1)
14480 {
14481 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14482 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14483 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14484 {
14485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14486 pFc->type, pFc->subType);
14487 }
14488 }
14489 }
14490
14491
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 return status;
14493}
Jeff Johnson295189b2012-06-20 16:38:30 -070014494/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014495 * FUNCTION: WDA_ProcessDHCPStartInd
14496 * Forward DHCP Start to WDI
14497 */
14498static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14499 tAniDHCPInd *dhcpStartInd)
14500{
14501 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014502 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014503
c_hpothu0b0cab72014-02-13 21:52:40 +053014504 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14505 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014506 sizeof(tSirMacAddr));
14507
c_hpothu0b0cab72014-02-13 21:52:40 +053014508 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014509
c_hpothu0b0cab72014-02-13 21:52:40 +053014510 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014511 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14513 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014514 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014515 else if (WDI_STATUS_SUCCESS_SYNC != status)
14516 {
14517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14518 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14519 }
14520
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014521 vos_mem_free(dhcpStartInd);
14522 return CONVERT_WDI2VOS_STATUS(status) ;
14523}
14524
14525 /*
14526 * FUNCTION: WDA_ProcessDHCPStopInd
14527 * Forward DHCP Stop to WDI
14528 */
14529 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14530 tAniDHCPInd *dhcpStopInd)
14531 {
14532 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014533 WDI_DHCPInd wdiDHCPInd;
14534
14535 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14536 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14537
14538 status = WDI_dhcpStopInd(&wdiDHCPInd);
14539
14540 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014541 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14543 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014544 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014545 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014546 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14548 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014549 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014550
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014551 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014552
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014553 return CONVERT_WDI2VOS_STATUS(status) ;
14554 }
14555
Abhishek Singh00b71972016-01-07 10:51:04 +053014556#ifdef WLAN_FEATURE_RMC
14557
14558void
14559WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14560{
14561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14562 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14563
14564 switch (wdiRmcResponse->cmd)
14565 {
14566 case eWDI_BECOME_RULER_CMD :
14567 {
14568 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14569
14570 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14571 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14572
14573 if (NULL == pRmcBecomeRulerInd)
14574 {
14575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14576 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14577 break;
14578 }
14579
14580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14581 "Received eWDI_BECOME_RULER_CMD from WDI");
14582
14583 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14584
14585 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14586 wdiRmcResponse->mcastTransmitter,
14587 sizeof(tSirMacAddr));
14588 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14589 wdiRmcResponse->mcastGroup,
14590 sizeof(tSirMacAddr));
14591
14592 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14593 (void *)pRmcBecomeRulerInd, 0) ;
14594 break;
14595 }
14596 case eWDI_SUGGEST_RULER_CMD :
14597 {
14598 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14599
14600 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14601 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14602
14603 if (NULL == pRmcRulerSelectInd)
14604 {
14605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14606 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14607 break;
14608 }
14609
14610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14611 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14612
14613 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14614
14615 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14616 wdiRmcResponse->mcastTransmitter,
14617 sizeof(tSirMacAddr));
14618 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14619 wdiRmcResponse->mcastGroup,
14620 sizeof(tSirMacAddr));
14621 vos_mem_copy(pRmcRulerSelectInd->ruler,
14622 wdiRmcResponse->ruler,
14623 sizeof(pRmcRulerSelectInd->ruler));
14624
14625 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14626 (void *)pRmcRulerSelectInd, 0) ;
14627 break;
14628 }
14629 }
14630
14631 /* free the config structure */
14632 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14633 {
14634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14635 }
14636 vos_mem_free(pWdaParams->wdaMsgParam);
14637 vos_mem_free(pWdaParams);
14638
14639}
14640
14641void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14642{
14643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14644
14645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14646 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14647
14648 if (NULL == pWdaParams)
14649 {
14650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14651 "%s: pWdaParams received NULL", __func__);
14652 VOS_ASSERT(0);
14653 return;
14654 }
14655
14656 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14657 {
14658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14659 vos_mem_free(pWdaParams->wdaMsgParam);
14660 vos_mem_free(pWdaParams);
14661 }
14662
14663 return;
14664}
14665
14666static VOS_STATUS
14667WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14668 tSirRmcRulerReq *rmcRulerReq)
14669{
14670 WDI_Status status;
14671 WDI_RmcRulerReqParams *wdiRulerReq;
14672 tWDA_ReqParams *pWdaParams;
14673
14674 wdiRulerReq = (WDI_RmcRulerReqParams *)
14675 vos_mem_malloc(sizeof(*wdiRulerReq));
14676
14677 if (NULL == wdiRulerReq)
14678 {
14679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14680 "%s: VOS MEM Alloc Failure", __func__);
14681 VOS_ASSERT(0);
14682 vos_mem_free(rmcRulerReq);
14683 return VOS_STATUS_E_NOMEM;
14684 }
14685
14686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14687 if (NULL == pWdaParams)
14688 {
14689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14690 "%s: VOS MEM Alloc Failure", __func__);
14691 VOS_ASSERT(0);
14692 vos_mem_free(rmcRulerReq);
14693 vos_mem_free(wdiRulerReq);
14694 return VOS_STATUS_E_NOMEM;
14695 }
14696
14697 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14698 /* Store param pointer as passed in by caller */
14699 pWdaParams->wdaMsgParam = rmcRulerReq;
14700 pWdaParams->pWdaContext = pWDA;
14701
14702 wdiRulerReq->cmd = rmcRulerReq->cmd;
14703
14704 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14705 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14706 vos_mem_copy(wdiRulerReq->mcastGroup,
14707 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14708 vos_mem_copy(wdiRulerReq->blacklist,
14709 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14710
14711 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14712
14713 status = WDI_RmcRulerReq(wdiRulerReq,
14714 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14715 (void *)pWdaParams);
14716 if (IS_WDI_STATUS_FAILURE(status))
14717 {
14718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14719 vos_mem_free(pWdaParams->wdaMsgParam);
14720 vos_mem_free(pWdaParams) ;
14721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14722 "Ruler Request failed");
14723 }
14724 return CONVERT_WDI2VOS_STATUS(status) ;
14725}
14726
14727/*
14728 * FUNCTION: WDA_ProcessRMCUpdateInd
14729 * Forward Update Indication to WDI
14730*/
14731static VOS_STATUS
14732WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14733 tSirRmcUpdateInd *rmcUpdateInd)
14734{
14735 WDI_Status status;
14736 WDI_RmcUpdateIndParams wdiUpdateInd;
14737
14738 /* Copy the paramters for Update_Ind */
14739
14740 wdiUpdateInd.indication = rmcUpdateInd->indication;
14741 wdiUpdateInd.role = rmcUpdateInd->role;
14742
14743 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14744 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14745
14746 vos_mem_copy(wdiUpdateInd.mcastGroup,
14747 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14748
14749 vos_mem_copy(wdiUpdateInd.mcastRuler,
14750 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14751
14752 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14753 wdiUpdateInd.pUserData = pWDA;
14754 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14755
14756 if (WDI_STATUS_PENDING == status)
14757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14759 "Pending received for %s:%d ",__func__,__LINE__ );
14760 }
14761 else if (WDI_STATUS_SUCCESS_SYNC != status)
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14764 "Failure in %s:%d ",__func__,__LINE__ );
14765 }
14766
14767 vos_mem_free(rmcUpdateInd);
14768
14769 return CONVERT_WDI2VOS_STATUS(status) ;
14770}
14771
14772void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14773 ,void* pUserData)
14774{
14775
14776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14777 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14778 tWDA_CbContext *pWDA;
14779 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14780 vos_msg_t vosMsg;
14781 v_U32_t wdaCnt = 0;
14782
14783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14784 "<------ %s " ,__func__);
14785 if (NULL == pWdaParams)
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14788 "%s: pWdaParams received NULL", __func__);
14789 VOS_ASSERT(0);
14790 return;
14791 }
14792
14793 if (NULL == peerInfoRspParams)
14794 {
14795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14796 "%s: peerInfoRspParams received NULL", __func__);
14797 if(pWdaParams->wdaMsgParam)
14798 vos_mem_free(pWdaParams->wdaMsgParam);
14799 if(pWdaParams->wdaWdiApiMsgParam)
14800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14801 vos_mem_free(pWdaParams);
14802
14803 VOS_ASSERT(0);
14804 return;
14805 }
14806
14807 pIbssPeerInfoParams =
14808 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14809
14810 pIbssGetPeerInfoRsp =
14811 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14812
14813 if(NULL == pIbssGetPeerInfoRsp)
14814 {
14815 if(pWdaParams->wdaMsgParam)
14816 vos_mem_free(pWdaParams->wdaMsgParam);
14817 if(pWdaParams->wdaWdiApiMsgParam)
14818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14819 vos_mem_free(pWdaParams);
14820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14821 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14822 __func__);
14823 VOS_ASSERT(0);
14824 return;
14825
14826 }
14827
14828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14829
14830
14831 if (peerInfoRspParams->wdiNumPeers > 32)
14832 {
14833 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14834 /* free the mem and return */
14835 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14836 if(pWdaParams->wdaMsgParam)
14837 vos_mem_free(pWdaParams->wdaMsgParam);
14838 if(pWdaParams->wdaWdiApiMsgParam)
14839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14840 vos_mem_free(pWdaParams);
14841
14842 return;
14843 }
14844
14845 /* Message Header */
14846 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14847 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14848 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14849 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14850
14851 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14852 {
14853 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14854 tSirIbssPeerInfoParams *pSmeTmp =
14855 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14856
14857 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14858 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14859 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14860 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14861 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14862 }
14863
14864 /* VOS message wrapper */
14865 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14866 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14867 vosMsg.bodyval = 0;
14868
14869 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14870 {
14871 /* free the mem and return */
14872 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14873 }
14874
14875 if(NULL != pWdaParams)
14876 {
14877 if(pWdaParams->wdaMsgParam)
14878 vos_mem_free(pWdaParams->wdaMsgParam);
14879 if(pWdaParams->wdaWdiApiMsgParam)
14880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14881 vos_mem_free(pWdaParams);
14882 }
14883
14884 return;
14885}
14886
14887static VOS_STATUS
14888WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14889 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14890{
14891 WDI_Status status;
14892 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14893 tWDA_ReqParams *pWdaParams;
14894
14895 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14896 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14897 if (NULL == wdiPeerInfoReq)
14898 {
14899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14900 "%s: VOS MEM Alloc Failure", __func__);
14901 VOS_ASSERT(0);
14902 vos_mem_free(ibssPeerInfoReqParams);
14903 return VOS_STATUS_E_NOMEM;
14904 }
14905
14906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14907 if (NULL == pWdaParams)
14908 {
14909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14910 "%s: VOS MEM Alloc Failure", __func__);
14911 VOS_ASSERT(0);
14912 vos_mem_free(wdiPeerInfoReq);
14913 vos_mem_free(ibssPeerInfoReqParams);
14914 return VOS_STATUS_E_NOMEM;
14915 }
14916
14917 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14918 /* Store param pointer as passed in by caller */
14919 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14920 pWdaParams->pWdaContext = pWDA;
14921
14922 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14923 ibssPeerInfoReqParams->allPeerInfoReqd;
14924 wdiPeerInfoReq->wdiStaIdx =
14925 ibssPeerInfoReqParams->staIdx;
14926
14927 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14928 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14929 (void *)pWdaParams);
14930 if (IS_WDI_STATUS_FAILURE(status))
14931 {
14932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14933 vos_mem_free(pWdaParams->wdaMsgParam);
14934 vos_mem_free(pWdaParams) ;
14935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14936 "IBSS Peer Info Request failed");
14937 }
14938 return CONVERT_WDI2VOS_STATUS(status) ;
14939
14940}
14941
14942/*
14943 * FUNCTION: WDA_ProcessTXFailMonitorInd
14944 * Forward TX Fail Monitor to WDI
14945 */
14946static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14947 tWDA_CbContext *pWDA,
14948 tAniTXFailMonitorInd *txFailMonitorInd)
14949{
14950 WDI_Status status;
14951 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14952 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14953
14954 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14955 "<------ %s " ,__func__);
14956
14957 if (NULL == wdiTXFailMonitorInd)
14958 {
14959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14960 "%s: VOS MEM Alloc Failure", __func__);
14961 VOS_ASSERT(0);
14962 vos_mem_free(txFailMonitorInd);
14963 return VOS_STATUS_E_NOMEM;
14964 }
14965
14966 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14967
14968 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14969 wdiTXFailMonitorInd->pUserData = pWDA;
14970
14971 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14972
14973 if (WDI_STATUS_PENDING == status)
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "TX Fail Monitor Indication Pending");
14977 }
14978 else if (WDI_STATUS_SUCCESS_SYNC == status)
14979 {
14980 if (0 == txFailMonitorInd->tx_fail_count)
14981 pWDA->txFailIndCallback = NULL;
14982 else
14983 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14984 }
14985 else
14986 {
14987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14988 "TX Fail Monitor Indication Failed");
14989 }
14990
14991 vos_mem_free(wdiTXFailMonitorInd);
14992 vos_mem_free(txFailMonitorInd);
14993
14994 return CONVERT_WDI2VOS_STATUS(status) ;
14995}
14996#endif /* WLAN_FEATURE_RMC */
14997
Kapil Gupta04ab1992016-06-26 13:36:51 +053014998#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14999VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15000 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15001{
15002 WDI_Status status;
15003 tWDA_ReqParams *pWdaParams ;
15004 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15005 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15006 sizeof(WDI_PERRoamTriggerScanInfo));
15007
15008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15009 "------> %s " ,__func__);
15010
15011 if (NULL == pwdiPERRoamTriggerScanInfo)
15012 {
15013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15014 "%s: VOS MEM Alloc Failure", __func__);
15015 VOS_ASSERT(0);
15016 return VOS_STATUS_E_NOMEM;
15017 }
15018
15019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15020 if (NULL == pWdaParams)
15021 {
15022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15023 "%s: VOS MEM Alloc Failure", __func__);
15024 VOS_ASSERT(0);
15025 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15026 return VOS_STATUS_E_NOMEM;
15027 }
15028
15029 pwdiPERRoamTriggerScanInfo->roamScanReq =
15030 pPERRoamTriggerScanReqParams->start;
15031
15032 /* Store Params pass it to WDI */
15033 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15034 pWdaParams->pWdaContext = pWDA;
15035
15036 /* Store param pointer as passed in by caller */
15037 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15038 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15039 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15040 pWdaParams);
15041
15042 if(IS_WDI_STATUS_FAILURE(status))
15043 {
15044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15045 "Failure in Start Roam Candidate trigger Req WDI API" );
15046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15047 vos_mem_free(pWdaParams->wdaMsgParam);
15048 pWdaParams->wdaWdiApiMsgParam = NULL;
15049 pWdaParams->wdaMsgParam = NULL;
15050 }
15051 return CONVERT_WDI2VOS_STATUS(status) ;
15052}
15053#endif
15054
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015055/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015056 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15057 *
15058 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15059 *
15060 * PARAM:
15061 * pWDA: pointer to WDA context
15062 * pReq: pointer to stop batch scan request
15063 */
15064VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15065 tpSpoofMacAddrReqParams pReq)
15066{
15067 WDI_Status wdiStatus;
15068 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15069 tWDA_ReqParams *pWdaParams;
15070
15071 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15072 sizeof(WDI_SpoofMacAddrInfoType));
15073 if(NULL == WDI_SpoofMacAddrInfoParams) {
15074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15075 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15076 VOS_ASSERT(0);
15077 return VOS_STATUS_E_NOMEM;
15078 }
15079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15080 if(NULL == pWdaParams) {
15081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15082 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015083 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015084 VOS_ASSERT(0);
15085 return VOS_STATUS_E_NOMEM;
15086 }
15087
15088 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15089 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15090
15091 pWdaParams->pWdaContext = pWDA;
15092 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015093 pWdaParams->wdaMsgParam = (void *)pReq;
15094
15095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15096 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15097
Siddharth Bhal171788a2014-09-29 21:02:40 +053015098 /* store Params pass it to WDI */
15099 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15100
15101 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015102 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15103 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015104
15105 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15106 {
15107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15108 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15110 vos_mem_free(pWdaParams->wdaMsgParam);
15111 vos_mem_free(pWdaParams);
15112 }
15113
15114 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15115}
15116
c_manjeecfd1efb2015-09-25 19:32:34 +053015117
15118/*
15119 * FUNCTION: WDA_FwrMemDumpRespCallback
15120 * recieves Mgmt Logging init response from FW
15121 */
15122 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15123 void* pUserData)
15124{
15125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15126 tAniFwrDumpReq *pFwrMemDumpReq;
15127 tAniFwrDumpRsp *pFwrMemDumpRsp;
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15129 "<------ %s " ,__func__);
15130
15131 if(NULL == pWdaParams)
15132 {
15133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15134 "%s: pWdaParams received NULL", __func__);
15135 VOS_ASSERT(0);
15136 return ;
15137 }
15138
15139 if(NULL == pWdaParams->wdaMsgParam)
15140 {
15141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15142 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15143 VOS_ASSERT(0);
15144 vos_mem_free(pWdaParams);
15145 return ;
15146 }
15147
15148 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15149 if(pFwrMemDumpRsp == NULL)
15150 {
15151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15152 "%s: pFwrMemDumpRsp is NULL", __func__);
15153 VOS_ASSERT(0);
15154 vos_mem_free(pWdaParams);
15155 return ;
15156 }
15157
15158 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15159 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15160
15161 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15162 {
15163 pFwrMemDumpReq->fwMemDumpReqCallback(
15164 pFwrMemDumpReq->fwMemDumpReqContext,
15165 pFwrMemDumpRsp);
15166 }
15167 else
15168 {
15169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15170 "%s: FwrMemDump callback is NULL", __func__);
15171 }
15172
15173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15174 vos_mem_free(pWdaParams->wdaMsgParam);
15175 vos_mem_free(pWdaParams);
15176 vos_mem_free(pFwrMemDumpRsp);
15177
15178 return ;
15179}
15180
15181VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15182 tAniFwrDumpReq* pFwrMemDumpReq)
15183{
15184 VOS_STATUS status = VOS_STATUS_SUCCESS;
15185 WDI_Status wstatus;
15186 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15187 tWDA_ReqParams *pWdaParams ;
15188
15189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15190 "------> %s " ,__func__);
15191 /* Sanity Check*/
15192 if(NULL == pFwrMemDumpReq)
15193 {
15194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15195 "%s: pFwrMemDumpReq received NULL", __func__);
15196 VOS_ASSERT(0) ;
15197 return VOS_STATUS_E_FAULT;
15198 }
15199
15200 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15201 if(NULL == pWdiFwrMemDumpReq)
15202 {
15203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15204 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15205 VOS_ASSERT(0);
15206 return VOS_STATUS_E_NOMEM;
15207 }
15208
15209 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15210 if(NULL == pWdaParams)
15211 {
15212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15213 "%s: pWdaParams Alloc Failure", __func__);
15214 VOS_ASSERT(0);
15215 vos_mem_free(pWdiFwrMemDumpReq);
15216 return VOS_STATUS_E_NOMEM;
15217 }
15218
15219 /* Store Params pass it to WDI */
15220 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15221 pWdaParams->pWdaContext = pWDA;
15222 /* Store param pointer as passed in by caller */
15223 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15224
15225 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15226 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15227 pWdaParams);
15228
15229 if(IS_WDI_STATUS_FAILURE(wstatus))
15230 {
15231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15232 FL("Fwr Mem Dump Req failed, free all the memory"));
15233 status = CONVERT_WDI2VOS_STATUS(wstatus);
15234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015235 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015236 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015237 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015238 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015239 }
15240
15241 return status;
15242
15243}
15244
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015245/**
15246 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15247 *
15248 * @pWDA: WDA Call back context
15249 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15250 * that holds allowed action frames bitmask
15251 *
15252 * This function sets the allowed action frames that the FW needs to
15253 * handover to host.The Action frames other than the requested ones
15254 * can be dropped in FW
15255 *
15256 * Return: VOS_STATUS enumeration
15257 */
15258VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15259 struct sir_allowed_action_frames *allowed_action_frames)
15260{
15261 WDI_Status status;
15262 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15264 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015265
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015266 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15267 vos_mem_malloc(sizeof
15268 (*wdi_allowed_action_frames));
15269 if (!wdi_allowed_action_frames) {
15270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15271 "%s: VOS MEM Alloc Failure", __func__);
15272 vos_mem_free(allowed_action_frames);
15273 return VOS_STATUS_E_NOMEM;
15274 }
15275
15276 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15277 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15278
15279 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15280 if (WDI_STATUS_PENDING == status) {
15281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15282 FL("pending status received"));
15283 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15284 (WDI_STATUS_SUCCESS != status)) {
15285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15286 FL("Failure in allowed_action_frames API %d"), status);
15287 }
15288
15289 vos_mem_free(wdi_allowed_action_frames);
15290 vos_mem_free(allowed_action_frames);
15291 return CONVERT_WDI2VOS_STATUS(status) ;
15292}
c_manjeecfd1efb2015-09-25 19:32:34 +053015293
Siddharth Bhal171788a2014-09-29 21:02:40 +053015294/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015295 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15296 * Request to WDI.
15297 */
15298VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15299{
15300 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015301 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015302
15303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15304
15305 staId = (v_U8_t)params;
15306
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015307 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15308 if ( NULL == pTLCb )
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15311 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15312 return VOS_STATUS_E_FAULT;
15313 }
15314
15315
15316 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015317 /* Pause TL for Sta ID */
15318 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15319}
15320
15321/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015322 * FUNCTION: WDA_McProcessMsg
15323 * Trigger DAL-AL to start CFG download
15324 */
15325VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15326{
15327 VOS_STATUS status = VOS_STATUS_SUCCESS;
15328 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015329 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015330 {
15331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015332 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 VOS_ASSERT(0);
15334 return VOS_STATUS_E_FAILURE;
15335 }
15336
15337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015338 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015339
15340 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15341 if(NULL == pWDA )
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015344 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015345 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015346 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 return VOS_STATUS_E_FAILURE;
15348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 /* Process all the WDA messages.. */
15350 switch( pMsg->type )
15351 {
15352 case WNI_CFG_DNLD_REQ:
15353 {
15354 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015355 /* call WDA complete event if config download success */
15356 if( VOS_IS_STATUS_SUCCESS(status) )
15357 {
15358 vos_WDAComplete_cback(pVosContext);
15359 }
15360 else
15361 {
15362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15363 "WDA Config Download failure" );
15364 }
15365 break ;
15366 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015367 /*
15368 * Init SCAN request from PE, convert it into DAL format
15369 * and send it to DAL
15370 */
15371 case WDA_INIT_SCAN_REQ:
15372 {
15373 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15374 break ;
15375 }
15376 /* start SCAN request from PE */
15377 case WDA_START_SCAN_REQ:
15378 {
15379 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15380 break ;
15381 }
15382 /* end SCAN request from PE */
15383 case WDA_END_SCAN_REQ:
15384 {
15385 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15386 break ;
15387 }
15388 /* end SCAN request from PE */
15389 case WDA_FINISH_SCAN_REQ:
15390 {
15391 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15392 break ;
15393 }
15394 /* join request from PE */
15395 case WDA_CHNL_SWITCH_REQ:
15396 {
15397 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15398 {
15399 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15400 }
15401 else
15402 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015403 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15404 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15405 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15406 {
15407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15408 "call ProcessChannelSwitchReq_V1" );
15409 WDA_ProcessChannelSwitchReq_V1(pWDA,
15410 (tSwitchChannelParams*)pMsg->bodyptr) ;
15411 }
15412 else
15413 {
15414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15415 "call ProcessChannelSwitchReq" );
15416 WDA_ProcessChannelSwitchReq(pWDA,
15417 (tSwitchChannelParams*)pMsg->bodyptr) ;
15418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015419 }
15420 break ;
15421 }
15422 /* ADD BSS request from PE */
15423 case WDA_ADD_BSS_REQ:
15424 {
15425 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15426 break ;
15427 }
15428 case WDA_ADD_STA_REQ:
15429 {
15430 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15431 break ;
15432 }
15433 case WDA_DELETE_BSS_REQ:
15434 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015435 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15436 break ;
15437 }
15438 case WDA_DELETE_STA_REQ:
15439 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015440 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15441 break ;
15442 }
15443 case WDA_CONFIG_PARAM_UPDATE_REQ:
15444 {
15445 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15446 break ;
15447 }
15448 case WDA_SET_BSSKEY_REQ:
15449 {
15450 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15451 break ;
15452 }
15453 case WDA_SET_STAKEY_REQ:
15454 {
15455 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15456 break ;
15457 }
15458 case WDA_SET_STA_BCASTKEY_REQ:
15459 {
15460 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15461 break ;
15462 }
15463 case WDA_REMOVE_BSSKEY_REQ:
15464 {
15465 WDA_ProcessRemoveBssKeyReq(pWDA,
15466 (tRemoveBssKeyParams *)pMsg->bodyptr);
15467 break ;
15468 }
15469 case WDA_REMOVE_STAKEY_REQ:
15470 {
15471 WDA_ProcessRemoveStaKeyReq(pWDA,
15472 (tRemoveStaKeyParams *)pMsg->bodyptr);
15473 break ;
15474 }
15475 case WDA_REMOVE_STA_BCASTKEY_REQ:
15476 {
15477 /* TODO: currently UMAC is not sending this request, Add the code for
15478 handling this request when UMAC supports */
15479 break;
15480 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015481#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015482 case WDA_TSM_STATS_REQ:
15483 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015484 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 break;
15486 }
15487#endif
15488 case WDA_UPDATE_EDCA_PROFILE_IND:
15489 {
15490 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15491 break;
15492 }
15493 case WDA_ADD_TS_REQ:
15494 {
15495 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15496 break;
15497 }
15498 case WDA_DEL_TS_REQ:
15499 {
15500 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15501 break;
15502 }
15503 case WDA_ADDBA_REQ:
15504 {
15505 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15506 break;
15507 }
15508 case WDA_DELBA_IND:
15509 {
15510 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15511 break;
15512 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015513 case WDA_UPDATE_CHAN_LIST_REQ:
15514 {
15515 WDA_ProcessUpdateChannelList(pWDA,
15516 (tSirUpdateChanList *)pMsg->bodyptr);
15517 break;
15518 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015519 case WDA_SET_LINK_STATE:
15520 {
15521 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15522 break;
15523 }
15524 case WDA_GET_STATISTICS_REQ:
15525 {
15526 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15527 break;
15528 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015529#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015530 case WDA_GET_ROAM_RSSI_REQ:
15531 {
15532 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15533 break;
15534 }
15535#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 case WDA_PWR_SAVE_CFG:
15537 {
15538 if(pWDA->wdaState == WDA_READY_STATE)
15539 {
15540 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15541 }
15542 else
15543 {
15544 if(NULL != pMsg->bodyptr)
15545 {
15546 vos_mem_free(pMsg->bodyptr);
15547 }
15548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15549 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15550 }
15551 break;
15552 }
mukul sharma6b53e202016-11-23 19:29:18 +053015553 case WDA_UPDATE_CFG_INT_PARAM:
15554 {
15555 if(pWDA->wdaState == WDA_READY_STATE)
15556 {
15557 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
15558 vos_mem_free(pMsg->bodyptr);
15559 }
15560 else
15561 {
15562 if(NULL != pMsg->bodyptr)
15563 {
15564 vos_mem_free(pMsg->bodyptr);
15565 }
15566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15567 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
15568 pWDA->wdaState );
15569 }
15570 break;
15571 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015572 case WDA_ENTER_IMPS_REQ:
15573 {
15574 if(pWDA->wdaState == WDA_READY_STATE)
15575 {
15576 WDA_ProcessEnterImpsReq(pWDA);
15577 }
15578 else
15579 {
15580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15581 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15582 }
15583 break;
15584 }
15585 case WDA_EXIT_IMPS_REQ:
15586 {
15587 if(pWDA->wdaState == WDA_READY_STATE)
15588 {
15589 WDA_ProcessExitImpsReq(pWDA);
15590 }
15591 else
15592 {
15593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15594 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15595 }
15596 break;
15597 }
15598 case WDA_ENTER_BMPS_REQ:
15599 {
15600 if(pWDA->wdaState == WDA_READY_STATE)
15601 {
15602 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15603 }
15604 else
15605 {
15606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15607 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15608 }
15609 break;
15610 }
15611 case WDA_EXIT_BMPS_REQ:
15612 {
15613 if(pWDA->wdaState == WDA_READY_STATE)
15614 {
15615 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15616 }
15617 else
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15620 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15621 }
15622 break;
15623 }
15624 case WDA_ENTER_UAPSD_REQ:
15625 {
15626 if(pWDA->wdaState == WDA_READY_STATE)
15627 {
15628 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15629 }
15630 else
15631 {
15632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15633 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15634 }
15635 break;
15636 }
15637 case WDA_EXIT_UAPSD_REQ:
15638 {
15639 if(pWDA->wdaState == WDA_READY_STATE)
15640 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015641 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015642 }
15643 else
15644 {
15645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15646 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15647 }
15648 break;
15649 }
15650 case WDA_UPDATE_UAPSD_IND:
15651 {
15652 if(pWDA->wdaState == WDA_READY_STATE)
15653 {
15654 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15655 }
15656 else
15657 {
15658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15659 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15660 }
15661 break;
15662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 case WDA_REGISTER_PE_CALLBACK :
15664 {
15665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15666 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15667 /*TODO: store the PE callback */
15668 /* Do Nothing? MSG Body should be freed at here */
15669 if(NULL != pMsg->bodyptr)
15670 {
15671 vos_mem_free(pMsg->bodyptr);
15672 }
15673 break;
15674 }
15675 case WDA_SYS_READY_IND :
15676 {
15677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15678 "Handling msg type WDA_SYS_READY_IND " );
15679 pWDA->wdaState = WDA_READY_STATE;
15680 if(NULL != pMsg->bodyptr)
15681 {
15682 vos_mem_free(pMsg->bodyptr);
15683 }
15684 break;
15685 }
15686 case WDA_BEACON_FILTER_IND :
15687 {
15688 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15689 break;
15690 }
15691 case WDA_BTC_SET_CFG:
15692 {
15693 /*TODO: handle this while dealing with BTC */
15694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15695 "Handling msg type WDA_BTC_SET_CFG " );
15696 /* Do Nothing? MSG Body should be freed at here */
15697 if(NULL != pMsg->bodyptr)
15698 {
15699 vos_mem_free(pMsg->bodyptr);
15700 }
15701 break;
15702 }
15703 case WDA_SIGNAL_BT_EVENT:
15704 {
15705 /*TODO: handle this while dealing with BTC */
15706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15707 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15708 /* Do Nothing? MSG Body should be freed at here */
15709 if(NULL != pMsg->bodyptr)
15710 {
15711 vos_mem_free(pMsg->bodyptr);
15712 }
15713 break;
15714 }
15715 case WDA_CFG_RXP_FILTER_REQ:
15716 {
15717 WDA_ProcessConfigureRxpFilterReq(pWDA,
15718 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15719 break;
15720 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015721 case WDA_MGMT_LOGGING_INIT_REQ:
15722 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015723 WDA_ProcessFWLoggingInitReq(pWDA,
15724 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015725 break;
15726 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015727 case WDA_GET_FRAME_LOG_REQ:
15728 {
15729 WDA_ProcessGetFrameLogReq(pWDA,
15730 (tAniGetFrameLogReq *)pMsg->bodyptr);
15731 break;
15732 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015733 case WDA_START_RSSI_MONITOR_REQ:
15734 {
15735 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15736 break;
15737 }
15738 case WDA_STOP_RSSI_MONITOR_REQ:
15739 {
15740 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15741 break;
15742 }
Karthick Sa35b0692015-08-21 15:57:05 +053015743 case WDA_SEND_LOG_DONE_IND:
15744 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015745 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015746 break;
15747 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015748 case WDA_FATAL_EVENT_LOGS_REQ:
15749 {
15750 WDA_ProcessFatalEventLogsReq(pWDA,
15751 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15752 break;
15753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015754 case WDA_SET_HOST_OFFLOAD:
15755 {
15756 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15757 break;
15758 }
15759 case WDA_SET_KEEP_ALIVE:
15760 {
15761 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15762 break;
15763 }
15764#ifdef WLAN_NS_OFFLOAD
15765 case WDA_SET_NS_OFFLOAD:
15766 {
15767 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15768 break;
15769 }
15770#endif //WLAN_NS_OFFLOAD
15771 case WDA_ADD_STA_SELF_REQ:
15772 {
15773 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15774 break;
15775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015776 case WDA_DEL_STA_SELF_REQ:
15777 {
15778 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15779 break;
15780 }
15781 case WDA_WOWL_ADD_BCAST_PTRN:
15782 {
15783 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15784 break;
15785 }
15786 case WDA_WOWL_DEL_BCAST_PTRN:
15787 {
15788 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15789 break;
15790 }
15791 case WDA_WOWL_ENTER_REQ:
15792 {
15793 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15794 break;
15795 }
15796 case WDA_WOWL_EXIT_REQ:
15797 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015798 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015799 break;
15800 }
15801 case WDA_TL_FLUSH_AC_REQ:
15802 {
15803 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15804 break;
15805 }
15806 case WDA_SIGNAL_BTAMP_EVENT:
15807 {
15808 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15809 break;
15810 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015811 case WDA_FW_STATS_GET_REQ:
15812 {
15813 WDA_ProcessFWStatsGetReq(pWDA,
15814 (tSirFWStatsGetReq *)pMsg->bodyptr);
15815 break;
15816 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015817#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15818 case WDA_LINK_LAYER_STATS_SET_REQ:
15819 {
15820 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15821 break;
15822 }
15823 case WDA_LINK_LAYER_STATS_GET_REQ:
15824 {
15825 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15826 break;
15827 }
15828 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15829 {
15830 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15831 break;
15832 }
15833#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015834#ifdef WLAN_FEATURE_EXTSCAN
15835 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15836 {
15837 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15838 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15839 break;
15840 }
15841 case WDA_EXTSCAN_START_REQ:
15842 {
15843 WDA_ProcessEXTScanStartReq(pWDA,
15844 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15845 break;
15846 }
15847 case WDA_EXTSCAN_STOP_REQ:
15848 {
15849 WDA_ProcessEXTScanStopReq(pWDA,
15850 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15851 break;
15852 }
15853 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15854 {
15855 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15856 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15857 break;
15858 }
15859 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15860 {
15861 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15862 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15863 break;
15864 }
15865 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15866 {
15867 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15868 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15869 break;
15870 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015871 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15872 {
15873 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15874 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15875 break;
15876 }
15877 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15878 {
15879 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15880 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15881 break;
15882 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015883 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15884 {
15885 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15886 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15887 break;
15888 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015889#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015890#ifdef WDA_UT
15891 case WDA_WDI_EVENT_MSG:
15892 {
15893 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15894 break ;
15895 }
15896#endif
15897 case WDA_UPDATE_BEACON_IND:
15898 {
15899 WDA_ProcessUpdateBeaconParams(pWDA,
15900 (tUpdateBeaconParams *)pMsg->bodyptr);
15901 break;
15902 }
15903 case WDA_SEND_BEACON_REQ:
15904 {
15905 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15906 break;
15907 }
15908 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15909 {
15910 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15911 (tSendProbeRespParams *)pMsg->bodyptr);
15912 break;
15913 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015914#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015915 case WDA_SET_MAX_TX_POWER_REQ:
15916 {
15917 WDA_ProcessSetMaxTxPowerReq(pWDA,
15918 (tMaxTxPowerParams *)pMsg->bodyptr);
15919 break;
15920 }
15921#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015922 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15923 {
15924 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15925 pMsg->bodyptr);
15926 break;
15927 }
schang86c22c42013-03-13 18:41:24 -070015928 case WDA_SET_TX_POWER_REQ:
15929 {
15930 WDA_ProcessSetTxPowerReq(pWDA,
15931 (tSirSetTxPowerReq *)pMsg->bodyptr);
15932 break;
15933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015934 case WDA_SET_P2P_GO_NOA_REQ:
15935 {
15936 WDA_ProcessSetP2PGONOAReq(pWDA,
15937 (tP2pPsParams *)pMsg->bodyptr);
15938 break;
15939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015940 /* timer related messages */
15941 case WDA_TIMER_BA_ACTIVITY_REQ:
15942 {
15943 WDA_BaCheckActivity(pWDA) ;
15944 break ;
15945 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015946
15947 /* timer related messages */
15948 case WDA_TIMER_TRAFFIC_STATS_IND:
15949 {
15950 WDA_TimerTrafficStatsInd(pWDA);
15951 break;
15952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015953#ifdef WLAN_FEATURE_VOWIFI_11R
15954 case WDA_AGGR_QOS_REQ:
15955 {
15956 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15957 break;
15958 }
15959#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015960 case WDA_FTM_CMD_REQ:
15961 {
15962 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15963 break ;
15964 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015965#ifdef FEATURE_OEM_DATA_SUPPORT
15966 case WDA_START_OEM_DATA_REQ:
15967 {
15968 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15969 break;
15970 }
15971#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015972 /* Tx Complete Time out Indication */
15973 case WDA_TX_COMPLETE_TIMEOUT_IND:
15974 {
15975 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15976 break;
15977 }
15978 case WDA_WLAN_SUSPEND_IND:
15979 {
15980 WDA_ProcessWlanSuspendInd(pWDA,
15981 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15982 break;
15983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015984 case WDA_WLAN_RESUME_REQ:
15985 {
15986 WDA_ProcessWlanResumeReq(pWDA,
15987 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15988 break;
15989 }
15990
15991 case WDA_UPDATE_CF_IND:
15992 {
15993 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15994 pMsg->bodyptr = NULL;
15995 break;
15996 }
15997#ifdef FEATURE_WLAN_SCAN_PNO
15998 case WDA_SET_PNO_REQ:
15999 {
16000 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
16001 break;
16002 }
16003 case WDA_UPDATE_SCAN_PARAMS_REQ:
16004 {
16005 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
16006 break;
16007 }
16008 case WDA_SET_RSSI_FILTER_REQ:
16009 {
16010 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
16011 break;
16012 }
16013#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016014#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016015 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016016 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016017 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016018 break;
16019 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053016020 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
16021 {
16022 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
16023 break;
16024 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016025#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016026 case WDA_SET_TX_PER_TRACKING_REQ:
16027 {
16028 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
16029 break;
16030 }
16031
16032#ifdef WLAN_FEATURE_PACKET_FILTERING
16033 case WDA_8023_MULTICAST_LIST_REQ:
16034 {
16035 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
16036 break;
16037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016038 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
16039 {
16040 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
16041 break;
16042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016043 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
16044 {
16045 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
16046 break;
16047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016048 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
16049 {
16050 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
16051 break;
16052 }
16053#endif // WLAN_FEATURE_PACKET_FILTERING
16054
16055
16056 case WDA_TRANSMISSION_CONTROL_IND:
16057 {
16058 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
16059 break;
16060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016061 case WDA_SET_POWER_PARAMS_REQ:
16062 {
16063 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
16064 break;
16065 }
c_manjeecfd1efb2015-09-25 19:32:34 +053016066 case WDA_FW_MEM_DUMP_REQ:
16067 {
16068 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
16069 break;
16070 }
16071
Jeff Johnson295189b2012-06-20 16:38:30 -070016072#ifdef WLAN_FEATURE_GTK_OFFLOAD
16073 case WDA_GTK_OFFLOAD_REQ:
16074 {
16075 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
16076 break;
16077 }
16078
16079 case WDA_GTK_OFFLOAD_GETINFO_REQ:
16080 {
16081 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
16082 break;
16083 }
16084#endif //WLAN_FEATURE_GTK_OFFLOAD
16085
16086 case WDA_SET_TM_LEVEL_REQ:
16087 {
16088 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
16089 break;
16090 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053016091
Mohit Khanna4a70d262012-09-11 16:30:12 -070016092 case WDA_UPDATE_OP_MODE:
16093 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053016094 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
16095 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
16096 {
16097 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16098 }
16099 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070016100 {
16101 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
16102 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16103 else
16104 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016105 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016106 }
16107 else
16108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016109 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016110 break;
16111 }
Chet Lanctot186b5732013-03-18 10:26:30 -070016112#ifdef WLAN_FEATURE_11W
16113 case WDA_EXCLUDE_UNENCRYPTED_IND:
16114 {
16115 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
16116 break;
16117 }
16118#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016119#ifdef FEATURE_WLAN_TDLS
16120 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
16121 {
16122 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
16123 break;
16124 }
16125#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016126 case WDA_DHCP_START_IND:
16127 {
16128 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16129 break;
16130 }
16131 case WDA_DHCP_STOP_IND:
16132 {
16133 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16134 break;
16135 }
Leo Chang9056f462013-08-01 19:21:11 -070016136#ifdef FEATURE_WLAN_LPHB
16137 case WDA_LPHB_CONF_REQ:
16138 {
16139 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
16140 break;
16141 }
16142#endif
Yue Mab9c86f42013-08-14 15:59:08 -070016143 case WDA_ADD_PERIODIC_TX_PTRN_IND:
16144 {
16145 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
16146 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
16147 break;
16148 }
16149 case WDA_DEL_PERIODIC_TX_PTRN_IND:
16150 {
16151 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
16152 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
16153 break;
16154 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016155 case WDA_RATE_UPDATE_IND:
16156 {
16157 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
16158 break;
16159 }
16160#ifdef WLAN_FEATURE_RMC
16161 case WDA_RMC_RULER_REQ:
16162 {
16163 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
16164 break;
16165 }
16166 case WDA_RMC_UPDATE_IND:
16167 {
16168 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
16169 break;
16170 }
16171 case WDA_GET_IBSS_PEER_INFO_REQ:
16172 {
16173 WDA_ProcessIbssPeerInfoReq(pWDA,
16174 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
16175 break;
16176 }
16177 case WDA_TX_FAIL_MONITOR_IND:
16178 {
16179 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
16180 break;
16181 }
16182#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053016183#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16184 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
16185 {
16186 WDA_ProcessPERRoamScanTriggerReq(pWDA,
16187 (tPERRoamScanStart *)pMsg->bodyptr);
16188 break;
16189 }
16190#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053016191#ifdef FEATURE_WLAN_BATCH_SCAN
16192 case WDA_SET_BATCH_SCAN_REQ:
16193 {
16194 WDA_ProcessSetBatchScanReq(pWDA,
16195 (tSirSetBatchScanReq *)pMsg->bodyptr);
16196 break;
16197 }
16198 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
16199 {
16200 WDA_ProcessTriggerBatchScanResultInd(pWDA,
16201 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
16202 break;
16203 }
16204 case WDA_STOP_BATCH_SCAN_IND:
16205 {
16206 WDA_ProcessStopBatchScanInd(pWDA,
16207 (tSirStopBatchScanInd *)pMsg->bodyptr);
16208 break;
16209 }
c_hpothu92367912014-05-01 15:18:17 +053016210 case WDA_GET_BCN_MISS_RATE_REQ:
16211 WDA_ProcessGetBcnMissRateReq(pWDA,
16212 (tSirBcnMissRateReq *)pMsg->bodyptr);
16213 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053016214#endif
16215
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053016216 case WDA_HT40_OBSS_SCAN_IND:
16217 {
16218 WDA_ProcessHT40OBSSScanInd(pWDA,
16219 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
16220 break;
16221 }
16222 case WDA_HT40_OBSS_STOP_SCAN_IND:
16223 {
16224 WDA_ProcessHT40OBSSStopScanInd(pWDA,
16225 (tANI_U8*)pMsg->bodyptr);
16226 break;
16227 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053016228// tdlsoffchan
16229#ifdef FEATURE_WLAN_TDLS
16230 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
16231 {
16232 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
16233 break;
16234 }
16235#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053016236 case WDA_SPOOF_MAC_ADDR_REQ:
16237 {
16238 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
16239 break;
16240 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053016241 case WDA_ENCRYPT_MSG_REQ:
16242 {
16243 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
16244 break;
16245 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016246
16247 case WDA_NAN_REQUEST:
16248 {
16249 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
16250 break;
16251 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016252 case WDA_SET_RTS_CTS_HTVHT:
16253 {
16254 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16255 break;
16256 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016257
16258 case WDA_MON_START_REQ:
16259 {
16260 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16261 break;
16262 }
16263 case WDA_MON_STOP_REQ:
16264 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016265 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016266 break;
16267 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016268 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16269 {
16270 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16271 break;
16272 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016273 case WDA_WIFI_CONFIG_REQ:
16274 {
16275 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16276 break;
16277 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016278#ifdef FEATURE_OEM_DATA_SUPPORT
16279 case WDA_START_OEM_DATA_REQ_IND_NEW:
16280 {
16281 WDA_ProcessStartOemDataReqIndNew(pWDA,
16282 (tOemDataReqNewConfig *)pMsg->bodyptr);
16283 break;
16284 }
16285#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016286 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16287 {
16288 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16289 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16290 break;
16291 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016292 case WDA_MODIFY_ROAM_PARAMS_IND:
16293 {
16294 WDA_ProcessBcnMissPenaltyCount(pWDA,
16295 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16296 break;
16297 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016298
16299 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16300 wda_process_set_allowed_action_frames_ind(pWDA,
16301 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16302 break;
16303
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016304 case WDA_PAUSE_TL_IND:
16305 {
16306 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16307 break;
16308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016309 default:
16310 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 "No Handling for msg type %x in WDA "
16313 ,pMsg->type);
16314 /* Do Nothing? MSG Body should be freed at here */
16315 if(NULL != pMsg->bodyptr)
16316 {
16317 vos_mem_free(pMsg->bodyptr);
16318 }
16319 //WDA_VOS_ASSERT(0) ;
16320 }
16321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 return status ;
16323}
16324
Jeff Johnson295189b2012-06-20 16:38:30 -070016325/*
16326 * FUNCTION: WDA_LowLevelIndCallback
16327 * IND API callback from WDI, send Ind to PE
16328 */
16329void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16330 void* pUserData )
16331{
16332 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16333#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16334 tSirRSSINotification rssiNotification;
16335#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016336 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016337 {
16338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016339 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016340 VOS_ASSERT(0);
16341 return ;
16342 }
16343
16344 switch(wdiLowLevelInd->wdiIndicationType)
16345 {
16346 case WDI_RSSI_NOTIFICATION_IND:
16347 {
16348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16349 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016350#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16351 rssiNotification.bReserved =
16352 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16353 rssiNotification.bRssiThres1NegCross =
16354 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16355 rssiNotification.bRssiThres1PosCross =
16356 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16357 rssiNotification.bRssiThres2NegCross =
16358 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16359 rssiNotification.bRssiThres2PosCross =
16360 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16361 rssiNotification.bRssiThres3NegCross =
16362 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16363 rssiNotification.bRssiThres3PosCross =
16364 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016365 rssiNotification.avgRssi = (v_S7_t)
16366 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016367 WLANTL_BMPSRSSIRegionChangedNotification(
16368 pWDA->pVosContext,
16369 &rssiNotification);
16370#endif
16371 break ;
16372 }
16373 case WDI_MISSED_BEACON_IND:
16374 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016375 tpSirSmeMissedBeaconInd pMissBeacInd =
16376 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16378 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016379 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016380 if(NULL == pMissBeacInd)
16381 {
16382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16383 "%s: VOS MEM Alloc Failure", __func__);
16384 break;
16385 }
16386 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16387 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16388 pMissBeacInd->bssIdx =
16389 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16390 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016391 break ;
16392 }
16393 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16394 {
16395 /* TODO: Decode Ind and send Ind to PE */
16396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16397 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16398 break ;
16399 }
16400
16401 case WDI_MIC_FAILURE_IND:
16402 {
16403 tpSirSmeMicFailureInd pMicInd =
16404 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16405
16406 if(NULL == pMicInd)
16407 {
16408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016410 break;
16411 }
16412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16413 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016414 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16415 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16416 vos_mem_copy(pMicInd->bssId,
16417 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16418 sizeof(tSirMacAddr));
16419 vos_mem_copy(pMicInd->info.srcMacAddr,
16420 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16421 sizeof(tSirMacAddr));
16422 vos_mem_copy(pMicInd->info.taMacAddr,
16423 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16424 sizeof(tSirMacAddr));
16425 vos_mem_copy(pMicInd->info.dstMacAddr,
16426 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16427 sizeof(tSirMacAddr));
16428 vos_mem_copy(pMicInd->info.rxMacAddr,
16429 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16430 sizeof(tSirMacAddr));
16431 pMicInd->info.multicast =
16432 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16433 pMicInd->info.keyId=
16434 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16435 pMicInd->info.IV1=
16436 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16437 vos_mem_copy(pMicInd->info.TSC,
16438 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016439 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16440 (void *)pMicInd , 0) ;
16441 break ;
16442 }
16443 case WDI_FATAL_ERROR_IND:
16444 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016445 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016446 /* TODO: Decode Ind and send Ind to PE */
16447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16448 "Received WDI_FATAL_ERROR_IND from WDI ");
16449 break ;
16450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016451 case WDI_DEL_STA_IND:
16452 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016453 tpDeleteStaContext pDelSTACtx =
16454 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16455
16456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16457 "Received WDI_DEL_STA_IND from WDI ");
16458 if(NULL == pDelSTACtx)
16459 {
16460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016462 break;
16463 }
16464 vos_mem_copy(pDelSTACtx->addr2,
16465 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16466 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016467 vos_mem_copy(pDelSTACtx->bssId,
16468 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16469 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016470 pDelSTACtx->assocId =
16471 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16472 pDelSTACtx->reasonCode =
16473 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16474 pDelSTACtx->staId =
16475 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016476 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16477 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016478 break ;
16479 }
16480 case WDI_COEX_IND:
16481 {
16482 tANI_U32 index;
16483 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016484 tSirSmeCoexInd *pSmeCoexInd;
16485
16486 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16487 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16488 {
16489 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16490 {
16491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16492 FL("Coex state: 0x%x coex feature: 0x%x"),
16493 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16494 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16495
16496 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16497 {
16498 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16499 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16500 }
16501 }
16502 break;
16503 }
16504
16505 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016506 if(NULL == pSmeCoexInd)
16507 {
16508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016509 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016510 break;
16511 }
16512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16513 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016514 /* Message Header */
16515 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16516 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 /* Info from WDI Indication */
16518 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16519 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16520 {
16521 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016523 /* VOS message wrapper */
16524 vosMsg.type = eWNI_SME_COEX_IND;
16525 vosMsg.bodyptr = (void *)pSmeCoexInd;
16526 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016527 /* Send message to SME */
16528 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16529 {
16530 /* free the mem and return */
16531 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16532 }
16533 else
16534 {
16535 /* DEBUG */
16536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16537 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16538 pSmeCoexInd->coexIndType,
16539 pSmeCoexInd->coexIndData[0],
16540 pSmeCoexInd->coexIndData[1],
16541 pSmeCoexInd->coexIndData[2],
16542 pSmeCoexInd->coexIndData[3]);
16543 }
16544 break;
16545 }
16546 case WDI_TX_COMPLETE_IND:
16547 {
16548 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16549 /* Calling TxCompleteAck Indication from wda context*/
16550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16551 "Complete Indication received from HAL");
16552 if( pWDA->pAckTxCbFunc )
16553 {
16554 if( VOS_STATUS_SUCCESS !=
16555 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16556 {
16557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16558 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016559 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016560 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016561 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16562 else
16563 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016564 pWDA->pAckTxCbFunc = NULL;
16565 }
16566 else
16567 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016569 "Tx Complete Indication is received after timeout ");
16570 }
16571 break;
16572 }
Viral Modid86bde22012-12-10 13:09:21 -080016573 case WDI_P2P_NOA_START_IND :
16574 {
16575 tSirP2PNoaStart *pP2pNoaStart =
16576 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16577
16578 if (NULL == pP2pNoaStart)
16579 {
16580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16581 "Memory allocation failure, "
16582 "WDI_P2P_NOA_START_IND not forwarded");
16583 break;
16584 }
16585 pP2pNoaStart->status =
16586 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16587 pP2pNoaStart->bssIdx =
16588 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16589 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16590 (void *)pP2pNoaStart , 0) ;
16591 break;
16592 }
16593
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016594#ifdef FEATURE_WLAN_TDLS
16595 case WDI_TDLS_IND :
16596 {
16597 tSirTdlsInd *pTdlsInd =
16598 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16599
16600 if (NULL == pTdlsInd)
16601 {
16602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16603 "Memory allocation failure, "
16604 "WDI_TDLS_IND not forwarded");
16605 break;
16606 }
16607 pTdlsInd->status =
16608 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16609 pTdlsInd->assocId =
16610 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16611 pTdlsInd->staIdx =
16612 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16613 pTdlsInd->reasonCode =
16614 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16615 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16616 (void *)pTdlsInd , 0) ;
16617 break;
16618 }
16619#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016620 case WDI_P2P_NOA_ATTR_IND :
16621 {
16622 tSirP2PNoaAttr *pP2pNoaAttr =
16623 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16625 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016626 if (NULL == pP2pNoaAttr)
16627 {
16628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16629 "Memory allocation failure, "
16630 "WDI_P2P_NOA_ATTR_IND not forwarded");
16631 break;
16632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 pP2pNoaAttr->index =
16634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16635 pP2pNoaAttr->oppPsFlag =
16636 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16637 pP2pNoaAttr->ctWin =
16638 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16639
16640 pP2pNoaAttr->uNoa1IntervalCnt =
16641 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16642 pP2pNoaAttr->uNoa1Duration =
16643 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16644 pP2pNoaAttr->uNoa1Interval =
16645 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16646 pP2pNoaAttr->uNoa1StartTime =
16647 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016648 pP2pNoaAttr->uNoa2IntervalCnt =
16649 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16650 pP2pNoaAttr->uNoa2Duration =
16651 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16652 pP2pNoaAttr->uNoa2Interval =
16653 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16654 pP2pNoaAttr->uNoa2StartTime =
16655 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016656 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16657 (void *)pP2pNoaAttr , 0) ;
16658 break;
16659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016660#ifdef FEATURE_WLAN_SCAN_PNO
16661 case WDI_PREF_NETWORK_FOUND_IND:
16662 {
16663 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016664 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16665 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16666 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16667 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16668
Jeff Johnson295189b2012-06-20 16:38:30 -070016669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16670 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016671 if (NULL == pPrefNetworkFoundInd)
16672 {
16673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16674 "Memory allocation failure, "
16675 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016676 if (NULL !=
16677 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16678 {
16679 wpalMemoryFree(
16680 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16681 );
16682 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 break;
16685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016686 /* Message Header */
16687 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016688 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016689
16690 /* Info from WDI Indication */
16691 pPrefNetworkFoundInd->ssId.length =
16692 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016693 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016694 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16695 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16696 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016697 if (NULL !=
16698 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16699 {
16700 pPrefNetworkFoundInd->frameLength =
16701 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16702 vos_mem_copy( pPrefNetworkFoundInd->data,
16703 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16704 pPrefNetworkFoundInd->frameLength);
16705 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16706 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16707 }
16708 else
16709 {
16710 pPrefNetworkFoundInd->frameLength = 0;
16711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016712 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016713 /* VOS message wrapper */
16714 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16715 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16716 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016717 /* Send message to SME */
16718 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16719 {
16720 /* free the mem and return */
16721 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016723 break;
16724 }
16725#endif // FEATURE_WLAN_SCAN_PNO
16726
16727#ifdef WLAN_WAKEUP_EVENTS
16728 case WDI_WAKE_REASON_IND:
16729 {
16730 vos_msg_t vosMsg;
16731 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16732 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16733 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16734
16735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016736 "[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 -070016737 wdiLowLevelInd->wdiIndicationType,
16738 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16739 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16740 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16741
16742 if (NULL == pWakeReasonInd)
16743 {
16744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16745 "Memory allocation failure, "
16746 "WDI_WAKE_REASON_IND not forwarded");
16747 break;
16748 }
16749
16750 vos_mem_zero(pWakeReasonInd, allocSize);
16751
16752 /* Message Header */
16753 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16754 pWakeReasonInd->mesgLen = allocSize;
16755
16756 /* Info from WDI Indication */
16757 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16758 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16759 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16760 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16761 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16762 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16763 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16764 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16765
16766 /* VOS message wrapper */
16767 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16768 vosMsg.bodyptr = (void *) pWakeReasonInd;
16769 vosMsg.bodyval = 0;
16770
16771 /* Send message to SME */
16772 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16773 {
16774 /* free the mem and return */
16775 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16776 }
16777
16778 break;
16779 }
16780#endif // WLAN_WAKEUP_EVENTS
16781
16782 case WDI_TX_PER_HIT_IND:
16783 {
16784 vos_msg_t vosMsg;
16785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16786 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16787 /* VOS message wrapper */
16788 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16789 vosMsg.bodyptr = NULL;
16790 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016791 /* Send message to SME */
16792 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16793 {
16794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16795 }
16796 break;
16797 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016798#ifdef WLAN_FEATURE_RMC
16799 case WDI_TX_FAIL_IND:
16800 {
16801 if (pWDA->txFailIndCallback)
16802 {
16803 pWDA->txFailIndCallback(
16804 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16805 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16806 }
16807 break;
16808 }
16809#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016810
Leo Chang9056f462013-08-01 19:21:11 -070016811#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016812 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016813 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016814 vos_msg_t vosMsg;
16815 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016816
Leo Changd9df8aa2013-09-26 13:32:26 -070016817 lphbInd =
16818 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16819 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016820 {
16821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16822 "%s: LPHB IND buffer alloc Fail", __func__);
16823 return ;
16824 }
16825
Leo Changd9df8aa2013-09-26 13:32:26 -070016826 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016827 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016828 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016829 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016830 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016831 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16832
16833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016834 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016835 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16836
Leo Changd9df8aa2013-09-26 13:32:26 -070016837 vosMsg.type = eWNI_SME_LPHB_IND;
16838 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016839 vosMsg.bodyval = 0;
16840 /* Send message to SME */
16841 if (VOS_STATUS_SUCCESS !=
16842 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16843 {
16844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16845 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016846 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016847 }
16848 break;
16849 }
16850#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016851 case WDI_PERIODIC_TX_PTRN_FW_IND:
16852 {
16853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16854 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16855 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16856 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16857 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16858 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16859 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16860
16861 break;
16862 }
Leo Chang9056f462013-08-01 19:21:11 -070016863
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016864 case WDI_IBSS_PEER_INACTIVITY_IND:
16865 {
16866 tSirIbssPeerInactivityInd *pIbssInd =
16867 (tSirIbssPeerInactivityInd *)
16868 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16869
16870 if (NULL == pIbssInd)
16871 {
16872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16873 "Memory allocation failure, "
16874 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16875 break;
16876 }
16877
16878 pIbssInd->bssIdx =
16879 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16880 pIbssInd->staIdx =
16881 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16882 vos_mem_copy(pIbssInd->peerAddr,
16883 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16884 sizeof(tSirMacAddr));
16885 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16886 break;
16887 }
16888
Abhishek Singh00b71972016-01-07 10:51:04 +053016889#ifdef WLAN_FEATURE_RMC
16890 case WDI_RMC_RULER_PICK_NEW :
16891 {
16892 tSirRmcUpdateInd *pRmcUpdateInd =
16893 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16894
16895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16896 "Received WDI_RMC_UPDATE_IND from WDI");
16897 if (NULL == pRmcUpdateInd)
16898 {
16899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16900 "Memory allocation failure, "
16901 "WDI_RMC_UPDATE_IND not forwarded");
16902 break;
16903 }
16904
16905 pRmcUpdateInd->indication =
16906 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16907 pRmcUpdateInd->role =
16908 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16909
16910 /* Copy the mcast transmitter which should be us */
16911 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16912 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16913 mcastTransmitter,
16914 sizeof(tSirMacAddr));
16915 /* Copy the mcast group address */
16916 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16917 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16918 sizeof(tSirMacAddr));
16919 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16920 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16921 sizeof(tSirMacAddr));
16922 vos_mem_copy(pRmcUpdateInd->ruler,
16923 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16924 sizeof(pRmcUpdateInd->ruler));
16925
16926 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16927 break;
16928 }
16929#endif /* WLAN_FEATURE_RMC */
16930
Rajeev79dbe4c2013-10-05 11:03:42 +053016931#ifdef FEATURE_WLAN_BATCH_SCAN
16932 case WDI_BATCH_SCAN_RESULT_IND:
16933 {
16934 void *pBatchScanResult;
16935 void *pCallbackContext;
16936 tpAniSirGlobal pMac;
16937
16938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16939 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16940
16941 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016942 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016943 {
16944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16945 "%s:pWDA is NULL", __func__);
16946 VOS_ASSERT(0);
16947 return;
16948 }
16949
16950 pBatchScanResult =
16951 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16952 if (NULL == pBatchScanResult)
16953 {
16954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16955 "%s:Batch scan result from FW is null can't invoke HDD callback",
16956 __func__);
16957 VOS_ASSERT(0);
16958 return;
16959 }
16960
16961 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16962 if (NULL == pMac)
16963 {
16964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16965 "%s:pMac is NULL", __func__);
16966 VOS_ASSERT(0);
16967 return;
16968 }
16969
16970 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16971 /*call hdd callback with set batch scan response data*/
16972 if(pMac->pmc.batchScanResultCallback)
16973 {
16974 pMac->pmc.batchScanResultCallback(pCallbackContext,
16975 pBatchScanResult);
16976 }
16977 else
16978 {
16979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16980 "%s:HDD callback is null", __func__);
16981 VOS_ASSERT(0);
16982 }
16983 break;
16984 }
16985#endif
16986
Leo Chang0b0e45a2013-12-15 15:18:55 -080016987#ifdef FEATURE_WLAN_CH_AVOID
16988 case WDI_CH_AVOID_IND:
16989 {
16990 vos_msg_t vosMsg;
16991 tSirChAvoidIndType *chAvoidInd;
16992
16993 chAvoidInd =
16994 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16995 if (NULL == chAvoidInd)
16996 {
16997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16998 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16999 return ;
17000 }
17001
17002 chAvoidInd->avoidRangeCount =
17003 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
17004 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
17005 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
17006 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
17007
17008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17009 "%s : WDA CH avoid notification", __func__);
17010
17011 vosMsg.type = eWNI_SME_CH_AVOID_IND;
17012 vosMsg.bodyptr = chAvoidInd;
17013 vosMsg.bodyval = 0;
17014 /* Send message to SME */
17015 if (VOS_STATUS_SUCCESS !=
17016 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17017 {
17018 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17019 "post eWNI_SME_CH_AVOID_IND to SME Failed");
17020 vos_mem_free(chAvoidInd);
17021 }
17022 break;
17023 }
17024#endif /* FEATURE_WLAN_CH_AVOID */
17025
Sunil Duttbd736ed2014-05-26 21:19:41 +053017026#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17027 case WDI_LL_STATS_RESULTS_IND:
17028 {
17029 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017030 tpAniSirGlobal pMac;
17031
17032 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17033 "Received WDI_LL_STATS_RESULTS_IND from FW");
17034
17035 /*sanity check*/
17036 if (NULL == pWDA)
17037 {
17038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17039 "%s:pWDA is NULL", __func__);
17040 VOS_ASSERT(0);
17041 return;
17042 }
17043
17044 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053017045 (void *)wdiLowLevelInd->
17046 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017047 if (NULL == pLinkLayerStatsInd)
17048 {
17049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17050 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
17051 __func__);
17052 VOS_ASSERT(0);
17053 return;
17054 }
17055
17056 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17057 if (NULL == pMac)
17058 {
17059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17060 "%s:pMac is NULL", __func__);
17061 VOS_ASSERT(0);
17062 return;
17063 }
17064
Dino Mycled3d50022014-07-07 12:58:25 +053017065 /* call hdd callback with Link Layer Statistics.
17066 * vdev_id/ifacId in link_stats_results will be
17067 * used to retrieve the correct HDD context
17068 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053017069 if (pMac->sme.pLinkLayerStatsIndCallback)
17070 {
Dino Mycled3d50022014-07-07 12:58:25 +053017071 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053017072 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053017073 pLinkLayerStatsInd,
17074 wdiLowLevelInd->
17075 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053017076 }
17077 else
17078 {
17079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17080 "%s:HDD callback is null", __func__);
17081 }
17082 break;
17083 }
17084#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
17085
Dino Mycle41bdc942014-06-10 11:30:24 +053017086#ifdef WLAN_FEATURE_EXTSCAN
17087 case WDI_EXTSCAN_PROGRESS_IND:
17088 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
17089 case WDI_EXTSCAN_SCAN_RESULT_IND:
17090 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017091 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053017092 {
17093 void *pEXTScanData;
17094 void *pCallbackContext;
17095 tpAniSirGlobal pMac;
17096 tANI_U16 indType;
17097
17098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17099 "Received WDI_EXTSCAN Indications from FW");
17100 /*sanity check*/
17101 if (NULL == pWDA)
17102 {
17103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17104 "%s:pWDA is NULL", __func__);
17105 VOS_ASSERT(0);
17106 return;
17107 }
17108 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
17109 {
17110 indType = WDA_EXTSCAN_PROGRESS_IND;
17111
17112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17113 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
17114 }
17115 if (wdiLowLevelInd->wdiIndicationType ==
17116 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
17117 {
17118 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
17119
17120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17121 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
17122 }
17123 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
17124 {
17125 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
17126
17127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17128 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
17129 }
17130 if (wdiLowLevelInd->wdiIndicationType ==
17131 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
17132 {
17133 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
17134
17135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17136 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
17137 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017138 if (wdiLowLevelInd->wdiIndicationType ==
17139 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
17140 {
17141 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
17142
17143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17144 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
17145 }
Dino Mycle41bdc942014-06-10 11:30:24 +053017146
17147 pEXTScanData =
17148 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
17149 if (NULL == pEXTScanData)
17150 {
17151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17152 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
17153 __func__);
17154 VOS_ASSERT(0);
17155 return;
17156 }
17157
17158 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17159 if (NULL == pMac)
17160 {
17161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17162 "%s:pMac is NULL", __func__);
17163 VOS_ASSERT(0);
17164 return;
17165 }
17166
17167 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17168
17169 if(pMac->sme.pEXTScanIndCb)
17170 {
17171 pMac->sme.pEXTScanIndCb(pCallbackContext,
17172 indType,
17173 pEXTScanData);
17174 }
17175 else
17176 {
17177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17178 "%s:HDD callback is null", __func__);
17179 }
17180 break;
17181 }
17182#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053017183 case WDI_DEL_BA_IND:
17184 {
17185 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053017186 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053017187
17188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17189 "Received WDI_DEL_BA_IND from WDI ");
17190 if(NULL == pDelBAInd)
17191 {
17192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17193 "%s: VOS MEM Alloc Failure", __func__);
17194 break;
17195 }
17196 vos_mem_copy(pDelBAInd->peerMacAddr,
17197 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
17198 sizeof(tSirMacAddr));
17199 vos_mem_copy(pDelBAInd->bssId,
17200 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
17201 sizeof(tSirMacAddr));
17202 pDelBAInd->staIdx =
17203 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
17204 pDelBAInd->baTID =
17205 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
17206 pDelBAInd->baDirection =
17207 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
17208 pDelBAInd->reasonCode =
17209 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
17210
17211 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
17212 (void *)pDelBAInd , 0) ;
17213 break;
17214 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053017215 case WDI_NAN_EVENT_IND:
17216 {
17217 vos_msg_t vosMsg;
17218 tpSirNanEvent pSirNanEvent = NULL;
17219
17220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17221 "Received WDI_NAN_EVENT");
17222
17223 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
17224 - sizeof( pSirNanEvent->event_data)
17225 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17226
17227 if (NULL == pSirNanEvent)
17228 {
17229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17230 "%s: VOS MEM Alloc Failure", __func__);
17231 VOS_ASSERT(0) ;
17232 break;
17233 }
17234
17235 pSirNanEvent->event_data_len =
17236 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
17237
17238 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
17239 {
17240 vos_mem_copy( pSirNanEvent->event_data,
17241 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
17242 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17243 }
17244
17245 /* VOS message wrapper */
17246 vosMsg.type = eWNI_SME_NAN_EVENT;
17247 vosMsg.bodyptr = pSirNanEvent;
17248 vosMsg.bodyval = 0;
17249
17250 /* Send message to SME */
17251 if (VOS_STATUS_SUCCESS
17252 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17253 {
17254 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17255 "post eWNI_SME_NAN_EVENT to SME Failed");
17256 vos_mem_free(pSirNanEvent);
17257 }
17258 break;
17259 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017260 case WDI_LOST_LINK_PARAMS_IND:
17261 {
17262 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17263 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017264
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017265 if (NULL == pLostLinkParamInd)
17266 {
17267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17268 "%s: VOS MEM Alloc Failure", __func__);
17269 break;
17270 }
17271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17272 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17273
17274 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17275 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17276 pLostLinkParamInd->info.bssIdx =
17277 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17278 pLostLinkParamInd->info.rssi =
17279 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17280 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17281 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17282 sizeof(tSirMacAddr));
17283 pLostLinkParamInd->info.linkFlCnt =
17284 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17285 pLostLinkParamInd->info.linkFlTx =
17286 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17287 pLostLinkParamInd->info.lastDataRate =
17288 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17289 pLostLinkParamInd->info.rsvd1 =
17290 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17291 pLostLinkParamInd->info.rsvd2 =
17292 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17293 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17294 (void *)pLostLinkParamInd , 0) ;
17295 break;
17296 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017297 case WDI_RSSI_BREACHED_IND:
17298 {
17299 WDI_RssiBreachedIndType *pRssiBreachedInd;
17300 tpAniSirGlobal pMac;
17301
17302 pRssiBreachedInd =
17303 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17305 "Received WDI_RSSI_BREACHED_IND from FW");
17306
17307 vos_mem_copy(pRssiBreachedInd,
17308 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17309 sizeof(WDI_RssiBreachedIndType));
17310
17311 /*sanity check*/
17312 if (NULL == pWDA)
17313 {
17314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17315 "%s:pWDA is NULL", __func__);
17316 vos_mem_free(pRssiBreachedInd);
17317 VOS_ASSERT(0);
17318 return;
17319 }
17320
17321 if (NULL == pRssiBreachedInd)
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "%s:Breach indication from FW is null can't invoke HDD callback",
17325 __func__);
17326 VOS_ASSERT(0);
17327 return;
17328 }
17329
17330 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17331 if (NULL == pMac)
17332 {
17333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17334 "%s:pMac is NULL", __func__);
17335 VOS_ASSERT(0);
17336 vos_mem_free(pRssiBreachedInd);
17337 return;
17338 }
17339
17340 if (pMac->sme.rssiThresholdBreachedCb)
17341 {
17342 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17343 }
17344 else
17345 {
17346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17347 "%s:HDD callback is null", __func__);
17348 }
17349 vos_mem_free(pRssiBreachedInd);
17350 break;
17351 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017352#ifdef FEATURE_OEM_DATA_SUPPORT
17353 case WDI_START_OEM_DATA_RSP_IND_NEW:
17354 {
17355 void *pCallbackContext;
17356 tpAniSirGlobal pMac;
17357 tANI_U16 indType;
17358 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017359 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017360
17361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17362 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17363
17364 /*sanity check*/
17365 if (NULL == pWDA)
17366 {
17367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17368 "%s:pWDA is NULL", __func__);
17369 VOS_ASSERT(0);
17370 return;
17371 }
17372
17373 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17374 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017375 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17376 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017377 if (NULL == pOemRspNewIndData)
17378 {
17379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17380 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17381 __func__);
17382 VOS_ASSERT(0);
17383 return;
17384 }
17385
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017386 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17387 OemRspNewLen;
17388
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017389 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17390 if (NULL == pMac)
17391 {
17392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17393 "%s:pMac is NULL", __func__);
17394 VOS_ASSERT(0);
17395 return;
17396 }
17397
17398 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17399
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17401 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17402
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017403 if(pMac->sme.pOemDataIndCb)
17404 {
17405 pMac->sme.pOemDataIndCb(pCallbackContext,
17406 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017407 pOemRspNewIndData,
17408 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017409 }
17410 else
17411 {
17412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17413 "%s:HDD callback is null", __func__);
17414 }
17415 break;
17416 }
17417#endif /* FEATURE_OEM_DATA_SUPPORT */
17418
Jeff Johnson295189b2012-06-20 16:38:30 -070017419 default:
17420 {
17421 /* TODO error */
17422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17423 "Received UNKNOWN Indication from WDI ");
17424 }
17425 }
17426 return ;
17427}
17428
Jeff Johnson295189b2012-06-20 16:38:30 -070017429/*
17430 * BA related processing in WDA.
17431 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017432void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17433 void* pUserData)
17434{
17435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17436 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017437 if(NULL == pWdaParams)
17438 {
17439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017440 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017441 VOS_ASSERT(0) ;
17442 return ;
17443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017444 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017445 vos_mem_free(pWdaParams->wdaMsgParam) ;
17446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17447 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017449 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017450 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17451 {
17452 tANI_U8 i = 0 ;
17453 tBaActivityInd *baActivityInd = NULL ;
17454 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17455 tANI_U8 allocSize = sizeof(tBaActivityInd)
17456 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17457 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17458 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017459 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017460 if(NULL == baActivityInd)
17461 {
17462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017464 VOS_ASSERT(0) ;
17465 return;
17466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017467 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17468 sizeof(tSirMacAddr)) ;
17469 baActivityInd->baCandidateCnt = baCandidateCount ;
17470
17471 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17472 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17473
17474 for(i = 0 ; i < baCandidateCount ; i++)
17475 {
17476 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017477 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17478 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017479 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17480 {
17481 baCandidate->baInfo[tid].fBaEnable =
17482 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17483 baCandidate->baInfo[tid].startingSeqNum =
17484 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17485 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017486 wdiBaCandidate++ ;
17487 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017489 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17490 }
17491 else
17492 {
17493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17494 "BA Trigger RSP with Failure received ");
17495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017496 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017497}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017498
17499
17500/*
17501 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17502 * during MCC
17503 */
17504void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17505{
17506 wpt_uint32 enabled;
17507 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17508 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17510
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017511 if (NULL == pMac )
17512 {
17513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17514 "%s: Invoked with invalid MAC context ", __func__ );
17515 VOS_ASSERT(0);
17516 return;
17517 }
17518
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017519 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17520 != eSIR_SUCCESS)
17521 {
17522 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17523 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17524 return;
17525 }
17526
17527 if(!enabled)
17528 {
17529 return;
17530 }
17531
17532 if(NULL == pWDA)
17533 {
17534 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17535 "%s:WDA context is NULL", __func__);
17536 VOS_ASSERT(0);
17537 return;
17538 }
17539
17540 if(activate)
17541 {
17542 if( VOS_STATUS_SUCCESS !=
17543 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17544 {
17545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17546 "Traffic Stats Timer Start Failed ");
17547 return;
17548 }
17549 WDI_DS_ActivateTrafficStats();
17550 }
17551 else
17552 {
17553 WDI_DS_DeactivateTrafficStats();
17554 WDI_DS_ClearTrafficStats();
17555
17556 if( VOS_STATUS_SUCCESS !=
17557 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17558 {
17559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17560 "Traffic Stats Timer Stop Failed ");
17561 return;
17562 }
17563 }
17564}
17565
17566/*
17567 * Traffic Stats Timer handler
17568 */
17569void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17570{
17571 WDI_Status wdiStatus;
17572 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17573 WDI_TrafficStatsIndType trafficStatsIndParams;
17574 wpt_uint32 length, enabled;
17575 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17576
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017577 if (NULL == pMac )
17578 {
17579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17580 "%s: Invoked with invalid MAC context ", __func__ );
17581 VOS_ASSERT(0);
17582 return;
17583 }
17584
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017585 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17586 != eSIR_SUCCESS)
17587 {
17588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17589 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17590 return;
17591 }
17592
17593 if(!enabled)
17594 {
17595 WDI_DS_DeactivateTrafficStats();
17596 return;
17597 }
17598
17599 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17600
17601 if(pWdiTrafficStats != NULL)
17602 {
17603 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17604 trafficStatsIndParams.length = length;
17605 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017606 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017607 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17608 trafficStatsIndParams.pUserData = pWDA;
17609
17610 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17611
17612 if(WDI_STATUS_PENDING == wdiStatus)
17613 {
17614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17615 "Pending received for %s:%d ",__func__,__LINE__ );
17616 }
17617 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17618 {
17619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17620 "Failure in %s:%d ",__func__,__LINE__ );
17621 }
17622
17623 WDI_DS_ClearTrafficStats();
17624 }
17625 else
17626 {
17627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17628 "pWdiTrafficStats is Null");
17629 }
17630
17631 if( VOS_STATUS_SUCCESS !=
17632 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17633 {
17634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17635 "Traffic Stats Timer Start Failed ");
17636 return;
17637 }
17638}
17639
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017640bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
17641{
17642 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
17643 return true;
17644 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
17645 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
17646 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
17647 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
17648 jiffies_to_msecs(jiffies)))
17649 {
17650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17651 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
17652 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
17653 return false;
17654 }
17655 return true;
17656}
17657
Jeff Johnson295189b2012-06-20 16:38:30 -070017658/*
17659 * BA Activity check timer handler
17660 */
17661void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17662{
17663 tANI_U8 curSta = 0 ;
17664 tANI_U8 tid = 0 ;
17665 tANI_U8 size = 0 ;
17666 tANI_U8 baCandidateCount = 0 ;
17667 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017668 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017669 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017670 tpAniSirGlobal pMac;
17671
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017672 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017673 {
17674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017675 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017676 VOS_ASSERT(0);
17677 return ;
17678 }
17679 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17680 {
17681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17682 "Inconsistent STA entries in WDA");
17683 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017684 }
17685 if(NULL == pWDA->pVosContext)
17686 {
17687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17688 "%s: pVosContext is NULL",__func__);
17689 VOS_ASSERT(0);
17690 return ;
17691 }
17692 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017693 if(NULL == pMac)
17694 {
17695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17696 "%s: pMac is NULL",__func__);
17697 VOS_ASSERT(0);
17698 return ;
17699 }
17700
Abhishek Singh0644e482014-10-06 18:38:23 +053017701 if (wlan_cfgGetInt(pMac,
17702 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17703 eSIR_SUCCESS)
17704 {
17705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17706 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17707 val = 0;
17708 }
17709
Jeff Johnson295189b2012-06-20 16:38:30 -070017710 /* walk through all STA entries and find out TX packet count */
17711 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17712 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017713 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017714#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017715 // We can only do BA on "hard" STAs.
17716 if (!(IS_HWSTA_IDX(curSta)))
17717 {
17718 continue;
17719 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017720#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017721 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17722 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017723 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017724 tANI_U32 txPktCount = 0 ;
17725 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017726 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017727 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17728 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017729 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17730 curSta, tid, &txPktCount)))
17731 {
17732#if 0
17733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17734 "************* %d:%d, %d ",curSta, txPktCount,
17735 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17736#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017737 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17738 (currentOperChan <= SIR_11B_CHANNEL_END)))
17739 {
17740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17741 "%s: BTC disabled aggregation - dont start "
17742 "TX ADDBA req",__func__);
17743 }
17744 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017745 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017746 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053017747 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17748 pWDA->wdaGlobalSystemRole) && txPktCount )
17749 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17750 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017751 {
17752 /* get prepare for sending message to HAL */
17753 //baCandidate[baCandidateCount].staIdx = curSta ;
17754 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17755 newBaCandidate = WDA_ENABLE_BA ;
17756 }
17757 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17758 }
17759 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017760 /* fill the entry for all the sta with given TID's */
17761 if(WDA_ENABLE_BA == newBaCandidate)
17762 {
17763 /* move to next BA candidate */
17764 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17765 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17766 baCandidateCount++ ;
17767 newBaCandidate = WDA_DISABLE_BA ;
17768 }
17769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017770 /* prepare and send message to hal */
17771 if( 0 < baCandidateCount)
17772 {
17773 WDI_Status status = WDI_STATUS_SUCCESS ;
17774 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17775 tWDA_ReqParams *pWdaParams =
17776 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017777 if(NULL == pWdaParams)
17778 {
17779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017781 VOS_ASSERT(0) ;
17782 return;
17783 }
17784 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17785 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17786 if(NULL == wdiTriggerBaReq)
17787 {
17788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017790 VOS_ASSERT(0) ;
17791 vos_mem_free(pWdaParams);
17792 return;
17793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017794 do
17795 {
17796 WDI_TriggerBAReqinfoType *triggerBaInfo =
17797 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17798 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17799 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17800 * for each request */
17801 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17802 triggerBaInfo->ucBASessionID = 0;
17803 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17804 } while(0) ;
17805 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017808 pWdaParams->pWdaContext = pWDA;
17809 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17810 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017811 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017812 WDA_TriggerBaReqCallback, pWdaParams) ;
17813 if(IS_WDI_STATUS_FAILURE(status))
17814 {
17815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17816 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17817 vos_mem_free(pWdaParams->wdaMsgParam) ;
17818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17819 vos_mem_free(pWdaParams) ;
17820 }
17821 }
17822 else
17823 {
17824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17825 "There is no TID for initiating BA");
17826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 if( VOS_STATUS_SUCCESS !=
17828 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17829 {
17830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17831 "BA Activity Timer Stop Failed ");
17832 return ;
17833 }
17834 if( VOS_STATUS_SUCCESS !=
17835 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17836 {
17837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17838 "BA Activity Timer Start Failed ");
17839 return;
17840 }
17841 return ;
17842}
Jeff Johnson295189b2012-06-20 16:38:30 -070017843/*
17844 * WDA common routine to create timer used by WDA.
17845 */
17846static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17847{
Jeff Johnson295189b2012-06-20 16:38:30 -070017848 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17849 tANI_U32 val = 0 ;
17850 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17851
17852 if(NULL == pMac)
17853 {
17854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017855 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017856 VOS_ASSERT(0);
17857 return VOS_STATUS_E_FAILURE;
17858 }
17859 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17860 != eSIR_SUCCESS)
17861 {
17862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17863 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17864 return VOS_STATUS_E_FAILURE;
17865 }
17866 val = SYS_MS_TO_TICKS(val) ;
17867
17868 /* BA activity check timer */
17869 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17870 "BA Activity Check timer", WDA_TimerHandler,
17871 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17872 if(status != TX_SUCCESS)
17873 {
17874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17875 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017876 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017878 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017879 /* Tx Complete Timeout timer */
17880 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17881 "Tx Complete Check timer", WDA_TimerHandler,
17882 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017883 if(status != TX_SUCCESS)
17884 {
17885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17886 "Unable to create Tx Complete Timeout timer");
17887 /* Destroy timer of BA activity check timer */
17888 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17889 if(status != TX_SUCCESS)
17890 {
17891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17892 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017893 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017894 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017895 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017896 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017897
17898 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17899
17900 /* Traffic Stats timer */
17901 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17902 "Traffic Stats timer", WDA_TimerHandler,
17903 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17904 if(status != TX_SUCCESS)
17905 {
17906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17907 "Unable to create traffic stats timer");
17908 /* Destroy timer of BA activity check timer */
17909 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17910 if(status != TX_SUCCESS)
17911 {
17912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17913 "Unable to Destroy BA activity timer");
17914 }
17915 /* Destroy timer of tx complete timer */
17916 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17917 if(status != TX_SUCCESS)
17918 {
17919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17920 "Unable to Tx complete timer");
17921 }
17922 return VOS_STATUS_E_FAILURE ;
17923 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017924 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017925}
Jeff Johnson295189b2012-06-20 16:38:30 -070017926/*
17927 * WDA common routine to destroy timer used by WDA.
17928 */
17929static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17930{
17931 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017932 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17933 if(status != TX_SUCCESS)
17934 {
17935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17936 "Unable to Destroy Tx Complete Timeout timer");
17937 return eSIR_FAILURE ;
17938 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17940 if(status != TX_SUCCESS)
17941 {
17942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17943 "Unable to Destroy BA activity timer");
17944 return eSIR_FAILURE ;
17945 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017946 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17947 if(status != TX_SUCCESS)
17948 {
17949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17950 "Unable to Destroy traffic stats timer");
17951 return eSIR_FAILURE ;
17952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017953 return eSIR_SUCCESS ;
17954}
Jeff Johnson295189b2012-06-20 16:38:30 -070017955/*
17956 * WDA timer handler.
17957 */
17958void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17959{
17960 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17961 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017962 /*
17963 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17964 */
17965 wdaMsg.type = timerInfo ;
17966 wdaMsg.bodyptr = NULL;
17967 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017968 /* post the message.. */
17969 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17970 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17971 {
17972 vosStatus = VOS_STATUS_E_BADMSG;
17973 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017974}
Jeff Johnson295189b2012-06-20 16:38:30 -070017975/*
17976 * WDA Tx Complete timeout Indication.
17977 */
17978void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17979{
17980 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017981 tpSirTxBdStatus txBdStatus = {0};
17982
Jeff Johnson295189b2012-06-20 16:38:30 -070017983 if( pWDA->pAckTxCbFunc )
17984 {
17985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017986 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017987 /*Indicate failure*/
17988 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017989 pWDA->pAckTxCbFunc = NULL;
17990 }
17991 else
17992 {
17993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017994 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017996}
Jeff Johnson295189b2012-06-20 16:38:30 -070017997/*
17998 * WDA Set REG Domain to VOS NV
17999 */
Abhishek Singha306a442013-11-07 18:39:01 +053018000eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
18001 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070018002{
Abhishek Singha306a442013-11-07 18:39:01 +053018003 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070018004 {
18005 return eHAL_STATUS_INVALID_PARAMETER;
18006 }
18007 return eHAL_STATUS_SUCCESS;
18008}
Jeff Johnson295189b2012-06-20 16:38:30 -070018009
Jeff Johnson295189b2012-06-20 16:38:30 -070018010#ifdef FEATURE_WLAN_SCAN_PNO
18011/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018012 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018013 *
18014 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018015void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018016{
18017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018018 tSirPNOScanReq *pPNOScanReqParams;
18019
Jeff Johnson295189b2012-06-20 16:38:30 -070018020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018021 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018022 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018023 {
18024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018025 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018026 VOS_ASSERT(0) ;
18027 return ;
18028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018029
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018030 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18031 if(pPNOScanReqParams->statusCallback)
18032 {
18033 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18034 (status == WDI_STATUS_SUCCESS) ?
18035 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
18036 }
18037
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018038 if (pPNOScanReqParams->enable == 1)
18039 {
18040 if (pPNOScanReqParams->aNetworks)
18041 vos_mem_free(pPNOScanReqParams->aNetworks);
18042 if (pPNOScanReqParams->p24GProbeTemplate)
18043 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18044 if (pPNOScanReqParams->p5GProbeTemplate)
18045 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18046 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18048 vos_mem_free(pWdaParams->wdaMsgParam);
18049 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018050
18051 return ;
18052}
Jeff Johnson295189b2012-06-20 16:38:30 -070018053/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018054 * FUNCTION: WDA_PNOScanReqCallback
18055 * Free memory.
18056 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
18057 */
18058void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018059{
Yue Ma7f44bbe2013-04-12 11:47:39 -070018060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018061 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018062
18063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18064 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18065
18066 if(NULL == pWdaParams)
18067 {
18068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18069 "%s: pWdaParams received NULL", __func__);
18070 VOS_ASSERT(0);
18071 return;
18072 }
18073
18074 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18075 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018076 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18077 if(pPNOScanReqParams->statusCallback)
18078 {
18079 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18080 VOS_STATUS_E_FAILURE);
18081 }
18082
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053018083 if (pPNOScanReqParams->enable == 1)
18084 {
18085 if (pPNOScanReqParams->aNetworks)
18086 vos_mem_free(pPNOScanReqParams->aNetworks);
18087 if (pPNOScanReqParams->p24GProbeTemplate)
18088 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18089 if (pPNOScanReqParams->p5GProbeTemplate)
18090 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18091 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18093 vos_mem_free(pWdaParams->wdaMsgParam);
18094 vos_mem_free(pWdaParams);
18095 }
18096
18097 return;
18098}
18099/*
18100 * FUNCTION: WDA_UpdateScanParamsRespCallback
18101 *
18102 */
18103void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
18104{
18105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018107 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018108 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018109 {
18110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018112 VOS_ASSERT(0) ;
18113 return ;
18114 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018115
18116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18117 vos_mem_free(pWdaParams->wdaMsgParam);
18118 vos_mem_free(pWdaParams);
18119
Jeff Johnson295189b2012-06-20 16:38:30 -070018120 return ;
18121}
Jeff Johnson295189b2012-06-20 16:38:30 -070018122/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018123 * FUNCTION: WDA_UpdateScanParamsReqCallback
18124 * Free memory.
18125 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
18126 */
18127void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18128{
18129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18130
18131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18132 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18133
18134 if(NULL == pWdaParams)
18135 {
18136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18137 "%s: pWdaParams received NULL", __func__);
18138 VOS_ASSERT(0);
18139 return;
18140 }
18141
18142 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18143 {
18144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18145 vos_mem_free(pWdaParams->wdaMsgParam);
18146 vos_mem_free(pWdaParams);
18147 }
18148
18149 return;
18150}
18151/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018152 * FUNCTION: WDA_ProcessSetPreferredNetworkList
18153 * Request to WDI to set Preferred Network List.Offload
18154 */
18155VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
18156 tSirPNOScanReq *pPNOScanReqParams)
18157{
Jeff Johnson43971f52012-07-17 12:26:56 -070018158 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018159 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
18160 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
18161 tWDA_ReqParams *pWdaParams ;
18162 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018164 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018165 if(NULL == pwdiPNOScanReqInfo)
18166 {
18167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018169 VOS_ASSERT(0);
18170 return VOS_STATUS_E_NOMEM;
18171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18173 if(NULL == pWdaParams)
18174 {
18175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018177 VOS_ASSERT(0);
18178 vos_mem_free(pwdiPNOScanReqInfo);
18179 return VOS_STATUS_E_NOMEM;
18180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018181 //
18182 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
18183 //
18184 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
18185 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070018186 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
18187 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
18188 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018189 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
18190 {
18191 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
18192 &pPNOScanReqParams->aNetworks[i],
18193 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
18194 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018195 /*Scan timer intervals*/
18196 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
18197 &pPNOScanReqParams->scanTimers,
18198 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070018199 /*Probe template for 2.4GHz band*/
18200 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
18201 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18202 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018203 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
18204 pPNOScanReqParams->p24GProbeTemplate,
18205 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070018206 /*Probe template for 5GHz band*/
18207 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
18208 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18209 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018210 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
18211 pPNOScanReqParams->p5GProbeTemplate,
18212 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018213 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
18214 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018215
Jeff Johnson295189b2012-06-20 16:38:30 -070018216 /* Store Params pass it to WDI */
18217 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
18218 pWdaParams->pWdaContext = pWDA;
18219 /* Store param pointer as passed in by caller */
18220 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018221 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018222 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018223 if(IS_WDI_STATUS_FAILURE(status))
18224 {
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18226 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018227 if(pPNOScanReqParams->statusCallback)
18228 {
18229 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18230 VOS_STATUS_E_FAILURE);
18231 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018232 if (pPNOScanReqParams->enable == 1)
18233 {
18234 if (pPNOScanReqParams->aNetworks)
18235 vos_mem_free(pPNOScanReqParams->aNetworks);
18236 if (pPNOScanReqParams->p24GProbeTemplate)
18237 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18238 if (pPNOScanReqParams->p5GProbeTemplate)
18239 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18240 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18242 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018243
Jeff Johnson295189b2012-06-20 16:38:30 -070018244 pWdaParams->wdaWdiApiMsgParam = NULL;
18245 pWdaParams->wdaMsgParam = NULL;
18246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 return CONVERT_WDI2VOS_STATUS(status) ;
18248}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018249
18250#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18251
18252void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18253{
18254 /*Convert the CSR Auth types to WDI Auth types */
18255 switch (csrAuthType)
18256 {
18257 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18258 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18259 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018260#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018261 case eCSR_AUTH_TYPE_CCKM_WPA:
18262 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18263 break;
18264#endif
18265 case eCSR_AUTH_TYPE_WPA:
18266 *AuthType = eWDA_AUTH_TYPE_WPA;
18267 break;
18268 case eCSR_AUTH_TYPE_WPA_PSK:
18269 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18270 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018271#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018272 case eCSR_AUTH_TYPE_CCKM_RSN:
18273 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18274 break;
18275#endif
18276 case eCSR_AUTH_TYPE_RSN:
18277 *AuthType = eWDA_AUTH_TYPE_RSN;
18278 break;
18279 case eCSR_AUTH_TYPE_RSN_PSK:
18280 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18281 break;
18282#if defined WLAN_FEATURE_VOWIFI_11R
18283 case eCSR_AUTH_TYPE_FT_RSN:
18284 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18285 break;
18286 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18287 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18288 break;
18289#endif
18290#ifdef FEATURE_WLAN_WAPI
18291 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18292 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18293 break;
18294 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18295 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18296 break;
18297#endif /* FEATURE_WLAN_WAPI */
18298 case eCSR_AUTH_TYPE_SHARED_KEY:
18299 case eCSR_AUTH_TYPE_AUTOSWITCH:
18300 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18301 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018302#ifdef WLAN_FEATURE_11W
18303 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18304 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018305 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018306 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18307 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18308 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018309#endif
18310 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018312 "%s: Unknown Auth Type", __func__);
18313 break;
18314 }
18315}
18316void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18317{
18318 switch (csrEncrType)
18319 {
18320 case eCSR_ENCRYPT_TYPE_NONE:
18321 *EncrType = WDI_ED_NONE;
18322 break;
18323 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18324 case eCSR_ENCRYPT_TYPE_WEP40:
18325 *EncrType = WDI_ED_WEP40;
18326 break;
18327 case eCSR_ENCRYPT_TYPE_WEP104:
18328 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18329 *EncrType = WDI_ED_WEP104;
18330 break;
18331 case eCSR_ENCRYPT_TYPE_TKIP:
18332 *EncrType = WDI_ED_TKIP;
18333 break;
18334 case eCSR_ENCRYPT_TYPE_AES:
18335 *EncrType = WDI_ED_CCMP;
18336 break;
18337#ifdef WLAN_FEATURE_11W
18338 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18339 *EncrType = WDI_ED_AES_128_CMAC;
18340 break;
18341#endif
18342#ifdef FEATURE_WLAN_WAPI
18343 case eCSR_ENCRYPT_TYPE_WPI:
18344 *EncrType = WDI_ED_WPI;
18345 break;
18346#endif
18347 case eCSR_ENCRYPT_TYPE_ANY:
18348 *EncrType = WDI_ED_ANY;
18349 break;
18350
18351 default:
18352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18353 "%s: Unknown Encryption Type", __func__);
18354 break;
18355 }
18356}
18357
Kapil Gupta04ab1992016-06-26 13:36:51 +053018358#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18359VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18360 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18361{
18362 WDI_Status status;
18363 tWDA_ReqParams *pWdaParams ;
18364 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18365
18366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18367 "------> %s " ,__func__);
18368
18369 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18370 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18371 if (NULL == pwdiPERRoamOffloadScanInfo) {
18372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18373 "%s: VOS MEM Alloc Failure", __func__);
18374 VOS_ASSERT(0);
18375 return VOS_STATUS_E_NOMEM;
18376 }
18377
18378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18379 if (NULL == pWdaParams) {
18380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18381 "%s: VOS MEM Alloc Failure", __func__);
18382 VOS_ASSERT(0);
18383 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18384 return VOS_STATUS_E_NOMEM;
18385 }
18386
18387 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18388 pPERRoamOffloadScanReqParams->rateUpThreshold;
18389 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18390 pPERRoamOffloadScanReqParams->rateDownThreshold;
18391 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18392 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18393 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18394 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18395 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18396 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053018397 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
18398 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053018399 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18400 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18401
18402 /* Store Params pass it to WDI */
18403 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18404 pWdaParams->pWdaContext = pWDA;
18405
18406 /* Store param pointer as passed in by caller */
18407 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18408 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18409 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18410 pWdaParams);
18411
18412 if(IS_WDI_STATUS_FAILURE(status)) {
18413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18414 "Failure in Send config PER roam params");
18415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18416 vos_mem_free(pWdaParams->wdaMsgParam);
18417 vos_mem_free(pWdaParams);
18418 }
18419 return CONVERT_WDI2VOS_STATUS(status) ;
18420}
18421#endif
18422
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018423/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018424 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018425 * Request to WDI to set Roam Offload Scan
18426 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018427VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018428 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18429{
18430 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018431 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18432 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018433 tWDA_ReqParams *pWdaParams ;
18434 v_U8_t csrAuthType;
18435 WDI_RoamNetworkType *pwdiRoamNetworkType;
18436 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18438 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018439 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018440 {
18441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18442 "%s: VOS MEM Alloc Failure", __func__);
18443 VOS_ASSERT(0);
18444 return VOS_STATUS_E_NOMEM;
18445 }
18446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18447 if (NULL == pWdaParams)
18448 {
18449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18450 "%s: VOS MEM Alloc Failure", __func__);
18451 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018452 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018453 return VOS_STATUS_E_NOMEM;
18454 }
18455
18456 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018457 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018458 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018459 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18460 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018461 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18462 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18463 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18464 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18465 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18466 sizeof(pwdiRoamNetworkType->currAPbssid));
18467 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18468 csrAuthType);
18469 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18470 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18471 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18472 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18473 pwdiRoamOffloadScanInfo->LookupThreshold =
18474 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018475 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18476 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018477 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18478 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018479 pwdiRoamOffloadScanInfo->MAWCEnabled =
18480 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018481 pwdiRoamOffloadScanInfo->Command =
18482 pRoamOffloadScanReqParams->Command ;
18483 pwdiRoamOffloadScanInfo->StartScanReason =
18484 pRoamOffloadScanReqParams->StartScanReason ;
18485 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18486 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18487 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18488 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18489 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18490 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18491 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18492 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18493 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18494 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018495 pwdiRoamOffloadScanInfo->IsESEEnabled =
18496 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018497 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18498 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18499 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18500 pwdiRoamNetworkType->ssId.ucLength =
18501 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18502 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18503 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18504 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18505 pwdiRoamNetworkType->ChannelCount =
18506 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18507 pwdiRoamOffloadScanInfo->ChannelCacheType =
18508 pRoamOffloadScanReqParams->ChannelCacheType;
18509 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18510 pRoamOffloadScanReqParams->ValidChannelList,
18511 pRoamOffloadScanReqParams->ValidChannelCount);
18512 pwdiRoamOffloadScanInfo->ValidChannelCount =
18513 pRoamOffloadScanReqParams->ValidChannelCount;
18514 pwdiRoamOffloadScanInfo->us24GProbeSize =
18515 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18516 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18517 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18518 pRoamOffloadScanReqParams->p24GProbeTemplate,
18519 pwdiRoamOffloadScanInfo->us24GProbeSize);
18520 pwdiRoamOffloadScanInfo->us5GProbeSize =
18521 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18522 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18523 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18524 pRoamOffloadScanReqParams->p5GProbeTemplate,
18525 pwdiRoamOffloadScanInfo->us5GProbeSize);
18526 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18527 pRoamOffloadScanReqParams->MDID.mdiePresent;
18528 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18529 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018530 pwdiRoamOffloadScanInfo->nProbes =
18531 pRoamOffloadScanReqParams->nProbes;
18532 pwdiRoamOffloadScanInfo->HomeAwayTime =
18533 pRoamOffloadScanReqParams->HomeAwayTime;
18534 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018535 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018536 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018537 pWdaParams->pWdaContext = pWDA;
18538 /* Store param pointer as passed in by caller */
18539 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018540 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018541 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18542 if(IS_WDI_STATUS_FAILURE(status))
18543 {
18544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18545 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18547 vos_mem_free(pWdaParams->wdaMsgParam);
18548 pWdaParams->wdaWdiApiMsgParam = NULL;
18549 pWdaParams->wdaMsgParam = NULL;
18550 }
18551 return CONVERT_WDI2VOS_STATUS(status) ;
18552}
18553#endif
18554
Jeff Johnson295189b2012-06-20 16:38:30 -070018555/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018556 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018557 *
18558 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018559void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018560{
18561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18562
18563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018565
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018566 if(NULL == pWdaParams)
18567 {
18568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018569 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018570 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018571 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018572 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018573
Jeff Johnson295189b2012-06-20 16:38:30 -070018574 vos_mem_free(pWdaParams->wdaMsgParam) ;
18575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18576 vos_mem_free(pWdaParams) ;
18577
18578 return ;
18579}
18580/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018581 * FUNCTION: WDA_RssiFilterReqCallback
18582 * Free memory.
18583 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18584 */
18585void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18586{
18587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18588
18589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18590 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18591
18592 if(NULL == pWdaParams)
18593 {
18594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18595 "%s: pWdaParams received NULL", __func__);
18596 VOS_ASSERT(0);
18597 return;
18598 }
18599
18600 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18601 {
18602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18603 vos_mem_free(pWdaParams->wdaMsgParam);
18604 vos_mem_free(pWdaParams);
18605 }
18606
18607 return;
18608}
18609/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018610 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018611 * Request to WDI to set Preferred Network List.Offload
18612 */
18613VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18614 tSirSetRSSIFilterReq* pRssiFilterParams)
18615{
Jeff Johnson43971f52012-07-17 12:26:56 -070018616 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018617 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18618 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018622 if(NULL == pwdiSetRssiFilterReqInfo)
18623 {
18624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018626 VOS_ASSERT(0);
18627 return VOS_STATUS_E_NOMEM;
18628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18630 if(NULL == pWdaParams)
18631 {
18632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018634 VOS_ASSERT(0);
18635 vos_mem_free(pwdiSetRssiFilterReqInfo);
18636 return VOS_STATUS_E_NOMEM;
18637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018638 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018639 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18640 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018641
Jeff Johnson295189b2012-06-20 16:38:30 -070018642 /* Store Params pass it to WDI */
18643 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18644 pWdaParams->pWdaContext = pWDA;
18645 /* Store param pointer as passed in by caller */
18646 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018647 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018648 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018649 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018650 if(IS_WDI_STATUS_FAILURE(status))
18651 {
18652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18653 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18655 vos_mem_free(pWdaParams->wdaMsgParam);
18656 pWdaParams->wdaWdiApiMsgParam = NULL;
18657 pWdaParams->wdaMsgParam = NULL;
18658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018659 return CONVERT_WDI2VOS_STATUS(status) ;
18660}
18661
Jeff Johnson295189b2012-06-20 16:38:30 -070018662/*
18663 * FUNCTION: WDA_ProcessUpdateScanParams
18664 * Request to WDI to update Scan Parameters
18665 */
18666VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18667 tSirUpdateScanParams *pUpdateScanParams)
18668{
Jeff Johnson43971f52012-07-17 12:26:56 -070018669 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018670 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18671 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18672 sizeof(WDI_UpdateScanParamsInfoType)) ;
18673 tWDA_ReqParams *pWdaParams ;
18674 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018676 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018677 if(NULL == wdiUpdateScanParamsInfoType)
18678 {
18679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018681 VOS_ASSERT(0);
18682 return VOS_STATUS_E_NOMEM;
18683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18685 if ( NULL == pWdaParams )
18686 {
18687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018689 VOS_ASSERT(0);
18690 vos_mem_free(wdiUpdateScanParamsInfoType);
18691 return VOS_STATUS_E_NOMEM;
18692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018693 //
18694 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18695 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18697 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18698 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18699 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018700 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018701 pUpdateScanParams->b11dEnabled,
18702 pUpdateScanParams->b11dResolved,
18703 pUpdateScanParams->ucChannelCount,
18704 pUpdateScanParams->usPassiveMinChTime,
18705 pUpdateScanParams->usPassiveMaxChTime,
18706 pUpdateScanParams->usActiveMinChTime,
18707 pUpdateScanParams->usActiveMaxChTime,
18708 sizeof(tSirUpdateScanParams),
18709 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18710
Jeff Johnson295189b2012-06-20 16:38:30 -070018711 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18712 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018713 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18714 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018715 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18716 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018717 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18718 pUpdateScanParams->usActiveMaxChTime;
18719 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18720 pUpdateScanParams->usActiveMinChTime;
18721 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18722 pUpdateScanParams->usPassiveMaxChTime;
18723 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18724 pUpdateScanParams->usPassiveMinChTime;
18725
Jeff Johnson295189b2012-06-20 16:38:30 -070018726 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018727 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18728 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018729
Jeff Johnson295189b2012-06-20 16:38:30 -070018730 for ( i = 0; i <
18731 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18732 i++)
18733 {
18734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18735 "Update Scan Parameters channel: %d",
18736 pUpdateScanParams->aChannels[i]);
18737
18738 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18739 pUpdateScanParams->aChannels[i];
18740 }
18741
Yue Ma7f44bbe2013-04-12 11:47:39 -070018742 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18743 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018744
Jeff Johnson295189b2012-06-20 16:38:30 -070018745 /* Store Params pass it to WDI */
18746 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18747 pWdaParams->pWdaContext = pWDA;
18748 /* Store param pointer as passed in by caller */
18749 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018750
Jeff Johnson295189b2012-06-20 16:38:30 -070018751
18752
18753 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018754 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018755 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018756 if(IS_WDI_STATUS_FAILURE(status))
18757 {
18758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18759 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18761 vos_mem_free(pWdaParams->wdaMsgParam);
18762 vos_mem_free(pWdaParams);
18763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018764 return CONVERT_WDI2VOS_STATUS(status) ;
18765}
18766#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018767
18768#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18769/*
18770 * FUNCTION: WDA_RoamOffloadScanReqCallback
18771 *
18772 */
18773void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18774{
18775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018776 vos_msg_t vosMsg;
18777 wpt_uint8 reason = 0;
18778
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018780 "<------ %s " ,__func__);
18781 if (NULL == pWdaParams)
18782 {
18783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18784 "%s: pWdaParams received NULL", __func__);
18785 VOS_ASSERT(0) ;
18786 return ;
18787 }
18788 if ( pWdaParams != NULL )
18789 {
18790 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18791 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018792 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18794 }
18795 if ( pWdaParams->wdaMsgParam != NULL)
18796 {
18797 vos_mem_free(pWdaParams->wdaMsgParam);
18798 }
18799
18800 vos_mem_free(pWdaParams) ;
18801 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018802 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18803 vosMsg.bodyptr = NULL;
18804 if (WDI_STATUS_SUCCESS != status)
18805 {
18806 reason = 0;
18807 }
18808 vosMsg.bodyval = reason;
18809 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18810 {
18811 /* free the mem and return */
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018813 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018814 }
18815
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018816 return ;
18817}
Kapil Gupta04ab1992016-06-26 13:36:51 +053018818
18819void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
18820{
18821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18822 vos_msg_t vosMsg;
18823 wpt_uint8 reason = 0;
18824
18825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18826 "<------ %s " ,__func__);
18827 if (NULL == pWdaParams) {
18828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18829 "%s: pWdaParams received NULL", __func__);
18830 VOS_ASSERT(0) ;
18831 return ;
18832 }
18833 if ( pWdaParams->wdaMsgParam != NULL)
18834 vos_mem_free(pWdaParams->wdaMsgParam);
18835
18836 vos_mem_free(pWdaParams) ;
18837 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
18838 vosMsg.bodyptr = NULL;
18839 if (WDI_STATUS_SUCCESS != status)
18840 reason = 0;
18841
18842 vosMsg.bodyval = reason;
18843 if (VOS_STATUS_SUCCESS !=
18844 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18845 /* free the mem and return */
18846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18847 "%s: Failed to post the rsp to UMAC", __func__);
18848 }
18849
18850 return ;
18851}
18852
18853
18854void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18855{
18856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18857 vos_msg_t vosMsg;
18858 wpt_uint8 reason = 0;
18859
18860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18861 "<------ %s " ,__func__);
18862 if (NULL == pWdaParams) {
18863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18864 "%s: pWdaParams received NULL", __func__);
18865 VOS_ASSERT(0) ;
18866 return ;
18867 }
18868 if ( pWdaParams->wdaMsgParam != NULL)
18869 vos_mem_free(pWdaParams->wdaMsgParam);
18870
18871 vos_mem_free(pWdaParams) ;
18872 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18873 vosMsg.bodyptr = NULL;
18874 if (WDI_STATUS_SUCCESS != status)
18875 reason = 0;
18876
18877 vosMsg.bodyval = reason;
18878 if (VOS_STATUS_SUCCESS !=
18879 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18880 /* free the mem and return */
18881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18882 "%s: Failed to post the rsp to UMAC", __func__);
18883 }
18884
18885 return ;
18886}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018887#endif
18888
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018889/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018890 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018891 *
18892 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018893void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018894{
18895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18896
18897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18898 "<------ %s " ,__func__);
18899
18900 if(NULL == pWdaParams)
18901 {
18902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18903 "%s: pWdaParams received NULL", __func__);
18904 VOS_ASSERT(0);
18905 return;
18906 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018907
18908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18909 vos_mem_free(pWdaParams->wdaMsgParam);
18910 vos_mem_free(pWdaParams);
18911
18912 return;
18913}
18914/*
18915 * FUNCTION: WDA_SetPowerParamsReqCallback
18916 * Free memory.
18917 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18918 */
18919void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18920{
18921 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18922
18923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18924 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18925
18926 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018927 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18929 "%s: pWdaParams received NULL", __func__);
18930 VOS_ASSERT(0);
18931 return;
18932 }
18933
18934 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18935 {
18936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18937 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018938 vos_mem_free(pWdaParams);
18939 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018940
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018941 return;
18942}
18943
Jeff Johnson295189b2012-06-20 16:38:30 -070018944#ifdef WLAN_FEATURE_PACKET_FILTERING
18945/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018946 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018947 *
18948 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018949void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018950 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18951 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018952{
18953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018956 if(NULL == pWdaParams)
18957 {
18958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018959 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018960 VOS_ASSERT(0) ;
18961 return ;
18962 }
18963
18964 vos_mem_free(pWdaParams->wdaMsgParam) ;
18965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18966 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018967 //print a msg, nothing else to do
18968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018969 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018970 return ;
18971}
Jeff Johnson295189b2012-06-20 16:38:30 -070018972/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018973 * FUNCTION: WDA_8023MulticastListReqCallback
18974 * Free memory.
18975 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18976 */
18977void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18978{
18979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18980
18981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18982 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18983
18984 if(NULL == pWdaParams)
18985 {
18986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18987 "%s: pWdaParams received NULL", __func__);
18988 VOS_ASSERT(0);
18989 return;
18990 }
18991
18992 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18993 {
18994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18995 vos_mem_free(pWdaParams->wdaMsgParam);
18996 vos_mem_free(pWdaParams);
18997 }
18998
18999 return;
19000}
19001/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019002 * FUNCTION: WDA_Process8023MulticastListReq
19003 * Request to WDI to add 8023 Multicast List
19004 */
19005VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
19006 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
19007{
Jeff Johnson43971f52012-07-17 12:26:56 -070019008 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019009 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
19010 tWDA_ReqParams *pWdaParams ;
19011 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019014 pwdiFltPktSetMcListReqParamsType =
19015 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
19016 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
19017 ) ;
19018 if(NULL == pwdiFltPktSetMcListReqParamsType)
19019 {
19020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019022 return VOS_STATUS_E_NOMEM;
19023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19025 if(NULL == pWdaParams)
19026 {
19027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019029 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
19030 return VOS_STATUS_E_NOMEM;
19031 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019032
Jeff Johnson295189b2012-06-20 16:38:30 -070019033 //
19034 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
19035 //
19036 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070019037 pRcvFltMcAddrList->ulMulticastAddrCnt;
19038
19039 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
19040 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
19041 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
19042 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
19043
Jeff Johnson295189b2012-06-20 16:38:30 -070019044 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
19045 {
19046 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
19047 &(pRcvFltMcAddrList->multicastAddr[i]),
19048 sizeof(tSirMacAddr));
19049 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019050 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
19051 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019052
Jeff Johnson295189b2012-06-20 16:38:30 -070019053 /* Store Params pass it to WDI */
19054 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
19055 pWdaParams->pWdaContext = pWDA;
19056 /* Store param pointer as passed in by caller */
19057 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070019058 status = WDI_8023MulticastListReq(
19059 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019060 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019061 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019062 if(IS_WDI_STATUS_FAILURE(status))
19063 {
19064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19065 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
19066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19067 vos_mem_free(pWdaParams->wdaMsgParam);
19068 vos_mem_free(pWdaParams);
19069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019070 return CONVERT_WDI2VOS_STATUS(status) ;
19071}
Jeff Johnson295189b2012-06-20 16:38:30 -070019072/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019073 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019074 *
19075 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019076void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019077 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
19078 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019079{
19080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019082 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019083 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070019084 if(NULL == pWdaParams)
19085 {
19086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019087 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019088 VOS_ASSERT(0) ;
19089 return ;
19090 }
19091
19092 vos_mem_free(pWdaParams->wdaMsgParam) ;
19093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19094 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019095 //print a msg, nothing else to do
19096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019097 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019098 return ;
19099}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019100
19101/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019102 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
19103 * Free memory.
19104 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019105 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019106void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019107 void* pUserData)
19108{
19109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19110
19111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19112 "<------ %s, wdiStatus: %d",
19113 __func__, wdiStatus);
19114
19115 if (NULL == pWdaParams)
19116 {
19117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19118 "%s: Invalid pWdaParams pointer", __func__);
19119 VOS_ASSERT(0);
19120 return;
19121 }
19122
19123 if (IS_WDI_STATUS_FAILURE(wdiStatus))
19124 {
19125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19126 vos_mem_free(pWdaParams->wdaMsgParam);
19127 vos_mem_free(pWdaParams);
19128 }
19129
19130 return;
19131}
19132
Jeff Johnson295189b2012-06-20 16:38:30 -070019133/*
19134 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
19135 * Request to WDI to set Receive Filters
19136 */
19137VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
19138 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
19139{
Jeff Johnson43971f52012-07-17 12:26:56 -070019140 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019141 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
19142 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
19143 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
19144 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
19145 tWDA_ReqParams *pWdaParams ;
19146 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019149 if(NULL == pwdiSetRcvPktFilterReqParamsType)
19150 {
19151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019153 VOS_ASSERT(0);
19154 return VOS_STATUS_E_NOMEM;
19155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19157 if(NULL == pWdaParams)
19158 {
19159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019161 VOS_ASSERT(0);
19162 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
19163 return VOS_STATUS_E_NOMEM;
19164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019165 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
19166 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
19167 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
19168 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070019169 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
19170 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
19171
19172 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
19173 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019174
19175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19176 "FID %d FT %d NParams %d CT %d",
19177 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
19178 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
19179 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
19180 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070019181 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
19182 {
19183 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
19184 &pRcvPktFilterCfg->paramsData[i],
19185 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070019186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019187 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019188 pwdiSetRcvPktFilterReqParamsType->
19189 wdiPktFilterCfg.paramsData[i].protocolLayer,
19190 pwdiSetRcvPktFilterReqParamsType->
19191 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070019192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019193 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019194 pwdiSetRcvPktFilterReqParamsType->
19195 wdiPktFilterCfg.paramsData[i].dataOffset,
19196 pwdiSetRcvPktFilterReqParamsType->
19197 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070019198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019199 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019200 pwdiSetRcvPktFilterReqParamsType->
19201 wdiPktFilterCfg.paramsData[i].compareData[0],
19202 pwdiSetRcvPktFilterReqParamsType->
19203 wdiPktFilterCfg.paramsData[i].compareData[1],
19204 pwdiSetRcvPktFilterReqParamsType->
19205 wdiPktFilterCfg.paramsData[i].compareData[2],
19206 pwdiSetRcvPktFilterReqParamsType->
19207 wdiPktFilterCfg.paramsData[i].compareData[3],
19208 pwdiSetRcvPktFilterReqParamsType->
19209 wdiPktFilterCfg.paramsData[i].compareData[4],
19210 pwdiSetRcvPktFilterReqParamsType->
19211 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019213 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019214 pwdiSetRcvPktFilterReqParamsType->
19215 wdiPktFilterCfg.paramsData[i].dataMask[0],
19216 pwdiSetRcvPktFilterReqParamsType->
19217 wdiPktFilterCfg.paramsData[i].dataMask[1],
19218 pwdiSetRcvPktFilterReqParamsType->
19219 wdiPktFilterCfg.paramsData[i].dataMask[2],
19220 pwdiSetRcvPktFilterReqParamsType->
19221 wdiPktFilterCfg.paramsData[i].dataMask[3],
19222 pwdiSetRcvPktFilterReqParamsType->
19223 wdiPktFilterCfg.paramsData[i].dataMask[4],
19224 pwdiSetRcvPktFilterReqParamsType->
19225 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019226 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019227 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019228 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019229 /* Store Params pass it to WDI */
19230 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
19231 pWdaParams->pWdaContext = pWDA;
19232 /* Store param pointer as passed in by caller */
19233 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070019234 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019235 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019236 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019237 if(IS_WDI_STATUS_FAILURE(status))
19238 {
19239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19240 "Failure in SetFilter(),free all the memory,status %d ",status);
19241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19242 vos_mem_free(pWdaParams->wdaMsgParam);
19243 vos_mem_free(pWdaParams);
19244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019245 return CONVERT_WDI2VOS_STATUS(status) ;
19246}
Jeff Johnson295189b2012-06-20 16:38:30 -070019247/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019248 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019249 *
19250 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019251void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019252 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
19253 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019254{
19255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19256 tWDA_CbContext *pWDA;
19257 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19258 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19259 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19260 tANI_U8 i;
19261 vos_msg_t vosMsg;
19262
19263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019264 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019265 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19266
Jeff Johnsone7245742012-09-05 17:12:55 -070019267 if(NULL == pRcvFltPktMatchCntRsp)
19268 {
19269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019270 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019271 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019272 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019273 return ;
19274 }
19275
Jeff Johnson295189b2012-06-20 16:38:30 -070019276 if(NULL == pWdaParams)
19277 {
19278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019280 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019281 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019282 return ;
19283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019284 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19285 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019286 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19287 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19288
19289 /* Message Header */
19290 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19291 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19292
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019293 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019294
19295 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19296 {
19297 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19298 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019300 /* VOS message wrapper */
19301 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19302 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19303 vosMsg.bodyval = 0;
19304 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19305 {
19306 /* free the mem and return */
19307 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19308 }
19309
19310 vos_mem_free(pWdaParams->wdaMsgParam) ;
19311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19312 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019313
19314 return;
19315}
19316/*
19317 * FUNCTION: WDA_FilterMatchCountReqCallback
19318 * Free memory and send RSP back to SME.
19319 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19320 */
19321void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19322{
19323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19324 vos_msg_t vosMsg;
19325
19326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19328
19329 if(NULL == pWdaParams)
19330 {
19331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19332 "%s: pWdaParams received NULL", __func__);
19333 VOS_ASSERT(0);
19334 return;
19335 }
19336
19337 /* VOS message wrapper */
19338 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19339 vosMsg.bodyptr = NULL;
19340 vosMsg.bodyval = 0;
19341
19342 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19343 {
19344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19345 vos_mem_free(pWdaParams->wdaMsgParam);
19346 vos_mem_free(pWdaParams);
19347 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19348 }
19349
19350 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019351}
Jeff Johnson295189b2012-06-20 16:38:30 -070019352/*
19353 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19354 * Request to WDI to get PC Filter Match Count
19355 */
19356VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19357{
Jeff Johnson43971f52012-07-17 12:26:56 -070019358 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019359 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19360 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19361 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019364 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19365 {
19366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019368 VOS_ASSERT(0);
19369 return VOS_STATUS_E_NOMEM;
19370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19372 if(NULL == pWdaParams)
19373 {
19374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019376 VOS_ASSERT(0);
19377 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19378 return VOS_STATUS_E_NOMEM;
19379 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019380
Yue Ma7f44bbe2013-04-12 11:47:39 -070019381 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19382 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019383
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019384 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19385 pRcvFltPktMatchRsp->bssId,
19386 sizeof(wpt_macAddr));
19387
Jeff Johnson295189b2012-06-20 16:38:30 -070019388 /* Store Params pass it to WDI */
19389 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19390 pWdaParams->pWdaContext = pWDA;
19391 /* Store param pointer as passed in by caller */
19392 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019393 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019394 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019395 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019396 if(IS_WDI_STATUS_FAILURE(status))
19397 {
19398 /* failure returned by WDI API */
19399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19400 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19402 vos_mem_free(pWdaParams) ;
19403 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19404 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019406 return CONVERT_WDI2VOS_STATUS(status) ;
19407}
Jeff Johnson295189b2012-06-20 16:38:30 -070019408/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019409 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019410 *
19411 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019412void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019413 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19414 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019415{
19416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019417 tSirRcvFltPktClearParam *pktClearParam;
19418
Jeff Johnson295189b2012-06-20 16:38:30 -070019419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019420 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019421/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19422 if(NULL == pWdaParams)
19423 {
19424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019425 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019426 VOS_ASSERT(0) ;
19427 return ;
19428 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019429
19430 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19431 if(pktClearParam->pktFilterCallback)
19432 {
19433 pktClearParam->pktFilterCallback(
19434 pktClearParam->cbCtx,
19435 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
19436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019437 vos_mem_free(pWdaParams->wdaMsgParam) ;
19438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19439 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019440 //print a msg, nothing else to do
19441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019442 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019443 return ;
19444}
Jeff Johnson295189b2012-06-20 16:38:30 -070019445/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019446 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19447 * Free memory.
19448 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19449 */
19450void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19451{
19452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019453 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019454
19455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19456 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19457
19458 if(NULL == pWdaParams)
19459 {
19460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19461 "%s: Invalid pWdaParams pointer", __func__);
19462 VOS_ASSERT(0);
19463 return;
19464 }
19465
19466 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19467 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019468 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19469 if(pktClearParam->pktFilterCallback)
19470 {
19471 pktClearParam->pktFilterCallback(
19472 pktClearParam->cbCtx,
19473 CONVERT_WDI2SIR_STATUS(wdiStatus));
19474 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19476 vos_mem_free(pWdaParams->wdaMsgParam);
19477 vos_mem_free(pWdaParams);
19478 }
19479
19480 return;
19481}
19482/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019483 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19484 * Request to WDI to clear Receive Filters
19485 */
19486VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19487 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19488{
Jeff Johnson43971f52012-07-17 12:26:56 -070019489 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019490 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19491 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19492 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019494 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019495 if(NULL == pwdiRcvFltPktClearReqParamsType)
19496 {
19497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019499 VOS_ASSERT(0);
19500 return VOS_STATUS_E_NOMEM;
19501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019502 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19503 if(NULL == pWdaParams)
19504 {
19505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019507 VOS_ASSERT(0);
19508 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19509 return VOS_STATUS_E_NOMEM;
19510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019511 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19512 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019513 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19514 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19515 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19516 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019517
Yue Ma7f44bbe2013-04-12 11:47:39 -070019518 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019519 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019520 /* Store Params pass it to WDI */
19521 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19522 pWdaParams->pWdaContext = pWDA;
19523 /* Store param pointer as passed in by caller */
19524 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019525 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019526 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019527 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019528 if(IS_WDI_STATUS_FAILURE(status))
19529 {
19530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19531 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019532 if(pRcvFltPktClearParam->pktFilterCallback)
19533 {
19534 pRcvFltPktClearParam->pktFilterCallback(
19535 pRcvFltPktClearParam->cbCtx,
19536 CONVERT_WDI2SIR_STATUS(status));
19537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019539 vos_mem_free(pWdaParams->wdaMsgParam);
19540 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019542 return CONVERT_WDI2VOS_STATUS(status) ;
19543}
19544#endif // WLAN_FEATURE_PACKET_FILTERING
19545
Jeff Johnson295189b2012-06-20 16:38:30 -070019546/*
19547 * FUNCTION: WDA_ProcessSetPowerParamsReq
19548 * Request to WDI to set power params
19549 */
19550VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19551 tSirSetPowerParamsReq *pPowerParams)
19552{
Jeff Johnson43971f52012-07-17 12:26:56 -070019553 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019554 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19555 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019556 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019559 if(NULL == pwdiSetPowerParamsReqInfo)
19560 {
19561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019563 VOS_ASSERT(0);
19564 return VOS_STATUS_E_NOMEM;
19565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19567 if(NULL == pWdaParams)
19568 {
19569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019571 VOS_ASSERT(0);
19572 vos_mem_free(pwdiSetPowerParamsReqInfo);
19573 return VOS_STATUS_E_NOMEM;
19574 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019575
Jeff Johnson295189b2012-06-20 16:38:30 -070019576
19577 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19578 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019579 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19580 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019581 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19582 pPowerParams->uListenInterval;
19583 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19584 pPowerParams->uBcastMcastFilter;
19585 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19586 pPowerParams->uEnableBET;
19587 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19588 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019589 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19590 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019591 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19592 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019593
Jeff Johnson295189b2012-06-20 16:38:30 -070019594 /* Store Params pass it to WDI */
19595 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19596 pWdaParams->pWdaContext = pWDA;
19597 /* Store param pointer as passed in by caller */
19598 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019599 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019600 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019601 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019602 if(IS_WDI_STATUS_FAILURE(status))
19603 {
19604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19605 "Failure in Set power params REQ WDI API, free all the memory " );
19606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19607 vos_mem_free(pWdaParams->wdaMsgParam);
19608 pWdaParams->wdaWdiApiMsgParam = NULL;
19609 pWdaParams->wdaMsgParam = NULL;
19610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019611 return CONVERT_WDI2VOS_STATUS(status) ;
19612}
19613
19614/*
19615 * FUNCTION: WDA_SetTmLevelRspCallback
19616 * Set TM Level response
19617 */
19618void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19619{
19620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19621
19622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019623 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019624
19625 if(NULL == pWdaParams)
19626 {
19627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019628 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019629 VOS_ASSERT(0) ;
19630 return ;
19631 }
19632
19633 /* Dose not need to send notification to upper layer
19634 * Just free allocated resources */
19635 if( pWdaParams != NULL )
19636 {
19637 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19638 {
19639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19640 }
19641 vos_mem_free(pWdaParams->wdaMsgParam) ;
19642 vos_mem_free(pWdaParams) ;
19643 }
19644}
19645
19646/*
19647 * FUNCTION: WDA_ProcessSetTmLevelReq
19648 * Set TM Level request
19649 */
19650VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19651 tAniSetTmLevelReq *setTmLevelReq)
19652{
19653 WDI_Status status = WDI_STATUS_SUCCESS ;
19654 tWDA_ReqParams *pWdaParams ;
19655 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19656 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19657 sizeof(WDI_SetTmLevelReqType)) ;
19658 if(NULL == wdiSetTmLevelReq)
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019662 VOS_ASSERT(0);
19663 return VOS_STATUS_E_NOMEM;
19664 }
19665
19666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19667 if(NULL == pWdaParams)
19668 {
19669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019671 VOS_ASSERT(0);
19672 vos_mem_free(wdiSetTmLevelReq);
19673 return VOS_STATUS_E_NOMEM;
19674 }
19675
19676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019677 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019678
19679 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19680 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19681
19682 pWdaParams->pWdaContext = pWDA;
19683 pWdaParams->wdaMsgParam = setTmLevelReq;
19684 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19685
19686 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19687 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19688
19689 if(IS_WDI_STATUS_FAILURE(status))
19690 {
19691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019692 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019693 vos_mem_free(pWdaParams->wdaMsgParam) ;
19694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19695 vos_mem_free(pWdaParams) ;
19696 }
19697
19698 return CONVERT_WDI2VOS_STATUS(status) ;
19699}
19700
19701VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19702 tpTxControlParams pTxCtrlParam)
19703{
19704 VOS_STATUS wdaStatus;
19705
19706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019707 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019708 if( pTxCtrlParam == NULL )
19709 {
19710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019711 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019712 return VOS_STATUS_E_FAILURE;
19713 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019714 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19715 {
19716 wdaStatus = WDA_SuspendDataTx(pWDA);
19717 }
19718 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19719 {
19720 wdaStatus = WDA_ResumeDataTx(pWDA);
19721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019722 return wdaStatus;
19723}
19724
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019725void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019726{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019727 WDI_Status status;
19728 status = WDI_FWLoggingDXEdoneInd(logType);
19729
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019730 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019731 {
19732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19733 FL("Failure status %d"), status);
19734 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019735}
19736
Jeff Johnson295189b2012-06-20 16:38:30 -070019737 /* FUNCTION WDA_featureCapsExchange
19738 * WDA API to invoke capability exchange between host and FW.
19739 */
19740void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19741{
19742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019743 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019744 WDI_featureCapsExchangeReq( NULL, pVosContext);
19745}
19746
Yathish9f22e662012-12-10 14:21:35 -080019747/* FUNCTION WDA_disableCapablityFeature
19748 * WDA API to diable Active mode offload in host.
19749 */
19750void WDA_disableCapablityFeature(tANI_U8 feature_index)
19751{
19752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19753 "%s:enter", __func__ );
19754 WDI_disableCapablityFeature(feature_index);
19755}
19756
Jeff Johnson295189b2012-06-20 16:38:30 -070019757 /* FUNCTION WDA_getHostWlanFeatCaps
19758 * Wrapper for WDI API, that will return if the feature (enum value).passed
19759 * to this API is supported or not in Host
19760 * return value
19761 * 0 - implies feature is NOT Supported
19762 * any non zero value - implies feature is SUPPORTED
19763 */
19764tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19765{
19766 return WDI_getHostWlanFeatCaps(featEnumValue);
19767}
19768
19769 /* FUNCTION WDA_getFwWlanFeatCaps
19770 * Wrapper for WDI API, that will return if the feature (enum value).passed
19771 * to this API is supported or not in FW
19772 * return value
19773 * 0 - implies feature is NOT Supported
19774 * any non zero value - implies feature is SUPPORTED
19775 */
19776tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19777{
19778 return WDI_getFwWlanFeatCaps(featEnumValue);
19779}
19780
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019781
Jeff Johnson295189b2012-06-20 16:38:30 -070019782/*
19783 * FUNCTION: WDA_shutdown
19784 * Shutdown WDA/WDI without handshaking with Riva.
19785 * Synchronous function.
19786 */
19787VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19788{
19789 WDI_Status wdiStatus;
19790 //tANI_U8 eventIdx = 0;
19791 VOS_STATUS status = VOS_STATUS_SUCCESS;
19792 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019793 if (NULL == pWDA)
19794 {
19795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019796 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019797 VOS_ASSERT(0);
19798 return VOS_STATUS_E_FAILURE;
19799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019800 /* FTM mode stay START_STATE */
19801 if( (WDA_READY_STATE != pWDA->wdaState) &&
19802 (WDA_INIT_STATE != pWDA->wdaState) &&
19803 (WDA_START_STATE != pWDA->wdaState) )
19804 {
19805 VOS_ASSERT(0);
19806 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019807
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019808 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019809 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019810 if(VOS_TRUE == pWDA->wdaTimersCreated)
19811 {
19812 wdaDestroyTimers(pWDA);
19813 pWDA->wdaTimersCreated = VOS_FALSE;
19814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019815 }
Leo Chang9d76f622013-08-23 16:34:52 -070019816 else
19817 {
19818 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019819 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019820
Jeff Johnson295189b2012-06-20 16:38:30 -070019821 /* call WDI shutdown */
19822 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019823 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19824 {
19825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19826 "error in WDA Stop" );
19827 status = VOS_STATUS_E_FAILURE;
19828 }
19829 /* WDI stop is synchrnous, shutdown is complete when it returns */
19830 pWDA->wdaState = WDA_STOP_STATE;
19831
Jeff Johnson295189b2012-06-20 16:38:30 -070019832 /* shutdown should perform the stop & close actions. */
19833 /* Destroy the event */
19834 status = vos_event_destroy(&pWDA->txFrameEvent);
19835 if(!VOS_IS_STATUS_SUCCESS(status))
19836 {
19837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019838 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019839 status = VOS_STATUS_E_FAILURE;
19840 }
19841 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19842 if(!VOS_IS_STATUS_SUCCESS(status))
19843 {
19844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019845 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019846 status = VOS_STATUS_E_FAILURE;
19847 }
19848 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19849 if(!VOS_IS_STATUS_SUCCESS(status))
19850 {
19851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019852 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019853 status = VOS_STATUS_E_FAILURE;
19854 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019855 /* free WDA context */
19856 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19857 if ( !VOS_IS_STATUS_SUCCESS(status) )
19858 {
19859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19860 "error in WDA close " );
19861 status = VOS_STATUS_E_FAILURE;
19862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019863 return status;
19864}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019865
Jeff Johnsone7245742012-09-05 17:12:55 -070019866/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019867 * FUNCTION: WDA_setNeedShutdown
19868 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019869 */
19870
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019871void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019872{
19873 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019874 if(pWDA == NULL)
19875 {
19876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19877 "Could not get the WDA Context pointer" );
19878 return;
19879 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019880 pWDA->needShutdown = TRUE;
19881}
19882/*
19883 * FUNCTION: WDA_needShutdown
19884 * WDA needs a shutdown
19885 */
19886
19887v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19888{
19889 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019890 if(pWDA == NULL)
19891 {
19892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19893 "Could not get the WDA Context pointer" );
19894 return 0;
19895 }
19896 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019897}
19898
Mohit Khanna4a70d262012-09-11 16:30:12 -070019899#ifdef WLAN_FEATURE_11AC
19900/*
19901 * FUNCTION: WDA_SetBeaconFilterReqCallback
19902 *
19903 */
19904void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19905{
19906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019908 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019909 if(NULL == pWdaParams)
19910 {
19911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019912 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019913 VOS_ASSERT(0) ;
19914 return ;
19915 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019916
Mohit Khanna4a70d262012-09-11 16:30:12 -070019917 vos_mem_free(pWdaParams->wdaMsgParam) ;
19918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19919 vos_mem_free(pWdaParams) ;
19920 /*
19921 * No respone required for SetBeaconFilter req so just free the request
19922 * param here
19923 */
19924
19925 return ;
19926}
19927
19928VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19929 tUpdateVHTOpMode *pData)
19930{
19931 WDI_Status status = WDI_STATUS_SUCCESS ;
19932 tWDA_ReqParams *pWdaParams ;
19933 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19934 sizeof(WDI_UpdateVHTOpMode)) ;
19935 if(NULL == wdiTemp)
19936 {
19937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019938 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019939 VOS_ASSERT(0);
19940 return VOS_STATUS_E_NOMEM;
19941 }
19942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19943 if(NULL == pWdaParams)
19944 {
19945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019946 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019947 VOS_ASSERT(0);
19948 vos_mem_free(wdiTemp);
19949 return VOS_STATUS_E_NOMEM;
19950 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19952 "------> %s Opmode = %d and staid = %d" ,
19953 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019954 wdiTemp->opMode = pData->opMode;
19955 wdiTemp->staId = pData->staId;
19956
19957 pWdaParams->pWdaContext = pWDA;
19958 /* Store Req pointer, as this will be used for response */
19959 pWdaParams->wdaMsgParam = (void *)pData;
19960 /* store Params pass it to WDI */
19961 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19962
19963 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19964
19965 if(IS_WDI_STATUS_FAILURE(status))
19966 {
19967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19968 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19970 vos_mem_free(pWdaParams->wdaMsgParam);
19971 vos_mem_free(pWdaParams);
19972 }
19973 return CONVERT_WDI2VOS_STATUS(status) ;
19974}
19975#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019976
19977/*==========================================================================
19978 FUNCTION WDA_TransportChannelDebug
19979
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019980 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019981 Display Transport Channel debugging information
19982 User may request to display DXE channel snapshot
19983 Or if host driver detects any abnormal stcuk may display
19984
19985 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019986 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019987 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019988 debugFlags : Enable stall detect features
19989 defined by WPAL_DeviceDebugFlags
19990 These features may effect
19991 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019992
19993 RETURN VALUE
19994 NONE
19995
19996===========================================================================*/
19997void WDA_TransportChannelDebug
19998(
schang6295e542013-03-12 15:31:23 -070019999 tpAniSirGlobal pMac,
20000 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053020001 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020002)
20003{
Mihir Shete40a55652014-03-02 14:14:47 +053020004 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020005 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070020006}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020007
20008/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053020009 FUNCTION WDA_TransportKickDxe
20010
20011 DESCRIPTION
20012 Request Kick Dxe when first hdd TX time out
20013 happens
20014
20015 PARAMETERS
20016 NONE
20017
20018 RETURN VALUE
20019 NONE
20020
20021===========================================================================*/
20022void WDA_TransportKickDxe()
20023{
20024 WDI_TransportKickDxe();
20025 return;
20026}
20027
20028
20029/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020030 FUNCTION WDA_SetEnableSSR
20031
20032 DESCRIPTION
20033 API to enable/disable SSR on WDI timeout
20034
20035 PARAMETERS
20036 enableSSR : enable/disable SSR
20037
20038 RETURN VALUE
20039 NONE
20040
20041===========================================================================*/
20042void WDA_SetEnableSSR(v_BOOL_t enableSSR)
20043{
20044 WDI_SetEnableSSR(enableSSR);
20045}
Leo Chang9056f462013-08-01 19:21:11 -070020046
Agrawal Ashish0552be02016-03-02 18:03:43 +053020047/**
20048 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
20049 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
20050 *
20051 * Return: void
20052 */
20053void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
20054{
20055 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
20056}
20057
Leo Chang9056f462013-08-01 19:21:11 -070020058#ifdef FEATURE_WLAN_LPHB
20059/*
20060 * FUNCTION: WDA_LPHBconfRspCallback
20061 *
20062 */
20063void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
20064{
20065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20066
20067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20068 "<------ %s " ,__func__);
20069 if (NULL == pWdaParams)
20070 {
20071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20072 "%s: pWdaParams received NULL", __func__);
20073 VOS_ASSERT(0) ;
20074 return ;
20075 }
20076
20077 /* Do not need to send notification to upper layer
20078 * Just free allocated resources */
20079 if (pWdaParams != NULL)
20080 {
20081 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20082 {
20083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20084 }
20085 vos_mem_free(pWdaParams->wdaMsgParam) ;
20086 vos_mem_free(pWdaParams) ;
20087 }
20088
20089 return;
20090}
20091
20092/*
20093 * FUNCTION: WDA_ProcessLPHBConfReq
20094 *
20095 */
20096VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
20097 tSirLPHBReq *pData)
20098{
20099 WDI_Status wdiStatus;
20100 tWDA_ReqParams *pWdaParams ;
20101
20102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20103 "------> %s " , __func__);
20104
20105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20106 if (NULL == pWdaParams)
20107 {
20108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20109 "%s: VOS MEM Alloc Failure", __func__);
20110 VOS_ASSERT(0);
20111 vos_mem_free(pData);
20112 return VOS_STATUS_E_NOMEM;
20113 }
20114
20115 pWdaParams->pWdaContext = pWDA;
20116 pWdaParams->wdaMsgParam = (void *)pData;
20117 pWdaParams->wdaWdiApiMsgParam = NULL;
20118
20119 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
20120 if (WDI_STATUS_PENDING == wdiStatus)
20121 {
20122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20123 "Pending received for %s:%d ", __func__, __LINE__);
20124 }
20125 else if (WDI_STATUS_SUCCESS != wdiStatus)
20126 {
20127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20128 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
20129 vos_mem_free(pWdaParams->wdaMsgParam);
20130 vos_mem_free(pWdaParams);
20131 }
20132
20133 return CONVERT_WDI2VOS_STATUS(wdiStatus);
20134}
20135#endif /* FEATURE_WLAN_LPHB */
20136
c_hpothu92367912014-05-01 15:18:17 +053020137void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
20138 void* pUserData)
20139{
20140 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
20141
20142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20143 "<------ %s " ,__func__);
20144 if (NULL == pBcnMissRateInfo)
20145 {
20146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20147 "%s: pWdaParams received NULL", __func__);
20148 VOS_ASSERT(0) ;
20149 return ;
20150 }
20151 if (pBcnMissRateInfo->callback)
20152 {
20153 pBcnMissRateInfo->callback(status, bcnMissRate,
20154 pBcnMissRateInfo->data);
20155 }
20156 vos_mem_free(pUserData);
20157
20158 return;
20159}
20160
20161v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
20162 tSirBcnMissRateReq *pData)
20163{
20164 WDI_Status wdiStatus;
20165 tSirBcnMissRateInfo *pBcnMissRateInfo;
20166
20167 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20168 "------> %s " , __func__);
20169
20170 pBcnMissRateInfo =
20171 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
20172 if (NULL == pBcnMissRateInfo)
20173 {
20174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20175 "%s: VOS MEM Alloc Failure", __func__);
20176 VOS_ASSERT(0);
20177 vos_mem_free(pData);
20178 return;
20179 }
20180
20181 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
20182 pBcnMissRateInfo->data = pData->data;
20183
20184 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
20185 WDA_GetBcnMissRateCallback,
20186 pData->bssid);
20187 if (WDI_STATUS_PENDING == wdiStatus)
20188 {
20189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20190 "Pending received for %s:%d ", __func__, __LINE__);
20191 }
20192 else if (WDI_STATUS_SUCCESS != wdiStatus)
20193 {
20194 if (pBcnMissRateInfo->callback)
20195 {
20196 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
20197 -1, pBcnMissRateInfo->data);
20198 }
20199 }
20200 vos_mem_free(pData);
20201}
Dino Mycle41bdc942014-06-10 11:30:24 +053020202
20203#ifdef WLAN_FEATURE_EXTSCAN
20204
20205/*==========================================================================
20206 FUNCTION WDA_EXTScanStartRspCallback
20207
20208 DESCRIPTION
20209 API to send EXTScan Start Response to HDD
20210
20211 PARAMETERS
20212 pEventData: Response from FW
20213 pUserData:
20214===========================================================================*/
20215void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
20216{
20217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20218 tWDA_CbContext *pWDA = NULL;
20219 void *pCallbackContext;
20220 tpAniSirGlobal pMac;
20221
20222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20223 "%s:", __func__);
20224 if (NULL == pWdaParams)
20225 {
20226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20227 "%s: pWdaParams received NULL", __func__);
20228 VOS_ASSERT(0);
20229 return;
20230 }
20231
20232 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20233
20234 if (NULL == pWDA)
20235 {
20236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20237 "%s: pWDA received NULL", __func__);
20238 VOS_ASSERT(0);
20239 goto error;
20240 }
20241
20242 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20243 if (NULL == pMac)
20244 {
20245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20246 "%s:pMac is NULL", __func__);
20247 VOS_ASSERT(0);
20248 goto error;
20249 }
20250
20251 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20252
20253 if (pMac->sme.pEXTScanIndCb)
20254 {
20255 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
20256 pEventData);
20257 }
20258 else
20259 {
20260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20261 "%s:HDD callback is null", __func__);
20262 VOS_ASSERT(0);
20263 }
20264
20265error:
20266
20267 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20268 {
20269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20270 }
20271 if (pWdaParams->wdaMsgParam != NULL)
20272 {
20273 vos_mem_free(pWdaParams->wdaMsgParam);
20274 }
20275 vos_mem_free(pWdaParams) ;
20276
20277 return;
20278}
20279
20280/*==========================================================================
20281 FUNCTION WDA_EXTScanStopRspCallback
20282
20283 DESCRIPTION
20284 API to send EXTScan Stop Response to HDD
20285
20286 PARAMETERS
20287 pEventData: Response from FW
20288 pUserData:
20289===========================================================================*/
20290void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20291{
20292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20293 tWDA_CbContext *pWDA = NULL;
20294 void *pCallbackContext;
20295 tpAniSirGlobal pMac;
20296
20297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20298 "%s:", __func__);
20299 if (NULL == pWdaParams)
20300 {
20301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20302 "%s: pWdaParams received NULL", __func__);
20303 VOS_ASSERT(0);
20304 return;
20305 }
20306
20307 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20308
20309 if (NULL == pWDA)
20310 {
20311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20312 "%s: pWDA received NULL", __func__);
20313 VOS_ASSERT(0);
20314 goto error;
20315 }
20316
20317 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20318 if (NULL == pMac)
20319 {
20320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20321 "%s:pMac is NULL", __func__);
20322 VOS_ASSERT(0);
20323 goto error;
20324 }
20325 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20326
20327 if (pMac->sme.pEXTScanIndCb)
20328 {
20329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20330 "%s:HDD call back function called", __func__);
20331 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20332 pEventData);
20333 }
20334 else
20335 {
20336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20337 "%s:HDD callback is null", __func__);
20338 VOS_ASSERT(0);
20339 }
20340
20341error:
20342
20343 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20344 {
20345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20346 }
20347 if (pWdaParams->wdaMsgParam != NULL)
20348 {
20349 vos_mem_free(pWdaParams->wdaMsgParam);
20350 }
20351 vos_mem_free(pWdaParams) ;
20352
20353
20354 return;
20355}
20356
20357/*==========================================================================
20358 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20359
20360 DESCRIPTION
20361 API to send EXTScan Get Cached Results Response to HDD
20362
20363 PARAMETERS
20364 pEventData: Response from FW
20365 pUserData:
20366===========================================================================*/
20367void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20368{
20369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20370 tWDA_CbContext *pWDA = NULL;
20371 void *pCallbackContext;
20372 tpAniSirGlobal pMac;
20373
20374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20375 "%s: ", __func__);
20376 if (NULL == pWdaParams)
20377 {
20378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20379 "%s: pWdaParams received NULL", __func__);
20380 VOS_ASSERT(0);
20381 return;
20382 }
20383
20384 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20385
20386 if (NULL == pWDA)
20387 {
20388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20389 "%s: pWDA received NULL", __func__);
20390 VOS_ASSERT(0);
20391 goto error;
20392 }
20393
20394 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20395 if (NULL == pMac)
20396 {
20397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20398 "%s:pMac is NULL", __func__);
20399 VOS_ASSERT(0);
20400 goto error;
20401 }
20402
20403 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20404
20405 if (pMac->sme.pEXTScanIndCb)
20406 {
20407 pMac->sme.pEXTScanIndCb(pCallbackContext,
20408 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20409 pEventData);
20410 }
20411 else
20412 {
20413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20414 "%s:HDD callback is null", __func__);
20415 VOS_ASSERT(0);
20416 }
20417
20418
20419error:
20420
20421 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20422 {
20423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20424 }
20425 if (pWdaParams->wdaMsgParam != NULL)
20426 {
20427 vos_mem_free(pWdaParams->wdaMsgParam);
20428 }
20429 vos_mem_free(pWdaParams) ;
20430
20431 return;
20432}
20433
20434/*==========================================================================
20435 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20436
20437 DESCRIPTION
20438 API to send EXTScan Get Capabilities Response to HDD
20439
20440 PARAMETERS
20441 pEventData: Response from FW
20442 pUserData:
20443===========================================================================*/
20444void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20445{
20446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20447 tWDA_CbContext *pWDA = NULL;
20448 void *pCallbackContext;
20449 tpAniSirGlobal pMac;
20450
20451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20452 "%s:", __func__);
20453 if (NULL == pWdaParams)
20454 {
20455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20456 "%s: pWdaParams received NULL", __func__);
20457 VOS_ASSERT(0);
20458 return;
20459 }
20460
20461 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20462
20463 if (NULL == pWDA)
20464 {
20465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20466 "%s: pWDA received NULL", __func__);
20467 VOS_ASSERT(0);
20468 goto error;
20469 }
20470
20471 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20472 if (NULL == pMac)
20473 {
20474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20475 "%s:pMac is NULL", __func__);
20476 VOS_ASSERT(0);
20477 goto error;
20478 }
20479
20480 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20481
20482 if (pMac->sme.pEXTScanIndCb)
20483 {
20484 pMac->sme.pEXTScanIndCb(pCallbackContext,
20485 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20486 pEventData);
20487 }
20488 else
20489 {
20490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20491 "%s:HDD callback is null", __func__);
20492 VOS_ASSERT(0);
20493 }
20494
20495
20496error:
20497
20498 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20499 {
20500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20501 }
20502 if (pWdaParams->wdaMsgParam != NULL)
20503 {
20504 vos_mem_free(pWdaParams->wdaMsgParam);
20505 }
20506 vos_mem_free(pWdaParams) ;
20507
20508 return;
20509}
20510
20511/*==========================================================================
20512 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20513
20514 DESCRIPTION
20515 API to send EXTScan Set BSSID Hotlist Response to HDD
20516
20517 PARAMETERS
20518 pEventData: Response from FW
20519 pUserData:
20520===========================================================================*/
20521void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20522{
20523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20524 tWDA_CbContext *pWDA = NULL;
20525 void *pCallbackContext;
20526 tpAniSirGlobal pMac;
20527
20528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20529 "%s: ", __func__);
20530 if (NULL == pWdaParams)
20531 {
20532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20533 "%s: pWdaParams received NULL", __func__);
20534 VOS_ASSERT(0) ;
20535 return;
20536 }
20537
20538 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20539
20540 if (NULL == pWDA)
20541 {
20542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20543 "%s: pWDA received NULL", __func__);
20544 VOS_ASSERT(0);
20545 goto error;
20546 }
20547
20548 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20549 if (NULL == pMac)
20550 {
20551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20552 "%s:pMac is NULL", __func__);
20553 VOS_ASSERT(0);
20554 goto error;
20555 }
20556
20557 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20558
20559 if (pMac->sme.pEXTScanIndCb)
20560 {
20561 pMac->sme.pEXTScanIndCb(pCallbackContext,
20562 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20563 pEventData);
20564 }
20565 else
20566 {
20567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20568 "%s:HDD callback is null", __func__);
20569 VOS_ASSERT(0);
20570 }
20571
20572
20573error:
20574
20575 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20576 {
20577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20578 }
20579 if (pWdaParams->wdaMsgParam != NULL)
20580 {
20581 vos_mem_free(pWdaParams->wdaMsgParam);
20582 }
20583 vos_mem_free(pWdaParams) ;
20584
20585 return;
20586}
20587
20588/*==========================================================================
20589 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20590
20591 DESCRIPTION
20592 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20593
20594 PARAMETERS
20595 pEventData: Response from FW
20596 pUserData:
20597===========================================================================*/
20598void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20599{
20600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20601 tWDA_CbContext *pWDA = NULL;
20602 void *pCallbackContext;
20603 tpAniSirGlobal pMac;
20604
20605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20606 "%s:", __func__);
20607 if (NULL == pWdaParams)
20608 {
20609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20610 "%s: pWdaParams received NULL", __func__);
20611 VOS_ASSERT(0) ;
20612 return;
20613 }
20614
20615 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20616
20617 if (NULL == pWDA)
20618 {
20619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20620 "%s: pWDA received NULL", __func__);
20621 VOS_ASSERT(0);
20622 goto error;
20623 }
20624
20625 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20626 if (NULL == pMac)
20627 {
20628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20629 "%s:pMac is NULL", __func__);
20630 VOS_ASSERT(0);
20631 goto error;
20632 }
20633
20634 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20635
20636 if (pMac->sme.pEXTScanIndCb)
20637 {
20638 pMac->sme.pEXTScanIndCb(pCallbackContext,
20639 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20640 pEventData);
20641 }
20642 else
20643 {
20644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20645 "%s:HDD callback is null", __func__);
20646 VOS_ASSERT(0);
20647 }
20648
20649
20650error:
20651
20652 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20653 {
20654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20655 }
20656 if (pWdaParams->wdaMsgParam != NULL)
20657 {
20658 vos_mem_free(pWdaParams->wdaMsgParam);
20659 }
20660 vos_mem_free(pWdaParams) ;
20661
20662 return;
20663}
20664
20665/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020666 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20667
20668 DESCRIPTION
20669 API to send EXTScan Set SSID Hotlist Response to HDD
20670
20671 PARAMETERS
20672 pEventData: Response from FW
20673 pUserData:
20674===========================================================================*/
20675void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20676{
20677 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20678 tWDA_CbContext *pWDA = NULL;
20679 void *pCallbackContext;
20680 tpAniSirGlobal pMac;
20681
20682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20683 "%s: ", __func__);
20684 if (NULL == pWdaParams)
20685 {
20686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20687 "%s: pWdaParams received NULL", __func__);
20688 VOS_ASSERT(0) ;
20689 return;
20690 }
20691
20692 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20693
20694 if (NULL == pWDA)
20695 {
20696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20697 "%s: pWDA received NULL", __func__);
20698 VOS_ASSERT(0);
20699 goto error;
20700 }
20701
20702 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20703 if (NULL == pMac)
20704 {
20705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20706 "%s:pMac is NULL", __func__);
20707 VOS_ASSERT(0);
20708 goto error;
20709 }
20710
20711 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20712
20713 if (pMac->sme.pEXTScanIndCb)
20714 {
20715 pMac->sme.pEXTScanIndCb(pCallbackContext,
20716 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20717 pEventData);
20718 }
20719 else
20720 {
20721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20722 "%s:HDD callback is null", __func__);
20723 VOS_ASSERT(0);
20724 }
20725
20726
20727error:
20728
20729 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20730 {
20731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20732 }
20733 if (pWdaParams->wdaMsgParam != NULL)
20734 {
20735 vos_mem_free(pWdaParams->wdaMsgParam);
20736 }
20737 vos_mem_free(pWdaParams) ;
20738
20739 return;
20740}
20741
20742/*==========================================================================
20743 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20744
20745 DESCRIPTION
20746 API to send EXTScan ReSet SSID Hotlist Response to HDD
20747
20748 PARAMETERS
20749 pEventData: Response from FW
20750 pUserData:
20751===========================================================================*/
20752void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20753{
20754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20755 tWDA_CbContext *pWDA = NULL;
20756 void *pCallbackContext;
20757 tpAniSirGlobal pMac;
20758
20759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20760 "%s:", __func__);
20761 if (NULL == pWdaParams)
20762 {
20763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20764 "%s: pWdaParams received NULL", __func__);
20765 VOS_ASSERT(0) ;
20766 return;
20767 }
20768
20769 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20770
20771 if (NULL == pWDA)
20772 {
20773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20774 "%s: pWDA received NULL", __func__);
20775 VOS_ASSERT(0);
20776 goto error;
20777 }
20778
20779 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20780 if (NULL == pMac)
20781 {
20782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20783 "%s:pMac is NULL", __func__);
20784 VOS_ASSERT(0);
20785 goto error;
20786 }
20787
20788 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20789
20790 if (pMac->sme.pEXTScanIndCb)
20791 {
20792 pMac->sme.pEXTScanIndCb(pCallbackContext,
20793 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20794 pEventData);
20795 }
20796 else
20797 {
20798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20799 "%s:HDD callback is null", __func__);
20800 VOS_ASSERT(0);
20801 }
20802
20803
20804error:
20805
20806 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20807 {
20808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20809 }
20810 if (pWdaParams->wdaMsgParam != NULL)
20811 {
20812 vos_mem_free(pWdaParams->wdaMsgParam);
20813 }
20814 vos_mem_free(pWdaParams) ;
20815
20816 return;
20817}
20818
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020819/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020820 FUNCTION WDA_ProcessEXTScanStartReq
20821
20822 DESCRIPTION
20823 API to send EXTScan Start Request to WDI
20824
20825 PARAMETERS
20826 pWDA: Pointer to WDA context
20827 wdaRequest: Pointer to EXTScan req parameters
20828===========================================================================*/
20829VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20830 tSirEXTScanStartReqParams *wdaRequest)
20831{
20832 WDI_Status status = WDI_STATUS_SUCCESS;
20833 tWDA_ReqParams *pWdaParams;
20834
20835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20836 "%s: ", __func__);
20837 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20838 if (NULL == pWdaParams)
20839 {
20840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20841 "%s: VOS MEM Alloc Failure", __func__);
20842 VOS_ASSERT(0);
20843 return VOS_STATUS_E_NOMEM;
20844 }
20845 pWdaParams->pWdaContext = pWDA;
20846 pWdaParams->wdaMsgParam = wdaRequest;
20847 pWdaParams->wdaWdiApiMsgParam = NULL;
20848
20849 status = WDI_EXTScanStartReq((void *)wdaRequest,
20850 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20851 (void *)pWdaParams);
20852 if (IS_WDI_STATUS_FAILURE(status))
20853 {
20854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20855 "Failure to request. Free all the memory " );
20856 vos_mem_free(pWdaParams->wdaMsgParam);
20857 vos_mem_free(pWdaParams);
20858 }
20859 return CONVERT_WDI2VOS_STATUS(status);
20860}
20861
20862/*==========================================================================
20863 FUNCTION WDA_ProcessEXTScanStopReq
20864
20865 DESCRIPTION
20866 API to send EXTScan Start Request to WDI
20867
20868 PARAMETERS
20869 pWDA: Pointer to WDA context
20870 wdaRequest: Pointer to EXTScan req parameters
20871===========================================================================*/
20872VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20873 tSirEXTScanStopReqParams *wdaRequest)
20874{
20875 WDI_Status status = WDI_STATUS_SUCCESS;
20876 tWDA_ReqParams *pWdaParams;
20877
20878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20879 "%s:", __func__);
20880 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20881 if (NULL == pWdaParams)
20882 {
20883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20884 "%s: VOS MEM Alloc Failure", __func__);
20885 VOS_ASSERT(0);
20886 return VOS_STATUS_E_NOMEM;
20887 }
20888 pWdaParams->pWdaContext = pWDA;
20889 pWdaParams->wdaMsgParam = wdaRequest;
20890 pWdaParams->wdaWdiApiMsgParam = NULL;
20891
20892 status = WDI_EXTScanStopReq((void *)wdaRequest,
20893 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20894 (void *)pWdaParams);
20895 if (IS_WDI_STATUS_FAILURE(status))
20896 {
20897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20898 "Failure to request. Free all the memory " );
20899 vos_mem_free(pWdaParams->wdaMsgParam);
20900 vos_mem_free(pWdaParams);
20901 }
20902 return CONVERT_WDI2VOS_STATUS(status);
20903}
20904
20905/*==========================================================================
20906 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20907
20908 DESCRIPTION
20909 API to send EXTScan Get Cached Results Request to WDI
20910
20911 PARAMETERS
20912 pWDA: Pointer to WDA context
20913 wdaRequest: Pointer to EXTScan req parameters
20914===========================================================================*/
20915VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20916 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20917{
20918 WDI_Status status = WDI_STATUS_SUCCESS;
20919 tWDA_ReqParams *pWdaParams;
20920
20921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20922 "%s: ", __func__);
20923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20924 if (NULL == pWdaParams)
20925 {
20926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20927 "%s: VOS MEM Alloc Failure", __func__);
20928 VOS_ASSERT(0);
20929 return VOS_STATUS_E_NOMEM;
20930 }
20931 pWdaParams->pWdaContext = pWDA;
20932 pWdaParams->wdaMsgParam = wdaRequest;
20933 pWdaParams->wdaWdiApiMsgParam = NULL;
20934
20935 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20936 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20937 (void *)pWdaParams);
20938 if (IS_WDI_STATUS_FAILURE(status))
20939 {
20940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20941 "Failure to request. Free all the memory " );
20942 vos_mem_free(pWdaParams->wdaMsgParam);
20943 vos_mem_free(pWdaParams);
20944 }
20945 return CONVERT_WDI2VOS_STATUS(status);
20946}
20947
20948/*==========================================================================
20949 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20950
20951 DESCRIPTION
20952 API to send EXTScan Get Capabilities Request to WDI
20953
20954 PARAMETERS
20955 pWDA: Pointer to WDA context
20956 wdaRequest: Pointer to EXTScan req parameters
20957===========================================================================*/
20958VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20959 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20960{
20961 WDI_Status status = WDI_STATUS_SUCCESS;
20962 tWDA_ReqParams *pWdaParams;
20963
20964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20965 "%s:", __func__);
20966 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20967 if (NULL == pWdaParams)
20968 {
20969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20970 "%s: VOS MEM Alloc Failure", __func__);
20971 VOS_ASSERT(0);
20972 return VOS_STATUS_E_NOMEM;
20973 }
20974 pWdaParams->pWdaContext = pWDA;
20975 pWdaParams->wdaMsgParam = wdaRequest;
20976 pWdaParams->wdaWdiApiMsgParam = NULL;
20977
20978 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20979 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20980 (void *)pWdaParams);
20981 if (IS_WDI_STATUS_FAILURE(status))
20982 {
20983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20984 "Failure to request. Free all the memory " );
20985 vos_mem_free(pWdaParams->wdaMsgParam);
20986 vos_mem_free(pWdaParams);
20987 }
20988 return CONVERT_WDI2VOS_STATUS(status);
20989}
20990
20991/*==========================================================================
20992 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20993
20994 DESCRIPTION
20995 API to send Set BSSID Hotlist Request to WDI
20996
20997 PARAMETERS
20998 pWDA: Pointer to WDA context
20999 wdaRequest: Pointer to EXTScan req parameters
21000===========================================================================*/
21001VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21002 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
21003{
21004 WDI_Status status = WDI_STATUS_SUCCESS;
21005 tWDA_ReqParams *pWdaParams;
21006
21007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21008 "%s: ", __func__);
21009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21010 if (NULL == pWdaParams)
21011 {
21012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21013 "%s: VOS MEM Alloc Failure", __func__);
21014 VOS_ASSERT(0);
21015 return VOS_STATUS_E_NOMEM;
21016 }
21017 pWdaParams->pWdaContext = pWDA;
21018 pWdaParams->wdaMsgParam = wdaRequest;
21019 pWdaParams->wdaWdiApiMsgParam = NULL;
21020
21021 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
21022 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
21023 (void *)pWdaParams);
21024 if (IS_WDI_STATUS_FAILURE(status))
21025 {
21026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21027 "Failure to request. Free all the memory " );
21028 vos_mem_free(pWdaParams->wdaMsgParam);
21029 vos_mem_free(pWdaParams);
21030 }
21031 return CONVERT_WDI2VOS_STATUS(status);
21032}
21033
21034/*==========================================================================
21035 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
21036
21037 DESCRIPTION
21038 API to send Reset BSSID Hotlist Request to WDI
21039
21040 PARAMETERS
21041 pWDA: Pointer to WDA context
21042 wdaRequest: Pointer to EXTScan req parameters
21043===========================================================================*/
21044VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21045 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
21046{
21047 WDI_Status status = WDI_STATUS_SUCCESS;
21048 tWDA_ReqParams *pWdaParams;
21049
21050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21051 "%s:", __func__);
21052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21053 if (NULL == pWdaParams)
21054 {
21055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21056 "%s: VOS MEM Alloc Failure", __func__);
21057 VOS_ASSERT(0);
21058 return VOS_STATUS_E_NOMEM;
21059 }
21060 pWdaParams->pWdaContext = pWDA;
21061 pWdaParams->wdaMsgParam = wdaRequest;
21062 pWdaParams->wdaWdiApiMsgParam = NULL;
21063
21064 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
21065 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
21066 (void *)pWdaParams);
21067 if (IS_WDI_STATUS_FAILURE(status))
21068 {
21069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21070 "Failure to request. Free all the memory " );
21071 vos_mem_free(pWdaParams->wdaMsgParam);
21072 vos_mem_free(pWdaParams);
21073 }
21074 return CONVERT_WDI2VOS_STATUS(status);
21075}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021076
21077/*==========================================================================
21078 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
21079
21080 DESCRIPTION
21081 API to send Set SSID Hotlist Request to WDI
21082
21083 PARAMETERS
21084 pWDA: Pointer to WDA context
21085 wdaRequest: Pointer to EXTScan req parameters
21086===========================================================================*/
21087VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
21088 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
21089{
21090 WDI_Status status = WDI_STATUS_SUCCESS;
21091 tWDA_ReqParams *pWdaParams;
21092
21093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21094 "%s: ", __func__);
21095 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21096 if (NULL == pWdaParams)
21097 {
21098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21099 "%s: VOS MEM Alloc Failure", __func__);
21100 VOS_ASSERT(0);
21101 return VOS_STATUS_E_NOMEM;
21102 }
21103 pWdaParams->pWdaContext = pWDA;
21104 pWdaParams->wdaMsgParam = wdaRequest;
21105 pWdaParams->wdaWdiApiMsgParam = NULL;
21106
21107 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
21108 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
21109 (void *)pWdaParams);
21110 if (IS_WDI_STATUS_FAILURE(status))
21111 {
21112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21113 "Failure to request. Free all the memory " );
21114 vos_mem_free(pWdaParams->wdaMsgParam);
21115 vos_mem_free(pWdaParams);
21116 }
21117 return CONVERT_WDI2VOS_STATUS(status);
21118}
21119
21120/*==========================================================================
21121 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
21122
21123 DESCRIPTION
21124 API to send Reset SSID Hotlist Request to WDI
21125
21126 PARAMETERS
21127 pWDA: Pointer to WDA context
21128 wdaRequest: Pointer to EXTScan req parameters
21129===========================================================================*/
21130VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
21131 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
21132{
21133 WDI_Status status = WDI_STATUS_SUCCESS;
21134 tWDA_ReqParams *pWdaParams;
21135
21136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21137 "%s:", __func__);
21138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21139 if (NULL == pWdaParams)
21140 {
21141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21142 "%s: VOS MEM Alloc Failure", __func__);
21143 VOS_ASSERT(0);
21144 return VOS_STATUS_E_NOMEM;
21145 }
21146 pWdaParams->pWdaContext = pWDA;
21147 pWdaParams->wdaMsgParam = wdaRequest;
21148 pWdaParams->wdaWdiApiMsgParam = NULL;
21149
21150 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
21151 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
21152 (void *)pWdaParams);
21153 if (IS_WDI_STATUS_FAILURE(status))
21154 {
21155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21156 "Failure to request. Free all the memory " );
21157 vos_mem_free(pWdaParams->wdaMsgParam);
21158 vos_mem_free(pWdaParams);
21159 }
21160 return CONVERT_WDI2VOS_STATUS(status);
21161}
21162
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053021163/*==========================================================================
21164 FUNCTION WDA_ProcessHighPriorityDataInfoInd
21165
21166 DESCRIPTION
21167 API to send Reset SSID Hotlist Request to WDI
21168
21169 PARAMETERS
21170 pWDA: Pointer to WDA context
21171 wdaRequest: Pointer to EXTScan req parameters
21172===========================================================================*/
21173VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
21174 tSirHighPriorityDataInfoInd *wdaRequest)
21175{
21176 WDI_Status status = WDI_STATUS_SUCCESS;
21177
21178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21179 "%s:", __func__);
21180
21181 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
21182 if (WDI_STATUS_PENDING == status)
21183 {
21184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21185 FL("pending status received "));
21186 }
21187 else if (WDI_STATUS_SUCCESS_SYNC != status)
21188 {
21189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21190 FL("Failure status %d"), status);
21191 }
21192 return CONVERT_WDI2VOS_STATUS(status);
21193}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021194
Dino Mycle41bdc942014-06-10 11:30:24 +053021195#endif /* WLAN_FEATURE_EXTSCAN */
21196
Sunil Duttbd736ed2014-05-26 21:19:41 +053021197#ifdef WLAN_FEATURE_LINK_LAYER_STATS
21198
21199/*==========================================================================
21200 FUNCTION WDA_LLStatsSetRspCallback
21201
21202 DESCRIPTION
21203 API to process set link layer statistics response from FW
21204
21205 PARAMETERS
21206 pRsp: Pointer to set link layer statistics response
21207 pUserData: Pointer to user data
21208
21209 RETURN VALUE
21210 NONE
21211
21212===========================================================================*/
21213void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
21214{
21215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21216
21217
21218 if (NULL == pWdaParams)
21219 {
21220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21221 "%s: pWdaParams received NULL", __func__);
21222 VOS_ASSERT(0) ;
21223 return ;
21224 }
21225
21226 /* Do not need to send notification to upper layer
21227 * Just free allocated resources */
21228 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21229 {
21230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21231 }
21232 if (pWdaParams->wdaMsgParam != NULL)
21233 {
21234 vos_mem_free(pWdaParams->wdaMsgParam);
21235 }
21236 vos_mem_free(pWdaParams) ;
21237
21238 return;
21239}
21240
21241/*==========================================================================
21242 FUNCTION WDA_ProcessLLStatsSetReq
21243
21244 DESCRIPTION
21245 API to send Set Link Layer Stats request to WDI
21246
21247 PARAMETERS
21248 pWDA: Pointer to WDA context
21249 wdaRequest: Pointer to set Link Layer Stats req parameters
21250===========================================================================*/
21251VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
21252 tSirLLStatsSetReq *wdaRequest)
21253{
21254 WDI_Status status = WDI_STATUS_SUCCESS;
21255 tWDA_ReqParams *pWdaParams;
21256
21257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21258 if (NULL == pWdaParams)
21259 {
21260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21261 "%s: VOS MEM Alloc Failure", __func__);
21262 VOS_ASSERT(0);
21263 return VOS_STATUS_E_NOMEM;
21264 }
21265 pWdaParams->pWdaContext = pWDA;
21266 pWdaParams->wdaMsgParam = wdaRequest;
21267 pWdaParams->wdaWdiApiMsgParam = NULL;
21268
21269 status = WDI_LLStatsSetReq((void *)wdaRequest,
21270 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
21271 (void *)pWdaParams);
21272 if (IS_WDI_STATUS_FAILURE(status))
21273 {
21274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21275 "Failure to request. Free all the memory " );
21276 vos_mem_free(pWdaParams->wdaMsgParam);
21277 vos_mem_free(pWdaParams);
21278 }
21279 return CONVERT_WDI2VOS_STATUS(status);
21280}
21281
21282/*==========================================================================
21283 FUNCTION WDA_LLStatsGetRspCallback
21284
21285 DESCRIPTION
21286 API to process get link layer statistics response from FW
21287
21288 PARAMETERS
21289 pRsp: Pointer to get link layer statistics response
21290 pUserData: Pointer to user data
21291
21292 RETURN VALUE
21293 NONE
21294
21295===========================================================================*/
21296void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21297{
21298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21299
21300 if (NULL == pWdaParams)
21301 {
21302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21303 "%s: pWdaParams received NULL", __func__);
21304 VOS_ASSERT(0) ;
21305 return ;
21306 }
21307
21308 /* Do not need to send notification to upper layer
21309 * Just free allocated resources */
21310 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21311 {
21312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21313 }
21314 if (pWdaParams->wdaMsgParam != NULL)
21315 {
21316 vos_mem_free(pWdaParams->wdaMsgParam);
21317 }
21318 vos_mem_free(pWdaParams) ;
21319
21320 return;
21321}
21322
21323/*==========================================================================
21324 FUNCTION WDA_ProcessLLStatsGetReq
21325
21326 DESCRIPTION
21327 API to send Get Link Layer Stats request to WDI
21328
21329 PARAMETERS
21330 pWDA: Pointer to WDA context
21331 wdaRequest: Pointer to get Link Layer Stats req parameters
21332===========================================================================*/
21333VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21334 tSirLLStatsGetReq *wdaRequest)
21335{
21336 WDI_Status status = WDI_STATUS_SUCCESS;
21337 tWDA_ReqParams *pWdaParams;
21338
21339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21340 if (NULL == pWdaParams)
21341 {
21342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21343 "%s: VOS MEM Alloc Failure", __func__);
21344 VOS_ASSERT(0);
21345 return VOS_STATUS_E_NOMEM;
21346 }
21347 pWdaParams->pWdaContext = pWDA;
21348 pWdaParams->wdaMsgParam = wdaRequest;
21349 pWdaParams->wdaWdiApiMsgParam = NULL;
21350
21351 status = WDI_LLStatsGetReq((void *) wdaRequest,
21352 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21353 (void *)pWdaParams);
21354 if (IS_WDI_STATUS_FAILURE(status))
21355 {
21356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21357 "Failure to request. Free all the memory " );
21358 vos_mem_free(pWdaParams->wdaMsgParam);
21359 vos_mem_free(pWdaParams);
21360 }
21361 return CONVERT_WDI2VOS_STATUS(status);
21362}
21363
21364/*==========================================================================
21365 FUNCTION WDA_LLStatsClearRspCallback
21366
21367 DESCRIPTION
21368 API to process clear link layer statistics response from FW
21369
21370 PARAMETERS
21371 pRsp: Pointer to clear link layer statistics response
21372 pUserData: Pointer to user data
21373
21374 RETURN VALUE
21375 NONE
21376
21377===========================================================================*/
21378void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21379{
21380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21381
21382
21383 if (NULL == pWdaParams)
21384 {
21385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21386 "%s: pWdaParams received NULL", __func__);
21387 VOS_ASSERT(0) ;
21388 return ;
21389 }
21390 /* Do not need to send notification to upper layer
21391 * Just free allocated resources */
21392 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21393 {
21394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21395 }
21396 if (pWdaParams->wdaMsgParam != NULL)
21397 {
21398 vos_mem_free(pWdaParams->wdaMsgParam);
21399 }
21400 vos_mem_free(pWdaParams) ;
21401 return;
21402}
21403
21404/*==========================================================================
21405 FUNCTION WDA_ProcessLLStatsClearReq
21406
21407 DESCRIPTION
21408 API to send Clear Link Layer Stats request to WDI
21409
21410 PARAMETERS
21411 pWDA: Pointer to WDA context
21412 wdaRequest: Pointer to earLink Layer Stats req
21413===========================================================================*/
21414VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21415 tSirLLStatsClearReq *wdaRequest)
21416{
21417 WDI_Status status = WDI_STATUS_SUCCESS;
21418 tWDA_ReqParams *pWdaParams;
21419
21420 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21421 if (NULL == pWdaParams)
21422 {
21423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21424 "%s: VOS MEM Alloc Failure", __func__);
21425 VOS_ASSERT(0);
21426 return VOS_STATUS_E_NOMEM;
21427 }
21428 pWdaParams->pWdaContext = pWDA;
21429 pWdaParams->wdaMsgParam = wdaRequest;
21430 pWdaParams->wdaWdiApiMsgParam = NULL;
21431
21432 status = WDI_LLStatsClearReq((void *) wdaRequest,
21433 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21434 (void *)pWdaParams);
21435 if (IS_WDI_STATUS_FAILURE(status))
21436 {
21437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21438 "Failure to request. Free all the memory " );
21439 vos_mem_free(pWdaParams->wdaMsgParam);
21440 vos_mem_free(pWdaParams);
21441 }
21442 return CONVERT_WDI2VOS_STATUS(status);
21443}
21444
21445#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021446
Abhishek Singh85b74712014-10-08 11:38:19 +053021447void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21448{
21449 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21450
21451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21452 "<------ %s " ,__func__);
21453 if (NULL == fwStatsinfo)
21454 {
21455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21456 "%s: pWdaParams received NULL", __func__);
21457 VOS_ASSERT(0);
21458 return;
21459 }
21460
21461 if(fwStatsinfo->callback)
21462 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21463
21464 vos_mem_free(pUserData);
21465 return;
21466}
21467
21468
21469v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21470 tSirFWStatsGetReq *pData)
21471{
21472
21473 WDI_Status wdiStatus;
21474 tSirFWStatsInfo *fwStatsinfo;
21475
21476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21477 "------> %s" , __func__);
21478
21479 fwStatsinfo =
21480 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21481 if (NULL == fwStatsinfo)
21482 {
21483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21484 "%s: VOS MEM Alloc Failure", __func__);
21485 VOS_ASSERT(0);
21486 vos_mem_free(pData);
21487 return;
21488 }
21489
21490 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21491 fwStatsinfo->data = pData->data;
21492
21493 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21494 WDA_FWStatsGetRspCallback,
21495 pData->stats);
21496 if (WDI_STATUS_PENDING == wdiStatus)
21497 {
21498 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21499 "Pending received for %s:%d ", __func__, __LINE__);
21500 }
21501 else if (WDI_STATUS_SUCCESS != wdiStatus)
21502 {
21503 if (fwStatsinfo->callback)
21504 {
21505 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21506 }
21507 vos_mem_free(fwStatsinfo);
21508 }
21509 vos_mem_free(pData);
21510}
21511
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021512/*==========================================================================
21513 FUNCTION WDA_EncryptMsgRspCallback
21514
21515 DESCRIPTION
21516 API to send Encrypt message response to HDD
21517
21518 PARAMETERS
21519 pEventData: Response from FW
21520 pUserData: Data sent to firmware as part of request
21521===========================================================================*/
21522void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21523 void* pUserData)
21524{
21525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21526 tWDA_CbContext *pWDA = NULL;
21527 tpAniSirGlobal pMac;
21528 vos_msg_t vosMsg;
21529 tpSirEncryptedDataRspParams pEncRspParams;
21530 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21531
21532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21533 FL("%s:"), __func__);
21534 if (NULL == pWdaParams)
21535 {
21536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21537 FL("%s: pWdaParams received NULL"), __func__);
21538 VOS_ASSERT(0);
21539 return;
21540 }
21541
21542 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21543
21544 if (NULL == pWDA)
21545 {
21546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21547 FL("%s: pWDA received NULL"), __func__);
21548 VOS_ASSERT(0);
21549 goto error;
21550 }
21551
21552 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21553 if (NULL == pMac)
21554 {
21555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21556 FL("%s:pMac is NULL"), __func__);
21557 VOS_ASSERT(0);
21558 goto error;
21559 }
21560
21561 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21562
21563 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21564 if (NULL == pEncRspParams)
21565 {
21566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21567 FL("%s: VOS MEM Alloc Failure"), __func__);
21568 VOS_ASSERT(0);
21569 goto error;
21570 }
21571
21572 /* Message Header */
21573 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21574 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21575 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21576 pEncryptedDataRsp->encryptedPayload.length;
21577 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21578 pEncryptedDataRsp->encryptedPayload.data,
21579 pEncryptedDataRsp->encryptedPayload.length);
21580
21581 /* VOS message wrapper */
21582 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21583 vosMsg.bodyptr = (void *)pEncRspParams;
21584 vosMsg.bodyval = 0;
21585
21586 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21587 {
21588 /* free the mem */
21589 vos_mem_free((v_VOID_t *) pEncRspParams);
21590 }
21591
21592error:
21593
21594 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21595 {
21596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21597 }
21598 if (pWdaParams->wdaMsgParam != NULL)
21599 {
21600 vos_mem_free(pWdaParams->wdaMsgParam);
21601 }
21602 vos_mem_free(pWdaParams) ;
21603
21604 return;
21605}
21606/*==========================================================================
21607 FUNCTION WDA_ProcessEncryptMsgReq
21608
21609 DESCRIPTION
21610 API to send Encrypt message Request to WDI
21611
21612 PARAMETERS
21613 pWDA: Pointer to WDA context
21614 wdaRequest: Pointer to Encrypt_msg req parameters
21615===========================================================================*/
21616VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21617 u8 *wdaRequest)
21618{
21619 WDI_Status status = WDI_STATUS_SUCCESS;
21620 tWDA_ReqParams *pWdaParams;
21621
21622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21623 FL("%s: "), __func__);
21624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21625 if (NULL == pWdaParams)
21626 {
21627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21628 FL("%s: VOS MEM Alloc Failure"), __func__);
21629 VOS_ASSERT(0);
21630 return VOS_STATUS_E_NOMEM;
21631 }
21632 pWdaParams->pWdaContext = pWDA;
21633 pWdaParams->wdaMsgParam = wdaRequest;
21634 pWdaParams->wdaWdiApiMsgParam = NULL;
21635
21636 status = WDI_EncryptMsgReq((void *)wdaRequest,
21637 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21638 (void *)pWdaParams);
21639 if (IS_WDI_STATUS_FAILURE(status))
21640 {
21641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21642 FL("Failure to request. Free all the memory " ));
21643 vos_mem_free(pWdaParams->wdaMsgParam);
21644 vos_mem_free(pWdaParams);
21645 }
21646 return CONVERT_WDI2VOS_STATUS(status);
21647}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021648/*==========================================================================
21649 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21650
21651 DESCRIPTION
21652 API to enable/disable RTS/CTS for different modes.
21653
21654 PARAMETERS
21655 pWDA: Pointer to WDA context
21656 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21657===========================================================================*/
21658
21659VOS_STATUS
21660WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21661 tANI_U32 rtsCtsVal)
21662{
21663 WDI_Status status;
21664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21665 FL("---> %s"), __func__);
21666 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21667 if (WDI_STATUS_PENDING == status)
21668 {
21669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21670 FL("pending status received "));
21671 }
21672 else if (WDI_STATUS_SUCCESS_SYNC != status)
21673 {
21674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21675 FL("Failure status %d"), status);
21676 }
21677 return CONVERT_WDI2VOS_STATUS(status) ;
21678}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021679
21680void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021681{
21682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021683 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021684
21685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21686 "<------ %s " ,__func__);
21687 if (NULL == pWdaParams)
21688 {
21689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21690 "%s: pWdaParams received NULL", __func__);
21691 VOS_ASSERT(0) ;
21692 return ;
21693 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021694 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21695 if (pData != NULL) {
21696 pData->callback(pData->magic, pData->cmpVar);
21697 vos_mem_free(pWdaParams->wdaMsgParam);
21698 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021699 vos_mem_free(pWdaParams) ;
21700
21701 return;
21702}
21703
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021704VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021705{
21706
21707 WDI_Status status = WDI_STATUS_SUCCESS;
21708 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021709 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021710
21711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21712 FL("%s: "), __func__);
21713 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21714 if (NULL == pWdaParams)
21715 {
21716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21717 FL("%s: VOS MEM Alloc Failure"), __func__);
21718 VOS_ASSERT(0);
21719 return VOS_STATUS_E_NOMEM;
21720 }
21721 pWdaParams->pWdaContext = pWDA;
21722 pWdaParams->wdaMsgParam = wdaRequest;
21723 pWdaParams->wdaWdiApiMsgParam = NULL;
21724
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021725 status = WDI_MonStartReq(pMonModeData->data,
21726 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021727 (void *)pWdaParams);
21728 if (IS_WDI_STATUS_FAILURE(status))
21729 {
21730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21731 "Failure to request. Free all the memory " );
21732 vos_mem_free(pWdaParams->wdaMsgParam);
21733 vos_mem_free(pWdaParams);
21734 }
21735 return CONVERT_WDI2VOS_STATUS(status);
21736}
21737
Katya Nigamf0511f62015-05-05 16:40:57 +053021738VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21739{
21740
21741 WDI_Status status = WDI_STATUS_SUCCESS;
21742 tWDA_ReqParams *pWdaParams;
21743
21744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21745 FL("%s: "), __func__);
21746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21747 if (NULL == pWdaParams)
21748 {
21749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21750 FL("%s: VOS MEM Alloc Failure"), __func__);
21751 VOS_ASSERT(0);
21752 return VOS_STATUS_E_NOMEM;
21753 }
21754 pWdaParams->pWdaContext = pWDA;
21755 pWdaParams->wdaMsgParam = wdaRequest;
21756 pWdaParams->wdaWdiApiMsgParam = NULL;
21757
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21759 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021760 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021761 (void *)pWdaParams);
21762
21763 if (IS_WDI_STATUS_FAILURE(status))
21764 {
21765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21766 "Failure to request. Free all the memory " );
21767 vos_mem_free(pWdaParams->wdaMsgParam);
21768 vos_mem_free(pWdaParams);
21769 }
21770 return CONVERT_WDI2VOS_STATUS(status);
21771}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021772
21773VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21774{
21775 WDI_Status status;
21776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21777 FL("---> %s"), __func__);
21778 status = WDI_EnableDisableCAEventInd(val);
21779 if (WDI_STATUS_PENDING == status)
21780 {
21781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21782 FL("pending status received "));
21783 }
21784 else if (WDI_STATUS_SUCCESS_SYNC != status)
21785 {
21786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21787 FL("Failure status %d"), status);
21788 }
21789 return CONVERT_WDI2VOS_STATUS(status) ;
21790}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021791
21792/*==========================================================================
21793 FUNCTION WDA_WifiConfigSetRspCallback
21794
21795 DESCRIPTION
21796 API to process set WifiConfig response from FW
21797
21798 PARAMETERS
21799 pRsp: Pointer to set WifiConfig response
21800 pUserData: Pointer to user data
21801
21802 RETURN VALUE
21803 NONE
21804
21805===========================================================================*/
21806void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21807{
21808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21809
21810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21811 "<------ %s " ,__func__);
21812
21813 if(NULL == pWdaParams)
21814 {
21815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21816 "%s: pWdaParams received NULL", __func__);
21817 VOS_ASSERT(0);
21818 return ;
21819 }
21820
21821 if(NULL == pWdaParams->wdaMsgParam)
21822 {
21823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21824 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21825 VOS_ASSERT(0);
21826 vos_mem_free(pWdaParams);
21827 return ;
21828 }
21829
21830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21831 vos_mem_free(pWdaParams->wdaMsgParam);
21832 vos_mem_free(pWdaParams);
21833
21834 return;
21835}
21836
21837/*==========================================================================
21838 FUNCTION WDA_ProcessWifiConfigReq
21839
21840 DESCRIPTION
21841 API to send Set WifiConfig params request to WDI
21842
21843 PARAMETERS
21844 pWDA: Pointer to WDA context
21845 wdaRequest: Pointer to set WifiConfig req parameters
21846===========================================================================*/
21847
21848VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21849 tSetWifiConfigParams *pwdaWificonfig)
21850{
21851 WDI_Status status = WDI_STATUS_SUCCESS;
21852 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21853 tWDA_ReqParams *pWdaParams ;
21854 WDI_Status wstatus;
21855
21856 /* Sanity Check*/
21857 if(NULL == pwdaWificonfig)
21858 {
21859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21860 "%s: tSetWifiConfigParams received NULL", __func__);
21861 VOS_ASSERT(0) ;
21862 return VOS_STATUS_E_FAULT;
21863 }
21864
21865 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21866 sizeof(WDI_WifiConfigSetReqType));
21867 if(NULL == pwdiWifConfigSetReqParams)
21868 {
21869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21870 "%s: VOS MEM Alloc Failure", __func__);
21871 VOS_ASSERT(0);
21872 vos_mem_free(pwdaWificonfig);
21873 return VOS_STATUS_E_NOMEM;
21874 }
21875
21876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21877 if(NULL == pWdaParams)
21878 {
21879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21880 "%s: VOS MEM Alloc Failure", __func__);
21881 VOS_ASSERT(0);
21882 vos_mem_free(pwdiWifConfigSetReqParams);
21883 vos_mem_free(pwdaWificonfig);
21884 return VOS_STATUS_E_NOMEM;
21885 }
21886 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21887 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21888 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21889 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21890
21891 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021892 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021893 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21894
21895 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21896 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21897 pWdaParams);
21898 if(IS_WDI_STATUS_FAILURE(wstatus))
21899 {
21900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21901 "Failure in sendind WifiConfigReq, free all the memory" );
21902 status = CONVERT_WDI2VOS_STATUS(wstatus);
21903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21904 vos_mem_free(pWdaParams->wdaMsgParam);
21905 vos_mem_free(pWdaParams);
21906 }
21907
21908 return status;
21909
21910}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021911
21912#ifdef FEATURE_OEM_DATA_SUPPORT
21913/*
21914 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21915 * Request to WDI.
21916 */
21917VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21918 tOemDataReqNewConfig *pOemDataReqNewConfig)
21919{
21920 VOS_STATUS status = VOS_STATUS_SUCCESS;
21921 WDI_Status wstatus;
21922 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21923
21924 /* Sanity Check*/
21925 if(NULL == pOemDataReqNewConfig)
21926 {
21927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21928 "%s: pOemDataReqNewConfig received NULL", __func__);
21929 VOS_ASSERT(0) ;
21930 return VOS_STATUS_E_FAULT;
21931 }
21932
21933 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21934 sizeof(WDI_OemDataReqNewConfig));
21935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21936 "------> %s " ,__func__);
21937
21938 if(NULL == wdiOemDataReqNewConfig)
21939 {
21940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21941 "%s: VOS MEM Alloc Failure", __func__);
21942 VOS_ASSERT(0);
21943 vos_mem_free(pOemDataReqNewConfig);
21944 return VOS_STATUS_E_NOMEM;
21945 }
21946
21947 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21948 sizeof(WDI_OemDataReqNewConfig));
21949
21950 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21951
21952 if (WDI_STATUS_PENDING == wstatus)
21953 {
21954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21955 FL("pending status received "));
21956 }
21957 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21958 {
21959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21960 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021961 }
21962
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021963 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021964 vos_mem_free(pOemDataReqNewConfig);
21965
21966 return status;
21967}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021968
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021969void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21970 void *pUserData)
21971{
21972 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21973 (tSirAntennaDiversitySelectionInfo *)pUserData;
21974
21975 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21977 "<------ %s " ,__func__);
21978 if (NULL == pAntennaDivSelInfo)
21979 {
21980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21981 "%s: pWdaParams received NULL", __func__);
21982 VOS_ASSERT(0) ;
21983 return ;
21984 }
21985 if (NULL == resParams)
21986 {
21987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21988 "%s: resParams received NULL", __func__);
21989 VOS_ASSERT(0) ;
21990 return ;
21991 }
21992
21993 if (pAntennaDivSelInfo->callback)
21994 {
21995 if (WDI_STATUS_SUCCESS == status)
21996 {
21997 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21998 pAntennaDivSelInfo->data);
21999 }
22000 else
22001 {
22002 pAntennaDivSelInfo->callback(-1,
22003 pAntennaDivSelInfo->data);
22004 }
22005 }
22006
22007 vos_mem_free(pUserData);
22008 return;
22009}
22010
22011/*
22012 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
22013 * Request to WDI.
22014 */
22015v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
22016 tSirAntennaDiversitySelectionReq *pData)
22017{
22018 WDI_Status wdiStatus;
22019 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
22020
22021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22022 "------> %s " , __func__);
22023
22024 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
22025 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
22026 if (NULL == pAntennaDivSelInfo)
22027 {
22028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22029 "%s: VOS MEM Alloc Failure", __func__);
22030 VOS_ASSERT(0);
22031 vos_mem_free(pData);
22032 return;
22033 }
22034
22035 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
22036 pAntennaDivSelInfo->data = pData->data;
22037
22038 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
22039 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
22040
22041 if (WDI_STATUS_PENDING == wdiStatus)
22042 {
22043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22044 "Pending received for %s:%d ", __func__, __LINE__);
22045 }
22046 else if (WDI_STATUS_SUCCESS != wdiStatus)
22047 {
22048 if (pAntennaDivSelInfo->callback)
22049 {
22050 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
22051 }
22052 }
22053
22054 vos_mem_free(pData);
22055 return;
22056}
22057
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053022058/*
22059 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
22060 * Request to WDI.
22061 */
22062VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
22063 tModifyRoamParamsReqParams *params)
22064{
22065 WDI_Status status;
22066
22067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22068 FL("---> %s"), __func__);
22069
22070 if (NULL == params)
22071 {
22072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22073 FL("tModifyRoamParamsReqParams is received NULL"));
22074 return VOS_STATUS_E_NOMEM;
22075 }
22076
22077 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
22078 if (WDI_STATUS_PENDING == status)
22079 {
22080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22081 FL("pending status received "));
22082 }
22083 else if (WDI_STATUS_SUCCESS_SYNC != status)
22084 {
22085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22086 FL("Failure status %d"), status);
22087 }
22088 vos_mem_free(params);
22089 return CONVERT_WDI2VOS_STATUS(status) ;
22090}
22091
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022092#endif