blob: 89ae98791c1973577850867b8b94d1db76707541 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05302 * Copyright (c) 2012-2015 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
88#define IS_WDI_STATUS_FAILURE(status) \
89 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070090#define CONVERT_WDI2VOS_STATUS(x) \
91 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
92
93/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070094#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define WDA_GET_BA_TXFLAG(a, b, c) \
97 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
98
99#define WDA_SET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
101
102#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
105 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700106/* timer related Macros */
107#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
108 tx_timer_create(a, b, c, d, e, f, g)
109#define WDA_START_TIMER(a) tx_timer_activate(a)
110#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
111#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700112#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113
114#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
115 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800120#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700121
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700122#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700125#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
126 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
127 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
128
129#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
130#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800131#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
132
Jeff Johnson295189b2012-06-20 16:38:30 -0700133/* extern declarations */
134extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700135extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
136
Jeff Johnson295189b2012-06-20 16:38:30 -0700137/* forward declarations */
138void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
139 void *pBodyptr, tANI_U32 bodyVal) ;
140VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
141 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700142VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
143VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
144
145extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
146 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530147void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700148void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
149 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
150void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
151 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
152void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
153 void* pUserData ) ;
154static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
155static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
156void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800157void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700158void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700159#ifdef WLAN_FEATURE_VOWIFI_11R
160VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
161#endif /* WLAN_FEATURE_VOWIFI_11R */
162
Jeff Johnson295189b2012-06-20 16:38:30 -0700163void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
164void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
165VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef FEATURE_WLAN_SCAN_PNO
167static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
168static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
169static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
170#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700171#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700172VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700173void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
174void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
175void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
176#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700177#ifdef WLAN_FEATURE_PACKET_FILTERING
178static VOS_STATUS WDA_Process8023MulticastListReq (
179 tWDA_CbContext *pWDA,
180 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
181 );
182static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
183 tWDA_CbContext *pWDA,
184 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
185 );
186static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
187 tWDA_CbContext *pWDA,
188 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
189 );
190static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
191 tWDA_CbContext *pWDA,
192 tSirRcvFltPktClearParam *pRcvFltPktClearParam
193 );
194#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700195VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700196static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
197 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
199 v_U8_t *pDefaultKeyId,
200 v_U8_t *pNumKeys,
201 WDI_KeysType *pWdiKeys );
202
203#ifdef WLAN_FEATURE_GTK_OFFLOAD
204static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
205static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
206#endif // WLAN_FEATURE_GTK_OFFLOAD
207
c_hpothu92367912014-05-01 15:18:17 +0530208v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
209 tSirBcnMissRateReq *pData);
210
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530222
Dino Mycle41bdc942014-06-10 11:30:24 +0530223#ifdef WLAN_FEATURE_EXTSCAN
224VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
225 tSirEXTScanStartReqParams *wdaRequest);
226VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
227 tSirEXTScanStopReqParams *wdaRequest);
228VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
229 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
230VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
231 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
232VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
233 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
234VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
235 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
236VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
237 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
239 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
240#endif /* WLAN_FEATURE_EXTSCAN */
241
Sunil Duttbd736ed2014-05-26 21:19:41 +0530242#ifdef WLAN_FEATURE_LINK_LAYER_STATS
243VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
244 tSirLLStatsSetReq *wdaRequest);
245
246VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsGetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
250 tSirLLStatsClearReq *wdaRequest);
251#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530252
253v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
254 tSirFWStatsGetReq *wdaRequest);
255
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530256VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
257 u8 *wdaRequest);
258
Srinivas Dasari32a79262015-02-19 13:04:49 +0530259
260/*
261 * FUNCTION: WDA_ProcessNanRequest
262 * Process NAN request
263 */
264VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
265 tNanRequest *wdaRequest)
266{
267 WDI_Status status = WDI_STATUS_SUCCESS;
268 tWDA_ReqParams *pWdaParams;
269 WDI_NanRequestType *wdiRequest = NULL;
270 size_t wdiReqLength = sizeof(WDI_NanRequestType)
271 - sizeof(wdiRequest->request_data)
272 + wdaRequest->request_data_len;
273
274 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
275
276 if (NULL == wdiRequest)
277 {
278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
279 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
280 wdiReqLength);
281 vos_mem_free(wdaRequest);
282 return VOS_STATUS_E_NOMEM;
283 }
284
285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
286 "WDA: Process Nan Request length: %zu", wdiReqLength);
287
288 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
289 if (NULL == pWdaParams)
290 {
291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
292 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
293 VOS_ASSERT(0);
294 vos_mem_free(wdaRequest);
295 vos_mem_free(wdiRequest);
296 return VOS_STATUS_E_NOMEM;
297 }
298
299 wdiRequest->request_data_len = wdaRequest->request_data_len;
300
301 vos_mem_copy( wdiRequest->request_data,
302 wdaRequest->request_data,
303 wdaRequest->request_data_len);
304
305 vos_mem_free(wdaRequest);
306
307 pWdaParams->pWdaContext = pWDA;
308 pWdaParams->wdaMsgParam = NULL;
309 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
310
311 status = WDI_NanRequest(wdiRequest, pWdaParams);
312
313 if (IS_WDI_STATUS_FAILURE(status))
314 {
315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
316 "Failure to request. Free all the memory " );
317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
318 vos_mem_free(pWdaParams);
319 }
320
321 return CONVERT_WDI2VOS_STATUS(status) ;
322}
323
324
325
Jeff Johnson295189b2012-06-20 16:38:30 -0700326/*
327 * FUNCTION: WDA_open
328 * Allocate the WDA context
329 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530330VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 tMacOpenParameters *pMacParams )
332{
333 tWDA_CbContext *wdaContext;
334 VOS_STATUS status;
335 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530337 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
339 if(!VOS_IS_STATUS_SUCCESS(status))
340 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
342 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 return VOS_STATUS_E_NOMEM;
344 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700345 /*__asm int 3;*/
346 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
347
348 /* Initialize data structures */
349 wdaContext->pVosContext = pVosContext;
350 wdaContext->wdaState = WDA_INIT_STATE;
351 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
352
353 /* Initialize WDA-WDI synchronization event */
354 status = vos_event_init(&wdaContext->wdaWdiEvent);
355 if(!VOS_IS_STATUS_SUCCESS(status))
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800358 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800359 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 /* Init Frame transfer event */
362 status = vos_event_init(&wdaContext->txFrameEvent);
363 if(!VOS_IS_STATUS_SUCCESS(status))
364 {
365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800366 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800367 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700368 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700369 status = vos_event_init(&wdaContext->suspendDataTxEvent);
370 if(!VOS_IS_STATUS_SUCCESS(status))
371 {
372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800373 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800374 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700375 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700376 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
377 if(!VOS_IS_STATUS_SUCCESS(status))
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800380 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800381 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700384 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530385 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 &wdiDevCapability, pMacParams->driverType))
387 {
388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
389 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800390 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 }
392 else
393 {
394 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
395 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
396 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700397 /* update max STA in WDA used for BA */
398 wdaContext->wdaMaxSta = pMacParams->maxStation;
399 /* store the frameTransRequired flag in wdaContext, to send this to HAL
400 * in WDA_Start
401 */
402 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
403 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800405
406error:
407 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
408 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700409}
410
Jeff Johnson295189b2012-06-20 16:38:30 -0700411/*
412 * FUNCTION: WDA_preStart
413 * Trigger DAL-AL to start CFG download
414 */
415VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
416{
417 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
418 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 /*
420 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
421 */
422 wdaMsg.type = WNI_CFG_DNLD_REQ ;
423 wdaMsg.bodyptr = NULL;
424 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* post the message.. */
426 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
427 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
428 {
429 vosStatus = VOS_STATUS_E_BADMSG;
430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 return( vosStatus );
432}
Jeff Johnson295189b2012-06-20 16:38:30 -0700433/*
434 * FUNCTION: WDA_wdiStartCallback
435 * Once WDI_Start is finished, WDI start callback will be called by WDI
436 * to indicate completion of WDI_Start.
437 */
438void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
439 void *pVosContext)
440{
441 tWDA_CbContext *wdaContext;
442 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 if (NULL == pVosContext)
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
450 if (NULL == wdaContext)
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700453 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 return;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700459 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 }
461 else
462 {
463 wdaContext->wdaState = WDA_START_STATE;
464 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 /* extract and save version information from the Start Response */
466 wdaContext->wcnssWlanCompiledVersion.major =
467 wdiRspParams->wlanCompiledVersion.major;
468 wdaContext->wcnssWlanCompiledVersion.minor =
469 wdiRspParams->wlanCompiledVersion.minor;
470 wdaContext->wcnssWlanCompiledVersion.version =
471 wdiRspParams->wlanCompiledVersion.version;
472 wdaContext->wcnssWlanCompiledVersion.revision =
473 wdiRspParams->wlanCompiledVersion.revision;
474 wdaContext->wcnssWlanReportedVersion.major =
475 wdiRspParams->wlanReportedVersion.major;
476 wdaContext->wcnssWlanReportedVersion.minor =
477 wdiRspParams->wlanReportedVersion.minor;
478 wdaContext->wcnssWlanReportedVersion.version =
479 wdiRspParams->wlanReportedVersion.version;
480 wdaContext->wcnssWlanReportedVersion.revision =
481 wdiRspParams->wlanReportedVersion.revision;
482 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
483 wdiRspParams->wcnssSoftwareVersion,
484 sizeof(wdaContext->wcnssSoftwareVersionString));
485 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
486 wdiRspParams->wcnssHardwareVersion,
487 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700488 /* Notify WDA_start that WDI_Start has completed */
489 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700490 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 return;
496}
497
Jeff Johnson295189b2012-06-20 16:38:30 -0700498/*
499 * FUNCTION: WDA_start
500 * Prepare TLV configuration and call WDI_Start.
501 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700502VOS_STATUS WDA_start(v_PVOID_t pVosContext)
503{
504 tWDA_CbContext *wdaContext;
505 VOS_STATUS status;
506 WDI_Status wdiStatus;
507 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 if (NULL == pVosContext)
509 {
510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700511 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 return VOS_STATUS_E_FAILURE;
513 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
515 if (NULL == wdaContext)
516 {
517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700518 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 return VOS_STATUS_E_FAILURE;
520 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700521 /* Non-FTM mode, WDA status for START must be INIT
522 * FTM mode, WDA Status for START can be INIT or STOP */
523 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
524 (WDA_STOP_STATE != wdaContext->wdaState) )
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
527 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700528 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 return VOS_STATUS_E_FAILURE;
530 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 /* initialize the wdiStartParam. Note that we can create this on
532 the stack since we won't exit until WDI_Start() completes or
533 times out */
534 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 /* prepare the config TLV for the WDI */
537 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
538 if ( !VOS_IS_STATUS_SUCCESS(status) )
539 {
540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700541 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700542 return VOS_STATUS_E_FAILURE;
543 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700544 /* note from here onwards if an error occurs we must
545 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
547 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
548 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* initialize the WDA-WDI synchronization event */
550 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* call WDI start */
552 wdiStatus = WDI_Start(&wdiStartParam,
553 (WDI_StartRspCb)WDA_wdiStartCallback,
554 (v_VOID_t *)pVosContext);
555 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
556 {
557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700558 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 vos_mem_free(wdiStartParam.pConfigBuffer);
560 return VOS_STATUS_E_FAILURE;
561 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* wait for WDI start to invoke our callback */
563 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
564 WDA_WDI_START_TIMEOUT );
565 if ( !VOS_IS_STATUS_SUCCESS(status) )
566 {
567 if ( VOS_STATUS_E_TIMEOUT == status )
568 {
569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700570 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 }
572 else
573 {
574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
575 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700576 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 }
578 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530579 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 /* we no longer need the config TLV */
583 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 /* if we are not in the START state then WDI_Start() failed */
585 if (WDA_START_STATE != wdaContext->wdaState)
586 {
587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700588 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 return VOS_STATUS_E_FAILURE;
590 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* FTM mode does not need to monitor BA activity */
592 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
593 {
594 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800595 if(VOS_STATUS_SUCCESS == status)
596 {
597 wdaContext->wdaTimersCreated = VOS_TRUE;
598 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 }
Leo Chang9d76f622013-08-23 16:34:52 -0700600 else
601 {
602 vos_event_init(&wdaContext->ftmStopDoneEvent);
603 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700604 return status;
605}
606
Jeff Johnson295189b2012-06-20 16:38:30 -0700607/*
608 * FUNCTION: WDA_prepareConfigTLV
609 * Function to prepare CFG for DAL(WDA)
610 */
611VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
612 WDI_StartReqParamsType *wdiStartParams )
613{
614 /* get pMac to acess CFG data base */
615 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
616 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
617 tHalCfg *tlvStruct = NULL ;
618 tANI_U8 *tlvStructStart = NULL ;
619 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
620 v_PVOID_t *configParam;
621 tANI_U32 configParamSize;
622 tANI_U32 *configDataValue;
623 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700624 tANI_U8 i;
625
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 if ((NULL == pMac)||(NULL == wdaContext))
627 {
628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700629 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 VOS_ASSERT(0);
631 return VOS_STATUS_E_FAILURE;
632 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
634 WNI_CFG_STA_ID_LEN +
635 WNI_CFG_EDCA_WME_ACBK_LEN +
636 WNI_CFG_EDCA_WME_ACBE_LEN +
637 WNI_CFG_EDCA_WME_ACVI_LEN +
638 WNI_CFG_EDCA_WME_ACVO_LEN +
639 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* malloc memory for all configs in one shot */
641 configParam = vos_mem_malloc(configParamSize);
642
643 if(NULL == configParam )
644 {
645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700646 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 VOS_ASSERT(0) ;
648 return VOS_STATUS_E_NOMEM;
649 }
650 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 tlvStruct = (tHalCfg *)configParam;
653 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 /* TODO: Remove Later */
655 /* QWLAN_HAL_CFG_STA_ID */
656 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
657 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
658 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
659 eSIR_SUCCESS)
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
662 "Failed to get value for WNI_CFG_STA_ID");
663 goto handle_failure;
664 }
665 tlvStruct->length = strLength ;
666 /* calculate the pad bytes to have the CFG in aligned format */
667 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
668 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
672 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
685 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
689 eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
698 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
702 != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length)) ;
710
711 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
712 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
713 tlvStruct->length = sizeof(tANI_U32);
714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
715 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
716 configDataValue ) != eSIR_SUCCESS)
717 {
718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
719 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
720 goto handle_failure;
721 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
723 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 /* QWLAN_HAL_CFG_CAL_PERIOD */
725 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
726 tlvStruct->length = sizeof(tANI_U32);
727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
728 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
729 != eSIR_SUCCESS)
730 {
731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
732 "Failed to get value for WNI_CFG_CAL_PERIOD");
733 goto handle_failure;
734 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
736 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 /* QWLAN_HAL_CFG_CAL_CONTROL */
738 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
739 tlvStruct->length = sizeof(tANI_U32);
740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
741 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
742 != eSIR_SUCCESS)
743 {
744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
745 "Failed to get value for WNI_CFG_CAL_CONTROL");
746 goto handle_failure;
747 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
749 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 /* QWLAN_HAL_CFG_PROXIMITY */
751 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
752 tlvStruct->length = sizeof(tANI_U32);
753 configDataValue = (tANI_U32 *)(tlvStruct + 1);
754 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
755 != eSIR_SUCCESS)
756 {
757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
758 "Failed to get value for WNI_CFG_PROXIMITY");
759 goto handle_failure;
760 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
762 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
764 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
765 tlvStruct->length = sizeof(tANI_U32);
766 configDataValue = (tANI_U32 *)(tlvStruct + 1);
767 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
768 != eSIR_SUCCESS)
769 {
770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
771 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
772 goto handle_failure;
773 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
775 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
777 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
778 tlvStruct->length = sizeof(tANI_U32);
779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
780 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
781 eSIR_SUCCESS)
782 {
783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
784 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
785 goto handle_failure;
786 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
788 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
790 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
794 configDataValue ) != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700802 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
803 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
807 eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
816 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
820 eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
829 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
833 eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
842 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
850 goto handle_failure;
851 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
855 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length));
867
868 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
869 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
870 tlvStruct->length = sizeof(tANI_U32);
871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
872 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
873 configDataValue ) != eSIR_SUCCESS)
874 {
875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
876 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
877 goto handle_failure;
878 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
880 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
882 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
883 tlvStruct->length = sizeof(tANI_U32);
884 configDataValue = (tANI_U32 *)(tlvStruct + 1);
885 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
886 configDataValue ) != eSIR_SUCCESS)
887 {
888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
889 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
890 goto handle_failure;
891 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700892 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
893 + sizeof(tHalCfg) + tlvStruct->length));
894
895 /* QWLAN_HAL_CFG_FIXED_RATE */
896 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
900 != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_FIXED_RATE");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length));
908
909 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
910 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
914 != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length));
922
923 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
924 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
937 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
945 goto handle_failure;
946 }
947 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
950 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
963 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
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_FIXED_RATE_MULTICAST_5GHZ */
976 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
990 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
994 configDataValue ) != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1003 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1016 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1020 eSIR_SUCCESS)
1021 {
1022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1023 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1024 goto handle_failure;
1025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1027 + sizeof(tHalCfg) + tlvStruct->length);
1028
1029 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1030 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1031 tlvStruct->length = sizeof(tANI_U32);
1032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1033 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1034 configDataValue ) != eSIR_SUCCESS)
1035 {
1036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1037 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1038 goto handle_failure;
1039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1043 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1044 tlvStruct->length = sizeof(tANI_U32);
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1047 configDataValue ) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1051 goto handle_failure;
1052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1054 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001055 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1056 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1057 tlvStruct->length = sizeof(tANI_U32);
1058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1059 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1060 configDataValue ) != eSIR_SUCCESS)
1061 {
1062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1063 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1064 goto handle_failure;
1065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1069 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1070 tlvStruct->length = sizeof(tANI_U32);
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1073 configDataValue ) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1077 goto handle_failure;
1078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1080 + sizeof(tHalCfg) + tlvStruct->length);
1081
1082 /* QWLAN_HAL_CFG_STATS_PERIOD */
1083 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1084 tlvStruct->length = sizeof(tANI_U32);
1085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1086 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1087 eSIR_SUCCESS)
1088 {
1089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1090 "Failed to get value for WNI_CFG_STATS_PERIOD");
1091 goto handle_failure;
1092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1094 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1096 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1097 tlvStruct->length = sizeof(tANI_U32);
1098 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1099 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1100 eSIR_SUCCESS)
1101 {
1102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1103 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1104 goto handle_failure;
1105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1107 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001108 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1109 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1110 tlvStruct->length = sizeof(tANI_U32);
1111 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1112 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1113 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1117 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1118 tlvStruct->length = sizeof(tANI_U32);
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1121 != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1125 goto handle_failure;
1126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1128 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1130 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1131 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1133 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1134 &strLength) != eSIR_SUCCESS)
1135 {
1136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1137 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1138 goto handle_failure;
1139 }
1140 tlvStruct->length = strLength;
1141 /* calculate the pad bytes to have the CFG in aligned format */
1142 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1143 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1147 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1148 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1151 &strLength) != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1155 goto handle_failure;
1156 }
1157 tlvStruct->length = strLength;
1158 /* calculate the pad bytes to have the CFG in aligned format */
1159 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1160 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1164 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1165 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1168 &strLength) != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1172 goto handle_failure;
1173 }
1174 tlvStruct->length = strLength;
1175 /* calculate the pad bytes to have the CFG in aligned format */
1176 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1177 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1179 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1181 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1182 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1183 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1184 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1185 &strLength) != eSIR_SUCCESS)
1186 {
1187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1188 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1189 goto handle_failure;
1190 }
1191 tlvStruct->length = strLength;
1192 /* calculate the pad bytes to have the CFG in aligned format */
1193 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1194 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1198 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1206 goto handle_failure;
1207 }
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_MAX_BA_BUFFERS */
1211 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
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_DYNAMIC_PS_POLL_VALUE */
1224 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1237 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1238 tlvStruct->length = sizeof(tANI_U32);
1239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1240 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1241 != eSIR_SUCCESS)
1242 {
1243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1244 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1245 goto handle_failure;
1246 }
1247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1248 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1250 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1251 tlvStruct->length = sizeof(tANI_U32);
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1254 != eSIR_SUCCESS)
1255 {
1256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1257 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1258 goto handle_failure;
1259 }
1260 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1261 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001262 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1263 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1264 tlvStruct->length = sizeof(tANI_U32);
1265 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1266 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1267 != eSIR_SUCCESS)
1268 {
1269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1270 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1271 goto handle_failure;
1272 }
1273 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1274 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001275 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1276 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1280 != eSIR_SUCCESS)
1281 {
1282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1283 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1284 goto handle_failure;
1285 }
1286 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1287 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001288 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1289 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1293 != eSIR_SUCCESS)
1294 {
1295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1296 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1297 goto handle_failure;
1298 }
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001301 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1302 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1306 != eSIR_SUCCESS)
1307 {
1308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1309 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1310 goto handle_failure;
1311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001314 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1315 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1319 != eSIR_SUCCESS)
1320 {
1321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1322 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1323 goto handle_failure;
1324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001327 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1328 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1329 tlvStruct->length = sizeof(tANI_U32);
1330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1331 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1332 != eSIR_SUCCESS)
1333 {
1334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1335 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1336 goto handle_failure;
1337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001340 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1341 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1342 * into FW, so the parameters are added here.
1343 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001344 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001351 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1352 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1353 tlvStruct->length = sizeof(tANI_U32);
1354 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1355 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1356 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1357 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1359 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001365 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1366 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1374 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1382 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1390 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396
1397 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1398 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1402 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1403 + sizeof(tHalCfg) + tlvStruct->length) ;
1404
1405 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1406 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
1413 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1414 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
1421 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1422 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428
1429 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1430 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
1437 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1438 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
1444
1445 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
1452
1453 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1454 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1455 tlvStruct->length = sizeof(tANI_U32);
1456 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1457 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1459 + sizeof(tHalCfg) + tlvStruct->length) ;
1460
1461 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1462 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1463 tlvStruct->length = sizeof(tANI_U32);
1464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1465 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
Wilson Tsaof8b37942013-09-06 10:49:00 -07001469 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1470 {
1471 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1472 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1473 tlvStruct->length = sizeof(tANI_U32);
1474 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1475 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1480 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1484 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1485 + sizeof(tHalCfg) + tlvStruct->length) ;
1486
1487 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1488 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1489 tlvStruct->length = sizeof(tANI_U32);
1490 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1491 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1492 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1493 + sizeof(tHalCfg) + tlvStruct->length) ;
1494
1495 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1496 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1500 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1501 + sizeof(tHalCfg) + tlvStruct->length) ;
1502 }
1503
1504 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1505 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1506 tlvStruct->length = sizeof(tANI_U32);
1507 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1508 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1509 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1510 + sizeof(tHalCfg) + tlvStruct->length) ;
1511
1512 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1513 {
1514 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1515 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1519 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1520 + sizeof(tHalCfg) + tlvStruct->length) ;
1521 }
1522
1523 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1524 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
Jeff Johnson32d95a32012-09-10 13:15:23 -07001531 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001532 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1536 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1537 wcnssCompiledApiVersion.minor,
1538 wcnssCompiledApiVersion.version,
1539 wcnssCompiledApiVersion.revision);
1540 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1541 + sizeof(tHalCfg) + tlvStruct->length) ;
1542
Jeff Johnsond13512a2012-07-17 11:42:19 -07001543 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1544 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1545 tlvStruct->length = sizeof(tANI_U32);
1546 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1547 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1548 configDataValue ) != eSIR_SUCCESS)
1549 {
1550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1551 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1552 goto handle_failure;
1553 }
1554
1555 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1556 + sizeof(tHalCfg) + tlvStruct->length) ;
1557 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1558 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1562 configDataValue ) != eSIR_SUCCESS)
1563 {
1564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1565 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1566 goto handle_failure;
1567 }
1568
1569 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1570 + sizeof(tHalCfg) + tlvStruct->length) ;
1571
1572 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1573 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1574 tlvStruct->length = sizeof(tANI_U32);
1575 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1576 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1577 != eSIR_SUCCESS)
1578 {
1579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1580 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1581 goto handle_failure;
1582 }
1583
1584 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1585 + sizeof(tHalCfg) + tlvStruct->length) ;
1586
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001587 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1588 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1589 tlvStruct->length = sizeof(tANI_U32);
1590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1591 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1592 != eSIR_SUCCESS)
1593 {
1594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1595 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1596 goto handle_failure;
1597 }
1598
1599 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1600 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001601#ifdef WLAN_SOFTAP_VSTA_FEATURE
1602 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1603 tlvStruct->length = sizeof(tANI_U32);
1604 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1605 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1606 != eSIR_SUCCESS)
1607 {
1608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1609 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1610 goto handle_failure;
1611 }
1612
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615#endif
1616
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001617 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1618 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621
1622 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1623 != eSIR_SUCCESS)
1624 {
1625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1626 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1627 goto handle_failure;
1628 }
1629
1630 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1631 + sizeof(tHalCfg) + tlvStruct->length) ;
1632
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301633/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1634 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1635 tlvStruct->length = sizeof(tANI_U32);
1636 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1637 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1638 configDataValue ) != eSIR_SUCCESS)
1639 {
1640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1641 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1642 goto handle_failure;
1643 }
1644
1645 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1646 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301647#ifdef FEATURE_WLAN_TDLS
1648 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1649 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1650 tlvStruct->length = sizeof(tANI_U32);
1651 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1652 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1653 configDataValue ) != eSIR_SUCCESS)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1657 goto handle_failure;
1658 }
1659 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1660 + sizeof(tHalCfg) + tlvStruct->length) ;
1661
1662 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1663 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1664 tlvStruct->length = sizeof(tANI_U32);
1665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1666 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1667 configDataValue ) != eSIR_SUCCESS)
1668 {
1669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1670 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1671 goto handle_failure;
1672 }
1673 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1674 + sizeof(tHalCfg) + tlvStruct->length) ;
1675 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1676 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1677 tlvStruct->length = sizeof(tANI_U32);
1678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1679 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1680 configDataValue ) != eSIR_SUCCESS)
1681 {
1682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1683 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1684 goto handle_failure;
1685 }
1686 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1687 + sizeof(tHalCfg) + tlvStruct->length) ;
1688 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1689 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1690 tlvStruct->length = sizeof(tANI_U32);
1691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1692 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1693 configDataValue ) != eSIR_SUCCESS)
1694 {
1695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1696 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1697 goto handle_failure;
1698 }
1699 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1700 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301701 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1702 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1703 tlvStruct->length = sizeof(tANI_U32);
1704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1705 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1706 configDataValue ) != eSIR_SUCCESS)
1707 {
1708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1709 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1710 goto handle_failure;
1711 }
1712 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1713 + sizeof(tHalCfg) + tlvStruct->length) ;
1714
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301715#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301716
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001717 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1718 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1719 tlvStruct->length = sizeof(tANI_U32);
1720 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1721 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1722 configDataValue ) != eSIR_SUCCESS)
1723 {
1724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1725 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1726 goto handle_failure;
1727 }
1728
1729 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1730 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001731
1732 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1733 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1734 tlvStruct->length = sizeof(tANI_U32);
1735 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1736 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1737 != eSIR_SUCCESS)
1738 {
1739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1740 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1741 goto handle_failure;
1742 }
1743 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1744 + sizeof(tHalCfg) + tlvStruct->length));
1745
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301746 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1747 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1748 tlvStruct->length = sizeof(tANI_U32);
1749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1750 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1751 configDataValue ) != eSIR_SUCCESS)
1752 {
1753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1754 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1755 goto handle_failure;
1756 }
1757
1758 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1759 + sizeof(tHalCfg) + tlvStruct->length) ;
1760
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301761 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1762 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1763 tlvStruct->length = sizeof(tANI_U32);
1764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1765 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1766 configDataValue ) != eSIR_SUCCESS)
1767 {
1768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1769 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1770 goto handle_failure;
1771 }
1772 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1773 + sizeof(tHalCfg) + tlvStruct->length) ;
1774
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301775 /* QWLAN_HAL_CFG_ATH_DISABLE */
1776 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1777 tlvStruct->length = sizeof(tANI_U32);
1778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1779 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1780 configDataValue ) != eSIR_SUCCESS)
1781 {
1782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1783 "Failed to get value for WNI_CFG_ATH_DISABLE");
1784 goto handle_failure;
1785 }
1786 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1787 + sizeof(tHalCfg) + tlvStruct->length) ;
1788
c_hpothu6d7dc922013-12-02 12:36:41 +05301789 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1790 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1791 tlvStruct->length = sizeof(tANI_U32);
1792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1793 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1794 configDataValue ) != eSIR_SUCCESS)
1795 {
1796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1797 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1798 goto handle_failure;
1799 }
1800 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1801 + sizeof(tHalCfg) + tlvStruct->length) ;
1802
1803 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1804 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1805 tlvStruct->length = sizeof(tANI_U32);
1806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1807 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1808 configDataValue ) != eSIR_SUCCESS)
1809 {
1810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1811 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1812 goto handle_failure;
1813 }
1814 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1815 + sizeof(tHalCfg) + tlvStruct->length) ;
1816
1817 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1818 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1819 tlvStruct->length = sizeof(tANI_U32);
1820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1821 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1822 configDataValue ) != eSIR_SUCCESS)
1823 {
1824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1825 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1826 goto handle_failure;
1827 }
1828 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1829 + sizeof(tHalCfg) + tlvStruct->length) ;
1830
1831 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1832 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1833 tlvStruct->length = sizeof(tANI_U32);
1834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1835 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1836 configDataValue ) != eSIR_SUCCESS)
1837 {
1838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1839 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1840 goto handle_failure;
1841 }
1842 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1843 + sizeof(tHalCfg) + tlvStruct->length) ;
1844
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301845 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1846 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1847 tlvStruct->length = sizeof(tANI_U32);
1848 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1849 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1850 configDataValue ) != eSIR_SUCCESS)
1851 {
1852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1853 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1854 goto handle_failure;
1855 }
1856 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1857 + sizeof(tHalCfg) + tlvStruct->length) ;
1858
1859 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1860 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1861 tlvStruct->length = sizeof(tANI_U32);
1862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1863 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1864 configDataValue ) != eSIR_SUCCESS)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1868 goto handle_failure;
1869 }
1870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1871 + sizeof(tHalCfg) + tlvStruct->length) ;
1872
1873 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1874 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1875 tlvStruct->length = sizeof(tANI_U32);
1876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1877 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1878 configDataValue ) != eSIR_SUCCESS)
1879 {
1880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1881 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1882 goto handle_failure;
1883 }
1884 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1885 + sizeof(tHalCfg) + tlvStruct->length) ;
1886
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001887 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1888 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1889 tlvStruct->length = sizeof(tANI_U32);
1890 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1891 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1892 configDataValue ) != eSIR_SUCCESS)
1893 {
1894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1895 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1896 goto handle_failure;
1897 }
1898 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1899 + sizeof(tHalCfg) + tlvStruct->length) ;
1900
c_hpothu5bd1ae42014-03-07 20:28:22 +05301901 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1902 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1903 tlvStruct->length = sizeof(tANI_U32);
1904 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1905
1906 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1907 configDataValue ) != eSIR_SUCCESS)
1908 {
1909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1910 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1911 goto handle_failure;
1912 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301913 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1914 + sizeof(tHalCfg) + tlvStruct->length) ;
1915
1916 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1917 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1918 tlvStruct->length = sizeof(tANI_U32);
1919 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1920
1921 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1922 configDataValue ) != eSIR_SUCCESS)
1923 {
1924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1925 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1926 goto handle_failure;
1927 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1929 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301930
c_hpothu2d0f1c42014-04-01 18:38:51 +05301931 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1932 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1933 tlvStruct->length = sizeof(tANI_U32);
1934 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1935
1936 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1937 configDataValue ) != eSIR_SUCCESS)
1938 {
1939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1940 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1941 goto handle_failure;
1942 }
1943 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1944 + sizeof(tHalCfg) + tlvStruct->length) ;
1945
1946 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1947 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1948 tlvStruct->length = sizeof(tANI_U32);
1949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1950
1951 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1952 configDataValue ) != eSIR_SUCCESS)
1953 {
1954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1955 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1956 goto handle_failure;
1957 }
1958 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1959 + sizeof(tHalCfg) + tlvStruct->length) ;
1960
1961 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1962 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1963 tlvStruct->length = sizeof(tANI_U32);
1964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1965
1966 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1967 configDataValue ) != eSIR_SUCCESS)
1968 {
1969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1970 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1971 goto handle_failure;
1972 }
1973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1974 + sizeof(tHalCfg) + tlvStruct->length) ;
1975
1976 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1977 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1978 tlvStruct->length = sizeof(tANI_U32);
1979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1980
1981 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1982 configDataValue ) != eSIR_SUCCESS)
1983 {
1984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1985 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1986 goto handle_failure;
1987 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301988 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1989 + sizeof(tHalCfg) + tlvStruct->length) ;
1990
Mihir Shetec34258c2014-07-30 17:50:27 +05301991 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1992 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1993 tlvStruct->length = sizeof(tANI_U32);
1994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1995
1996 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1997 configDataValue ) != eSIR_SUCCESS)
1998 {
1999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2000 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2001 goto handle_failure;
2002 }
2003 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2004 + sizeof(tHalCfg) + tlvStruct->length) ;
2005
2006 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2007 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2008 tlvStruct->length = sizeof(tANI_U32);
2009 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2010
2011 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2012 configDataValue ) != eSIR_SUCCESS)
2013 {
2014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2015 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2016 goto handle_failure;
2017 }
2018 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2019 + sizeof(tHalCfg) + tlvStruct->length) ;
2020
2021 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2022 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2023 tlvStruct->length = sizeof(tANI_U32);
2024 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2025
2026 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2027 configDataValue ) != eSIR_SUCCESS)
2028 {
2029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2030 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2031 goto handle_failure;
2032 }
2033 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2034 + sizeof(tHalCfg) + tlvStruct->length) ;
2035
2036 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2037 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2038 tlvStruct->length = sizeof(tANI_U32);
2039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2040
2041 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2042 configDataValue ) != eSIR_SUCCESS)
2043 {
2044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2045 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2046 goto handle_failure;
2047 }
2048 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2049 + sizeof(tHalCfg) + tlvStruct->length) ;
2050
2051 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2052 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2053 tlvStruct->length = sizeof(tANI_U32);
2054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2055
2056 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2057 configDataValue ) != eSIR_SUCCESS)
2058 {
2059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2060 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2061 goto handle_failure;
2062 }
2063 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2064 + sizeof(tHalCfg) + tlvStruct->length) ;
2065
2066 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2067 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2068 tlvStruct->length = sizeof(tANI_U32);
2069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2070
2071 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2072 configDataValue ) != eSIR_SUCCESS)
2073 {
2074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2075 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2076 goto handle_failure;
2077 }
2078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2079 + sizeof(tHalCfg) + tlvStruct->length) ;
2080
2081 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2082 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2083 tlvStruct->length = sizeof(tANI_U32);
2084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2085
2086 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2087 configDataValue ) != eSIR_SUCCESS)
2088 {
2089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2090 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2091 goto handle_failure;
2092 }
2093 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2094 + sizeof(tHalCfg) + tlvStruct->length) ;
2095
2096 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2097 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2098 tlvStruct->length = sizeof(tANI_U32);
2099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2100
2101 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2102 configDataValue ) != eSIR_SUCCESS)
2103 {
2104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2105 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2106 goto handle_failure;
2107 }
2108 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2109 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302110
2111 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2112 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2113 tlvStruct->length = sizeof(tANI_U32);
2114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2115
2116 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2117 configDataValue ) != eSIR_SUCCESS)
2118 {
2119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2120 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2121 goto handle_failure;
2122 }
2123 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2124 + sizeof(tHalCfg) + tlvStruct->length) ;
2125
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302126 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2127 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2128 tlvStruct->length = sizeof(tANI_U32);
2129 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2130
2131 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2132 configDataValue ) != eSIR_SUCCESS)
2133 {
2134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2135 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2136 goto handle_failure;
2137 }
2138 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2139 + sizeof(tHalCfg) + tlvStruct->length) ;
2140
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302141 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2142 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2143 tlvStruct->length = sizeof(tANI_U32);
2144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2145
2146 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2147 configDataValue ) != eSIR_SUCCESS)
2148 {
2149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2150 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2151 goto handle_failure;
2152 }
2153 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2154 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302155
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302156 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2157 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2158 tlvStruct->length = sizeof(tANI_U32);
2159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2160
2161 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2162 configDataValue ) != eSIR_SUCCESS)
2163 {
2164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2165 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2166 goto handle_failure;
2167 }
2168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2169 + sizeof(tHalCfg) + tlvStruct->length) ;
2170
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002172#ifdef WLAN_DEBUG
2173 {
2174 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2176 "****** Dumping CFG TLV ***** ");
2177 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2178 {
2179 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2180 "%02x %02x %02x %02x %02x %02x %02x %02x",
2181 tlvStructStart[i],
2182 tlvStructStart[i+1],
2183 tlvStructStart[i+2],
2184 tlvStructStart[i+3],
2185 tlvStructStart[i+4],
2186 tlvStructStart[i+5],
2187 tlvStructStart[i+6],
2188 tlvStructStart[i+7]);
2189 }
2190 /* Dump the bytes in the last line*/
2191 for (; i < wdiStartParams->usConfigBufferLen; i++)
2192 {
2193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2194 "%02x ",tlvStructStart[i]);
2195 }
2196 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2197 "**************************** ");
2198 }
2199#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002201handle_failure:
2202 vos_mem_free(configParam);
2203 return VOS_STATUS_E_FAILURE;
2204}
Jeff Johnson295189b2012-06-20 16:38:30 -07002205/*
2206 * FUNCTION: WDA_wdiCompleteCB
2207 * call the voss call back function
2208 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002209void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002210{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2212 tWDA_CbContext *wdaContext;
2213
2214 if(NULL == pWdaParams)
2215 {
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002217 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002218 VOS_ASSERT(0) ;
2219 return ;
2220 }
2221
2222 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2223
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 if (NULL == wdaContext)
2225 {
2226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002227 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 return ;
2229 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002230
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002232 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002236 vos_mem_free(pWdaParams);
2237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if(WDI_STATUS_SUCCESS != status)
2239 {
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2241 "WDI stop callback returned failure" );
2242 VOS_ASSERT(0) ;
2243 }
2244 else
2245 {
2246 wdaContext->wdaState = WDA_STOP_STATE;
2247 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002248
Leo Chang9d76f622013-08-23 16:34:52 -07002249 /* FTM Driver stop procedure should be synced.
2250 * Stop and Close will happen on same context */
2251 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2252 {
2253 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2254 {
2255 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2256 "%s: FTM Stop Event Set Fail", __func__);
2257 VOS_ASSERT(0);
2258 }
2259 }
2260
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002262 vos_WDAComplete_cback(wdaContext->pVosContext);
2263
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 return ;
2265}
Jeff Johnson295189b2012-06-20 16:38:30 -07002266/*
2267 * FUNCTION: WDA_stop
2268 * call WDI_stop
2269 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002270VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2271{
2272 WDI_Status wdiStatus;
2273 VOS_STATUS status = VOS_STATUS_SUCCESS;
2274 WDI_StopReqParamsType *wdiStopReq;
2275 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002276 tWDA_ReqParams *pWdaParams ;
2277
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 if (NULL == pWDA)
2279 {
2280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002281 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 VOS_ASSERT(0);
2283 return VOS_STATUS_E_FAILURE;
2284 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002285 if (pWDA->wdiFailed == true)
2286 {
2287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002289 return VOS_STATUS_E_ALREADY;
2290 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002291
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 /* FTM mode stay START_STATE */
2293 if( (WDA_READY_STATE != pWDA->wdaState) &&
2294 (WDA_INIT_STATE != pWDA->wdaState) &&
2295 (WDA_START_STATE != pWDA->wdaState) )
2296 {
2297 VOS_ASSERT(0);
2298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 wdiStopReq = (WDI_StopReqParamsType *)
2300 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2301 if(NULL == wdiStopReq)
2302 {
2303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 VOS_ASSERT(0);
2306 return VOS_STATUS_E_NOMEM;
2307 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002308
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 wdiStopReq->wdiStopReason = reason;
2310 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302311
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2313 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 VOS_ASSERT(0);
2318 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002319 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002321
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002322 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2323 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002324 {
2325 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002326 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002328
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002329 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2330 pWdaParams->wdaMsgParam = NULL;
2331 pWdaParams->pWdaContext = pWDA;
2332
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 /* call WDI stop */
2334 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002335 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2336
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2340 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2342 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 status = VOS_STATUS_E_FAILURE;
2344 }
Leo Chang9d76f622013-08-23 16:34:52 -07002345
2346 /* FTM Driver stop procedure should be synced.
2347 * Stop and Close will happen on same context */
2348 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2349 {
2350 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2351 WDI_RESPONSE_TIMEOUT);
2352 if (status != VOS_STATUS_SUCCESS)
2353 {
2354 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2355 "%s: FTM Stop Timepoout", __func__);
2356 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002357 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302358 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 return status;
2361}
Jeff Johnson295189b2012-06-20 16:38:30 -07002362/*
2363 * FUNCTION: WDA_close
2364 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302365 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002366VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2367{
Jeff Johnson43971f52012-07-17 12:26:56 -07002368 VOS_STATUS status = VOS_STATUS_SUCCESS;
2369 WDI_Status wstatus;
2370 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 if (NULL == wdaContext)
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002375 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 return VOS_STATUS_E_FAILURE;
2377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2379 (WDA_STOP_STATE != wdaContext->wdaState))
2380 {
2381 VOS_ASSERT(0);
2382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002384 wstatus = WDI_Close();
2385 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 {
2387 status = VOS_STATUS_E_FAILURE;
2388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002391 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2392 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 {
2394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002395 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 status = VOS_STATUS_E_FAILURE;
2397 }
2398
Jeff Johnson43971f52012-07-17 12:26:56 -07002399 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002400 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 {
2402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002403 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 status = VOS_STATUS_E_FAILURE;
2405 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002406 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002407 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002410 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 status = VOS_STATUS_E_FAILURE;
2412 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002413 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002414 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 {
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002417 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 status = VOS_STATUS_E_FAILURE;
2419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002421 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002422 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2425 "error in WDA close " );
2426 status = VOS_STATUS_E_FAILURE;
2427 }
2428 return status;
2429}
Jeff Johnson295189b2012-06-20 16:38:30 -07002430/*
2431 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2432 * returns 1 if the compiled version is greater than or equal to the input version
2433 */
2434
2435uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2436{
2437 VOS_STATUS status = VOS_STATUS_SUCCESS;
2438 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2439 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2442 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2443 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2444 (compiledVersion.revision >= revision)))
2445 return 1;
2446 else
2447 return 0;
2448}
Jeff Johnson295189b2012-06-20 16:38:30 -07002449/*
2450 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2451 * returns 1 if the compiled version is greater than or equal to the input version
2452 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002453uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2454{
2455 VOS_STATUS status = VOS_STATUS_SUCCESS;
2456 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2457 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2460 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2461 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2462 (reportedVersion.revision >= revision)))
2463 return 1;
2464 else
2465 return 0;
2466}
Jeff Johnson295189b2012-06-20 16:38:30 -07002467/*
2468 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2469 * Returns the version of the WCNSS WLAN API with which the HOST
2470 * device driver was compiled
2471 */
2472VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2473 tSirVersionType *pVersion)
2474{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302475 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 if ((NULL == pvosGCtx) || (NULL == pVersion))
2477 {
2478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002479 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 VOS_ASSERT(0);
2481 return VOS_STATUS_E_FAILURE;
2482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2484 if (NULL == pWDA )
2485 {
2486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 VOS_ASSERT(0);
2489 return VOS_STATUS_E_FAILURE;
2490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 *pVersion = pWDA->wcnssWlanCompiledVersion;
2492 return VOS_STATUS_SUCCESS;
2493}
Jeff Johnson295189b2012-06-20 16:38:30 -07002494/*
2495 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2496 * Returns the version of the WCNSS WLAN API with which the WCNSS
2497 * device driver was compiled
2498 */
2499VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2500 tSirVersionType *pVersion)
2501{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302502 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 if ((NULL == pvosGCtx) || (NULL == pVersion))
2504 {
2505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 VOS_ASSERT(0);
2508 return VOS_STATUS_E_FAILURE;
2509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2511 if (NULL == pWDA )
2512 {
2513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002514 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 VOS_ASSERT(0);
2516 return VOS_STATUS_E_FAILURE;
2517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 *pVersion = pWDA->wcnssWlanReportedVersion;
2519 return VOS_STATUS_SUCCESS;
2520}
Jeff Johnson295189b2012-06-20 16:38:30 -07002521/*
2522 * FUNCTION: WDA_GetWcnssSoftwareVersion
2523 * Returns the WCNSS Software version string
2524 */
2525VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2526 tANI_U8 *pVersion,
2527 tANI_U32 versionBufferSize)
2528{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302529 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002531 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 if ((NULL == pvosGCtx) || (NULL == pVersion))
2533 {
2534 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002535 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 VOS_ASSERT(0);
2537 return VOS_STATUS_E_FAILURE;
2538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2540 if (NULL == pWDA )
2541 {
2542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002543 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 VOS_ASSERT(0);
2545 return VOS_STATUS_E_FAILURE;
2546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2548 return VOS_STATUS_SUCCESS;
2549}
Jeff Johnson295189b2012-06-20 16:38:30 -07002550/*
2551 * FUNCTION: WDA_GetWcnssHardwareVersion
2552 * Returns the WCNSS Hardware version string
2553 */
2554VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2555 tANI_U8 *pVersion,
2556 tANI_U32 versionBufferSize)
2557{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302558 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002560 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 if ((NULL == pvosGCtx) || (NULL == pVersion))
2562 {
2563 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002564 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 VOS_ASSERT(0);
2566 return VOS_STATUS_E_FAILURE;
2567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2569 if (NULL == pWDA )
2570 {
2571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002572 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 VOS_ASSERT(0);
2574 return VOS_STATUS_E_FAILURE;
2575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2577 return VOS_STATUS_SUCCESS;
2578}
Jeff Johnson295189b2012-06-20 16:38:30 -07002579/*
2580 * FUNCTION: WDA_WniCfgDnld
2581 * Trigger CFG Download
2582 */
2583VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2584{
2585 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302586 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002587
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 if (NULL == pMac )
2589 {
2590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 VOS_ASSERT(0);
2593 return VOS_STATUS_E_FAILURE;
2594 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302595 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return vosStatus;
2597}
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/* -----------------------------------------------------------------
2599 * WDI interface
2600 * -----------------------------------------------------------------
2601 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002602/*
2603 * FUNCTION: WDA_suspendDataTxCallback
2604 * call back function called from TL after suspend Transmission
2605 */
2606VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2607 v_U8_t* ucSTAId,
2608 VOS_STATUS vosStatus)
2609{
2610 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if (NULL == pWDA )
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0);
2618 return VOS_STATUS_E_FAILURE;
2619 }
2620 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2621 {
2622 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2623 }
2624 else
2625 {
2626 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 /* Trigger the event to bring the WDA TL suspend function to come
2629 * out of wait*/
2630 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2631 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2632 {
2633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002634 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 /* If TL suspended had timedout before this callback was called, resume back
2637 * TL.*/
2638 if (pWDA->txSuspendTimedOut)
2639 {
2640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002641 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 WDA_ResumeDataTx(pWDA);
2643 pWDA->txSuspendTimedOut = FALSE;
2644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 return VOS_STATUS_SUCCESS;
2646}
Jeff Johnson295189b2012-06-20 16:38:30 -07002647/*
2648 * FUNCTION: WDA_suspendDataTx
2649 * Update TL to suspend the data Transmission
2650 */
2651VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2652{
2653 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2654 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655
2656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 if (pWDA->txSuspendTimedOut)
2660 {
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002662 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 return status;
2664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 /* Reset the event to be not signalled */
2666 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2667 if(!VOS_IS_STATUS_SUCCESS(status))
2668 {
2669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002670 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 return VOS_STATUS_E_FAILURE;
2672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002674 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 WDA_SuspendDataTxCallback);
2676 if(status != VOS_STATUS_SUCCESS)
2677 {
2678 return status;
2679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 /* Wait for the event to be set by the TL, to get the response of
2681 * suspending the TX queues, this event should be set by the Callback
2682 * function called by TL*/
2683 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2684 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2685 if(!VOS_IS_STATUS_SUCCESS(status))
2686 {
2687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2688 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002689 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 /* Set this flag to true when TL suspend times out, so that when TL
2691 * suspend eventually happens and calls the callback, TL can be resumed
2692 * right away by looking at this flag when true.*/
2693 pWDA->txSuspendTimedOut = TRUE;
2694 }
2695 else
2696 {
2697 pWDA->txSuspendTimedOut = FALSE;
2698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2700 {
2701 status = VOS_STATUS_SUCCESS;
2702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 return status;
2704}
Jeff Johnson295189b2012-06-20 16:38:30 -07002705/*
2706 * FUNCTION: WDA_resumeDataTx
2707 * Update TL to resume the data Transmission
2708 */
2709VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2710{
2711 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002712
2713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002714 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002715
2716 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 return status;
2718}
Jeff Johnson295189b2012-06-20 16:38:30 -07002719/*
2720 * FUNCTION: WDA_InitScanReqCallback
2721 * Trigger Init SCAN callback
2722 */
2723void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2724{
2725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2726 tWDA_CbContext *pWDA;
2727 tInitScanParams *pWDA_ScanParam ;
2728 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 if(NULL == pWdaParams)
2732 {
2733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 VOS_ASSERT(0) ;
2736 return ;
2737 }
2738 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2739 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 if(NULL == pWDA_ScanParam)
2741 {
2742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002743 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002744 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2746 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 return ;
2748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 if(WDI_STATUS_SUCCESS != wdiStatus)
2750 {
2751 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if(VOS_STATUS_SUCCESS != status)
2753 {
2754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002755 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 }
2757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 /* free WDI command buffer */
2759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302761
2762
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002764 /* without converting the Status to Failure or Success Just
2765 pass the same status to lim */
2766 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 /* send SCAN RSP message back to PE */
2768 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 return ;
2770}
2771
2772/*
2773 * FUNCTION: WDA_ProcessInitScanReq
2774 * Trigger Init SCAN in DAL
2775 */
2776VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2777 tInitScanParams *initScanParams)
2778{
2779 WDI_Status status = WDI_STATUS_SUCCESS ;
2780 WDI_InitScanReqParamsType *wdiInitScanParam =
2781 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2782 sizeof(WDI_InitScanReqParamsType)) ;
2783 tWDA_ReqParams *pWdaParams;
2784 tANI_U8 i = 0;
2785
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 if(NULL == wdiInitScanParam)
2789 {
2790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002791 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 VOS_ASSERT(0);
2793 return VOS_STATUS_E_NOMEM;
2794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2796 if(NULL == pWdaParams)
2797 {
2798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 VOS_ASSERT(0);
2801 vos_mem_free(wdiInitScanParam);
2802 return VOS_STATUS_E_NOMEM;
2803 }
2804
2805 /* Copy init Scan params to WDI structure */
2806 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2807 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2808 sizeof(tSirMacAddr)) ;
2809 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2810 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2811 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2813 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2815 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2817 {
2818 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2819 initScanParams->scanEntry.bssIdx[i] ;
2820 }
2821
2822 /* if Frame length, copy macMgmtHdr or WDI structure */
2823 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2824 {
2825 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2826 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2827 }
2828 wdiInitScanParam->wdiReqStatusCB = NULL ;
2829
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 /* Store Init Req pointer, as this will be used for response */
2831 pWdaParams->pWdaContext = pWDA;
2832 pWdaParams->wdaMsgParam = initScanParams;
2833 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 /* first try to suspend TX */
2835 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 if(WDI_STATUS_SUCCESS != status)
2837 {
2838 goto handleWdiFailure;
2839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 /* call DAL API to pass init scan request to DAL */
2841 status = WDI_InitScanReq(wdiInitScanParam,
2842 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(IS_WDI_STATUS_FAILURE(status))
2844 {
2845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2846 "error in WDA Init Scan, Resume Tx " );
2847 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 VOS_ASSERT(0) ;
2849
2850 goto handleWdiFailure;
2851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853handleWdiFailure:
2854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2855 "Failure in WDI Api, free all the memory " );
2856 /* free WDI command buffer */
2857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2858 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* send Failure to PE */
2860 initScanParams->status = eSIR_FAILURE ;
2861 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 return CONVERT_WDI2VOS_STATUS(status) ;
2863}
2864
Jeff Johnson295189b2012-06-20 16:38:30 -07002865/*
2866 * FUNCTION: WDA_StartScanReqCallback
2867 * send Start SCAN RSP back to PE
2868 */
2869void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2870 void* pUserData)
2871{
2872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2873 tWDA_CbContext *pWDA;
2874 tStartScanParams *pWDA_ScanParam;
2875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 if(NULL == pWdaParams)
2878 {
2879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002880 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 VOS_ASSERT(0) ;
2882 return ;
2883 }
2884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2885 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 if(NULL == pWDA_ScanParam)
2887 {
2888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002889 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002891 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 return ;
2893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2895 {
2896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002897 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002899 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2903 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002904
Jeff Johnson295189b2012-06-20 16:38:30 -07002905
2906 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002907 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* send SCAN RSP message back to PE */
2909 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 return ;
2911}
2912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessStartScanReq
2915 * Trigger start SCAN in WDI
2916 */
2917VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2918 tStartScanParams *startScanParams)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS;
2921 WDI_StartScanReqParamsType *wdiStartScanParams =
2922 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_StartScanReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiStartScanParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiStartScanParams);
2941 return VOS_STATUS_E_NOMEM;
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Copy init Scan params to WDI structure */
2944 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2945 wdiStartScanParams->wdiReqStatusCB = NULL ;
2946
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 /* Store Init Req pointer, as this will be used for response */
2948 /* store Params pass it to WDI */
2949 pWdaParams->pWdaContext = pWDA;
2950 pWdaParams->wdaMsgParam = startScanParams;
2951 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 /* call DAL API to pass init scan request to DAL */
2953 status = WDI_StartScanReq(wdiStartScanParams,
2954 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 /* failure returned by WDI API */
2956 if(IS_WDI_STATUS_FAILURE(status))
2957 {
2958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2959 "Failure in Start Scan WDI API, free all the memory "
2960 "It should be due to previous abort scan." );
2961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams) ;
2963 startScanParams->status = eSIR_FAILURE ;
2964 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return CONVERT_WDI2VOS_STATUS(status) ;
2967}
Jeff Johnson295189b2012-06-20 16:38:30 -07002968/*
2969 * FUNCTION: WDA_EndScanReqCallback
2970 * END SCAN callback
2971 */
2972void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2973{
2974 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2975 tWDA_CbContext *pWDA;
2976 tEndScanParams *endScanParam;
2977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002978 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 if(NULL == pWdaParams)
2980 {
2981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 VOS_ASSERT(0) ;
2984 return ;
2985 }
2986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2987 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(NULL == endScanParam)
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996 }
2997
2998 /* Free WDI command buffer */
2999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3000 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003002 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 /* send response back to PE */
3004 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3005 return ;
3006}
3007
Jeff Johnson295189b2012-06-20 16:38:30 -07003008/*
3009 * FUNCTION: WDA_ProcessEndScanReq
3010 * Trigger END SCAN in WDI
3011 */
3012VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3013 tEndScanParams *endScanParams)
3014{
3015 WDI_Status status = WDI_STATUS_SUCCESS;
3016 WDI_EndScanReqParamsType *wdiEndScanParams =
3017 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3018 sizeof(WDI_EndScanReqParamsType)) ;
3019 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003021 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 if(NULL == wdiEndScanParams)
3023 {
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_ASSERT(0);
3027 return VOS_STATUS_E_NOMEM;
3028 }
3029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3030 if(NULL == pWdaParams)
3031 {
3032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 VOS_ASSERT(0);
3035 vos_mem_free(wdiEndScanParams);
3036 return VOS_STATUS_E_NOMEM;
3037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 /* Copy init Scan params to WDI structure */
3039 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3040 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* Store Init Req pointer, as this will be used for response */
3042 /* store Params pass it to WDI */
3043 pWdaParams->pWdaContext = pWDA;
3044 pWdaParams->wdaMsgParam = endScanParams;
3045 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 /* call DAL API to pass init scan request to DAL */
3047 status = WDI_EndScanReq(wdiEndScanParams,
3048 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 if(IS_WDI_STATUS_FAILURE(status))
3050 {
3051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3052 "Failure in End Scan WDI API, free all the memory "
3053 "It should be due to previous abort scan." );
3054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3055 vos_mem_free(pWdaParams) ;
3056 endScanParams->status = eSIR_FAILURE ;
3057 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 return CONVERT_WDI2VOS_STATUS(status) ;
3060}
Jeff Johnson295189b2012-06-20 16:38:30 -07003061/*
3062 * FUNCTION: WDA_FinishScanReqCallback
3063 * Trigger Finish SCAN callback
3064 */
3065void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3066{
3067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3068 tWDA_CbContext *pWDA;
3069 tFinishScanParams *finishScanParam;
3070 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003072 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 if(NULL == pWdaParams)
3074 {
3075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_ASSERT(0) ;
3078 return ;
3079 }
3080
3081 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3082 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if(NULL == finishScanParam)
3084 {
3085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003086 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3089 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 return ;
3091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3093 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 /*
3095 * Now Resume TX, if we reached here means, TX is already suspended, we
3096 * have to resume it unconditionaly
3097 */
3098 status = WDA_ResumeDataTx(pWDA) ;
3099
3100 if(VOS_STATUS_SUCCESS != status)
3101 {
3102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003103 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003105 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3107 return ;
3108}
Jeff Johnson295189b2012-06-20 16:38:30 -07003109/*
3110 * FUNCTION: WDA_ProcessFinshScanReq
3111 * Trigger Finish SCAN in WDI
3112 */
3113VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3114 tFinishScanParams *finishScanParams)
3115{
3116 WDI_Status status = WDI_STATUS_SUCCESS;
3117 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3118 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3119 sizeof(WDI_FinishScanReqParamsType)) ;
3120 tWDA_ReqParams *pWdaParams ;
3121 tANI_U8 i = 0;
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if(NULL == wdiFinishScanParams)
3125 {
3126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0);
3129 return VOS_STATUS_E_NOMEM;
3130 }
3131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3132 if(NULL == pWdaParams)
3133 {
3134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 VOS_ASSERT(0);
3137 vos_mem_free(wdiFinishScanParams);
3138 return VOS_STATUS_E_NOMEM;
3139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 /* Copy init Scan params to WDI structure */
3141 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3142 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3143 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3145 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3146 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3147 finishScanParams->frameLength ;
3148 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3149 finishScanParams->currentOperChannel ;
3150 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3151 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3152 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3154 {
3155 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3156 finishScanParams->scanEntry.bssIdx[i] ;
3157 }
3158
3159
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 /* if Frame length, copy macMgmtHdr ro WDI structure */
3161 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3162 {
3163 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3164 &finishScanParams->macMgmtHdr,
3165 sizeof(WDI_MacMgmtHdr)) ;
3166 }
3167 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 /* Store Init Req pointer, as this will be used for response */
3169 /* store Params pass it to WDI */
3170 pWdaParams->pWdaContext = pWDA;
3171 pWdaParams->wdaMsgParam = finishScanParams;
3172 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 /* call DAL API to pass init scan request to DAL */
3174 status = WDI_FinishScanReq(wdiFinishScanParams,
3175 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003176
Jeff Johnson295189b2012-06-20 16:38:30 -07003177
3178 /*
3179 * WDI API returns failure..
3180 */
3181 if(IS_WDI_STATUS_FAILURE( status))
3182 {
3183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3184 "Failure in Finish Scan WDI API, free all the memory " );
3185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3186 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 finishScanParams->status = eSIR_FAILURE ;
3188 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 return CONVERT_WDI2VOS_STATUS(status) ;
3191}
Jeff Johnson295189b2012-06-20 16:38:30 -07003192/*---------------------------------------------------------------------
3193 * ASSOC API's
3194 *---------------------------------------------------------------------
3195 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003196/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303197 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 * Trigger Init SCAN callback
3199 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303200void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003201{
3202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3203 tWDA_CbContext *pWDA;
3204 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 if(NULL == pWdaParams)
3208 {
3209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003210 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 VOS_ASSERT(0) ;
3212 return ;
3213 }
3214 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3215 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3217 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 /* reset macBSSID */
3219 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* reset macSTASelf */
3221 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003222 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 return ;
3225}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303226
3227/*
3228 * FUNCTION: WDA_JoinReqCallback
3229 * Free memory and send SWITCH CHANNEL RSP back to PE.
3230 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3231 */
3232void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3233{
3234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3235 tWDA_CbContext *pWDA;
3236 tSwitchChannelParams *joinReqParam;
3237
3238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3239 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3240
3241 if(NULL == pWdaParams)
3242 {
3243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3244 "%s: pWdaParams received NULL", __func__);
3245 VOS_ASSERT(0);
3246 return;
3247 }
3248
3249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3250 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3251 joinReqParam->status = wdiStatus;
3252
3253 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3254 {
3255 /* reset macBSSID */
3256 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3257 /* reset macSTASelf */
3258 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3259
3260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3261 vos_mem_free(pWdaParams);
3262 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3263 }
3264
3265 return;
3266}
3267
Jeff Johnson295189b2012-06-20 16:38:30 -07003268/*
3269 * FUNCTION: WDA_ProcessJoinReq
3270 * Trigger Join REQ in WDI
3271 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003272VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3273 tSwitchChannelParams* joinReqParam)
3274{
3275 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 WDI_JoinReqParamsType *wdiJoinReqParam =
3277 (WDI_JoinReqParamsType *)vos_mem_malloc(
3278 sizeof(WDI_JoinReqParamsType)) ;
3279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 if(NULL == wdiJoinReqParam)
3283 {
3284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003287 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return VOS_STATUS_E_NOMEM;
3289 }
3290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3291 if(NULL == pWdaParams)
3292 {
3293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 VOS_ASSERT(0);
3296 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003297 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 return VOS_STATUS_E_NOMEM;
3299 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003300
3301 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3302 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3303 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3304 {
3305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3306 "%s: received join request when BSSID or self-STA is NULL "
3307 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003308 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003309 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3310 VOS_ASSERT(0);
3311 vos_mem_free(wdiJoinReqParam);
3312 vos_mem_free(pWdaParams);
3313 joinReqParam->status = eSIR_FAILURE ;
3314 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3315 return VOS_STATUS_E_INVAL;
3316 }
3317
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 /* copy the BSSID for pWDA */
3319 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3320 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3322 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3324 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003325#ifdef WLAN_FEATURE_VOWIFI
3326 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3327 joinReqParam->maxTxPower ;
3328#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3330 joinReqParam->localPowerConstraint ;
3331#endif
3332 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3333 joinReqParam->secondaryChannelOffset ;
3334 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3335
Sachin Ahuja935eda782014-07-30 14:57:41 +05303336 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3337 wdiJoinReqParam->pUserData = pWdaParams;
3338
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 /* Store Init Req pointer, as this will be used for response */
3340 /* store Params pass it to WDI */
3341 pWdaParams->pWdaContext = pWDA;
3342 pWdaParams->wdaMsgParam = joinReqParam;
3343 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303345 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 if(IS_WDI_STATUS_FAILURE(status))
3347 {
3348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3349 "Failure in Join WDI API, free all the memory " );
3350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3351 vos_mem_free(pWdaParams) ;
3352 joinReqParam->status = eSIR_FAILURE ;
3353 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 return CONVERT_WDI2VOS_STATUS(status) ;
3356}
Jeff Johnson295189b2012-06-20 16:38:30 -07003357/*
3358 * FUNCTION: WDA_SwitchChannelReqCallback
3359 * send Switch channel RSP back to PE
3360 */
3361void WDA_SwitchChannelReqCallback(
3362 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3363{
3364 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3365 tWDA_CbContext *pWDA;
3366 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 if(NULL == pWdaParams)
3370 {
3371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 VOS_ASSERT(0) ;
3374 return ;
3375 }
3376 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3377 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3378
3379#ifdef WLAN_FEATURE_VOWIFI
3380 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3381#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3383 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003385 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return ;
3388}
Jeff Johnson295189b2012-06-20 16:38:30 -07003389/*
3390 * FUNCTION: WDA_ProcessChannelSwitchReq
3391 * Request to WDI to switch channel REQ params.
3392 */
3393VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3394 tSwitchChannelParams *pSwitchChanParams)
3395{
3396 WDI_Status status = WDI_STATUS_SUCCESS ;
3397 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3398 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3399 sizeof(WDI_SwitchChReqParamsType)) ;
3400 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(NULL == wdiSwitchChanParam)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 return VOS_STATUS_E_NOMEM;
3409 }
3410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3411 if(NULL == pWdaParams)
3412 {
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_ASSERT(0);
3416 vos_mem_free(wdiSwitchChanParam);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3420#ifndef WLAN_FEATURE_VOWIFI
3421 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3422 pSwitchChanParams->localPowerConstraint;
3423#endif
3424 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3425 pSwitchChanParams->secondaryChannelOffset;
3426 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 /* Store req pointer, as this will be used for response */
3428 /* store Params pass it to WDI */
3429 pWdaParams->pWdaContext = pWDA;
3430 pWdaParams->wdaMsgParam = pSwitchChanParams;
3431 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432#ifdef WLAN_FEATURE_VOWIFI
3433 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3434 = pSwitchChanParams->maxTxPower;
3435 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3436 pSwitchChanParams ->selfStaMacAddr,
3437 sizeof(tSirMacAddr));
3438#endif
3439 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3440 pSwitchChanParams->bssId,
3441 sizeof(tSirMacAddr));
3442
3443 status = WDI_SwitchChReq(wdiSwitchChanParam,
3444 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 if(IS_WDI_STATUS_FAILURE(status))
3446 {
3447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3448 "Failure in process channel switch Req WDI API, free all the memory " );
3449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3450 vos_mem_free(pWdaParams) ;
3451 pSwitchChanParams->status = eSIR_FAILURE ;
3452 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 return CONVERT_WDI2VOS_STATUS(status) ;
3455}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003456
3457/*
3458 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3459 * send Switch channel RSP back to PE
3460 */
3461void WDA_SwitchChannelReqCallback_V1(
3462 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3463 void* pUserData)
3464{
3465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3466 tWDA_CbContext *pWDA;
3467 tSwitchChannelParams *pSwitchChanParams;
3468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3469 "<------ %s " ,__func__);
3470
3471 if (NULL == pWdaParams)
3472 {
3473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3474 "%s: pWdaParams received NULL", __func__);
3475 VOS_ASSERT(0);
3476 return ;
3477 }
3478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3479 pSwitchChanParams =
3480 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3481 pSwitchChanParams->channelSwitchSrc =
3482 wdiSwitchChanRsp->channelSwitchSrc;
3483#ifdef WLAN_FEATURE_VOWIFI
3484 pSwitchChanParams->txMgmtPower =
3485 wdiSwitchChanRsp->ucTxMgmtPower;
3486#endif
3487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3488 vos_mem_free(pWdaParams);
3489 pSwitchChanParams->status =
3490 wdiSwitchChanRsp->wdiStatus ;
3491 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3492 (void *)pSwitchChanParams , 0);
3493 return;
3494}
3495
3496/*
3497 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3498 * Request to WDI to switch channel REQ params.
3499 */
3500VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3501 tSwitchChannelParams *pSwitchChanParams)
3502{
3503 WDI_Status status = WDI_STATUS_SUCCESS ;
3504 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3505 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3506 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3507 tWDA_ReqParams *pWdaParams ;
3508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3509 "------> %s " ,__func__);
3510 if (NULL == wdiSwitchChanParam)
3511 {
3512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3513 "%s: VOS MEM Alloc Failure", __func__);
3514 VOS_ASSERT(0);
3515 return VOS_STATUS_E_NOMEM;
3516 }
3517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3518 if (NULL == pWdaParams)
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3521 "%s: VOS MEM Alloc Failure", __func__);
3522 VOS_ASSERT(0);
3523 vos_mem_free(wdiSwitchChanParam);
3524 return VOS_STATUS_E_NOMEM;
3525 }
3526 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3527 pSwitchChanParams->channelSwitchSrc;
3528
3529 wdiSwitchChanParam->wdiChInfo.ucChannel =
3530 pSwitchChanParams->channelNumber;
3531#ifndef WLAN_FEATURE_VOWIFI
3532 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3533 pSwitchChanParams->localPowerConstraint;
3534#endif
3535 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3536 pSwitchChanParams->secondaryChannelOffset;
3537 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3538 /* Store req pointer, as this will be used for response */
3539 /* store Params pass it to WDI */
3540 pWdaParams->pWdaContext = pWDA;
3541 pWdaParams->wdaMsgParam = pSwitchChanParams;
3542 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3543#ifdef WLAN_FEATURE_VOWIFI
3544 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3545 pSwitchChanParams->maxTxPower;
3546 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3547 pSwitchChanParams ->selfStaMacAddr,
3548 sizeof(tSirMacAddr));
3549#endif
3550 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3551 pSwitchChanParams->bssId,
3552 sizeof(tSirMacAddr));
3553
3554 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3555 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3556 pWdaParams);
3557 if (IS_WDI_STATUS_FAILURE(status))
3558 {
3559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3560 "Failure in process channel switch Req WDI "
3561 "API, free all the memory " );
3562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3563 vos_mem_free(pWdaParams) ;
3564 pSwitchChanParams->status = eSIR_FAILURE ;
3565 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3566 (void *)pSwitchChanParams, 0) ;
3567 }
3568 return CONVERT_WDI2VOS_STATUS(status) ;
3569}
3570
Jeff Johnson295189b2012-06-20 16:38:30 -07003571/*
3572 * FUNCTION: WDA_ConfigBssReqCallback
3573 * config BSS Req Callback, called by WDI
3574 */
3575void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3576 ,void* pUserData)
3577{
3578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3579 tWDA_CbContext *pWDA;
3580 tAddBssParams *configBssReqParam;
3581 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 VOS_ASSERT(0) ;
3589 return ;
3590 }
3591 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3592 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3593 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003595 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3597 {
3598 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3599 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3601 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3602 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3603
3604 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3605 {
3606 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3607 {
3608 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3609 staConfigBssParam->staType = STA_ENTRY_BSSID;
3610 }
3611 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3612 (staConfigBssParam->staType == STA_ENTRY_SELF))
3613 {
3614 /* This is the 1st add BSS Req for the BTAMP STA */
3615 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3616 staConfigBssParam->staType = STA_ENTRY_BSSID;
3617 }
3618 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3619 (staConfigBssParam->staType == STA_ENTRY_PEER))
3620 {
3621 /* This is the 2nd ADD BSS Request that is sent
3622 * on the BTAMP STA side. The Sta type is
3623 * set to STA_ENTRY_PEER here.*/
3624 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3625 }
3626 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3627 (staConfigBssParam->staType == STA_ENTRY_SELF))
3628 {
3629 /* statype is already set by PE.
3630 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3631 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3632 staConfigBssParam->staType = STA_ENTRY_BSSID;
3633 }
3634 else
3635 {
3636 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3637 staConfigBssParam->staType = STA_ENTRY_PEER;
3638 }
3639 }
3640 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3641 {
3642 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3643 staConfigBssParam->staType = STA_ENTRY_SELF;
3644 }
3645 else
3646 {
3647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3648 "Invalid operation mode specified");
3649 VOS_ASSERT(0);
3650 }
3651
3652 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3657 sizeof(tSirMacAddr));
3658 staConfigBssParam->txChannelWidthSet =
3659 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3661 staConfigBssParam->htCapable)
3662 {
3663 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3664 wdiConfigBssRsp->ucBSSIdx;
3665 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3666 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303667 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3668 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3671 wdiConfigBssRsp->ucBSSIdx,
3672 wdiConfigBssRsp->ucSTAIdx))
3673 {
3674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003675 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 VOS_ASSERT(0) ;
3677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003681 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 VOS_ASSERT(0) ;
3683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003684#ifdef WLAN_FEATURE_VOWIFI
3685 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3686#endif
3687 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303688 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3689 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3691 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 return ;
3694}
Jeff Johnson295189b2012-06-20 16:38:30 -07003695/*
3696 * FUNCTION: WDA_UpdateEdcaParamsForAC
3697 * Update WDI EDCA params with PE edca params
3698 */
3699void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3700 WDI_EdcaParamRecord *wdiEdcaParam,
3701 tSirMacEdcaParamRecord *macEdcaParam)
3702{
3703 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3704 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3705 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3706 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3707 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3708 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3709}
Jeff Johnson295189b2012-06-20 16:38:30 -07003710/*
3711 * FUNCTION: WDA_ProcessConfigBssReq
3712 * Configure BSS before starting Assoc with AP
3713 */
3714VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3715 tAddBssParams* configBssReqParam)
3716{
3717 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303718 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003721 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303722 if (NULL == configBssReqParam)
3723 {
3724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3725 "%s: configBssReqParam is NULL", __func__);
3726 return VOS_STATUS_E_INVAL;
3727 }
3728
3729 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3730 sizeof(WDI_ConfigBSSReqParamsType)) ;
3731
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 if(NULL == wdiConfigBssReqParam)
3733 {
3734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 VOS_ASSERT(0);
3737 return VOS_STATUS_E_NOMEM;
3738 }
3739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3740 if(NULL == pWdaParams)
3741 {
3742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 VOS_ASSERT(0);
3745 vos_mem_free(wdiConfigBssReqParam);
3746 return VOS_STATUS_E_NOMEM;
3747 }
Kiran4a17ebe2013-01-31 10:43:43 -08003748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3749 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3752 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 /* Store Init Req pointer, as this will be used for response */
3754 /* store Params pass it to WDI */
3755 pWdaParams->pWdaContext = pWDA;
3756 pWdaParams->wdaMsgParam = configBssReqParam;
3757 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3759 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 if(IS_WDI_STATUS_FAILURE(status))
3761 {
3762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3763 "Failure in Config BSS WDI API, free all the memory " );
3764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3765 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003769 return CONVERT_WDI2VOS_STATUS(status) ;
3770}
Jeff Johnson295189b2012-06-20 16:38:30 -07003771#ifdef ENABLE_HAL_COMBINED_MESSAGES
3772/*
3773 * FUNCTION: WDA_PostAssocReqCallback
3774 * Post ASSOC req callback, send RSP back to PE
3775 */
3776void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3777 void* pUserData)
3778{
3779 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3780 tPostAssocParams *postAssocReqParam =
3781 (tPostAssocParams *)pWDA->wdaMsgParam ;
3782 /*STA context within the BSS Params*/
3783 tAddStaParams *staPostAssocParam =
3784 &postAssocReqParam->addBssParams.staContext ;
3785 /*STA Params for self STA*/
3786 tAddStaParams *selfStaPostAssocParam =
3787 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003789 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003791 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3793 {
3794 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3795 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3796 sizeof(tSirMacAddr)) ;
3797 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3798 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3799 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3801 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303802 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3804 pWDA->wdaWdiApiMsgParam = NULL;
3805 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003806 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 return ;
3808}
Jeff Johnson295189b2012-06-20 16:38:30 -07003809/*
3810 * FUNCTION: WDA_ProcessPostAssocReq
3811 * Trigger POST ASSOC processing in WDI
3812 */
3813VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3814 tPostAssocParams *postAssocReqParam)
3815{
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 WDI_Status status = WDI_STATUS_SUCCESS ;
3817
3818 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3819 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3820 sizeof(WDI_PostAssocReqParamsType)) ;
3821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003823
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 if(NULL == wdiPostAssocReqParam)
3825 {
3826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 VOS_ASSERT(0);
3829 return VOS_STATUS_E_NOMEM;
3830 }
3831
3832 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3833 {
3834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003835 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003836 VOS_ASSERT(0);
3837 return VOS_STATUS_E_FAILURE;
3838 }
3839
Jeff Johnson295189b2012-06-20 16:38:30 -07003840 /* update BSS params into WDI structure */
3841 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3842 &postAssocReqParam->addBssParams) ;
3843 /* update STA params into WDI structure */
3844 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3845 &postAssocReqParam->addStaParams) ;
3846
3847 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3848 postAssocReqParam->addBssParams.highPerformance;
3849 WDA_UpdateEdcaParamsForAC(pWDA,
3850 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3851 &postAssocReqParam->addBssParams.acbe);
3852 WDA_UpdateEdcaParamsForAC(pWDA,
3853 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3854 &postAssocReqParam->addBssParams.acbk);
3855 WDA_UpdateEdcaParamsForAC(pWDA,
3856 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3857 &postAssocReqParam->addBssParams.acvi);
3858 WDA_UpdateEdcaParamsForAC(pWDA,
3859 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3860 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003861 /* Store Init Req pointer, as this will be used for response */
3862 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 /* store Params pass it to WDI */
3864 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3866 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 if(IS_WDI_STATUS_FAILURE(status))
3868 {
3869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3870 "Failure in Post Assoc WDI API, free all the memory " );
3871 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3872 pWDA->wdaWdiApiMsgParam = NULL;
3873 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 return CONVERT_WDI2VOS_STATUS(status) ;
3878}
3879#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003880/*
3881 * FUNCTION: WDA_AddStaReqCallback
3882 * ADD STA req callback, send RSP back to PE
3883 */
3884void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3885 void* pUserData)
3886{
3887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3888 tWDA_CbContext *pWDA;
3889 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 if(NULL == pWdaParams)
3893 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 VOS_ASSERT(0) ;
3896 return ;
3897 }
3898 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3899 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003901 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3903 {
3904 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3905 /*TODO: UMAC structure doesn't have these fields*/
3906 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3907 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3908 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3909 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3910 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3911 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003912#ifdef FEATURE_WLAN_TDLS
3913 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3914 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3915#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003917#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 {
3919 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3920 wdiConfigStaRsp->ucBssIdx;
3921 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3922 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303923 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3924 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 }
3926 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3927 {
3928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003929 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 VOS_ASSERT(0) ;
3931 return ;
3932 }
3933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3935 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 return ;
3938}
Jeff Johnson295189b2012-06-20 16:38:30 -07003939/*
3940 * FUNCTION: WDA_ConfigStaReq
3941 * Trigger Config STA processing in WDI
3942 */
3943VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3944 tAddStaParams *addStaReqParam)
3945{
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3948 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3949 sizeof(WDI_ConfigSTAReqParamsType)) ;
3950 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003952 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 if(NULL == wdiConfigStaReqParam)
3954 {
3955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 VOS_ASSERT(0);
3958 return VOS_STATUS_E_NOMEM;
3959 }
3960 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3961 if(NULL == pWdaParams)
3962 {
3963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 VOS_ASSERT(0);
3966 vos_mem_free(wdiConfigStaReqParam);
3967 return VOS_STATUS_E_NOMEM;
3968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 /* update STA params into WDI structure */
3971 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3972 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 /* Store Init Req pointer, as this will be used for response */
3974 /* store Params pass it to WDI */
3975 pWdaParams->pWdaContext = pWDA;
3976 pWdaParams->wdaMsgParam = addStaReqParam;
3977 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3979 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 if(IS_WDI_STATUS_FAILURE(status))
3981 {
3982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3983 "Failure in Config STA WDI API, free all the memory " );
3984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3985 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 return CONVERT_WDI2VOS_STATUS(status) ;
3990}
Jeff Johnson295189b2012-06-20 16:38:30 -07003991/*
3992 * FUNCTION: WDA_DelBSSReqCallback
3993 * Dens DEL BSS RSP back to PE
3994 */
3995void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3996 void* pUserData)
3997{
3998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3999 tWDA_CbContext *pWDA;
4000 tDeleteBssParams *delBssReqParam;
4001 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004003 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 if(NULL == pWdaParams)
4005 {
4006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 VOS_ASSERT(0) ;
4009 return ;
4010 }
4011 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4012 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004013 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4015 {
4016 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4017 sizeof(tSirMacAddr)) ;
4018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4020 {
4021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004022 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_ASSERT(0) ;
4024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004028 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 VOS_ASSERT(0) ;
4030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4032 {
4033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004034 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 VOS_ASSERT(0) ;
4036 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304037
4038 WLANTL_StartForwarding(staIdx,0,0);
4039
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4041 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 /* reset the the system role*/
4043 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4044
4045 /* Reset the BA related information */
4046 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4047 {
4048 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4049 {
4050 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4051 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304052 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 /* Reset framesTxed counters here */
4054 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4055 {
4056 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4057 }
4058 }
4059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
4063
Jeff Johnson295189b2012-06-20 16:38:30 -07004064/*
4065 * FUNCTION: WDA_ProcessDelBssReq
4066 * Init DEL BSS req with WDI
4067 */
4068VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4069 tDeleteBssParams *delBssParam)
4070{
4071 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4073 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4074 sizeof(WDI_DelBSSReqParamsType)) ;
4075 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004077 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 if(NULL == wdiDelBssReqParam)
4079 {
4080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 VOS_ASSERT(0);
4083 return VOS_STATUS_E_NOMEM;
4084 }
4085 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4086 if(NULL == pWdaParams)
4087 {
4088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 VOS_ASSERT(0);
4091 vos_mem_free(wdiDelBssReqParam);
4092 return VOS_STATUS_E_NOMEM;
4093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4095 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4096
4097 /* Store Init Req pointer, as this will be used for response */
4098 /* store Params pass it to WDI */
4099 pWdaParams->pWdaContext = pWDA;
4100 pWdaParams->wdaMsgParam = delBssParam;
4101 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 status = WDI_DelBSSReq(wdiDelBssReqParam,
4103 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 if(IS_WDI_STATUS_FAILURE(status))
4105 {
4106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4107 "Failure in Del BSS WDI API, free all the memory " );
4108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4109 vos_mem_free(pWdaParams) ;
4110 delBssParam->status = eSIR_FAILURE ;
4111 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 return CONVERT_WDI2VOS_STATUS(status) ;
4114}
Jeff Johnson295189b2012-06-20 16:38:30 -07004115/*
4116 * FUNCTION: WDA_DelSTAReqCallback
4117 * Dens DEL STA RSP back to PE
4118 */
4119void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4120 void* pUserData)
4121{
4122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4123 tWDA_CbContext *pWDA;
4124 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 if(NULL == pWdaParams)
4128 {
4129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004130 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 VOS_ASSERT(0) ;
4132 return ;
4133 }
4134 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4135 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004136 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4138 {
4139 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4140 {
4141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004142 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 VOS_ASSERT(0) ;
4144 }
4145 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304146 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 }
4148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4149 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 /*Reset the BA information corresponding to this STAIdx */
4151 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4152 WDA_INVALID_STA_INDEX;
4153 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304154 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 return ;
4157}
Jeff Johnson295189b2012-06-20 16:38:30 -07004158/*
4159 * FUNCTION: WDA_ProcessDelStaReq
4160 * Init DEL STA req with WDI
4161 */
4162VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4163 tDeleteStaParams *delStaParam)
4164{
4165 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4167 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4168 sizeof(WDI_DelSTAReqParamsType)) ;
4169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if(NULL == wdiDelStaReqParam)
4173 {
4174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 VOS_ASSERT(0);
4177 return VOS_STATUS_E_NOMEM;
4178 }
4179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4180 if(NULL == pWdaParams)
4181 {
4182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 VOS_ASSERT(0);
4185 vos_mem_free(wdiDelStaReqParam);
4186 return VOS_STATUS_E_NOMEM;
4187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4189 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 /* Store Init Req pointer, as this will be used for response */
4191 /* store Params pass it to WDI */
4192 pWdaParams->pWdaContext = pWDA;
4193 pWdaParams->wdaMsgParam = delStaParam;
4194 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 status = WDI_DelSTAReq(wdiDelStaReqParam,
4196 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 if(IS_WDI_STATUS_FAILURE(status))
4198 {
4199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4200 "Failure in Del STA WDI API, free all the memory status = %d",
4201 status );
4202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4203 vos_mem_free(pWdaParams) ;
4204 delStaParam->status = eSIR_FAILURE ;
4205 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 return CONVERT_WDI2VOS_STATUS(status) ;
4208}
Jeff Johnson295189b2012-06-20 16:38:30 -07004209void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4210{
4211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4212 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304213 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 if(NULL == pWdaParams)
4217 {
4218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004219 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 VOS_ASSERT(0) ;
4221 return ;
4222 }
4223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4224 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4226 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4228 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4229 pwdiAddSTASelfRsp->macSelfSta,
4230 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304231 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4232 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4233 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4234 {
4235 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4236 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 return ;
4240}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304241
Jeff Johnson295189b2012-06-20 16:38:30 -07004242/*
4243 * FUNCTION: WDA_ProcessAddStaSelfReq
4244 *
4245 */
4246VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4247{
4248 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004249 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4251 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4252 sizeof(WDI_AddSTASelfReqParamsType)) ;
4253 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304256 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 if( NULL == wdiAddStaSelfReq )
4258 {
4259 VOS_ASSERT( 0 );
4260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004261 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304262 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4263 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 return( VOS_STATUS_E_NOMEM );
4265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 if( NULL == pWdaParams )
4268 {
4269 VOS_ASSERT( 0 );
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304272 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4273 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 vos_mem_free(wdiAddStaSelfReq) ;
4275 return( VOS_STATUS_E_NOMEM );
4276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004279 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 /* Store Init Req pointer, as this will be used for response */
4281 /* store Params pass it to WDI */
4282 pWdaParams->pWdaContext = pWDA;
4283 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4284 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004285 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286
Jeff Johnson43971f52012-07-17 12:26:56 -07004287 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 {
4289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4290 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004291 wstatus );
4292 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4294 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304295 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4296 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 pAddStaSelfReq->status = eSIR_FAILURE ;
4298 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4299 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004300 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301}
Jeff Johnson295189b2012-06-20 16:38:30 -07004302/*
4303 * FUNCTION: WDA_DelSTASelfRespCallback
4304 *
4305 */
4306void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4307 wdiDelStaSelfRspParams , void* pUserData)
4308{
4309 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4310 tWDA_CbContext *pWDA;
4311 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004313 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 if (NULL == pWdaParams)
4315 {
4316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004317 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 VOS_ASSERT(0);
4319 return;
4320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4322 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004324 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004325
4326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4327 vos_mem_free(pWdaParams) ;
4328
4329 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 return ;
4331}
Jeff Johnson295189b2012-06-20 16:38:30 -07004332/*
4333 * FUNCTION: WDA_DelSTASelfReqCallback
4334 *
4335 */
4336void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4337 void* pUserData)
4338{
4339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4340 tWDA_CbContext *pWDA;
4341 tDelStaSelfParams *delStaSelfParams;
4342
4343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304344 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004345 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004346
4347 if (NULL == pWdaParams)
4348 {
4349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004350 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 VOS_ASSERT(0);
4352 return;
4353 }
4354
4355 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4356 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4357
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004358 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359
4360 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4361 {
4362 VOS_ASSERT(0);
4363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4364 vos_mem_free(pWdaParams) ;
4365 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4366 }
4367
4368 return ;
4369}
4370
4371/*
4372 * FUNCTION: WDA_DelSTASelfReq
4373 * Trigger Config STA processing in WDI
4374 */
4375VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4376 tDelStaSelfParams* pDelStaSelfReqParam)
4377{
4378 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004379 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 tWDA_ReqParams *pWdaParams = NULL;
4381 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4382 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4383 sizeof(WDI_DelSTASelfReqParamsType)) ;
4384
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if( NULL == wdiDelStaSelfReq )
4388 {
4389 VOS_ASSERT( 0 );
4390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004391 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 return( VOS_STATUS_E_NOMEM );
4393 }
4394
4395 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4396 if( NULL == pWdaParams )
4397 {
4398 VOS_ASSERT( 0 );
4399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004400 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 vos_mem_free(wdiDelStaSelfReq) ;
4402 return( VOS_STATUS_E_NOMEM );
4403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 pWdaParams->pWdaContext = pWDA;
4405 /* Store param pointer as passed in by caller */
4406 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4407 /* store Params pass it to WDI */
4408 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4410 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4411
4412 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4413 wdiDelStaSelfReq->pUserData = pWdaParams;
4414
Jeff Johnson43971f52012-07-17 12:26:56 -07004415 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4417
Jeff Johnson43971f52012-07-17 12:26:56 -07004418 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 {
4420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4421 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4422 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004423 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4425 vos_mem_free(pWdaParams) ;
4426 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4427 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4428 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004429 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430}
4431
Jeff Johnson295189b2012-06-20 16:38:30 -07004432/*
4433 * FUNCTION: WDA_SendMsg
4434 * Send Message back to PE
4435 */
4436void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4437 void *pBodyptr, tANI_U32 bodyVal)
4438{
4439 tSirMsgQ msg = {0} ;
4440 tANI_U32 status = VOS_STATUS_SUCCESS ;
4441 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 msg.type = msgType;
4443 msg.bodyval = bodyVal;
4444 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 if (VOS_STATUS_SUCCESS != status)
4447 {
4448 if(NULL != pBodyptr)
4449 {
4450 vos_mem_free(pBodyptr);
4451 }
4452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004453 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 VOS_ASSERT(0) ;
4455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 return ;
4457}
Jeff Johnson295189b2012-06-20 16:38:30 -07004458/*
4459 * FUNCTION: WDA_UpdateBSSParams
4460 * Translated WDA/PE BSS info into WDI BSS info..
4461 */
4462void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4463 WDI_ConfigBSSReqInfoType *wdiBssParams,
4464 tAddBssParams *wdaBssParams)
4465{
4466 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304467 v_U8_t i = 0;
4468
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 /* copy bssReq Params to WDI structure */
4470 vos_mem_copy(wdiBssParams->macBSSID,
4471 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4472 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4473 sizeof(tSirMacAddr)) ;
4474 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4475 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4476 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 wdiBssParams->ucShortSlotTimeSupported =
4478 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4480 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4481 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4482 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4483 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4484
4485 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4486 wdiBssParams->ucTXOPProtectionFullSupport =
4487 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4489 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4492 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4493 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4494 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4495
Chet Lanctot186b5732013-03-18 10:26:30 -07004496 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4497
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 /* copy SSID into WDI structure */
4499 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4500 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4501 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4503 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505#ifdef WLAN_FEATURE_VOWIFI
4506 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4507#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004510#ifdef WLAN_FEATURE_VOWIFI_11R
4511 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 if(wdiBssParams->bExtSetStaKeyParamValid)
4513 {
4514 /* copy set STA key params to WDI structure */
4515 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4516 wdaBssParams->extSetStaKeyParam.staIdx;
4517 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4518 wdaBssParams->extSetStaKeyParam.encType;
4519 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4520 wdaBssParams->extSetStaKeyParam.wepType;
4521 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4522 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4524 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004525 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4527 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4528 {
4529 WDA_GetWepKeysFromCfg( pWDA,
4530 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4531 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4532 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4533 }
4534 else
4535 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4537 keyIndex++)
4538 {
4539 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4540 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4541 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4542 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4543 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4544 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304545
4546 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4547 {
4548 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4549 {
4550 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4551 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4552 }
4553
4554 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4555 {
4556 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4557 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4558 }
4559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4560 FL("%s: Negated Keys"), __func__);
4561 }
4562 else
4563 {
4564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4565 FL("%s: No change in Keys "), __func__);
4566 vos_mem_copy(
4567 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4568 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4569 WLAN_MAX_KEY_RSC_LEN);
4570 vos_mem_copy(
4571 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4572 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4573 SIR_MAC_MAX_KEY_LENGTH);
4574 }
4575
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4577 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4578 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4579 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304581 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 }
4584 }
4585 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4586 }
4587 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4588 {
4589 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4590 sizeof(wdaBssParams->extSetStaKeyParam) );
4591 }
4592#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004593#ifdef WLAN_FEATURE_11AC
4594 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4595 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4596#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004597
4598 return ;
4599}
Jeff Johnson295189b2012-06-20 16:38:30 -07004600/*
4601 * FUNCTION: WDA_UpdateSTAParams
4602 * Translated WDA/PE BSS info into WDI BSS info..
4603 */
4604void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4605 WDI_ConfigStaReqInfoType *wdiStaParams,
4606 tAddStaParams *wdaStaParams)
4607{
4608 tANI_U8 i = 0;
4609 /* Update STA params */
4610 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4611 sizeof(tSirMacAddr)) ;
4612 wdiStaParams->usAssocId = wdaStaParams->assocId;
4613 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004614 wdiStaParams->staIdx = wdaStaParams->staIdx;
4615
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 wdiStaParams->ucShortPreambleSupported =
4617 wdaStaParams->shortPreambleSupported;
4618 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4619 sizeof(tSirMacAddr)) ;
4620 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4621
4622 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4623
4624 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4625 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4626 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4627 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4628 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4629 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4630 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4631
4632 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4633 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 wdiStaParams->wdiSupportedRates.opRateMode =
4635 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4637 {
4638 wdiStaParams->wdiSupportedRates.llbRates[i] =
4639 wdaStaParams->supportedRates.llbRates[i];
4640 }
4641 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4642 {
4643 wdiStaParams->wdiSupportedRates.llaRates[i] =
4644 wdaStaParams->supportedRates.llaRates[i];
4645 }
4646 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4647 {
4648 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4649 wdaStaParams->supportedRates.aniLegacyRates[i];
4650 }
4651 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4652 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004653#ifdef WLAN_FEATURE_11AC
4654 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4655 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4656 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4657 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4658#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4660 {
4661 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4662 wdaStaParams->supportedRates.supportedMCSSet[i];
4663 }
4664 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4665 wdaStaParams->supportedRates.rxHighestDataRate;
4666
4667 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4668
4669 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4670
4671 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4672 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4673 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4674
4675 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4676 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4677 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4678 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004680#ifdef WLAN_FEATURE_11AC
4681 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4682 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004683 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304684 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4685 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4686 * must be set by default */
4687 if ( wdiStaParams->vhtTxMUBformeeCapable )
4688 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004689#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004690 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4691 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 return ;
4693}
Jeff Johnson295189b2012-06-20 16:38:30 -07004694/*
4695 * -------------------------------------------------------------------------
4696 * CFG update to WDI
4697 * -------------------------------------------------------------------------
4698 */
4699
4700 /*
4701 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4702 * Convert the WNI CFG ID to HAL CFG ID
4703 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004704static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004705{
4706 switch(wniCfgId)
4707 {
4708 case WNI_CFG_STA_ID:
4709 return QWLAN_HAL_CFG_STA_ID;
4710 case WNI_CFG_CURRENT_TX_ANTENNA:
4711 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4712 case WNI_CFG_CURRENT_RX_ANTENNA:
4713 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4714 case WNI_CFG_LOW_GAIN_OVERRIDE:
4715 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4716 case WNI_CFG_POWER_STATE_PER_CHAIN:
4717 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4718 case WNI_CFG_CAL_PERIOD:
4719 return QWLAN_HAL_CFG_CAL_PERIOD;
4720 case WNI_CFG_CAL_CONTROL:
4721 return QWLAN_HAL_CFG_CAL_CONTROL;
4722 case WNI_CFG_PROXIMITY:
4723 return QWLAN_HAL_CFG_PROXIMITY;
4724 case WNI_CFG_NETWORK_DENSITY:
4725 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4726 case WNI_CFG_MAX_MEDIUM_TIME:
4727 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4728 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4729 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4730 case WNI_CFG_RTS_THRESHOLD:
4731 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4732 case WNI_CFG_SHORT_RETRY_LIMIT:
4733 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4734 case WNI_CFG_LONG_RETRY_LIMIT:
4735 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4736 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4737 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4738 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4739 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4740 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4741 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4742 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4743 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4744 case WNI_CFG_FIXED_RATE:
4745 return QWLAN_HAL_CFG_FIXED_RATE;
4746 case WNI_CFG_RETRYRATE_POLICY:
4747 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4748 case WNI_CFG_RETRYRATE_SECONDARY:
4749 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4750 case WNI_CFG_RETRYRATE_TERTIARY:
4751 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4752 case WNI_CFG_FORCE_POLICY_PROTECTION:
4753 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4754 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4755 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4756 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4757 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4758 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4759 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4760 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4761 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4762 case WNI_CFG_MAX_BA_SESSIONS:
4763 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4764 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4765 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4766 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4767 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4768 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4769 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4770 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4771 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4772 case WNI_CFG_STATS_PERIOD:
4773 return QWLAN_HAL_CFG_STATS_PERIOD;
4774 case WNI_CFG_CFP_MAX_DURATION:
4775 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4776#if 0 /*This is not part of CFG*/
4777 case WNI_CFG_FRAME_TRANS_ENABLED:
4778 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4779#endif
4780 case WNI_CFG_DTIM_PERIOD:
4781 return QWLAN_HAL_CFG_DTIM_PERIOD;
4782 case WNI_CFG_EDCA_WME_ACBK:
4783 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4784 case WNI_CFG_EDCA_WME_ACBE:
4785 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4786 case WNI_CFG_EDCA_WME_ACVI:
4787 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4788 case WNI_CFG_EDCA_WME_ACVO:
4789 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4790#if 0
4791 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4792 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4793 case WNI_CFG_TELE_BCN_TRANS_LI:
4794 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4795 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4796 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4797 case WNI_CFG_TELE_BCN_MAX_LI:
4798 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4799 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4800 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4801#endif
4802 case WNI_CFG_ENABLE_CLOSE_LOOP:
4803 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004804 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4805 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304806 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4807 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 default:
4809 {
4810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004811 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 wniCfgId);
4813 return VOS_STATUS_E_INVAL;
4814 }
4815 }
4816}
Jeff Johnson295189b2012-06-20 16:38:30 -07004817/*
4818 * FUNCTION: WDA_UpdateCfgCallback
4819 *
4820 */
4821void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4822{
4823 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4824 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4825 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 /*
4829 * currently there is no response message is expected between PE and
4830 * WDA, Failure return from WDI is a ASSERT condition
4831 */
4832 if(WDI_STATUS_SUCCESS != wdiStatus)
4833 {
4834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004835 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004836 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4837 }
4838
4839 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4840 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4841 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 return ;
4843}
Jeff Johnson295189b2012-06-20 16:38:30 -07004844/*
4845 * FUNCTION: WDA_UpdateCfg
4846 *
4847 */
4848VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4849{
4850
4851 WDI_Status status = WDI_STATUS_SUCCESS ;
4852 tANI_U32 val =0;
4853 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4854 tHalCfg *configData;
4855 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4856 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 if (NULL == pMac )
4860 {
4861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004862 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 return VOS_STATUS_E_FAILURE;
4864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 if(WDA_START_STATE != pWDA->wdaState)
4866 {
4867 return VOS_STATUS_E_FAILURE;
4868 }
4869
4870 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4871 {
4872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004873 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 VOS_ASSERT(0);
4875 return VOS_STATUS_E_FAILURE;
4876 }
4877
4878 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4879 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 if(NULL == wdiCfgReqParam)
4881 {
4882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_ASSERT(0);
4885 return VOS_STATUS_E_NOMEM;
4886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4888 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 if(NULL == wdiCfgReqParam->pConfigBuffer)
4890 {
4891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 vos_mem_free(wdiCfgReqParam);
4894 VOS_ASSERT(0);
4895 return VOS_STATUS_E_NOMEM;
4896 }
4897
4898 /*convert the WNI CFG Id to HAL CFG Id*/
4899 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4900 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4901
4902 /*TODO: revisit this for handling string parameters */
4903 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4904 &val) != eSIR_SUCCESS)
4905 {
4906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004907 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4909 vos_mem_free(wdiCfgReqParam);
4910 return eSIR_FAILURE;
4911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4913 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4914 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4915 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4916 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4917
4918 /* store Params pass it to WDI */
4919 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4921 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4922 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 if(IS_WDI_STATUS_FAILURE(status))
4924 {
4925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4926 "Failure in Update CFG WDI API, free all the memory " );
4927 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4928 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4929 pWDA->wdaWdiCfgApiMsgParam = NULL;
4930 /* Failure is not expected */
4931 VOS_ASSERT(0) ;
4932 }
4933#else
4934 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4935 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4936 pWDA->wdaWdiCfgApiMsgParam = NULL;
4937#endif
4938 return CONVERT_WDI2VOS_STATUS(status) ;
4939}
4940
Jeff Johnson295189b2012-06-20 16:38:30 -07004941VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4942 v_U8_t *pDefaultKeyId,
4943 v_U8_t *pNumKeys,
4944 WDI_KeysType *pWdiKeys )
4945{
4946 v_U32_t i, j, defKeyId = 0;
4947 v_U32_t val = SIR_MAC_KEY_LENGTH;
4948 VOS_STATUS status = WDI_STATUS_SUCCESS;
4949 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 if (NULL == pMac )
4951 {
4952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004953 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 return VOS_STATUS_E_FAILURE;
4955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4957 &defKeyId ))
4958 {
4959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4960 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4961 }
4962
4963 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 /* Need to extract ALL of the configured WEP Keys */
4965 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4966 {
4967 val = SIR_MAC_KEY_LENGTH;
4968 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4969 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4970 pWdiKeys[j].key,
4971 &val ))
4972 {
4973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004974 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 }
4976 else
4977 {
4978 pWdiKeys[j].keyId = (tANI_U8) i;
4979 /*
4980 * Actually, a DC (Don't Care) because
4981 * this is determined (and set) by PE/MLME
4982 */
4983 pWdiKeys[j].unicast = 0;
4984 /*
4985 * Another DC (Don't Care)
4986 */
4987 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4988 /* Another DC (Don't Care). Unused for WEP */
4989 pWdiKeys[j].paeRole = 0;
4990 /* Determined from wlan_cfgGetStr() above.*/
4991 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 j++;
4993 *pNumKeys = (tANI_U8) j;
4994 }
4995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 return status;
4997}
Jeff Johnson295189b2012-06-20 16:38:30 -07004998/*
4999 * FUNCTION: WDA_SetBssKeyReqCallback
5000 * send SET BSS key RSP back to PE
5001 */
5002void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5003{
5004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5005 tWDA_CbContext *pWDA;
5006 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 if(NULL == pWdaParams)
5010 {
5011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 VOS_ASSERT(0) ;
5014 return ;
5015 }
5016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5017 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305018 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5019 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5021 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005022 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 return ;
5025}
Jeff Johnson295189b2012-06-20 16:38:30 -07005026/*
5027 * FUNCTION: WDA_ProcessSetBssKeyReq
5028 * Request to WDI for programming the BSS key( key for
5029 * broadcast/multicast frames Encryption)
5030 */
5031VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5032 tSetBssKeyParams *setBssKeyParams )
5033{
5034 WDI_Status status = WDI_STATUS_SUCCESS ;
5035 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5036 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5037 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005041 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 if(NULL == wdiSetBssKeyParam)
5043 {
5044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 VOS_ASSERT(0);
5047 return VOS_STATUS_E_NOMEM;
5048 }
5049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5050 if(NULL == pWdaParams)
5051 {
5052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 VOS_ASSERT(0);
5055 vos_mem_free(wdiSetBssKeyParam);
5056 return VOS_STATUS_E_NOMEM;
5057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 /* copy set BSS params to WDI structure */
5060 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5061 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5062 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 if(setBssKeyParams->encType != eSIR_ED_NONE)
5064 {
5065 if( setBssKeyParams->numKeys == 0 &&
5066 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5067 setBssKeyParams->encType == eSIR_ED_WEP104))
5068 {
5069 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5071 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5072 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5073 }
5074 else
5075 {
5076 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5077 {
5078 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5079 setBssKeyParams->key[keyIndex].keyId;
5080 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5081 setBssKeyParams->key[keyIndex].unicast;
5082 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5083 setBssKeyParams->key[keyIndex].keyDirection;
5084 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5085 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5086 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5087 setBssKeyParams->key[keyIndex].paeRole;
5088 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5089 setBssKeyParams->key[keyIndex].keyLength;
5090 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5091 setBssKeyParams->key[keyIndex].key,
5092 SIR_MAC_MAX_KEY_LENGTH);
5093 }
5094 }
5095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5097 setBssKeyParams->singleTidRc;
5098 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 /* Store set key pointer, as this will be used for response */
5100 /* store Params pass it to WDI */
5101 pWdaParams->pWdaContext = pWDA;
5102 pWdaParams->wdaMsgParam = setBssKeyParams;
5103 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5105 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5106
5107 if(IS_WDI_STATUS_FAILURE(status))
5108 {
5109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5110 "Failure in Set BSS Key Req WDI API, free all the memory " );
5111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5112 vos_mem_free(pWdaParams) ;
5113 setBssKeyParams->status = eSIR_FAILURE ;
5114 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 return CONVERT_WDI2VOS_STATUS(status) ;
5117}
Jeff Johnson295189b2012-06-20 16:38:30 -07005118/*
5119 * FUNCTION: WDA_RemoveBssKeyReqCallback
5120 * send SET BSS key RSP back to PE
5121 */
5122void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5123{
5124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5125 tWDA_CbContext *pWDA;
5126 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005128 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 if(NULL == pWdaParams)
5130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005132 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 VOS_ASSERT(0) ;
5134 return ;
5135 }
5136 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5137 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5139 vos_mem_free(pWdaParams) ;
5140
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005141 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 return ;
5144}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305145
5146/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305147 * FUNCTION: WDA_GetFrameLogRspCallback
5148 * recieves get frame log response from FW
5149 */
5150void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5151 void* pUserData)
5152{
5153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5154 tWDA_CbContext *pWDA = NULL;
5155 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5156
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5158 "<------ Entering: %s " ,__func__);
5159 if(NULL == pWdaParams)
5160 {
5161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5162 "%s: pWdaParams received NULL", __func__);
5163 VOS_ASSERT(0) ;
5164 return ;
5165 }
5166
5167 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5168 if (NULL == pWDA)
5169 {
5170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5171 "%s:pWDA is NULL", __func__);
5172 VOS_ASSERT(0);
5173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5174 vos_mem_free(pWdaParams);
5175 return ;
5176 }
5177
5178 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5179 if(NULL == pGetFrameLogReqParams)
5180 {
5181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5182 "%s: pGetFrameLogReqParams received NULL", __func__);
5183 VOS_ASSERT(0);
5184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5185 vos_mem_free(pWdaParams);
5186 return;
5187 }
5188
5189 pGetFrameLogReqParams->rspStatus = wdiRsp->wdiStatus;
5190 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5192 "%s:GetFrameLog with rsp status %d", __func__, wdiRsp->wdiStatus);
5193 }
5194
5195 if(pGetFrameLogReqParams->getFramelogCallback)
5196 {
5197 pGetFrameLogReqParams->getFramelogCallback(
5198 pGetFrameLogReqParams->pDevContext);
5199 }
5200 else
5201 {
5202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5203 "%s: pGetFrameLogReqParams callback is NULL", __func__);
5204 }
5205
5206 /* free WDI command buffer only */
5207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5208 vos_mem_free(pWdaParams->wdaMsgParam);
5209 vos_mem_free(pWdaParams);
5210
5211 return ;
5212
5213}
5214/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305215 * FUNCTION: WDA_MgmtLoggingInitRspCallback
5216 * recieves Mgmt Logging init response from FW
5217 */
5218void WDA_MgmtLoggingInitRspCallback(WDI_MgmtLoggingRspParamType* wdiRsp,
5219 void* pUserData)
5220{
5221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5222 tSirMgmtLoggingInitParam *pMgmtLoggingInitParams;
5223
5224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5225 "<------ %s " ,__func__);
5226
5227 if(NULL == pWdaParams)
5228 {
5229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5230 "%s: pWdaParams received NULL", __func__);
5231 VOS_ASSERT(0);
5232 return ;
5233 }
5234
5235 if(NULL == pWdaParams->wdaMsgParam)
5236 {
5237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5238 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5239 VOS_ASSERT(0);
5240 vos_mem_free(pWdaParams);
5241 return ;
5242 }
5243
5244 pMgmtLoggingInitParams = (tSirMgmtLoggingInitParam *)pWdaParams->wdaMsgParam;
5245
5246 if(pMgmtLoggingInitParams->mgmtlogInitCallback)
5247 {
5248 pMgmtLoggingInitParams->mgmtlogInitCallback(
5249 pMgmtLoggingInitParams->mgmtlogInitCbContext,
5250 CONVERT_WDI2VOS_STATUS(wdiRsp->wdiStatus));
5251 }
5252 else
5253 {
5254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5255 "%s: pMgmtLoggingInitParams callback is NULL", __func__);
5256 }
5257
5258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5259 vos_mem_free(pWdaParams->wdaMsgParam);
5260 vos_mem_free(pWdaParams);
5261
5262 return;
5263}
5264
5265/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305266 * FUNCTION: WDA_SpoofMacAddrRspCallback
5267 * recieves spoof mac addr response from FW
5268 */
5269void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5270{
5271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5272 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305273
Siddharth Bhal171788a2014-09-29 21:02:40 +05305274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5275 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305276
Siddharth Bhal171788a2014-09-29 21:02:40 +05305277 if(NULL == pWdaParams)
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5280 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305281 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305282 return ;
5283 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305284 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305285
Siddharth Bhal029d6732014-10-09 21:31:23 +05305286 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305288 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305289 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305290 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5291 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305292
Siddharth Bhal171788a2014-09-29 21:02:40 +05305293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305294 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305295 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305296
5297 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305298}
5299
Jeff Johnson295189b2012-06-20 16:38:30 -07005300/*
5301 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5302 * Request to WDI to remove the BSS key( key for broadcast/multicast
5303 * frames Encryption)
5304 */
5305VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5306 tRemoveBssKeyParams *removeBssKeyParams )
5307{
5308 WDI_Status status = WDI_STATUS_SUCCESS ;
5309 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5310 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5311 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5312 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005314 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 if(NULL == wdiRemoveBssKeyParam)
5316 {
5317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005319 VOS_ASSERT(0);
5320 return VOS_STATUS_E_NOMEM;
5321 }
5322 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5323 if(NULL == pWdaParams)
5324 {
5325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 VOS_ASSERT(0);
5328 vos_mem_free(wdiRemoveBssKeyParam);
5329 return VOS_STATUS_E_NOMEM;
5330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 /* copy Remove BSS key params to WDI structure*/
5332 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5333 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5334 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5335 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5336 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 /* Store remove key pointer, as this will be used for response */
5338 /* store Params pass it to WDI */
5339 pWdaParams->pWdaContext = pWDA;
5340 pWdaParams->wdaMsgParam = removeBssKeyParams;
5341 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5343 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 if(IS_WDI_STATUS_FAILURE(status))
5345 {
5346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5347 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5349 vos_mem_free(pWdaParams) ;
5350 removeBssKeyParams->status = eSIR_FAILURE ;
5351 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 return CONVERT_WDI2VOS_STATUS(status) ;
5354}
Jeff Johnson295189b2012-06-20 16:38:30 -07005355/*
5356 * FUNCTION: WDA_SetBssKeyReqCallback
5357 * send SET BSS key RSP back to PE
5358 */
5359void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5360{
5361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5362 tWDA_CbContext *pWDA;
5363 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005365 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 if(NULL == pWdaParams)
5367 {
5368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005369 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 VOS_ASSERT(0) ;
5371 return ;
5372 }
5373 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5374 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305375 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5376 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5378 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005379 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 return ;
5382}
Jeff Johnson295189b2012-06-20 16:38:30 -07005383/*
5384 * FUNCTION: WDA_ProcessSetStaKeyReq
5385 * Request to WDI for programming the STA key( key for Unicast frames
5386 * Encryption)
5387 */
5388VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5389 tSetStaKeyParams *setStaKeyParams )
5390{
5391 WDI_Status status = WDI_STATUS_SUCCESS ;
5392 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5393 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5394 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5395 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005398 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(NULL == wdiSetStaKeyParam)
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 VOS_ASSERT(0);
5404 return VOS_STATUS_E_NOMEM;
5405 }
5406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5407 if(NULL == pWdaParams)
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 VOS_ASSERT(0);
5412 vos_mem_free(wdiSetStaKeyParam);
5413 return VOS_STATUS_E_NOMEM;
5414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 /* copy set STA key params to WDI structure */
5418 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5419 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5420 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5421 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 if(setStaKeyParams->encType != eSIR_ED_NONE)
5423 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005424 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5426 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5427 {
5428 WDA_GetWepKeysFromCfg( pWDA,
5429 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5430 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5431 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5432 }
5433 else
5434 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5436 keyIndex++)
5437 {
5438 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5439 setStaKeyParams->key[keyIndex].keyId;
5440 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5441 setStaKeyParams->key[keyIndex].unicast;
5442 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5443 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5445 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5446 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5447 setStaKeyParams->key[keyIndex].paeRole;
5448 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5449 setStaKeyParams->key[keyIndex].keyLength;
5450 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5451 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5452 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5453 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5454 {
5455 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5456 }
5457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5459 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 }
5461 }
5462 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5463 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 /* Store set key pointer, as this will be used for response */
5465 /* store Params pass it to WDI */
5466 pWdaParams->pWdaContext = pWDA;
5467 pWdaParams->wdaMsgParam = setStaKeyParams;
5468 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5470 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 if(IS_WDI_STATUS_FAILURE(status))
5472 {
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5474 "Failure in set STA Key Req WDI API, free all the memory " );
5475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5476 vos_mem_free(pWdaParams) ;
5477 setStaKeyParams->status = eSIR_FAILURE ;
5478 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 return CONVERT_WDI2VOS_STATUS(status) ;
5481}
Jeff Johnson295189b2012-06-20 16:38:30 -07005482/*
5483 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5484 * send SET Bcast STA key RSP back to PE
5485 */
5486void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5487{
5488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5489 tWDA_CbContext *pWDA;
5490 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005492 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005493 if(NULL == pWdaParams)
5494 {
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005496 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 VOS_ASSERT(0) ;
5498 return ;
5499 }
5500 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5501 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5503 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005504 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 return ;
5507}
5508
Jeff Johnson295189b2012-06-20 16:38:30 -07005509/*
5510 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5511 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5512 * Encryption)
5513 */
5514VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5515 tSetStaKeyParams *setStaKeyParams )
5516{
5517 WDI_Status status = WDI_STATUS_SUCCESS ;
5518 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5519 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5520 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5521 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005524 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 if(NULL == wdiSetStaKeyParam)
5526 {
5527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 VOS_ASSERT(0);
5530 return VOS_STATUS_E_NOMEM;
5531 }
5532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5533 if(NULL == pWdaParams)
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 VOS_ASSERT(0);
5538 vos_mem_free(wdiSetStaKeyParam);
5539 return VOS_STATUS_E_NOMEM;
5540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 /* copy set STA key params to WDI structure */
5544 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5545 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5546 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5547 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 if(setStaKeyParams->encType != eSIR_ED_NONE)
5549 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5551 keyIndex++)
5552 {
5553 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5554 setStaKeyParams->key[keyIndex].keyId;
5555 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5556 setStaKeyParams->key[keyIndex].unicast;
5557 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5558 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5560 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5561 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5562 setStaKeyParams->key[keyIndex].paeRole;
5563 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5564 setStaKeyParams->key[keyIndex].keyLength;
5565 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5566 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5569 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 }
5571 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 /* Store set key pointer, as this will be used for response */
5573 /* store Params pass it to WDI */
5574 pWdaParams->pWdaContext = pWDA;
5575 pWdaParams->wdaMsgParam = setStaKeyParams;
5576 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5578 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 if(IS_WDI_STATUS_FAILURE(status))
5580 {
5581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5582 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5584 vos_mem_free(pWdaParams) ;
5585 setStaKeyParams->status = eSIR_FAILURE ;
5586 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 return CONVERT_WDI2VOS_STATUS(status) ;
5589}
Jeff Johnson295189b2012-06-20 16:38:30 -07005590/*
5591 * FUNCTION: WDA_RemoveStaKeyReqCallback
5592 * send SET BSS key RSP back to PE
5593 */
5594void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5595{
5596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5597 tWDA_CbContext *pWDA;
5598 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 if(NULL == pWdaParams)
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005604 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 VOS_ASSERT(0) ;
5606 return ;
5607 }
5608 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5609 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5611 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005612 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 return ;
5615}
5616
Jeff Johnson295189b2012-06-20 16:38:30 -07005617/*
5618 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5619 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5620 */
5621VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5622 tRemoveStaKeyParams *removeStaKeyParams )
5623{
5624 WDI_Status status = WDI_STATUS_SUCCESS ;
5625 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5626 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5627 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5628 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 if(NULL == wdiRemoveStaKeyParam)
5632 {
5633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 VOS_ASSERT(0);
5636 return VOS_STATUS_E_NOMEM;
5637 }
5638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5639 if(NULL == pWdaParams)
5640 {
5641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 VOS_ASSERT(0);
5644 vos_mem_free(wdiRemoveStaKeyParam);
5645 return VOS_STATUS_E_NOMEM;
5646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 /* copy remove STA key params to WDI structure*/
5648 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5649 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5650 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5651 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5652 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 /* Store remove key pointer, as this will be used for response */
5654 /* store Params pass it to WDI */
5655 pWdaParams->pWdaContext = pWDA;
5656 pWdaParams->wdaMsgParam = removeStaKeyParams;
5657 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5659 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005660 if(IS_WDI_STATUS_FAILURE(status))
5661 {
5662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5663 "Failure in remove STA Key Req WDI API, free all the memory " );
5664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5665 vos_mem_free(pWdaParams) ;
5666 removeStaKeyParams->status = eSIR_FAILURE ;
5667 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005669 return CONVERT_WDI2VOS_STATUS(status) ;
5670}
Jeff Johnson295189b2012-06-20 16:38:30 -07005671/*
5672 * FUNCTION: WDA_IsHandleSetLinkStateReq
5673 * Update the WDA state and return the status to handle this message or not
5674 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005675WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5676 tWDA_CbContext *pWDA,
5677 tLinkStateParams *linkStateParams)
5678{
5679 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 switch(linkStateParams->state)
5681 {
5682 case eSIR_LINK_PREASSOC_STATE:
5683 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5684 /*
5685 * set the WDA state to PRE ASSOC
5686 * copy the BSSID into pWDA to use it in join request and return,
5687 * No need to handle these messages.
5688 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005689 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5690 {
5691 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005693 }
5694 else
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005697 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005698 VOS_ASSERT(0);
5699 }
5700
5701 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5702 {
5703 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005705 }
5706 else
5707 {
5708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005709 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005710 VOS_ASSERT(0);
5711 }
5712
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5714 *channel and after ) so reset the WDA state to ready when the second
5715 * time UMAC issue the link state with PREASSOC
5716 */
5717 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5718 {
5719 /* RESET WDA state back to WDA_READY_STATE */
5720 pWDA->wdaState = WDA_READY_STATE;
5721 }
5722 else
5723 {
5724 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5725 }
5726 //populate linkState info in WDACbCtxt
5727 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 default:
5730 if(pWDA->wdaState != WDA_READY_STATE)
5731 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005732 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5733 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5734 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5735 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5736 *the ASSERT in WDA_Stop during module unload.*/
5737 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5738 {
5739 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005740 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005741 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005742 else
5743 {
5744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005745 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005746 status = WDA_IGNORE_SET_LINK_STATE;
5747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 }
5749 break;
5750 }
5751
5752 return status;
5753}
Jeff Johnson295189b2012-06-20 16:38:30 -07005754/*
5755 * FUNCTION: WDA_SetLinkStateCallback
5756 * call back function for set link state from WDI
5757 */
5758void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5759{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305760 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 tLinkStateParams *linkStateParams;
5762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005764 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305765 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 {
5767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005768 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005769 VOS_ASSERT(0) ;
5770 return ;
5771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305773 if (NULL == pWDA)
5774 {
5775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5776 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5778 vos_mem_free(pWdaParams->wdaMsgParam);
5779 vos_mem_free(pWdaParams);
5780
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305781 VOS_ASSERT(0);
5782 return ;
5783 }
5784
Jeff Johnson295189b2012-06-20 16:38:30 -07005785 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 /*
5787 * In STA mode start the BA activity check timer after association
5788 * and in AP mode start BA activity check timer after BSS start */
5789 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5790 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005791 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5792 ((status == WDI_STATUS_SUCCESS) &&
5793 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 {
5795 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 /*
5799 * No respone required for WDA_SET_LINK_STATE so free the request
5800 * param here
5801 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5803 vos_mem_free(pWdaParams);
5804
Jeff Johnson295189b2012-06-20 16:38:30 -07005805 return ;
5806}
Jeff Johnson295189b2012-06-20 16:38:30 -07005807/*
5808 * FUNCTION: WDA_ProcessSetLinkState
5809 * Request to WDI to set the link status.
5810 */
5811VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5812 tLinkStateParams *linkStateParams)
5813{
5814 WDI_Status status = WDI_STATUS_SUCCESS ;
5815 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5816 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5817 sizeof(WDI_SetLinkReqParamsType)) ;
5818 tWDA_ReqParams *pWdaParams ;
5819 tpAniSirGlobal pMac;
5820 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5821
5822 if(NULL == pMac)
5823 {
5824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005825 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005827 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 return VOS_STATUS_E_FAILURE;
5829 }
5830
5831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 if(NULL == wdiSetLinkStateParam)
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 VOS_ASSERT(0);
5838 return VOS_STATUS_E_NOMEM;
5839 }
5840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5841 if(NULL == pWdaParams)
5842 {
5843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 VOS_ASSERT(0);
5846 vos_mem_free(wdiSetLinkStateParam);
5847 return VOS_STATUS_E_NOMEM;
5848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 if(WDA_IGNORE_SET_LINK_STATE ==
5850 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5851 {
5852 status = WDI_STATUS_E_FAILURE;
5853 }
5854 else
5855 {
5856 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5857 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5859 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5861 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 pWdaParams->pWdaContext = pWDA;
5863 /* Store remove key pointer, as this will be used for response */
5864 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 /* store Params pass it to WDI */
5866 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5867 /* Stop Timer only other than GO role and concurrent session */
5868 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005869 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5871 {
5872 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5875 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 if(IS_WDI_STATUS_FAILURE(status))
5877 {
5878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5879 "Failure in set link state Req WDI API, free all the memory " );
5880 }
5881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 if(IS_WDI_STATUS_FAILURE(status))
5883 {
5884 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005885 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 vos_mem_free(pWdaParams);
5887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 return CONVERT_WDI2VOS_STATUS(status) ;
5889}
Jeff Johnson295189b2012-06-20 16:38:30 -07005890/*
5891 * FUNCTION: WDA_GetStatsReqParamsCallback
5892 * send the response to PE with Stats received from WDI
5893 */
5894void WDA_GetStatsReqParamsCallback(
5895 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5896 void* pUserData)
5897{
5898 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5899 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5900
5901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 pGetPEStatsRspParams =
5904 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5905 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5906
5907 if(NULL == pGetPEStatsRspParams)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_ASSERT(0);
5912 return;
5913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5915 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5916 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5917 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005918
5919 //Fill the Session Id Properly in PE
5920 pGetPEStatsRspParams->sessionId = 0;
5921 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005922 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5924 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 vos_mem_copy( pGetPEStatsRspParams + 1,
5926 wdiGetStatsRsp + 1,
5927 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 /* send response to UMAC*/
5929 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5930
5931 return;
5932}
5933
Jeff Johnson295189b2012-06-20 16:38:30 -07005934/*
5935 * FUNCTION: WDA_ProcessGetStatsReq
5936 * Request to WDI to get the statistics
5937 */
5938VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5939 tAniGetPEStatsReq *pGetStatsParams)
5940{
5941 WDI_Status status = WDI_STATUS_SUCCESS ;
5942 WDI_GetStatsReqParamsType wdiGetStatsParam;
5943 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005945 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5947 pGetStatsParams->staId;
5948 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5949 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 status = WDI_GetStatsReq(&wdiGetStatsParam,
5952 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 if(IS_WDI_STATUS_FAILURE(status))
5954 {
5955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5956 "Failure in Get Stats Req WDI API, free all the memory " );
5957 pGetPEStatsRspParams =
5958 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5959 if(NULL == pGetPEStatsRspParams)
5960 {
5961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005962 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005964 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 return VOS_STATUS_E_NOMEM;
5966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5968 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5969 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5970 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5971 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5972 (void *)pGetPEStatsRspParams, 0) ;
5973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 /* Free the request message */
5975 vos_mem_free(pGetStatsParams);
5976 return CONVERT_WDI2VOS_STATUS(status);
5977}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005978
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005979#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005980/*
5981 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5982 * send the response to PE with roam Rssi received from WDI
5983 */
5984void WDA_GetRoamRssiReqParamsCallback(
5985 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5986 void* pUserData)
5987{
5988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5989 tWDA_CbContext *pWDA = NULL;
5990 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5991 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5993 "<------ %s " ,__func__);
5994 if(NULL == pWdaParams)
5995 {
5996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5997 "%s: pWdaParams received NULL", __func__);
5998 VOS_ASSERT(0) ;
5999 return ;
6000 }
6001 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6002 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6003
6004 if(NULL == pGetRoamRssiReqParams)
6005 {
6006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6007 "%s: pGetRoamRssiReqParams received NULL", __func__);
6008 VOS_ASSERT(0);
6009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6010 vos_mem_free(pWdaParams);
6011 return ;
6012 }
6013 pGetRoamRssiRspParams =
6014 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6015
6016 if(NULL == pGetRoamRssiRspParams)
6017 {
6018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6019 "%s: VOS MEM Alloc Failure", __func__);
6020 VOS_ASSERT(0);
6021 return;
6022 }
6023 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6024 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006025 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006026 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6027 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6028
6029 /* Assign get roam rssi req (backup) in to the response */
6030 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6031
6032 /* free WDI command buffer */
6033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6034 vos_mem_free(pWdaParams) ;
6035
6036 /* send response to UMAC*/
6037 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6038
6039 return;
6040}
6041
6042
6043
6044/*
6045 * FUNCTION: WDA_ProcessGetRoamRssiReq
6046 * Request to WDI to get the statistics
6047 */
6048VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6049 tAniGetRssiReq *pGetRoamRssiParams)
6050{
6051 WDI_Status status = WDI_STATUS_SUCCESS ;
6052 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6053 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6054 tWDA_ReqParams *pWdaParams = NULL;
6055
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6057 "------> %s " ,__func__);
6058 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6059 pGetRoamRssiParams->staId;
6060 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6061
6062 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6063 if(NULL == pWdaParams)
6064 {
6065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6066 "%s: VOS MEM Alloc Failure", __func__);
6067 VOS_ASSERT(0);
6068 return VOS_STATUS_E_NOMEM;
6069 }
6070
6071 /* Store Init Req pointer, as this will be used for response */
6072 pWdaParams->pWdaContext = pWDA;
6073
6074 /* Take Get roam Rssi req backup as it stores the callback to be called after
6075 receiving the response */
6076 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6077 pWdaParams->wdaWdiApiMsgParam = NULL;
6078
6079 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6080 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6081 if(IS_WDI_STATUS_FAILURE(status))
6082 {
6083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6084 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6085 pGetRoamRssiRspParams =
6086 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6087 if(NULL == pGetRoamRssiRspParams)
6088 {
6089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6090 "%s: VOS MEM Alloc Failure", __func__);
6091 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306092 vos_mem_free(pGetRoamRssiParams);
6093 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006094 return VOS_STATUS_E_NOMEM;
6095 }
6096 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6097 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6098 pGetRoamRssiRspParams->rssi = 0;
6099 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6100 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6101 (void *)pGetRoamRssiRspParams, 0) ;
6102 }
6103 return CONVERT_WDI2VOS_STATUS(status);
6104}
6105#endif
6106
6107
Jeff Johnson295189b2012-06-20 16:38:30 -07006108/*
6109 * FUNCTION: WDA_UpdateEDCAParamCallback
6110 * call back function for Update EDCA params from WDI
6111 */
6112void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6113{
6114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6115 tEdcaParams *pEdcaParams;
6116
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 if(NULL == pWdaParams)
6120 {
6121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 VOS_ASSERT(0) ;
6124 return ;
6125 }
6126 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6128 vos_mem_free(pWdaParams);
6129 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 return ;
6131}
Jeff Johnson295189b2012-06-20 16:38:30 -07006132/*
6133 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6134 * Request to WDI to Update the EDCA params.
6135 */
6136VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6137 tEdcaParams *pEdcaParams)
6138{
6139 WDI_Status status = WDI_STATUS_SUCCESS ;
6140 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6141 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6142 sizeof(WDI_UpdateEDCAParamsType)) ;
6143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 if(NULL == wdiEdcaParam)
6147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006151 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 return VOS_STATUS_E_NOMEM;
6153 }
6154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6155 if(NULL == pWdaParams)
6156 {
6157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 VOS_ASSERT(0);
6160 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006161 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 return VOS_STATUS_E_NOMEM;
6163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006165 /*
6166 Since firmware is not using highperformance flag, we have removed
6167 this flag from wdiEDCAInfo structure to match sizeof the structure
6168 between host and firmware.In future if we are planning to use
6169 highperformance flag then Please define this flag in wdiEDCAInfo
6170 structure, update it here and send it to firmware. i.e.
6171 Following is the original line which we removed as part of the fix
6172 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6173 pEdcaParams->highPerformance;
6174 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6176 &pEdcaParams->acbe);
6177 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6178 &pEdcaParams->acbk);
6179 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6180 &pEdcaParams->acvi);
6181 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6182 &pEdcaParams->acvo);
6183 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006184 pWdaParams->pWdaContext = pWDA;
6185 /* Store remove key pointer, as this will be used for response */
6186 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 /* store Params pass it to WDI */
6188 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6190 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if(IS_WDI_STATUS_FAILURE(status))
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6194 "Failure in Update EDCA Params WDI API, free all the memory " );
6195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6196 vos_mem_free(pWdaParams);
6197 vos_mem_free(pEdcaParams);
6198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 return CONVERT_WDI2VOS_STATUS(status) ;
6200}
Jeff Johnson295189b2012-06-20 16:38:30 -07006201/*
6202 * FUNCTION: WDA_AddBAReqCallback
6203 * send ADD BA RSP back to PE
6204 */
6205void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6206 void* pUserData)
6207{
6208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6209 tWDA_CbContext *pWDA;
6210 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306213 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 VOS_ASSERT(0) ;
6218 return ;
6219 }
6220 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306221 if (NULL == pWDA)
6222 {
6223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6224 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6226 vos_mem_free(pWdaParams->wdaMsgParam);
6227 vos_mem_free(pWdaParams);
6228
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306229 VOS_ASSERT(0);
6230 return ;
6231 }
6232
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6235 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006236 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 return ;
6239}
6240
Jeff Johnson295189b2012-06-20 16:38:30 -07006241/*
6242 * FUNCTION: WDA_ProcessAddBAReq
6243 * Request to WDI to Update the ADDBA REQ params.
6244 */
6245VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306246 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006247{
Jeff Johnson43971f52012-07-17 12:26:56 -07006248 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6250 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6251 sizeof(WDI_AddBAReqParamsType)) ;
6252 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(NULL == wdiAddBAReqParam)
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 VOS_ASSERT(0);
6260 return VOS_STATUS_E_NOMEM;
6261 }
6262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6263 if(NULL == pWdaParams)
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 VOS_ASSERT(0);
6268 vos_mem_free(wdiAddBAReqParam);
6269 return VOS_STATUS_E_NOMEM;
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 do
6272 {
6273 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 wdiAddBaInfo->ucSTAIdx = staIdx ;
6275 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306276 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 } while(0) ;
6278 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 pWdaParams->pWdaContext = pWDA;
6280 /* store Params pass it to WDI */
6281 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6282 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006283 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6284 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006285
Jeff Johnson43971f52012-07-17 12:26:56 -07006286 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 {
6288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006289 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6290 status = CONVERT_WDI2VOS_STATUS(wstatus);
6291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 vos_mem_free(pWdaParams);
6293 pAddBAReqParams->status = eSIR_FAILURE;
6294 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6295 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006296 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006297}
Jeff Johnson295189b2012-06-20 16:38:30 -07006298/*
6299 * FUNCTION: WDA_AddBASessionReqCallback
6300 * send ADD BA SESSION RSP back to PE/(or TL)
6301 */
6302void WDA_AddBASessionReqCallback(
6303 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6304{
6305 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306307 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006310 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 if(NULL == pWdaParams)
6312 {
6313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006314 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 VOS_ASSERT(0) ;
6316 return ;
6317 }
6318 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306319 if (NULL == pWDA)
6320 {
6321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6322 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6324 vos_mem_free(pWdaParams->wdaMsgParam);
6325 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306326 VOS_ASSERT(0);
6327 return ;
6328 }
6329
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 if( NULL == pAddBAReqParams )
6332 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006334 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6337 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 return ;
6339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6341 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306343 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 * another request to HAL(/WDI) (ADD_BA_REQ)
6345 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 if((VOS_STATUS_SUCCESS ==
6347 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306348 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 {
6350 /* Update TL with BA info received from HAL/WDI */
6351 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6352 wdiAddBaSession->usBaSessionID,
6353 wdiAddBaSession->ucSTAIdx,
6354 wdiAddBaSession->ucBaTID,
6355 wdiAddBaSession->ucBaBufferSize,
6356 wdiAddBaSession->ucWinSize,
6357 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306359 wdiAddBaSession->ucSTAIdx,
6360 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 }
6362 else
6363 {
6364 pAddBAReqParams->status =
6365 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6366
6367 /* Setting Flag to indicate that Set BA is success */
6368 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6369 {
6370 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6371 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6372 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 /*Reset the WDA state to READY */
6377 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 return ;
6379}
6380
Jeff Johnson295189b2012-06-20 16:38:30 -07006381/*
6382 * FUNCTION: WDA_ProcessAddBASessionReq
6383 * Request to WDI to Update the ADDBA REQ params.
6384 */
6385VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6386 tAddBAParams *pAddBAReqParams)
6387{
6388 WDI_Status status = WDI_STATUS_SUCCESS ;
6389 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6390 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6391 sizeof(WDI_AddBASessionReqParamsType)) ;
6392 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006393 WLANTL_STAStateType tlSTAState = 0;
6394
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006396 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 if(NULL == wdiAddBASessionReqParam)
6398 {
6399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 VOS_ASSERT(0);
6402 return VOS_STATUS_E_NOMEM;
6403 }
6404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6405 if(NULL == pWdaParams)
6406 {
6407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 VOS_ASSERT(0);
6410 vos_mem_free(wdiAddBASessionReqParam);
6411 return VOS_STATUS_E_NOMEM;
6412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 /*
6414 * Populate ADD BA parameters and pass these paarmeters to WDI.
6415 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6416 * the state to track if these is BA recipient case or BA initiator
6417 * case.
6418 */
6419 do
6420 {
6421 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6422 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6423 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6424 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6425 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6426 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6427 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6430 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6431 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6432 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6433 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306434
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 }while(0) ;
6436 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 pWdaParams->pWdaContext = pWDA;
6438 /* Store ADD BA pointer, as this will be used for response */
6439 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6440 /* store Params pass it to WDI */
6441 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006442
6443 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6444 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6445 */
6446 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6447 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6448 {
6449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006450 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006451 status = WDI_STATUS_E_NOT_ALLOWED;
6452 pAddBAReqParams->status =
6453 CONVERT_WDI2SIR_STATUS(status) ;
6454 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6455 /*Reset the WDA state to READY */
6456 pWDA->wdaState = WDA_READY_STATE;
6457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6458 vos_mem_free(pWdaParams);
6459
6460 return CONVERT_WDI2VOS_STATUS(status) ;
6461 }
6462
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6464 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 if(IS_WDI_STATUS_FAILURE(status))
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006468 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006470 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006471 pAddBAReqParams->status =
6472 CONVERT_WDI2SIR_STATUS(status) ;
6473 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006474 /*Reset the WDA state to READY */
6475 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 vos_mem_free(pWdaParams);
6478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006480}
Jeff Johnson295189b2012-06-20 16:38:30 -07006481/*
6482 * FUNCTION: WDA_DelBANotifyTL
6483 * send DEL BA IND to TL
6484 */
6485void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6486 tDelBAParams *pDelBAReqParams)
6487{
6488 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6489 //tSirMsgQ msg;
6490 vos_msg_t vosMsg;
6491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 if(NULL == pDelBAInd)
6493 {
6494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006496 VOS_ASSERT(0) ;
6497 return;
6498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6500 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6501 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6502 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006503
Jeff Johnson295189b2012-06-20 16:38:30 -07006504
6505 vosMsg.type = WDA_DELETEBA_IND;
6506 vosMsg.bodyptr = pDelBAInd;
6507 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6508 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6509 {
6510 vosStatus = VOS_STATUS_E_BADMSG;
6511 }
6512}
Jeff Johnson295189b2012-06-20 16:38:30 -07006513/*
6514 * FUNCTION: WDA_DelBAReqCallback
6515 * send DEL BA RSP back to PE
6516 */
6517void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6518{
6519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6520 tWDA_CbContext *pWDA;
6521 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 if(NULL == pWdaParams)
6525 {
6526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 VOS_ASSERT(0) ;
6529 return ;
6530 }
6531 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306532
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 /* Notify TL about DEL BA in case of recipinet */
6535 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6536 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6537 {
6538 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 /*
6541 * No respone required for WDA_DELBA_IND so just free the request
6542 * param here
6543 */
6544 vos_mem_free(pDelBAReqParams);
6545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6546 vos_mem_free(pWdaParams);
6547 return ;
6548}
6549
Jeff Johnson295189b2012-06-20 16:38:30 -07006550/*
6551 * FUNCTION: WDA_ProcessDelBAReq
6552 * Request to WDI to Update the DELBA REQ params.
6553 */
6554VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6555 tDelBAParams *pDelBAReqParams)
6556{
6557 WDI_Status status = WDI_STATUS_SUCCESS ;
6558 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6559 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6560 sizeof(WDI_DelBAReqParamsType)) ;
6561 tWDA_ReqParams *pWdaParams ;
6562 tANI_U16 staIdx = 0;
6563 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006565 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 if(NULL == wdiDelBAReqParam)
6567 {
6568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006569 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 VOS_ASSERT(0);
6571 return VOS_STATUS_E_NOMEM;
6572 }
6573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6574 if(NULL == pWdaParams)
6575 {
6576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_ASSERT(0);
6579 vos_mem_free(wdiDelBAReqParam);
6580 return VOS_STATUS_E_NOMEM;
6581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6583 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6584 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6585 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 pWdaParams->pWdaContext = pWDA;
6587 /* Store DEL BA pointer, as this will be used for response */
6588 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 /* store Params pass it to WDI */
6590 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6592 * maintained in WDA, so that WDA can retry for another BA session
6593 */
6594 staIdx = pDelBAReqParams->staIdx;
6595 tid = pDelBAReqParams->baTID;
6596 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 status = WDI_DelBAReq(wdiDelBAReqParam,
6598 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 if(IS_WDI_STATUS_FAILURE(status))
6600 {
6601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6602 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6604 vos_mem_free(pWdaParams->wdaMsgParam);
6605 vos_mem_free(pWdaParams);
6606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006608}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006609
6610/*
6611 * FUNCTION: WDA_UpdateChReqCallback
6612 *
6613 */
6614void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6615{
Siddharth Bhala006c122014-05-03 12:13:27 +05306616 tWDA_ReqParams *pWdaParams;
6617 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6618 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6619 WDI_UpdateChannelReqinfoType *pChanInfoType;
6620 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006621
6622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6623 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306624 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006625 {
6626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306627 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006628 VOS_ASSERT(0);
6629 return;
6630 }
6631
Siddharth Bhala006c122014-05-03 12:13:27 +05306632 pWdaParams = (tWDA_ReqParams *)pUserData;
6633 pwdiUpdateChReqParam =
6634 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6635 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6636 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6637 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006638 /*
6639 * currently there is no response message is expected between PE and
6640 * WDA, Failure return from WDI is a ASSERT condition
6641 */
6642 vos_mem_free(pChanInfoType);
6643 vos_mem_free(pChanList);
6644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6645 vos_mem_free(pWdaParams);
6646
6647 return;
6648}
6649
6650/*
6651 * FUNCTION: WDA_ProcessUpdateChannelList
6652 * Request to WDI to Update the ChannelList params.
6653 */
6654VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6655 tSirUpdateChanList *pChanList)
6656{
6657 WDI_Status status = WDI_STATUS_SUCCESS;
6658 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6659 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6660 WDI_UpdateChannelReqinfoType *pChanInfoType;
6661 tWDA_ReqParams *pWdaParams;
6662 wpt_uint8 i;
6663
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6665 "------> %s " ,__func__);
6666 if(NULL == pChanList)
6667 {
6668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6669 "%s: NULL pChanList", __func__);
6670 VOS_ASSERT(0);
6671 return VOS_STATUS_E_INVAL;
6672 }
6673
6674 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6675 {
6676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6677 "Update channel list capability Not Supported");
6678 vos_mem_free(pChanList);
6679 return VOS_STATUS_E_INVAL;
6680 }
6681
6682 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6683 sizeof(WDI_UpdateChReqParamsType));
6684 if(NULL == pwdiUpdateChReqParam)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6687 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6688 __func__);
6689 VOS_ASSERT(0);
6690 vos_mem_free(pChanList);
6691 return VOS_STATUS_E_NOMEM;
6692 }
6693 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6694 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6695 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6696 pChanList->numChan);
6697 if(NULL == pChanInfoType)
6698 {
6699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6700 "%s: VOS MEM Alloc Failure", __func__);
6701 VOS_ASSERT(0);
6702 vos_mem_free(pChanList);
6703 vos_mem_free(pwdiUpdateChReqParam);
6704 return VOS_STATUS_E_NOMEM;
6705 }
6706 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6707 * pChanList->numChan);
6708 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6709
6710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6711 if(NULL == pWdaParams)
6712 {
6713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6714 "%s: VOS MEM Alloc Failure", __func__);
6715 VOS_ASSERT(0);
6716 vos_mem_free(pChanList);
6717 vos_mem_free(pChanInfoType);
6718 vos_mem_free(pwdiUpdateChReqParam);
6719 return VOS_STATUS_E_NOMEM;
6720 }
6721 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6722
6723 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6724 {
6725 pChanInfoType->mhz =
6726 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6727
6728 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6729 pChanInfoType->band_center_freq2 = 0;
6730
6731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6732 "chan[%d] = %u", i, pChanInfoType->mhz);
6733 if (pChanList->chanParam[i].dfsSet)
6734 {
6735 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6737 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6738 pChanList->chanParam[i].dfsSet);
6739 }
6740
6741 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6742 {
6743 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6744 }
6745 else
6746 {
6747 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6748 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6749 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6750 }
6751
6752 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6753 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306754 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006755 pChanInfoType++;
6756 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006757 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6758 pWdaParams->pWdaContext = pWDA;
6759 pWdaParams->wdaMsgParam = (void *)pChanList;
6760 /* store Params pass it to WDI */
6761 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6762 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6763 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6764 if(IS_WDI_STATUS_FAILURE(status))
6765 {
6766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6767 "Failure in Update Channel REQ Params WDI API, free all the memory");
6768 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6769 vos_mem_free(pwdiUpdateChReqParam);
6770 vos_mem_free(pWdaParams->wdaMsgParam);
6771 vos_mem_free(pWdaParams);
6772 }
6773 return CONVERT_WDI2VOS_STATUS(status);
6774}
6775
Jeff Johnson295189b2012-06-20 16:38:30 -07006776/*
6777 * FUNCTION: WDA_AddTSReqCallback
6778 * send ADD TS RSP back to PE
6779 */
6780void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6781{
6782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306783 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 tAddTsParams *pAddTsReqParams;
6785
6786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006787 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 if(NULL == pWdaParams)
6789 {
6790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006791 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 VOS_ASSERT(0) ;
6793 return ;
6794 }
6795 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306796 if (NULL == pWDA)
6797 {
6798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6799 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6801 vos_mem_free(pWdaParams->wdaMsgParam);
6802 vos_mem_free(pWdaParams);
6803
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306804 VOS_ASSERT(0);
6805 return ;
6806 }
6807
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6810 vos_mem_free(pWdaParams);
6811
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006812 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 return ;
6815}
6816
Jeff Johnson295189b2012-06-20 16:38:30 -07006817/*
6818 * FUNCTION: WDA_ProcessAddTSReq
6819 * Request to WDI to Update the ADD TS REQ params.
6820 */
6821VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6822 tAddTsParams *pAddTsReqParams)
6823{
6824 WDI_Status status = WDI_STATUS_SUCCESS ;
6825 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6826 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6827 sizeof(WDI_AddTSReqParamsType)) ;
6828 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006830 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 if(NULL == wdiAddTSReqParam)
6832 {
6833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 VOS_ASSERT(0);
6836 return VOS_STATUS_E_NOMEM;
6837 }
6838 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6839 if(NULL == pWdaParams)
6840 {
6841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 VOS_ASSERT(0);
6844 vos_mem_free(wdiAddTSReqParam);
6845 return VOS_STATUS_E_NOMEM;
6846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6848 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 //TS IE
6850 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6851 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6852 pAddTsReqParams->tspec.length;
6853
6854 //TS IE : TS INFO : TRAFFIC
6855 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6856 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6857 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6858 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6859 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6860 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6861 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6862 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6863 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6864 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6865 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6866 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6867 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6868 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6869 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6870 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6871
6872 //TS IE : TS INFO : SCHEDULE
6873 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6874 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6875 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6876 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 //TS IE
6878 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6879 pAddTsReqParams->tspec.nomMsduSz;
6880 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6881 pAddTsReqParams->tspec.maxMsduSz;
6882 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6883 pAddTsReqParams->tspec.minSvcInterval;
6884 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6885 pAddTsReqParams->tspec.maxSvcInterval;
6886 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6887 pAddTsReqParams->tspec.inactInterval;
6888 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6889 pAddTsReqParams->tspec.suspendInterval;
6890 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6891 pAddTsReqParams->tspec.svcStartTime;
6892 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6893 pAddTsReqParams->tspec.minDataRate;
6894 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6895 pAddTsReqParams->tspec.meanDataRate;
6896 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6897 pAddTsReqParams->tspec.peakDataRate;
6898 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6899 pAddTsReqParams->tspec.maxBurstSz;
6900 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6901 pAddTsReqParams->tspec.delayBound;
6902 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6903 pAddTsReqParams->tspec.minPhyRate;
6904 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6905 pAddTsReqParams->tspec.surplusBw;
6906 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6907 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 /* TODO: tAddTsParams doesn't have the following fields */
6909#if 0
6910 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6911 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6912 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6913 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6914#endif
6915 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6916
6917 pWdaParams->pWdaContext = pWDA;
6918 /* Store ADD TS pointer, as this will be used for response */
6919 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 /* store Params pass it to WDI */
6921 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 status = WDI_AddTSReq(wdiAddTSReqParam,
6923 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 if(IS_WDI_STATUS_FAILURE(status))
6925 {
6926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6927 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6929 vos_mem_free(pWdaParams);
6930 pAddTsReqParams->status = eSIR_FAILURE ;
6931 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006934}
6935
Jeff Johnson295189b2012-06-20 16:38:30 -07006936/*
6937 * FUNCTION: WDA_DelTSReqCallback
6938 * send DEL TS RSP back to PE
6939 */
6940void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6941{
6942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006944 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6946 vos_mem_free(pWdaParams->wdaMsgParam) ;
6947 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 /*
6949 * No respone required for WDA_DEL_TS_REQ so just free the request
6950 * param here
6951 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 return ;
6953}
6954
Jeff Johnson295189b2012-06-20 16:38:30 -07006955/*
6956 * FUNCTION: WDA_ProcessDelTSReq
6957 * Request to WDI to Update the DELTS REQ params.
6958 */
6959VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6960 tDelTsParams *pDelTSReqParams)
6961{
6962 WDI_Status status = WDI_STATUS_SUCCESS ;
6963 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6964 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6965 sizeof(WDI_DelTSReqParamsType)) ;
6966 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006968 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 if(NULL == wdiDelTSReqParam)
6970 {
6971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 VOS_ASSERT(0);
6974 return VOS_STATUS_E_NOMEM;
6975 }
6976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6977 if(NULL == pWdaParams)
6978 {
6979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 VOS_ASSERT(0);
6982 vos_mem_free(wdiDelTSReqParam);
6983 return VOS_STATUS_E_NOMEM;
6984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6986 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6987 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6988 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6989 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 pWdaParams->pWdaContext = pWDA;
6991 /* Store DEL TS pointer, as this will be used for response */
6992 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 /* store Params pass it to WDI */
6994 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 status = WDI_DelTSReq(wdiDelTSReqParam,
6996 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 if(IS_WDI_STATUS_FAILURE(status))
6998 {
6999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7000 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7002 vos_mem_free(pWdaParams->wdaMsgParam);
7003 vos_mem_free(pWdaParams);
7004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007006}
Jeff Johnson295189b2012-06-20 16:38:30 -07007007/*
7008 * FUNCTION: WDA_UpdateBeaconParamsCallback
7009 * Free the memory. No need to send any response to PE in this case
7010 */
7011void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7012{
7013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007015 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007016 if(NULL == pWdaParams)
7017 {
7018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007019 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 VOS_ASSERT(0) ;
7021 return ;
7022 }
7023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7024 vos_mem_free(pWdaParams->wdaMsgParam) ;
7025 vos_mem_free(pWdaParams);
7026 /*
7027 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7028 * param here
7029 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 return ;
7031}
Jeff Johnson295189b2012-06-20 16:38:30 -07007032/*
7033 * FUNCTION: WDA_ProcessUpdateBeaconParams
7034 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7035 */
7036VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7037 tUpdateBeaconParams *pUpdateBeaconParams)
7038{
7039 WDI_Status status = WDI_STATUS_SUCCESS ;
7040 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7041 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7042 sizeof(WDI_UpdateBeaconParamsType)) ;
7043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 if(NULL == wdiUpdateBeaconParams)
7047 {
7048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 VOS_ASSERT(0);
7051 return VOS_STATUS_E_NOMEM;
7052 }
7053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7054 if(NULL == pWdaParams)
7055 {
7056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 VOS_ASSERT(0);
7059 vos_mem_free(wdiUpdateBeaconParams);
7060 return VOS_STATUS_E_NOMEM;
7061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7063 pUpdateBeaconParams->bssIdx;
7064 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7065 pUpdateBeaconParams->fShortPreamble;
7066 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7067 pUpdateBeaconParams->fShortSlotTime;
7068 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7069 pUpdateBeaconParams->beaconInterval;
7070 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7071 pUpdateBeaconParams->llaCoexist;
7072 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7073 pUpdateBeaconParams->llbCoexist;
7074 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7075 pUpdateBeaconParams->llgCoexist;
7076 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7077 pUpdateBeaconParams->ht20MhzCoexist;
7078 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7079 pUpdateBeaconParams->llnNonGFCoexist;
7080 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7081 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7082 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7083 pUpdateBeaconParams->fRIFSMode;
7084 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7085 pUpdateBeaconParams->paramChangeBitmap;
7086 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7087
7088 pWdaParams->pWdaContext = pWDA;
7089 /* Store UpdateBeacon Req pointer, as this will be used for response */
7090 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 /* store Params pass it to WDI */
7092 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7094 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7095 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 if(IS_WDI_STATUS_FAILURE(status))
7097 {
7098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7099 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7101 vos_mem_free(pWdaParams->wdaMsgParam);
7102 vos_mem_free(pWdaParams);
7103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007106#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007107/*
7108 * FUNCTION: WDA_TSMStatsReqCallback
7109 * send TSM Stats RSP back to PE
7110 */
7111void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7112{
7113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7114 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007115 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7116 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117
7118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007119 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 if(NULL == pWdaParams)
7121 {
7122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007123 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 VOS_ASSERT(0) ;
7125 return ;
7126 }
7127 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307128 if (NULL == pWDA)
7129 {
7130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7131 "%s:pWDA is NULL", __func__);
7132 VOS_ASSERT(0);
7133 return ;
7134 }
7135
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007136 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7137
7138 if(NULL == pGetTsmStatsReqParams)
7139 {
7140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7141 "%s: pGetTsmStatsReqParams received NULL", __func__);
7142 VOS_ASSERT(0);
7143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7144 vos_mem_free(pWdaParams);
7145 return;
7146 }
7147
7148 pTsmRspParams =
7149 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 if( NULL == pTsmRspParams )
7151 {
7152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007153 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 VOS_ASSERT( 0 );
7155 return ;
7156 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007157 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7158 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7159 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7160
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7162 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7163 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7164 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7165 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7166 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7167 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7168 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7169 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7170 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007171
7172 /* Assign get tsm stats req req (backup) in to the response */
7173 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7174
7175 /* free WDI command buffer */
7176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7177 vos_mem_free(pWdaParams);
7178
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 return ;
7181}
7182
7183
Jeff Johnson295189b2012-06-20 16:38:30 -07007184/*
7185 * FUNCTION: WDA_ProcessTsmStatsReq
7186 * Request to WDI to get the TSM Stats params.
7187 */
7188VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007189 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007190{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007191 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007193 tWDA_ReqParams *pWdaParams = NULL;
7194 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7195
Jeff Johnson295189b2012-06-20 16:38:30 -07007196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007197 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7199 sizeof(WDI_TSMStatsReqParamsType));
7200 if(NULL == wdiTSMReqParam)
7201 {
7202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 VOS_ASSERT(0);
7205 return VOS_STATUS_E_NOMEM;
7206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7208 if(NULL == pWdaParams)
7209 {
7210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007212 VOS_ASSERT(0);
7213 vos_mem_free(wdiTSMReqParam);
7214 return VOS_STATUS_E_NOMEM;
7215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7217 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7218 pTsmStats->bssId,
7219 sizeof(wpt_macAddr));
7220 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7221
7222 pWdaParams->pWdaContext = pWDA;
7223 /* Store TSM Stats pointer, as this will be used for response */
7224 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007225 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 status = WDI_TSMStatsReq(wdiTSMReqParam,
7227 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 if(IS_WDI_STATUS_FAILURE(status))
7229 {
7230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7231 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007232 vos_mem_free(pWdaParams);
7233
7234 pGetTsmStatsRspParams =
7235 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7236 if(NULL == pGetTsmStatsRspParams)
7237 {
7238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7239 "%s: VOS MEM Alloc Failure", __func__);
7240 VOS_ASSERT(0);
7241 vos_mem_free(pTsmStats);
7242 return VOS_STATUS_E_NOMEM;
7243 }
7244 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7245 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7246 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7247
7248 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 return CONVERT_WDI2VOS_STATUS(status) ;
7251}
7252#endif
7253/*
7254 * FUNCTION: WDA_SendBeaconParamsCallback
7255 * No need to send any response to PE in this case
7256 */
7257void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7258{
7259
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007261 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 return ;
7263}
Jeff Johnson295189b2012-06-20 16:38:30 -07007264/*
7265 * FUNCTION: WDA_ProcessSendBeacon
7266 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7267 * start beacon trasmission
7268 */
7269VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7270 tSendbeaconParams *pSendbeaconParams)
7271{
7272 WDI_Status status = WDI_STATUS_SUCCESS ;
7273 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7277 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7278 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7279 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7281 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307282 /* p2pIeOffset should be atleast greater than timIeOffset */
7283 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7284 (pSendbeaconParams->p2pIeOffset <
7285 pSendbeaconParams->timIeOffset))
7286 {
7287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7288 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7289 VOS_ASSERT( 0 );
7290 return WDI_STATUS_E_FAILURE;
7291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007292 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7293 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 /* Copy the beacon template to local buffer */
7295 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7296 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7297 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7298
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7300 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 if(IS_WDI_STATUS_FAILURE(status))
7302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7304 "Failure in SEND BEACON REQ Params WDI API" );
7305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 vos_mem_free(pSendbeaconParams);
7307 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007308}
Jeff Johnson295189b2012-06-20 16:38:30 -07007309/*
7310 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7311 * No need to send any response to PE in this case
7312 */
7313void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7314{
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 return ;
7318}
7319
Jeff Johnson295189b2012-06-20 16:38:30 -07007320/*
7321 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7322 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7323 * send probe response
7324 */
7325VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7326 tSendProbeRespParams *pSendProbeRspParams)
7327{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007328 WDI_Status status = WDI_STATUS_SUCCESS;
7329 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7330 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007332 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007333
7334 if (!wdiSendProbeRspParam)
7335 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7336
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007338 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007340 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 /* Copy the Probe Response template to local buffer */
7343 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007344 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 pSendProbeRspParams->pProbeRespTemplate,
7346 pSendProbeRspParams->probeRespTemplateLen);
7347 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007348 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007349 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7350 WDI_PROBE_REQ_BITMAP_IE_LEN);
7351
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007352 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007353
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007354 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007356 if(IS_WDI_STATUS_FAILURE(status))
7357 {
7358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7359 "Failure in SEND Probe RSP Params WDI API" );
7360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007362 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007364}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007365#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007366/*
7367 * FUNCTION: WDA_SetMaxTxPowerCallBack
7368 * send the response to PE with power value received from WDI
7369 */
7370void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7371 void* pUserData)
7372{
7373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7374 tWDA_CbContext *pWDA = NULL;
7375 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7376
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 if(NULL == pWdaParams)
7380 {
7381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 VOS_ASSERT(0) ;
7384 return ;
7385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307387 if (NULL == pWDA)
7388 {
7389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7390 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7392 vos_mem_free(pWdaParams->wdaMsgParam);
7393 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307394 VOS_ASSERT(0);
7395 return ;
7396 }
7397
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 if( NULL == pMaxTxPowerParams )
7400 {
7401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007402 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007403 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7405 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 return ;
7407 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007408
Jeff Johnson295189b2012-06-20 16:38:30 -07007409
7410 /*need to free memory for the pointers used in the
7411 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7413 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007415
Jeff Johnson295189b2012-06-20 16:38:30 -07007416
7417 /* send response to UMAC*/
7418 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7419
7420 return;
7421}
Jeff Johnson295189b2012-06-20 16:38:30 -07007422/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007423 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 * Request to WDI to send set Max Tx Power Request
7425 */
7426 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7427 tMaxTxPowerParams *MaxTxPowerParams)
7428{
7429 WDI_Status status = WDI_STATUS_SUCCESS;
7430 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7431 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007432
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007434 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7437 sizeof(WDI_SetMaxTxPowerParamsType));
7438 if(NULL == wdiSetMaxTxPowerParams)
7439 {
7440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 VOS_ASSERT(0);
7443 return VOS_STATUS_E_NOMEM;
7444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7446 if(NULL == pWdaParams)
7447 {
7448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 vos_mem_free(wdiSetMaxTxPowerParams);
7451 VOS_ASSERT(0);
7452 return VOS_STATUS_E_NOMEM;
7453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 /* Copy.Max.Tx.Power Params to WDI structure */
7455 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7456 MaxTxPowerParams->bssId,
7457 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7459 MaxTxPowerParams->selfStaMacAddr,
7460 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7462 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 pWdaParams->pWdaContext = pWDA;
7465 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 /* store Params pass it to WDI */
7467 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7469 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 if(IS_WDI_STATUS_FAILURE(status))
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7473 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7475 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007476 /* send response to UMAC*/
7477 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 }
7479 return CONVERT_WDI2VOS_STATUS(status);
7480
7481}
Jeff Johnson295189b2012-06-20 16:38:30 -07007482#endif
schang86c22c42013-03-13 18:41:24 -07007483
7484/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007485 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7486 * send the response to PE with power value received from WDI
7487 */
7488void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7489 *pwdiSetMaxTxPowerPerBandRsp,
7490 void* pUserData)
7491{
7492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7493 tWDA_CbContext *pWDA = NULL;
7494 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7495
7496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7497 "<------ %s ", __func__);
7498 if (NULL == pWdaParams)
7499 {
7500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7501 "%s: pWdaParams received NULL", __func__);
7502 VOS_ASSERT(0);
7503 return ;
7504 }
7505 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307506 if (NULL == pWDA)
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7511 vos_mem_free(pWdaParams->wdaMsgParam);
7512 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307513 VOS_ASSERT(0);
7514 return ;
7515 }
7516
Arif Hussaina5ebce02013-08-09 15:09:58 -07007517 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7518 if ( NULL == pMxTxPwrPerBandParams )
7519 {
7520 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7521 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7522 VOS_ASSERT(0);
7523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7524 vos_mem_free(pWdaParams);
7525 return;
7526 }
7527
7528 /*need to free memory for the pointers used in the
7529 WDA Process.Set Max Tx Power Req function*/
7530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7531 vos_mem_free(pWdaParams);
7532 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7533
7534 /* send response to UMAC*/
7535 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7536 pMxTxPwrPerBandParams, 0);
7537
7538 return;
7539}
7540
7541/*
7542 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7543 * Request to WDI to send set Max Tx Power Per band Request
7544 */
7545 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7546 tMaxTxPowerPerBandParams
7547 *MaxTxPowerPerBandParams)
7548{
7549 WDI_Status status = WDI_STATUS_SUCCESS;
7550 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7551 tWDA_ReqParams *pWdaParams = NULL;
7552
7553 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7554 "------> %s ", __func__);
7555
7556 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7557 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7558
7559 if (NULL == wdiSetMxTxPwrPerBandParams)
7560 {
7561 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7562 "%s: VOS MEM Alloc Failure", __func__);
7563 VOS_ASSERT(0);
7564 return VOS_STATUS_E_NOMEM;
7565 }
7566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7567 if (NULL == pWdaParams)
7568 {
7569 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7570 "%s: VOS MEM Alloc Failure", __func__);
7571 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7572 VOS_ASSERT(0);
7573 return VOS_STATUS_E_NOMEM;
7574 }
7575 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7576 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7577 MaxTxPowerPerBandParams->bandInfo;
7578 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7579 MaxTxPowerPerBandParams->power;
7580 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7581 pWdaParams->pWdaContext = pWDA;
7582 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7583 /* store Params pass it to WDI */
7584 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7585 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7586 WDA_SetMaxTxPowerPerBandCallBack,
7587 pWdaParams);
7588 if (IS_WDI_STATUS_FAILURE(status))
7589 {
7590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "Failure in SET MAX TX Power REQ Params WDI API,"
7592 " free all the memory");
7593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7594 vos_mem_free(pWdaParams);
7595 /* send response to UMAC*/
7596 WDA_SendMsg(pWDA,
7597 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7598 MaxTxPowerPerBandParams, 0);
7599 }
7600 return CONVERT_WDI2VOS_STATUS(status);
7601}
7602
7603/*
schang86c22c42013-03-13 18:41:24 -07007604 * FUNCTION: WDA_SetTxPowerCallBack
7605 * send the response to PE with power value received from WDI
7606 */
7607void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7608 void* pUserData)
7609{
7610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7611 tWDA_CbContext *pWDA = NULL;
7612 tSirSetTxPowerReq *pTxPowerParams = NULL;
7613
7614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7615 "<------ %s ", __func__);
7616 if(NULL == pWdaParams)
7617 {
7618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7619 "%s: pWdaParams received NULL", __func__);
7620 VOS_ASSERT(0) ;
7621 return ;
7622 }
7623 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307624 if (NULL == pWDA)
7625 {
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7627 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7629 vos_mem_free(pWdaParams->wdaMsgParam);
7630 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307631 VOS_ASSERT(0);
7632 return ;
7633 }
7634
schang86c22c42013-03-13 18:41:24 -07007635 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7636 if(NULL == pTxPowerParams)
7637 {
7638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7639 "%s: pTxPowerParams received NULL " ,__func__);
7640 VOS_ASSERT(0);
7641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7642 vos_mem_free(pWdaParams);
7643 return ;
7644 }
7645
7646 /*need to free memory for the pointers used in the
7647 WDA Process.Set Max Tx Power Req function*/
7648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7649 vos_mem_free(pWdaParams);
7650
7651 /* send response to UMAC*/
7652 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7653 return;
7654}
7655
7656/*
7657 * FUNCTION: WDA_ProcessSetTxPowerReq
7658 * Request to WDI to send set Tx Power Request
7659 */
7660 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7661 tSirSetTxPowerReq *txPowerParams)
7662{
7663 WDI_Status status = WDI_STATUS_SUCCESS;
7664 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7665 tWDA_ReqParams *pWdaParams = NULL;
7666
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7668 "------> %s ", __func__);
7669
7670 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7671 sizeof(WDI_SetTxPowerParamsType));
7672 if(NULL == wdiSetTxPowerParams)
7673 {
7674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7675 "%s: VOS MEM Alloc Failure", __func__);
7676 VOS_ASSERT(0);
7677 return VOS_STATUS_E_NOMEM;
7678 }
7679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7680 if(NULL == pWdaParams)
7681 {
7682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7683 "%s: VOS MEM Alloc Failure", __func__);
7684 vos_mem_free(wdiSetTxPowerParams);
7685 VOS_ASSERT(0);
7686 return VOS_STATUS_E_NOMEM;
7687 }
7688 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7689 txPowerParams->bssIdx;
7690 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7691 txPowerParams->mwPower;
7692 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7693 pWdaParams->pWdaContext = pWDA;
7694 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7695 /* store Params pass it to WDI */
7696 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7697 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7698 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7699 if(IS_WDI_STATUS_FAILURE(status))
7700 {
7701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7702 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7704 vos_mem_free(pWdaParams);
7705 /* send response to UMAC*/
7706 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7707 }
7708 return CONVERT_WDI2VOS_STATUS(status);
7709}
7710
Jeff Johnson295189b2012-06-20 16:38:30 -07007711/*
7712 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7713 * Free the memory. No need to send any response to PE in this case
7714 */
7715void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7716{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7718
Jeff Johnson295189b2012-06-20 16:38:30 -07007719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007720 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007721
7722 if(NULL == pWdaParams)
7723 {
7724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007725 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007726 VOS_ASSERT(0) ;
7727 return ;
7728 }
7729
7730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7731 vos_mem_free(pWdaParams->wdaMsgParam) ;
7732 vos_mem_free(pWdaParams);
7733
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 /*
7735 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7736 * so just free the request param here
7737 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007738 return ;
7739}
7740
Jeff Johnson295189b2012-06-20 16:38:30 -07007741/*
7742 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7743 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7744 */
7745VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7746 tP2pPsParams *pP2pPsConfigParams)
7747{
7748 WDI_Status status = WDI_STATUS_SUCCESS ;
7749 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7750 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7751 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007752 tWDA_ReqParams *pWdaParams = NULL;
7753
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007755 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 if(NULL == wdiSetP2PGONOAReqParam)
7757 {
7758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007760 VOS_ASSERT(0);
7761 return VOS_STATUS_E_NOMEM;
7762 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007763
7764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7765 if(NULL == pWdaParams)
7766 {
7767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007768 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007769 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007770 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007771 VOS_ASSERT(0);
7772 return VOS_STATUS_E_NOMEM;
7773 }
7774
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7776 pP2pPsConfigParams->opp_ps;
7777 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7778 pP2pPsConfigParams->ctWindow;
7779 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7780 pP2pPsConfigParams->count;
7781 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7782 pP2pPsConfigParams->duration;
7783 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7784 pP2pPsConfigParams->interval;
7785 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7786 pP2pPsConfigParams->single_noa_duration;
7787 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7788 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007789
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7791 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007792 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7793
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007795 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7796 pWdaParams->pWdaContext = pWDA;
7797
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007799 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7800
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 if(IS_WDI_STATUS_FAILURE(status))
7802 {
7803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7804 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7806 vos_mem_free(pWdaParams->wdaMsgParam);
7807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 return CONVERT_WDI2VOS_STATUS(status);
7810
Jeff Johnson295189b2012-06-20 16:38:30 -07007811}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307812
7813#ifdef FEATURE_WLAN_TDLS
7814/*
7815 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7816 * Free the memory. No need to send any response to PE in this case
7817 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307818void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7819 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307820{
7821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7822 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307823 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307824
7825
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7827 "<------ %s " ,__func__);
7828 if(NULL == pWdaParams)
7829 {
7830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7831 "%s: pWdaParams received NULL", __func__);
7832 VOS_ASSERT(0) ;
7833 return ;
7834 }
7835 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7836
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307837 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307838 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7840 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7842 vos_mem_free(pWdaParams->wdaMsgParam);
7843 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307844 VOS_ASSERT(0);
7845 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307846 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307847
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307848 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7849 if( NULL == pTdlsLinkEstablishParams )
7850 {
7851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7852 "%s: pTdlsLinkEstablishParams "
7853 "received NULL " ,__func__);
7854 VOS_ASSERT(0);
7855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7856 vos_mem_free(pWdaParams);
7857 return ;
7858 }
7859 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7860 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307862 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307863 /* send response to UMAC*/
7864 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7865
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307866 return ;
7867}
7868
7869VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7870 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7871{
7872 WDI_Status status = WDI_STATUS_SUCCESS ;
7873 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7874 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7875 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7876 tWDA_ReqParams *pWdaParams = NULL;
7877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7878 "------> %s " ,__func__);
7879 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7880 {
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7882 "%s: VOS MEM Alloc Failure", __func__);
7883 VOS_ASSERT(0);
7884 return VOS_STATUS_E_NOMEM;
7885 }
7886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7887 if(NULL == pWdaParams)
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7890 "%s: VOS MEM Alloc Failure", __func__);
7891 vos_mem_free(pTdlsLinkEstablishParams);
7892 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7893 VOS_ASSERT(0);
7894 return VOS_STATUS_E_NOMEM;
7895 }
7896 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307897 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307898 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307899 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307900 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307901 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307902 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307903 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307904 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307905 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307906 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7907 pTdlsLinkEstablishParams->isOffChannelSupported;
7908
7909 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7910 pTdlsLinkEstablishParams->validChannels,
7911 pTdlsLinkEstablishParams->validChannelsLen);
7912
7913 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7914 pTdlsLinkEstablishParams->validChannelsLen;
7915
7916 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7917 pTdlsLinkEstablishParams->validOperClasses,
7918 pTdlsLinkEstablishParams->validOperClassesLen);
7919 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7920 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307921
7922 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7923 /* Store msg pointer from PE, as this will be used for response */
7924 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7925 /* store Params pass it to WDI */
7926 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7927 pWdaParams->pWdaContext = pWDA;
7928
7929 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7930 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7931 WDA_SetTDLSLinkEstablishReqParamsCallback,
7932 pWdaParams);
7933 if(IS_WDI_STATUS_FAILURE(status))
7934 {
7935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7936 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7938 vos_mem_free(pWdaParams->wdaMsgParam);
7939 vos_mem_free(pWdaParams);
7940 }
7941 return CONVERT_WDI2VOS_STATUS(status);
7942}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307943
7944// tdlsoffchan
7945void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7946 void* pUserData)
7947{
7948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7949 tWDA_CbContext *pWDA = NULL;
7950 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7951
7952
7953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7954 "<------ %s " ,__func__);
7955 if(NULL == pWdaParams)
7956 {
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7958 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307959 VOS_ASSERT(0) ;
7960 return ;
7961 }
7962 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7963
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307964 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307965 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7967 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7969 vos_mem_free(pWdaParams->wdaMsgParam);
7970 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307971 VOS_ASSERT(0);
7972 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307973 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307974
Atul Mittalc0f739f2014-07-31 13:47:47 +05307975 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307976 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7979 "%s: pTdlsChanSwitchParams "
7980 "received NULL " ,__func__);
7981 VOS_ASSERT(0);
7982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7983 vos_mem_free(pWdaParams);
7984 return ;
7985 }
7986 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7987 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7989 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307990 /* send response to UMAC*/
7991 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307992
7993 return ;
7994}
7995VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7996 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7997{
7998 WDI_Status status = WDI_STATUS_SUCCESS ;
7999 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8000 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8001 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8002 tWDA_ReqParams *pWdaParams = NULL;
8003
8004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8005 "Enter: %s ",__func__);
8006 if(NULL == wdiSetTDLSChanSwitchReqParam)
8007 {
8008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8009 "%s: VOS MEM Alloc Failure", __func__);
8010 VOS_ASSERT(0);
8011 return VOS_STATUS_E_NOMEM;
8012 }
8013
8014 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8015 if(NULL == pWdaParams)
8016 {
8017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8018 "%s: VOS MEM Alloc Failure", __func__);
8019 vos_mem_free(pTdlsChanSwitchParams);
8020 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8021 VOS_ASSERT(0);
8022 return VOS_STATUS_E_NOMEM;
8023 }
8024 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8025 pTdlsChanSwitchParams->staIdx;
8026 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8027 pTdlsChanSwitchParams->tdlsSwMode;
8028 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8029 pTdlsChanSwitchParams->operClass;
8030 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8031 pTdlsChanSwitchParams->tdlsOffCh;
8032 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8033 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8034
8035
8036 /* Store msg pointer from PE, as this will be used for response */
8037 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8038 /* store Params pass it to WDI */
8039 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8040 pWdaParams->pWdaContext = pWDA;
8041 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8042 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8043 WDA_SetTDLSChanSwitchReqParamsCallback,
8044 pWdaParams);
8045 if(IS_WDI_STATUS_FAILURE(status))
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8048 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8050 vos_mem_free(pWdaParams->wdaMsgParam);
8051 vos_mem_free(pWdaParams);
8052 }
8053 return CONVERT_WDI2VOS_STATUS(status);
8054}
8055#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308056
8057
Jeff Johnson295189b2012-06-20 16:38:30 -07008058#ifdef WLAN_FEATURE_VOWIFI_11R
8059/*
8060 * FUNCTION: WDA_AggrAddTSReqCallback
8061 * send ADD AGGREGATED TS RSP back to PE
8062 */
8063void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8064{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308066 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008067 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008070 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008071 if(NULL == pWdaParams)
8072 {
8073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008075 VOS_ASSERT(0) ;
8076 return ;
8077 }
8078
8079 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308080 if (NULL == pWDA)
8081 {
8082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8083 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8085 vos_mem_free(pWdaParams->wdaMsgParam);
8086 vos_mem_free(pWdaParams);
8087
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308088 VOS_ASSERT(0);
8089 return ;
8090 }
8091
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008092 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093
8094 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8095 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008096 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008099
8100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 return ;
8103}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008104/*
8105 * FUNCTION: WDA_ProcessAddTSReq
8106 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8107 */
8108VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8109 tAggrAddTsParams *pAggrAddTsReqParams)
8110{
8111 WDI_Status status = WDI_STATUS_SUCCESS ;
8112 int i;
8113 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008114 tWDA_ReqParams *pWdaParams = NULL;
8115
8116
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008119 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8120 sizeof(WDI_AggrAddTSReqParamsType)) ;
8121 if(NULL == wdiAggrAddTSReqParam)
8122 {
8123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 VOS_ASSERT(0);
8126 return VOS_STATUS_E_NOMEM;
8127 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008128
8129
8130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8131 if(NULL == pWdaParams)
8132 {
8133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008134 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008135 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008136 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008137 VOS_ASSERT(0);
8138 return VOS_STATUS_E_NOMEM;
8139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8141 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8142 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8144 {
8145 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8146 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8147 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8149 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8150 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8151 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8152 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8153 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8154 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8155 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8156 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8157 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8158 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8159 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8160 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8161 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8162 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8163 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8165 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8167 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8168 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8169 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8170 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8171 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8172 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8173 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8174 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8175 pAggrAddTsReqParams->tspec[i].inactInterval;
8176 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8177 pAggrAddTsReqParams->tspec[i].suspendInterval;
8178 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8179 pAggrAddTsReqParams->tspec[i].svcStartTime;
8180 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8181 pAggrAddTsReqParams->tspec[i].minDataRate;
8182 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8183 pAggrAddTsReqParams->tspec[i].meanDataRate;
8184 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8185 pAggrAddTsReqParams->tspec[i].peakDataRate;
8186 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8187 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8188 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8189 pAggrAddTsReqParams->tspec[i].delayBound;
8190 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8191 pAggrAddTsReqParams->tspec[i].minPhyRate;
8192 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8193 pAggrAddTsReqParams->tspec[i].surplusBw;
8194 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8195 pAggrAddTsReqParams->tspec[i].mediumTime;
8196 }
8197
8198 /* TODO: tAggrAddTsParams doesn't have the following fields */
8199#if 0
8200 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8201 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8202 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8203 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8204#endif
8205 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8206
8207 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008208 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008210 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8211
8212 pWdaParams->pWdaContext = pWDA;
8213
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008215 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8216
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 if(IS_WDI_STATUS_FAILURE(status))
8218 {
8219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8220 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8222 vos_mem_free(pWdaParams);
8223
8224 /* send the failure response back to PE*/
8225 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8226 {
8227 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8228 }
8229
8230 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8231 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 return CONVERT_WDI2VOS_STATUS(status) ;
8234}
8235#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008236/*
Mihir Shetea4306052014-03-25 00:02:54 +05308237 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 * send Enter IMPS RSP back to PE
8239 */
Mihir Shetea4306052014-03-25 00:02:54 +05308240void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008241{
Mihir Shetea4306052014-03-25 00:02:54 +05308242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308243 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308244
Jeff Johnson295189b2012-06-20 16:38:30 -07008245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308246 "<------ %s status=%d" ,__func__,status);
8247 if(NULL == pWdaParams)
8248 {
8249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8250 "%s: pWdaParams received NULL", __func__);
8251 VOS_ASSERT(0);
8252 return;
8253 }
8254
8255 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308256 if (NULL == pWDA)
8257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8259 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8261 vos_mem_free(pWdaParams->wdaMsgParam);
8262 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308263 VOS_ASSERT(0);
8264 return ;
8265 }
Mihir Shetea4306052014-03-25 00:02:54 +05308266
8267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8268 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008269 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 return ;
8271}
Mihir Shetea4306052014-03-25 00:02:54 +05308272
8273
8274/*
8275 * FUNCTION: WDA_EnterImpsReqCallback
8276 * Free memory and send Enter IMPS RSP back to PE.
8277 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8278 */
8279void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8280{
8281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308282 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308283
8284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8285 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8286
8287 if(NULL == pWdaParams)
8288 {
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8290 "%s: pWdaParams received NULL", __func__);
8291 VOS_ASSERT(0);
8292 return;
8293 }
8294
8295 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308296 if (NULL == pWDA)
8297 {
8298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8299 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8301 vos_mem_free(pWdaParams->wdaMsgParam);
8302 vos_mem_free(pWdaParams);
8303
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308304 VOS_ASSERT(0);
8305 return ;
8306 }
8307
Mihir Shetea4306052014-03-25 00:02:54 +05308308
8309 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8310 {
8311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8312 vos_mem_free(pWdaParams);
8313 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8314 CONVERT_WDI2SIR_STATUS(wdiStatus));
8315 }
8316
8317 return;
8318}
Jeff Johnson295189b2012-06-20 16:38:30 -07008319/*
8320 * FUNCTION: WDA_ProcessEnterImpsReq
8321 * Request to WDI to Enter IMPS power state.
8322 */
8323VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8324{
8325 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308326 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8327 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008329 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308330
8331
8332 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8333 if (NULL == wdiEnterImpsReqParams)
8334 {
8335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8336 "%s: VOS MEM Alloc Failure", __func__);
8337 VOS_ASSERT(0);
8338 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8339 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8340 return VOS_STATUS_E_NOMEM;
8341 }
8342
8343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8344 if (NULL == pWdaParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "%s: VOS MEM Alloc Failure", __func__);
8348 VOS_ASSERT(0);
8349 vos_mem_free(wdiEnterImpsReqParams);
8350 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8351 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8352 return VOS_STATUS_E_NOMEM;
8353 }
8354
8355 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8356 wdiEnterImpsReqParams->pUserData = pWdaParams;
8357
8358 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8359 pWdaParams->wdaMsgParam = NULL;
8360 pWdaParams->pWdaContext = pWDA;
8361
8362 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8363 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8364 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 if(IS_WDI_STATUS_FAILURE(status))
8366 {
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8368 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308369 vos_mem_free(wdiEnterImpsReqParams);
8370 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008371 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 return CONVERT_WDI2VOS_STATUS(status) ;
8374}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308375
8376/*
8377 * FUNCTION: WDA_ExitImpsRespCallback
8378 * send Exit IMPS RSP back to PE
8379 */
8380void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8381{
8382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8383 tWDA_CbContext *pWDA;
8384
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8386 "<------ %s " ,__func__);
8387
8388 if (NULL == pWdaParams)
8389 {
8390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8391 "%s: pWdaParams received NULL", __func__);
8392 VOS_ASSERT(0);
8393 return;
8394 }
8395 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8396
8397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8398 vos_mem_free(pWdaParams);
8399
8400 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8401 return;
8402}
8403
Jeff Johnson295189b2012-06-20 16:38:30 -07008404/*
8405 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 */
8407void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8408{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008411 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308412 if(NULL == pWdaParams)
8413 {
8414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8415 "%s: pWdaParams received NULL", __func__);
8416 VOS_ASSERT(0);
8417 return;
8418 }
8419
8420 if (IS_WDI_STATUS_FAILURE(status))
8421 {
8422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8423 vos_mem_free(pWdaParams);
8424 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8425 {
8426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8427 FL("reload wlan driver"));
8428 wpalWlanReload();
8429 }
8430 }
8431 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308433
Jeff Johnson295189b2012-06-20 16:38:30 -07008434/*
8435 * FUNCTION: WDA_ProcessExitImpsReq
8436 * Request to WDI to Exit IMPS power state.
8437 */
8438VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8439{
8440 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308441 tWDA_ReqParams *pWdaParams;
8442 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8443
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008445 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308446 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8447 sizeof(WDI_ExitImpsReqParamsType));
8448 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8451 "%s: VOS MEM Alloc Failure", __func__);
8452 VOS_ASSERT(0);
8453 return VOS_STATUS_E_NOMEM;
8454 }
8455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8456 if(NULL == pWdaParams)
8457 {
8458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8459 "%s: VOS MEM Alloc Failure", __func__);
8460 VOS_ASSERT(0);
8461 vos_mem_free(wdiExitImpsReqParams);
8462 return VOS_STATUS_E_NOMEM;
8463 }
8464 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8465 wdiExitImpsReqParams->pUserData = pWdaParams;
8466
8467 /* Store param pointer as passed in by caller */
8468 /* store Params pass it to WDI */
8469 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8470 pWdaParams->pWdaContext = pWDA;
8471 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8472 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8473 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8474 pWdaParams);
8475 if (IS_WDI_STATUS_FAILURE(status))
8476 {
8477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8478 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8480 vos_mem_free(pWdaParams);
8481 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008483 return CONVERT_WDI2VOS_STATUS(status) ;
8484}
Jeff Johnson295189b2012-06-20 16:38:30 -07008485/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008486 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 * send Enter BMPS RSP back to PE
8488 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008489void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008490{
8491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308492 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008493 tEnterBmpsParams *pEnterBmpsRspParams;
8494
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 if(NULL == pWdaParams)
8498 {
8499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008500 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 VOS_ASSERT(0) ;
8502 return ;
8503 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008504
8505 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308506 if (NULL == pWDA)
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8509 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308510
8511 if(pWdaParams->wdaWdiApiMsgParam)
8512 {
8513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8514 }
8515 vos_mem_free(pWdaParams);
8516
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308517 VOS_ASSERT(0);
8518 return ;
8519 }
8520
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008521 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8522
8523 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008524 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008525
8526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008528 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8529
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 return ;
8531}
Jeff Johnson295189b2012-06-20 16:38:30 -07008532/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008533 * FUNCTION: WDA_EnterBmpsReqCallback
8534 * Free memory and send Enter BMPS RSP back to PE.
8535 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8536 */
8537void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8538{
8539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308540 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008541 tEnterBmpsParams *pEnterBmpsRspParams;
8542
8543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8544 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8545
8546 if(NULL == pWdaParams)
8547 {
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8549 "%s: pWdaParams received NULL", __func__);
8550 VOS_ASSERT(0);
8551 return;
8552 }
8553
8554 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308555 if (NULL == pWDA)
8556 {
8557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8558 "%s:pWDA is NULL", __func__);
8559 VOS_ASSERT(0);
8560 return ;
8561 }
8562
Yue Ma7f44bbe2013-04-12 11:47:39 -07008563 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8564 pEnterBmpsRspParams->status = wdiStatus;
8565
8566 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8567 {
8568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8569 vos_mem_free(pWdaParams);
8570 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8571 }
8572
8573 return;
8574}
8575/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008576 * FUNCTION: WDA_ProcessEnterBmpsReq
8577 * Request to WDI to Enter BMPS power state.
8578 */
8579VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8580 tEnterBmpsParams *pEnterBmpsReqParams)
8581{
8582 WDI_Status status = WDI_STATUS_SUCCESS;
8583 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8584 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8588 {
8589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008590 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 VOS_ASSERT(0);
8592 return VOS_STATUS_E_FAILURE;
8593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8595 if (NULL == wdiEnterBmpsReqParams)
8596 {
8597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008600 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8601 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 return VOS_STATUS_E_NOMEM;
8603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8605 if (NULL == pWdaParams)
8606 {
8607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008609 VOS_ASSERT(0);
8610 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008611 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8612 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 return VOS_STATUS_E_NOMEM;
8614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8616 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8617 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8618 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008619 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8621 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8622 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008623 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8624 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008625
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 /* Store param pointer as passed in by caller */
8627 /* store Params pass it to WDI */
8628 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008629 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008632 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 if (IS_WDI_STATUS_FAILURE(status))
8634 {
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8636 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008638 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008640 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 return CONVERT_WDI2VOS_STATUS(status);
8643}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008644
8645
8646static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8647 WDI_Status wdiStatus,
8648 tExitBmpsParams *pExitBmpsReqParams)
8649{
8650 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8651
8652 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8653}
8654
8655
Jeff Johnson295189b2012-06-20 16:38:30 -07008656/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008657 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 * send Exit BMPS RSP back to PE
8659 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008660void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008661{
8662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308663 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008664 tExitBmpsParams *pExitBmpsRspParams;
8665
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008667 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 if(NULL == pWdaParams)
8669 {
8670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008671 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 VOS_ASSERT(0) ;
8673 return ;
8674 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008675
8676 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308677 if (NULL == pWDA)
8678 {
8679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8680 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308681
8682 if(pWdaParams->wdaWdiApiMsgParam)
8683 {
8684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8685 }
8686 vos_mem_free(pWdaParams);
8687
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308688 VOS_ASSERT(0);
8689 return ;
8690 }
8691
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008692 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8693
8694 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008695 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008696
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8698 vos_mem_free(pWdaParams) ;
8699
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008700 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 return ;
8702}
Jeff Johnson295189b2012-06-20 16:38:30 -07008703/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008704 * FUNCTION: WDA_ExitBmpsReqCallback
8705 * Free memory and send Exit BMPS RSP back to PE.
8706 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8707 */
8708void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8709{
8710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308711 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008712 tExitBmpsParams *pExitBmpsRspParams;
8713
8714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8715 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8716
8717 if(NULL == pWdaParams)
8718 {
8719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8720 "%s: pWdaParams received NULL", __func__);
8721 VOS_ASSERT(0);
8722 return;
8723 }
8724
8725 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308726 if (NULL == pWDA)
8727 {
8728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8729 "%s:pWDA is NULL", __func__);
8730 VOS_ASSERT(0);
8731 return ;
8732 }
8733
Yue Ma7f44bbe2013-04-12 11:47:39 -07008734 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8735 pExitBmpsRspParams->status = wdiStatus;
8736
8737 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8738 {
8739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8740 vos_mem_free(pWdaParams);
8741 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8742 }
8743
8744 return;
8745}
8746/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 * FUNCTION: WDA_ProcessExitBmpsReq
8748 * Request to WDI to Exit BMPS power state.
8749 */
8750VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8751 tExitBmpsParams *pExitBmpsReqParams)
8752{
8753 WDI_Status status = WDI_STATUS_SUCCESS ;
8754 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8755 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8756 sizeof(WDI_ExitBmpsReqParamsType)) ;
8757 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 if(NULL == wdiExitBmpsReqParams)
8761 {
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008765 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 return VOS_STATUS_E_NOMEM;
8767 }
8768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8769 if(NULL == pWdaParams)
8770 {
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 VOS_ASSERT(0);
8774 vos_mem_free(wdiExitBmpsReqParams);
8775 return VOS_STATUS_E_NOMEM;
8776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008778
8779 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8780
Yue Ma7f44bbe2013-04-12 11:47:39 -07008781 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8782 wdiExitBmpsReqParams->pUserData = pWdaParams;
8783
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 /* Store param pointer as passed in by caller */
8785 /* store Params pass it to WDI */
8786 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8787 pWdaParams->pWdaContext = pWDA;
8788 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008790 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 if(IS_WDI_STATUS_FAILURE(status))
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8794 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8796 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008797 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 return CONVERT_WDI2VOS_STATUS(status) ;
8800}
Jeff Johnson295189b2012-06-20 16:38:30 -07008801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008802 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 * send Enter UAPSD RSP back to PE
8804 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008805void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008806{
8807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308808 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008809 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008811 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 if(NULL == pWdaParams)
8813 {
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_ASSERT(0) ;
8817 return ;
8818 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008819
8820 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308821 if (NULL == pWDA)
8822 {
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8824 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308825
8826 if(pWdaParams->wdaWdiApiMsgParam)
8827 {
8828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8829 }
8830 vos_mem_free(pWdaParams);
8831
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308832 VOS_ASSERT(0);
8833 return ;
8834 }
8835
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008836 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8837
8838 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008839 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008840
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8842 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008843 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 return ;
8845}
Jeff Johnson295189b2012-06-20 16:38:30 -07008846/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008847 * FUNCTION: WDA_EnterUapsdReqCallback
8848 * Free memory and send Enter UAPSD RSP back to PE.
8849 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8850 */
8851void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8852{
8853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8854 tWDA_CbContext *pWDA;
8855 tUapsdParams *pEnterUapsdRsqParams;
8856
8857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8858 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8859
8860 if(NULL == pWdaParams)
8861 {
8862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8863 "%s: pWdaParams received NULL", __func__);
8864 VOS_ASSERT(0);
8865 return;
8866 }
8867
8868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308869 if (NULL == pWDA)
8870 {
8871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8872 "%s:pWDA is NULL", __func__);
8873 VOS_ASSERT(0);
8874 return ;
8875 }
8876
Yue Ma7f44bbe2013-04-12 11:47:39 -07008877 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8878 pEnterUapsdRsqParams->status = wdiStatus;
8879
8880 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8881 {
8882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8883 vos_mem_free(pWdaParams);
8884 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8885 }
8886
8887 return;
8888}
8889/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 * FUNCTION: WDA_ProcessEnterUapsdReq
8891 * Request to WDI to Enter UAPSD power state.
8892 */
8893VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8894 tUapsdParams *pEnterUapsdReqParams)
8895{
8896 WDI_Status status = WDI_STATUS_SUCCESS ;
8897 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8898 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8899 sizeof(WDI_EnterUapsdReqParamsType)) ;
8900 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008902 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 if(NULL == wdiEnterUapsdReqParams)
8904 {
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 VOS_ASSERT(0);
8908 return VOS_STATUS_E_NOMEM;
8909 }
8910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8911 if(NULL == pWdaParams)
8912 {
8913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 VOS_ASSERT(0);
8916 vos_mem_free(wdiEnterUapsdReqParams);
8917 return VOS_STATUS_E_NOMEM;
8918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8920 pEnterUapsdReqParams->beDeliveryEnabled;
8921 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8922 pEnterUapsdReqParams->beTriggerEnabled;
8923 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8924 pEnterUapsdReqParams->bkDeliveryEnabled;
8925 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8926 pEnterUapsdReqParams->bkTriggerEnabled;
8927 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8928 pEnterUapsdReqParams->viDeliveryEnabled;
8929 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8930 pEnterUapsdReqParams->viTriggerEnabled;
8931 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8932 pEnterUapsdReqParams->voDeliveryEnabled;
8933 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8934 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008935 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008936
Yue Ma7f44bbe2013-04-12 11:47:39 -07008937 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8938 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008939
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 /* Store param pointer as passed in by caller */
8941 /* store Params pass it to WDI */
8942 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8943 pWdaParams->pWdaContext = pWDA;
8944 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008946 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 if(IS_WDI_STATUS_FAILURE(status))
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8950 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8951 vos_mem_free(pWdaParams->wdaMsgParam) ;
8952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8953 vos_mem_free(pWdaParams) ;
8954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 return CONVERT_WDI2VOS_STATUS(status) ;
8956}
Jeff Johnson295189b2012-06-20 16:38:30 -07008957/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008958 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 * send Exit UAPSD RSP back to PE
8960 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008961void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008962{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008963
8964 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8965 tWDA_CbContext *pWDA;
8966 tExitUapsdParams *pExitUapsdRspParams;
8967
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008969 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008970 if(NULL == pWdaParams)
8971 {
8972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008973 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008974 VOS_ASSERT(0);
8975 return;
8976 }
8977
8978 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8979 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8980
8981 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008982 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008983
8984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8985 vos_mem_free(pWdaParams) ;
8986
8987 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 return ;
8989}
Jeff Johnson295189b2012-06-20 16:38:30 -07008990/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008991 * FUNCTION: WDA_ExitUapsdReqCallback
8992 * Free memory and send Exit UAPSD RSP back to PE.
8993 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8994 */
8995void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8996{
8997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308998 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008999 tExitUapsdParams *pExitUapsdRspParams;
9000
9001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9002 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9003
9004 if(NULL == pWdaParams)
9005 {
9006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9007 "%s: pWdaParams received NULL", __func__);
9008 VOS_ASSERT(0);
9009 return;
9010 }
9011
9012 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309013 if (NULL == pWDA)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9016 "%s:pWDA is NULL", __func__);
9017 VOS_ASSERT(0);
9018 return ;
9019 }
9020
Yue Ma7f44bbe2013-04-12 11:47:39 -07009021 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9022 pExitUapsdRspParams->status = wdiStatus;
9023
9024 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9025 {
9026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9027 vos_mem_free(pWdaParams);
9028 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9029 }
9030
9031 return;
9032}
9033/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 * FUNCTION: WDA_ProcessExitUapsdReq
9035 * Request to WDI to Exit UAPSD power state.
9036 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009037VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9038 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009039{
9040 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009041 tWDA_ReqParams *pWdaParams ;
9042 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9043 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9044 sizeof(WDI_ExitUapsdReqParamsType)) ;
9045
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009048
9049 if(NULL == wdiExitUapsdReqParams)
9050 {
9051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009052 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009053 VOS_ASSERT(0);
9054 return VOS_STATUS_E_NOMEM;
9055 }
9056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9057 if(NULL == pWdaParams)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009061 VOS_ASSERT(0);
9062 vos_mem_free(wdiExitUapsdReqParams);
9063 return VOS_STATUS_E_NOMEM;
9064 }
9065
9066 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009067 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9068 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009069
9070 /* Store param pointer as passed in by caller */
9071 /* store Params pass it to WDI */
9072 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9073 pWdaParams->pWdaContext = pWDA;
9074 pWdaParams->wdaMsgParam = pExitUapsdParams;
9075
Yue Ma7f44bbe2013-04-12 11:47:39 -07009076 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 if(IS_WDI_STATUS_FAILURE(status))
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9080 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009081 vos_mem_free(pWdaParams->wdaMsgParam) ;
9082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9083 vos_mem_free(pWdaParams) ;
9084
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 return CONVERT_WDI2VOS_STATUS(status) ;
9087}
9088
Jeff Johnson295189b2012-06-20 16:38:30 -07009089/*
9090 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9091 *
9092 */
9093void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9094{
9095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 if(NULL == pWdaParams)
9099 {
9100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 VOS_ASSERT(0) ;
9103 return ;
9104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 if( pWdaParams != NULL )
9106 {
9107 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9108 {
9109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9110 }
9111 if( pWdaParams->wdaMsgParam != NULL )
9112 {
9113 vos_mem_free(pWdaParams->wdaMsgParam) ;
9114 }
9115 vos_mem_free(pWdaParams) ;
9116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 return ;
9118}
Jeff Johnson295189b2012-06-20 16:38:30 -07009119/*
9120 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9121 * Request to WDI to set the power save params at start.
9122 */
9123VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9124 tSirPowerSaveCfg *pPowerSaveCfg)
9125{
9126 WDI_Status status = WDI_STATUS_SUCCESS ;
9127 tHalCfg *tlvStruct = NULL ;
9128 tANI_U8 *tlvStructStart = NULL ;
9129 v_PVOID_t *configParam;
9130 tANI_U32 configParamSize;
9131 tANI_U32 *configDataValue;
9132 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9133 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009135 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9137 {
9138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009139 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009141 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 return VOS_STATUS_E_FAILURE;
9143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9145 if (NULL == wdiPowerSaveCfg)
9146 {
9147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009150 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 return VOS_STATUS_E_NOMEM;
9152 }
9153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9154 if(NULL == pWdaParams)
9155 {
9156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 VOS_ASSERT(0);
9159 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009160 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 return VOS_STATUS_E_NOMEM;
9162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9164 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 if(NULL == configParam)
9166 {
9167 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009168 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009169 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 vos_mem_free(pWdaParams);
9171 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009172 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 return VOS_STATUS_E_NOMEM;
9174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 vos_mem_set(configParam, configParamSize, 0);
9176 wdiPowerSaveCfg->pConfigBuffer = configParam;
9177 tlvStruct = (tHalCfg *)configParam;
9178 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9180 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9181 tlvStruct->length = sizeof(tANI_U32);
9182 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9183 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9185 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9187 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9188 tlvStruct->length = sizeof(tANI_U32);
9189 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9190 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9192 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9194 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9195 tlvStruct->length = sizeof(tANI_U32);
9196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9197 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9199 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9201 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9202 tlvStruct->length = sizeof(tANI_U32);
9203 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9204 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009205 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9206 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9208 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9209 tlvStruct->length = sizeof(tANI_U32);
9210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9211 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9213 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9215 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9216 tlvStruct->length = sizeof(tANI_U32);
9217 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9218 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9220 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9222 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9223 tlvStruct->length = sizeof(tANI_U32);
9224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9225 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9227 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9229 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9230 tlvStruct->length = sizeof(tANI_U32);
9231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9232 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9233 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9234 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9236 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9237 tlvStruct->length = sizeof(tANI_U32);
9238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9239 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9240 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9241 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9243 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9244 tlvStruct->length = sizeof(tANI_U32);
9245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9246 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9248 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9250 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9251 tlvStruct->length = sizeof(tANI_U32);
9252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9253 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9255 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 /* store Params pass it to WDI */
9259 pWdaParams->wdaMsgParam = configParam;
9260 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9261 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9263 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 if(IS_WDI_STATUS_FAILURE(status))
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9267 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9268 vos_mem_free(pWdaParams->wdaMsgParam);
9269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9270 vos_mem_free(pWdaParams);
9271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 return CONVERT_WDI2VOS_STATUS(status);
9274}
Jeff Johnson295189b2012-06-20 16:38:30 -07009275/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009276 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009277 *
9278 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009279void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009280{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9282
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009284 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009285
9286 if(NULL == pWdaParams)
9287 {
9288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9289 "%s: pWdaParams received NULL", __func__);
9290 VOS_ASSERT(0);
9291 return ;
9292 }
9293
9294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 vos_mem_free(pWdaParams);
9296
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 return ;
9298}
Jeff Johnson295189b2012-06-20 16:38:30 -07009299/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009300 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9301 * Free memory.
9302 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9303 */
9304void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9305{
9306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9307
9308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9309 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9310
9311 if(NULL == pWdaParams)
9312 {
9313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9314 "%s: pWdaParams received NULL", __func__);
9315 VOS_ASSERT(0);
9316 return;
9317 }
9318
9319 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9320 {
9321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9322 vos_mem_free(pWdaParams);
9323 }
9324
9325 return;
9326}
9327/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 * FUNCTION: WDA_SetUapsdAcParamsReq
9329 * Request to WDI to set the UAPSD params for an ac (sta mode).
9330 */
9331VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9332 tUapsdInfo *pUapsdInfo)
9333{
9334 WDI_Status status = WDI_STATUS_SUCCESS;
9335 tWDA_CbContext *pWDA = NULL ;
9336 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9337 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9338 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9339 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009341 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 if(NULL == wdiUapsdParams)
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 VOS_ASSERT(0);
9347 return VOS_STATUS_E_NOMEM;
9348 }
9349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9350 if(NULL == pWdaParams)
9351 {
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_ASSERT(0);
9355 vos_mem_free(wdiUapsdParams);
9356 return VOS_STATUS_E_NOMEM;
9357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9359 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9360 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9361 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9362 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9363 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009364 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9365 wdiUapsdParams->pUserData = pWdaParams;
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 pWdaParams->pWdaContext = pWDA;
9369 /* Store param pointer as passed in by caller */
9370 pWdaParams->wdaMsgParam = pUapsdInfo;
9371 /* store Params pass it to WDI */
9372 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009374 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 if(IS_WDI_STATUS_FAILURE(status))
9377 {
9378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9379 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9381 vos_mem_free(pWdaParams);
9382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9384 return VOS_STATUS_SUCCESS;
9385 else
9386 return VOS_STATUS_E_FAILURE;
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388}
9389/*
9390 * FUNCTION: WDA_ClearUapsdAcParamsReq
9391 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9392 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9393 * and again enter the UPASD with the modified params. Hence the disable
9394 * function was kept empty.
9395 *
9396 */
9397VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9398{
9399 /* do nothing */
9400 return VOS_STATUS_SUCCESS;
9401}
Jeff Johnson295189b2012-06-20 16:38:30 -07009402/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009403 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 *
9405 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009406void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009407{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9409
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009411 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412
9413 if(NULL == pWdaParams)
9414 {
9415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009416 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009417 VOS_ASSERT(0) ;
9418 return ;
9419 }
9420
9421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9422 vos_mem_free(pWdaParams->wdaMsgParam);
9423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 //print a msg, nothing else to do
9426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009427 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 return ;
9429}
Jeff Johnson295189b2012-06-20 16:38:30 -07009430/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009431 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9432 * Free memory.
9433 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9434 */
9435void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9436{
9437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9438
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9440 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9441
9442 if(NULL == pWdaParams)
9443 {
9444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9445 "%s: pWdaParams received NULL", __func__);
9446 VOS_ASSERT(0);
9447 return;
9448 }
9449
9450 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9451 {
9452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9453 vos_mem_free(pWdaParams->wdaMsgParam);
9454 vos_mem_free(pWdaParams);
9455 }
9456
9457 return;
9458}
9459/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 * FUNCTION: WDA_UpdateUapsdParamsReq
9461 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9462 */
9463VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9464 tUpdateUapsdParams* pUpdateUapsdInfo)
9465{
9466 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009467 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9469 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9470 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009471 tWDA_ReqParams *pWdaParams = NULL;
9472
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009474 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 if(NULL == wdiUpdateUapsdParams)
9476 {
9477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 VOS_ASSERT(0);
9480 return VOS_STATUS_E_NOMEM;
9481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9483 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9484 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009485 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9486 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009487
9488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9489 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 {
9491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009494 vos_mem_free(pUpdateUapsdInfo);
9495 vos_mem_free(wdiUpdateUapsdParams);
9496 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009499 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009501 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9502 pWdaParams->pWdaContext = pWDA;
9503
Jeff Johnson43971f52012-07-17 12:26:56 -07009504 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009505 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009506 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009507
Jeff Johnson43971f52012-07-17 12:26:56 -07009508 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 {
9510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9511 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009512 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9514 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009517 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009518}
Jeff Johnson295189b2012-06-20 16:38:30 -07009519/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009520 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 *
9522 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009523void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009524{
9525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009527 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 if(WDI_STATUS_SUCCESS != wdiStatus)
9529 {
9530 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009531 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 if(NULL == pWdaParams)
9534 {
9535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 VOS_ASSERT(0) ;
9538 return ;
9539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9541 vos_mem_free(pWdaParams->wdaMsgParam);
9542 vos_mem_free(pWdaParams);
9543 return ;
9544}
Jeff Johnson295189b2012-06-20 16:38:30 -07009545/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009546 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9547 * Free memory.
9548 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9549 */
9550void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9551{
9552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9553
9554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9555 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9556
9557 if(NULL == pWdaParams)
9558 {
9559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9560 "%s: pWdaParams received NULL", __func__);
9561 VOS_ASSERT(0);
9562 return;
9563 }
9564
9565 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9566 {
9567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9568 vos_mem_free(pWdaParams->wdaMsgParam);
9569 vos_mem_free(pWdaParams);
9570 }
9571
9572 return;
9573}
9574/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9576 *
9577 */
9578VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9579 tSirWlanSetRxpFilters *pWlanSuspendParam)
9580{
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009582 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309583 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309585 /* Sanity Check
9586 * This is very unlikely and add assert to collect more info next time */
9587 if(NULL == pWlanSuspendParam)
9588 {
9589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9590 "%s: pWlanSuspendParam received NULL", __func__);
9591 VOS_ASSERT(0) ;
9592 return VOS_STATUS_E_FAULT;
9593 }
9594 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9595 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009597 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 if(NULL == wdiRxpFilterParams)
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_ASSERT(0);
9603 vos_mem_free(pWlanSuspendParam);
9604 return VOS_STATUS_E_NOMEM;
9605 }
9606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9607 if(NULL == pWdaParams)
9608 {
9609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 VOS_ASSERT(0);
9612 vos_mem_free(wdiRxpFilterParams);
9613 vos_mem_free(pWlanSuspendParam);
9614 return VOS_STATUS_E_NOMEM;
9615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9617 pWlanSuspendParam->setMcstBcstFilter;
9618 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9619 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9620
Yue Ma7f44bbe2013-04-12 11:47:39 -07009621 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9622 wdiRxpFilterParams->pUserData = pWdaParams;
9623
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 pWdaParams->pWdaContext = pWDA;
9625 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9626 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009627 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009628 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009630 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 {
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9633 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009634 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9636 vos_mem_free(pWdaParams->wdaMsgParam);
9637 vos_mem_free(pWdaParams);
9638 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009639 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009640}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309641
9642/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309643 * FUNCTION: WDA_ProcessGetFrameLogReq
9644 * Request to WDI to get the Frame Log.
9645 */
9646VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9647 tAniGetFrameLogReq *pGetFrameLog)
9648{
9649 VOS_STATUS status = VOS_STATUS_SUCCESS;
9650 WDI_Status wstatus;
9651 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9652 tWDA_ReqParams *pWdaParams ;
9653
9654 /* Sanity Check*/
9655 if(NULL == pGetFrameLog)
9656 {
9657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9658 "%s: pMgmtLoggingInitParam received NULL", __func__);
9659 VOS_ASSERT(0) ;
9660 return VOS_STATUS_E_FAULT;
9661 }
9662
9663 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9664 sizeof(WDI_GetFrameLogReqInfoType));
9665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9666 "------> %s " ,__func__);
9667
9668 if(NULL == wdiGetFrameLogInfo)
9669 {
9670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9671 "%s: VOS MEM Alloc Failure", __func__);
9672 VOS_ASSERT(0);
9673 vos_mem_free(pGetFrameLog);
9674 return VOS_STATUS_E_NOMEM;
9675 }
9676
9677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9678 if(NULL == pWdaParams)
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9681 "%s: VOS MEM Alloc Failure", __func__);
9682 VOS_ASSERT(0);
9683 vos_mem_free(wdiGetFrameLogInfo);
9684 vos_mem_free(pGetFrameLog);
9685 return VOS_STATUS_E_NOMEM;
9686 }
9687
9688 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9689
9690 pWdaParams->pWdaContext = pWDA;
9691 pWdaParams->wdaMsgParam = pGetFrameLog;
9692 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9693
9694 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9695 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9696 pWdaParams);
9697 if(IS_WDI_STATUS_FAILURE(wstatus))
9698 {
9699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9700 "Failure in get frame log REQ WDI API, free all the memory" );
9701 status = CONVERT_WDI2VOS_STATUS(wstatus);
9702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9703 vos_mem_free(pWdaParams->wdaMsgParam);
9704 vos_mem_free(pWdaParams);
9705 }
9706 return status;
9707}
9708
9709/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309710 * FUNCTION: WDA_ProcessMgmtLoggingInitReq
9711 *
9712 */
9713VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
9714 tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
9715{
9716 VOS_STATUS status = VOS_STATUS_SUCCESS;
9717 WDI_Status wstatus;
9718 WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
9719 tWDA_ReqParams *pWdaParams ;
9720
9721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9722 "------> %s " ,__func__);
9723
9724 /* Sanity Check*/
9725 if(NULL == pMgmtLoggingInitParam)
9726 {
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9728 "%s: pMgmtLoggingInitParam received NULL", __func__);
9729 VOS_ASSERT(0) ;
9730 return VOS_STATUS_E_FAULT;
9731 }
9732
9733 wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
9734 sizeof(WDI_MgmtLoggingInitReqInfoType));
9735 if(NULL == wdiMgmtLoggingInitInfo)
9736 {
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9738 "%s: VOS MEM Alloc Failure", __func__);
9739 VOS_ASSERT(0);
9740 vos_mem_free(pMgmtLoggingInitParam);
9741 return VOS_STATUS_E_NOMEM;
9742 }
9743
9744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9745 if(NULL == pWdaParams)
9746 {
9747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9748 "%s: VOS MEM Alloc Failure", __func__);
9749 VOS_ASSERT(0);
9750 vos_mem_free(wdiMgmtLoggingInitInfo);
9751 vos_mem_free(pMgmtLoggingInitParam);
9752 return VOS_STATUS_E_NOMEM;
9753 }
9754
9755 wdiMgmtLoggingInitInfo->enableFlag=
9756 pMgmtLoggingInitParam->enableFlag;
9757 wdiMgmtLoggingInitInfo->frameType=
9758 pMgmtLoggingInitParam->frameType;
9759 wdiMgmtLoggingInitInfo->frameSize=
9760 pMgmtLoggingInitParam->frameSize;
9761 wdiMgmtLoggingInitInfo->bufferMode=
9762 pMgmtLoggingInitParam->bufferMode;
9763
9764 pWdaParams->pWdaContext = pWDA;
9765 pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
9766 pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
9767
9768 wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
9769 (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
9770 pWdaParams);
9771 if(IS_WDI_STATUS_FAILURE(wstatus))
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9774 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9775 status = CONVERT_WDI2VOS_STATUS(wstatus);
9776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9777 vos_mem_free(pWdaParams->wdaMsgParam);
9778 vos_mem_free(pWdaParams);
9779 }
9780
9781 return status;
9782}
9783
Jeff Johnson295189b2012-06-20 16:38:30 -07009784/*
9785 * FUNCTION: WDA_WdiIndicationCallback
9786 *
9787 */
9788void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9789 void* pUserData)
9790{
9791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009793}
Jeff Johnson295189b2012-06-20 16:38:30 -07009794/*
9795 * FUNCTION: WDA_ProcessWlanSuspendInd
9796 *
9797 */
9798VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9799 tSirWlanSuspendParam *pWlanSuspendParam)
9800{
9801 WDI_Status wdiStatus;
9802 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009804 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9806 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9807 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9808 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9811 if(WDI_STATUS_PENDING == wdiStatus)
9812 {
9813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009814 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009815 }
9816 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9817 {
9818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009819 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 vos_mem_free(pWlanSuspendParam);
9822 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9823}
9824
Chet Lanctot186b5732013-03-18 10:26:30 -07009825#ifdef WLAN_FEATURE_11W
9826/*
9827 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9828 *
9829 */
9830VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9831 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9832{
9833 WDI_Status wdiStatus;
9834 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9836 "------> %s ", __func__);
9837
9838 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9839 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9840 sizeof(tSirMacAddr));
9841
9842 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9843 wdiExclUnencryptParams.pUserData = pWDA;
9844
9845 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9846 if(WDI_STATUS_PENDING == wdiStatus)
9847 {
9848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9849 "Pending received for %s:%d ", __func__, __LINE__ );
9850 }
9851 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9852 {
9853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9854 "Failure in %s:%d ", __func__, __LINE__ );
9855 }
9856 vos_mem_free(pExclUnencryptParam);
9857 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9858}
9859#endif
9860
Jeff Johnson295189b2012-06-20 16:38:30 -07009861/*
9862 * FUNCTION: WDA_ProcessWlanResumeCallback
9863 *
9864 */
9865void WDA_ProcessWlanResumeCallback(
9866 WDI_SuspendResumeRspParamsType *resumeRspParams,
9867 void* pUserData)
9868{
9869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 if(NULL == pWdaParams)
9873 {
9874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009875 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 VOS_ASSERT(0) ;
9877 return ;
9878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9880 {
9881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009882 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9885 vos_mem_free(pWdaParams->wdaMsgParam);
9886 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 return ;
9888}
Jeff Johnson295189b2012-06-20 16:38:30 -07009889/*
9890 * FUNCTION: WDA_ProcessWlanResumeReq
9891 *
9892 */
9893VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9894 tSirWlanResumeParam *pWlanResumeParam)
9895{
9896 WDI_Status wdiStatus;
9897 WDI_ResumeParamsType *wdiResumeParams =
9898 (WDI_ResumeParamsType *)vos_mem_malloc(
9899 sizeof(WDI_ResumeParamsType) ) ;
9900 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009902 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009903 if(NULL == wdiResumeParams)
9904 {
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 VOS_ASSERT(0);
9908 return VOS_STATUS_E_NOMEM;
9909 }
9910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9911 if(NULL == pWdaParams)
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 vos_mem_free(wdiResumeParams);
9917 return VOS_STATUS_E_NOMEM;
9918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9920 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 wdiResumeParams->wdiReqStatusCB = NULL;
9923 pWdaParams->wdaMsgParam = pWlanResumeParam;
9924 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9925 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9927 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9928 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9930 {
9931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9932 "Failure in Host Resume REQ WDI API, free all the memory " );
9933 VOS_ASSERT(0);
9934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9935 vos_mem_free(pWdaParams->wdaMsgParam);
9936 vos_mem_free(pWdaParams);
9937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9939}
9940
Jeff Johnson295189b2012-06-20 16:38:30 -07009941/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009942 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 *
9944 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009946{
9947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 if(NULL == pWdaParams)
9951 {
9952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009953 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_ASSERT(0) ;
9955 return ;
9956 }
9957
9958 vos_mem_free(pWdaParams->wdaMsgParam) ;
9959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9960 vos_mem_free(pWdaParams) ;
9961 /*
9962 * No respone required for SetBeaconFilter req so just free the request
9963 * param here
9964 */
9965
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 return ;
9967}
Jeff Johnson295189b2012-06-20 16:38:30 -07009968/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009969 * FUNCTION: WDA_SetBeaconFilterReqCallback
9970 * Free memory.
9971 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9972 */
9973void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9974{
9975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9976
9977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9978 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9979
9980 if(NULL == pWdaParams)
9981 {
9982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9983 "%s: pWdaParams received NULL", __func__);
9984 VOS_ASSERT(0);
9985 return;
9986 }
9987
9988 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9989 {
9990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9991 vos_mem_free(pWdaParams->wdaMsgParam);
9992 vos_mem_free(pWdaParams);
9993 }
9994
9995 return;
9996}
9997/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 * FUNCTION: WDA_SetBeaconFilterReq
9999 * Request to WDI to send the beacon filtering related information.
10000 */
10001VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10002 tBeaconFilterMsg* pBeaconFilterInfo)
10003{
10004 WDI_Status status = WDI_STATUS_SUCCESS;
10005 tANI_U8 *dstPtr, *srcPtr;
10006 tANI_U8 filterLength;
10007 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10008 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10009 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10010 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 if(NULL == wdiBeaconFilterInfo)
10014 {
10015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 VOS_ASSERT(0);
10018 return VOS_STATUS_E_NOMEM;
10019 }
10020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10021 if(NULL == pWdaParams)
10022 {
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 VOS_ASSERT(0);
10026 vos_mem_free(wdiBeaconFilterInfo);
10027 return VOS_STATUS_E_NOMEM;
10028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10030 pBeaconFilterInfo->beaconInterval;
10031 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10032 pBeaconFilterInfo->capabilityInfo;
10033 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10034 pBeaconFilterInfo->capabilityMask;
10035 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010036
10037 //Fill the BssIdx
10038 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10039
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 //Fill structure with info contained in the beaconFilterTable
10041 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10042 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10043 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10044 if(WDI_BEACON_FILTER_LEN < filterLength)
10045 {
10046 filterLength = WDI_BEACON_FILTER_LEN;
10047 }
10048 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010049 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10050 wdiBeaconFilterInfo->pUserData = pWdaParams;
10051
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 /* Store param pointer as passed in by caller */
10053 /* store Params pass it to WDI */
10054 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10055 pWdaParams->pWdaContext = pWDA;
10056 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10057
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010059 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 if(IS_WDI_STATUS_FAILURE(status))
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10063 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10064 vos_mem_free(pWdaParams->wdaMsgParam) ;
10065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10066 vos_mem_free(pWdaParams) ;
10067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 return CONVERT_WDI2VOS_STATUS(status) ;
10069}
Jeff Johnson295189b2012-06-20 16:38:30 -070010070/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010071 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 *
10073 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010074void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010075{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010076 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10077
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010079 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010080
10081 if(NULL == pWdaParams)
10082 {
10083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010084 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010085 VOS_ASSERT(0) ;
10086 return ;
10087 }
10088
10089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10090 vos_mem_free(pWdaParams->wdaMsgParam);
10091 vos_mem_free(pWdaParams);
10092
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 //print a msg, nothing else to do
10094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010095 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 return ;
10097}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010098/*
10099 * FUNCTION: WDA_RemBeaconFilterReqCallback
10100 * Free memory.
10101 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10102 */
10103void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10104{
10105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10106
10107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10108 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10109
10110 if(NULL == pWdaParams)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10113 "%s: pWdaParams received NULL", __func__);
10114 VOS_ASSERT(0);
10115 return;
10116 }
10117
10118 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10119 {
10120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10121 vos_mem_free(pWdaParams->wdaMsgParam);
10122 vos_mem_free(pWdaParams);
10123 }
10124
10125 return;
10126}
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 // TODO: PE does not have this feature for now implemented,
10128 // but the support for removing beacon filter exists between
10129 // HAL and FW. This function can be called whenever PE defines
10130 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010131/*
10132 * FUNCTION: WDA_RemBeaconFilterReq
10133 * Request to WDI to send the removal of beacon filtering related information.
10134 */
10135VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10136 tRemBeaconFilterMsg* pBeaconFilterInfo)
10137{
10138 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010139 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10141 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10142 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010143 tWDA_ReqParams *pWdaParams ;
10144
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 if(NULL == wdiBeaconFilterInfo)
10148 {
10149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 VOS_ASSERT(0);
10152 return VOS_STATUS_E_NOMEM;
10153 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10155 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 {
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010160 vos_mem_free(wdiBeaconFilterInfo);
10161 vos_mem_free(pBeaconFilterInfo);
10162 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010163 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010164
10165 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10166 pBeaconFilterInfo->ucIeCount;
10167 //Fill structure with info contained in the ucRemIeId
10168 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10169 pBeaconFilterInfo->ucRemIeId,
10170 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10171 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10172 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010173
10174 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010175 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010177 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10178
10179 pWdaParams->pWdaContext = pWDA;
10180
Jeff Johnson43971f52012-07-17 12:26:56 -070010181 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010182 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010183 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10186 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010187 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10189 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010190 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010192 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010193}
Jeff Johnson295189b2012-06-20 16:38:30 -070010194/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 *
10197 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010198void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010199{
10200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010202 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 if(NULL == pWdaParams)
10204 {
10205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010206 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 VOS_ASSERT(0) ;
10208 return ;
10209 }
10210
10211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10212 vos_mem_free(pWdaParams) ;
10213
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 return ;
10215}
Jeff Johnson295189b2012-06-20 16:38:30 -070010216/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010217 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10218 * Free memory.
10219 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10220 */
10221void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10222{
10223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10224
10225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10226 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10227
10228 if(NULL == pWdaParams)
10229 {
10230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10231 "%s: pWdaParams received NULL", __func__);
10232 VOS_ASSERT(0);
10233 return;
10234 }
10235
10236 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10237 {
10238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10239 vos_mem_free(pWdaParams);
10240 }
10241
10242 return;
10243}
10244/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 * FUNCTION: WDA_SetRSSIThresholdsReq
10246 * Request to WDI to set the RSSI thresholds (sta mode).
10247 */
10248VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10249{
10250 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010251 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 tWDA_CbContext *pWDA = NULL ;
10253 v_PVOID_t pVosContext = NULL;
10254 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10255 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10256 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10257 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 if(NULL == wdiRSSIThresholdsInfo)
10261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 VOS_ASSERT(0);
10265 return VOS_STATUS_E_NOMEM;
10266 }
10267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10268 if(NULL == pWdaParams)
10269 {
10270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 VOS_ASSERT(0);
10273 vos_mem_free(wdiRSSIThresholdsInfo);
10274 return VOS_STATUS_E_NOMEM;
10275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10278 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10279 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10281 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10282 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010286 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10287 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10289 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10290
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 /* Store param pointer as passed in by caller */
10292 /* store Params pass it to WDI */
10293 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10294 pWdaParams->pWdaContext = pWDA;
10295 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010296 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010297 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010298 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 {
10300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10301 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010302 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10304 vos_mem_free(pWdaParams) ;
10305 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010306 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010307
10308}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010309/*
Yue Madb90ac12013-04-04 13:39:13 -070010310 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 *
10312 */
Yue Madb90ac12013-04-04 13:39:13 -070010313void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010314{
10315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10316
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 if(NULL == pWdaParams)
10320 {
10321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010322 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 VOS_ASSERT(0) ;
10324 return ;
10325 }
10326
10327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10328 vos_mem_free(pWdaParams->wdaMsgParam);
10329 vos_mem_free(pWdaParams) ;
10330
10331 //print a msg, nothing else to do
10332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010333 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 return ;
10335}
Jeff Johnson295189b2012-06-20 16:38:30 -070010336/*
Yue Madb90ac12013-04-04 13:39:13 -070010337 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010338 * Free memory.
10339 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010340 */
10341void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10342{
10343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10344
10345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10346 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10347
10348 if(NULL == pWdaParams)
10349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10351 "%s: Invalid pWdaParams pointer", __func__);
10352 VOS_ASSERT(0);
10353 return;
10354 }
10355
10356 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10357 {
10358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10359 vos_mem_free(pWdaParams->wdaMsgParam);
10360 vos_mem_free(pWdaParams);
10361 }
10362
10363 return;
10364}
10365/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 * FUNCTION: WDA_ProcessHostOffloadReq
10367 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10368 * to broadcast traffic (sta mode).
10369 */
10370VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10371 tSirHostOffloadReq *pHostOffloadParams)
10372{
10373 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010374 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10376 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10377 sizeof(WDI_HostOffloadReqParamsType)) ;
10378 tWDA_ReqParams *pWdaParams ;
10379
10380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010381 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010382
10383 if(NULL == wdiHostOffloadInfo)
10384 {
10385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 VOS_ASSERT(0);
10388 return VOS_STATUS_E_NOMEM;
10389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10391 if(NULL == pWdaParams)
10392 {
10393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 VOS_ASSERT(0);
10396 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010397 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 return VOS_STATUS_E_NOMEM;
10399 }
10400
10401 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10402 pHostOffloadParams->offloadType;
10403 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10404 pHostOffloadParams->enableOrDisable;
10405
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010406 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10407 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10408
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10410 {
10411 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10412 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10413 pHostOffloadParams->params.hostIpv4Addr,
10414 4);
10415 break;
10416 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10417 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10418 pHostOffloadParams->params.hostIpv6Addr,
10419 16);
10420 break;
10421 case SIR_IPV6_NS_OFFLOAD:
10422 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10423 pHostOffloadParams->params.hostIpv6Addr,
10424 16);
10425
10426#ifdef WLAN_NS_OFFLOAD
10427 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10428 {
10429 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10430 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10431 16);
10432 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10433 }
10434 else
10435 {
10436 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10437 }
10438
10439 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10440 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10441 16);
10442 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10443 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10444 6);
10445
10446 //Only two are supported so let's go through them without a loop
10447 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10448 {
10449 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10450 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10451 16);
10452 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10453 }
10454 else
10455 {
10456 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10457 }
10458
10459 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10460 {
10461 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10462 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10463 16);
10464 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10465 }
10466 else
10467 {
10468 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10469 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010470 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10471 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 break;
10473#endif //WLAN_NS_OFFLOAD
10474 default:
10475 {
10476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10477 "No Handling for Offload Type %x in WDA "
10478 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10479 //WDA_VOS_ASSERT(0) ;
10480 }
10481 }
Yue Madb90ac12013-04-04 13:39:13 -070010482 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10483 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010484
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010486 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 /* store Params pass it to WDI */
10488 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10489 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010490
Jeff Johnson295189b2012-06-20 16:38:30 -070010491
Jeff Johnson43971f52012-07-17 12:26:56 -070010492 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010493 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010494
Jeff Johnson43971f52012-07-17 12:26:56 -070010495 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 {
10497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010498 "Failure in host offload REQ WDI API, free all the memory %d",
10499 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010500 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10502 vos_mem_free(pWdaParams->wdaMsgParam);
10503 vos_mem_free(pWdaParams) ;
10504 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010505 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010506
10507}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010509 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 *
10511 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010512void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010513{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10515
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010517 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010518
10519 if(NULL == pWdaParams)
10520 {
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010522 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010523 VOS_ASSERT(0) ;
10524 return ;
10525 }
10526
10527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10528 vos_mem_free(pWdaParams->wdaMsgParam);
10529 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010530
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 //print a msg, nothing else to do
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010533 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 return ;
10535}
Jeff Johnson295189b2012-06-20 16:38:30 -070010536/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010537 * FUNCTION: WDA_KeepAliveReqCallback
10538 * Free memory.
10539 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10540 */
10541void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10542{
10543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10544
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10546 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10547
10548 if(NULL == pWdaParams)
10549 {
10550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10551 "%s: pWdaParams received NULL", __func__);
10552 VOS_ASSERT(0);
10553 return;
10554 }
10555
10556 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10557 {
10558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10559 vos_mem_free(pWdaParams->wdaMsgParam);
10560 vos_mem_free(pWdaParams);
10561 }
10562
10563 return;
10564}
10565/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 * FUNCTION: WDA_ProcessKeepAliveReq
10567 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10568 * wakeup due to broadcast traffic (sta mode).
10569 */
10570VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10571 tSirKeepAliveReq *pKeepAliveParams)
10572{
10573 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010574 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10576 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10577 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010578 tWDA_ReqParams *pWdaParams;
10579
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010581 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 if(NULL == wdiKeepAliveInfo)
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010587 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 return VOS_STATUS_E_NOMEM;
10589 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010590
10591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10592 if(NULL == pWdaParams)
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010595 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010596 VOS_ASSERT(0);
10597 vos_mem_free(wdiKeepAliveInfo);
10598 vos_mem_free(pKeepAliveParams);
10599 return VOS_STATUS_E_NOMEM;
10600 }
10601
Jeff Johnson295189b2012-06-20 16:38:30 -070010602 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10603 pKeepAliveParams->packetType;
10604 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10605 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010606
10607 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10608 pKeepAliveParams->bssId,
10609 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010610
10611 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10612 {
10613 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10614 pKeepAliveParams->hostIpv4Addr,
10615 SIR_IPV4_ADDR_LEN);
10616 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10617 pKeepAliveParams->destIpv4Addr,
10618 SIR_IPV4_ADDR_LEN);
10619 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10620 pKeepAliveParams->destMacAddr,
10621 SIR_MAC_ADDR_LEN);
10622 }
10623 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10624 {
10625 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10626 SIR_IPV4_ADDR_LEN,
10627 0);
10628 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10629 SIR_IPV4_ADDR_LEN,
10630 0);
10631 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10632 SIR_MAC_ADDR_LEN,
10633 0);
10634 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010635 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10636 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010637
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010639 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010640 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010641 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10642 pWdaParams->pWdaContext = pWDA;
10643
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10645 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10646 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10647 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10648 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10650 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10651 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10652 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10653 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10655 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10657 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10658 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10660 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10661 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10663 "TimePeriod %d PacketType %d",
10664 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10665 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010666 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010667 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010668
Jeff Johnson43971f52012-07-17 12:26:56 -070010669 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 {
10671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10672 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010673 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10675 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010677 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010678 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010679
10680}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010681/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010682 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 *
10684 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010685void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010686 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10687 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010688{
10689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010692 if(NULL == pWdaParams)
10693 {
10694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010695 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 VOS_ASSERT(0) ;
10697 return ;
10698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10700 vos_mem_free(pWdaParams->wdaMsgParam);
10701 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 return ;
10703}
Jeff Johnson295189b2012-06-20 16:38:30 -070010704/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010705 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10706 * Free memory.
10707 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10708 */
10709void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10710{
10711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10712
10713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10714 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10715
10716 if(NULL == pWdaParams)
10717 {
10718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10719 "%s: pWdaParams received NULL", __func__);
10720 VOS_ASSERT(0);
10721 return;
10722 }
10723
10724 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10725 {
10726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10727 vos_mem_free(pWdaParams->wdaMsgParam);
10728 vos_mem_free(pWdaParams);
10729 }
10730
10731 return;
10732}
10733
10734/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010735 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10736 * Request to WDI to add WOWL Bcast pattern
10737 */
10738VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10739 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10740{
10741 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010742 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10744 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10745 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10746 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010748 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 if(NULL == wdiWowlAddBcPtrnInfo)
10750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 VOS_ASSERT(0);
10754 return VOS_STATUS_E_NOMEM;
10755 }
10756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10757 if(NULL == pWdaParams)
10758 {
10759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 VOS_ASSERT(0);
10762 vos_mem_free(wdiWowlAddBcPtrnInfo);
10763 return VOS_STATUS_E_NOMEM;
10764 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10766 pWowlAddBcPtrnParams->ucPatternId;
10767 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10768 pWowlAddBcPtrnParams->ucPatternByteOffset;
10769 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10770 pWowlAddBcPtrnParams->ucPatternMaskSize;
10771 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10772 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10774 {
10775 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10776 pWowlAddBcPtrnParams->ucPattern,
10777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10778 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10779 pWowlAddBcPtrnParams->ucPatternMask,
10780 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10781 }
10782 else
10783 {
10784 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10785 pWowlAddBcPtrnParams->ucPattern,
10786 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10787 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10788 pWowlAddBcPtrnParams->ucPatternMask,
10789 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10790
10791 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10792 pWowlAddBcPtrnParams->ucPatternExt,
10793 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10794 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10795 pWowlAddBcPtrnParams->ucPatternMaskExt,
10796 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10797 }
10798
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010799 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10800 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10801
Yue Ma7f44bbe2013-04-12 11:47:39 -070010802 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10803 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010804 /* Store param pointer as passed in by caller */
10805 /* store Params pass it to WDI */
10806 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10807 pWdaParams->pWdaContext = pWDA;
10808 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010809 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010810 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010811 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10814 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010815 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 vos_mem_free(pWdaParams->wdaMsgParam) ;
10817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10818 vos_mem_free(pWdaParams) ;
10819 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010820 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010821
10822}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010823/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010824 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 *
10826 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010827void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010828 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10829 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010830{
10831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 if(NULL == pWdaParams)
10835 {
10836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 VOS_ASSERT(0) ;
10839 return ;
10840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10842 vos_mem_free(pWdaParams->wdaMsgParam);
10843 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 return ;
10845}
Jeff Johnson295189b2012-06-20 16:38:30 -070010846/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010847 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10848 * Free memory.
10849 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10850 */
10851void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10852{
10853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10854
10855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10856 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10857
10858 if(NULL == pWdaParams)
10859 {
10860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10861 "%s: pWdaParams received NULL", __func__);
10862 VOS_ASSERT(0);
10863 return;
10864 }
10865
10866 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10867 {
10868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10869 vos_mem_free(pWdaParams->wdaMsgParam);
10870 vos_mem_free(pWdaParams);
10871 }
10872
10873 return;
10874}
10875/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10877 * Request to WDI to delete WOWL Bcast pattern
10878 */
10879VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10880 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10881{
10882 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010883 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10885 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10886 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10887 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010890 if(NULL == wdiWowlDelBcPtrnInfo)
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 VOS_ASSERT(0);
10895 return VOS_STATUS_E_NOMEM;
10896 }
10897 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10898 if(NULL == pWdaParams)
10899 {
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 VOS_ASSERT(0);
10903 vos_mem_free(wdiWowlDelBcPtrnInfo);
10904 return VOS_STATUS_E_NOMEM;
10905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010906 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10907 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010908
10909 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10910 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10911
Yue Ma7f44bbe2013-04-12 11:47:39 -070010912 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10913 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 /* Store param pointer as passed in by caller */
10915 /* store Params pass it to WDI */
10916 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10917 pWdaParams->pWdaContext = pWDA;
10918 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010919 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010920 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010921 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 {
10923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10924 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010925 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 vos_mem_free(pWdaParams->wdaMsgParam) ;
10927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10928 vos_mem_free(pWdaParams) ;
10929 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010930 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010931
10932}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010933/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010934 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 *
10936 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010937void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010938{
10939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010940 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010943 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 if(NULL == pWdaParams)
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010947 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 VOS_ASSERT(0) ;
10949 return ;
10950 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010952 if (NULL == pWDA)
10953 {
10954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10955 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010956
10957 if(pWdaParams->wdaWdiApiMsgParam)
10958 {
10959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10960 }
10961 vos_mem_free(pWdaParams);
10962
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010963 VOS_ASSERT(0);
10964 return ;
10965 }
10966
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10968
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010969 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10970
Jeff Johnson295189b2012-06-20 16:38:30 -070010971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10972 vos_mem_free(pWdaParams) ;
10973
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010974 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010975 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 return ;
10978}
Jeff Johnson295189b2012-06-20 16:38:30 -070010979/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010980 * FUNCTION: WDA_WowlEnterReqCallback
10981 * Free memory and send WOWL Enter RSP back to PE.
10982 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10983 */
10984void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10985{
10986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010987 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010988 tSirHalWowlEnterParams *pWowlEnterParams;
10989
10990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10991 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10992
10993 if(NULL == pWdaParams)
10994 {
10995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10996 "%s: pWdaParams received NULL", __func__);
10997 VOS_ASSERT(0);
10998 return;
10999 }
11000
11001 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011002 if (NULL == pWDA)
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11005 "%s:pWDA is NULL", __func__);
11006 VOS_ASSERT(0);
11007 return ;
11008 }
11009
Yue Ma7f44bbe2013-04-12 11:47:39 -070011010 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11011 pWowlEnterParams->status = wdiStatus;
11012
11013 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11014 {
11015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11016 vos_mem_free(pWdaParams);
11017 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11018 }
11019
11020 return;
11021}
11022/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 * FUNCTION: WDA_ProcessWowlEnterReq
11024 * Request to WDI to enter WOWL
11025 */
11026VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11027 tSirHalWowlEnterParams *pWowlEnterParams)
11028{
11029 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011030 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11032 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11033 sizeof(WDI_WowlEnterReqParamsType)) ;
11034 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011036 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 if(NULL == wdiWowlEnterInfo)
11038 {
11039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 VOS_ASSERT(0);
11042 return VOS_STATUS_E_NOMEM;
11043 }
11044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11045 if(NULL == pWdaParams)
11046 {
11047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 VOS_ASSERT(0);
11050 vos_mem_free(wdiWowlEnterInfo);
11051 return VOS_STATUS_E_NOMEM;
11052 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011053
11054 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11055
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11057 pWowlEnterParams->magicPtrn,
11058 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11060 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11062 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11064 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11066 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11068 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11070 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11072 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11074 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011075#ifdef WLAN_WAKEUP_EVENTS
11076 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11077 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11078
11079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11080 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11081
11082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11083 pWowlEnterParams->ucWowNetScanOffloadMatch;
11084
11085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11086 pWowlEnterParams->ucWowGTKRekeyError;
11087
11088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11089 pWowlEnterParams->ucWoWBSSConnLoss;
11090#endif // WLAN_WAKEUP_EVENTS
11091
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011092 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11093 pWowlEnterParams->bssIdx;
11094
Yue Ma7f44bbe2013-04-12 11:47:39 -070011095 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11096 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 /* Store param pointer as passed in by caller */
11098 /* store Params pass it to WDI */
11099 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11100 pWdaParams->pWdaContext = pWDA;
11101 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011102 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011103 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011104 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 {
11106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11107 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011108 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 vos_mem_free(pWdaParams->wdaMsgParam) ;
11110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11111 vos_mem_free(pWdaParams) ;
11112 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011113 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011114
11115}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011116/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011117 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 *
11119 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011120void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011121{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011123 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011124 tSirHalWowlExitParams *pWowlExitParams;
11125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011126 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011127 if(NULL == pWdaParams)
11128 {
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011130 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011131 VOS_ASSERT(0) ;
11132 return ;
11133 }
11134 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011135 if (NULL == pWDA)
11136 {
11137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11138 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011139
11140 if(pWdaParams->wdaWdiApiMsgParam)
11141 {
11142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11143 }
11144 vos_mem_free(pWdaParams);
11145
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011146 VOS_ASSERT(0);
11147 return ;
11148 }
11149
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011150 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11151
11152 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011153 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011154
11155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11156 vos_mem_free(pWdaParams) ;
11157
Jeff Johnson295189b2012-06-20 16:38:30 -070011158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011159 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011160 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 return ;
11162}
Jeff Johnson295189b2012-06-20 16:38:30 -070011163/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011164 * FUNCTION: WDA_WowlExitReqCallback
11165 * Free memory and send WOWL Exit RSP back to PE.
11166 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11167 */
11168void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11169{
11170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011171 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011172 tSirHalWowlExitParams *pWowlExitParams;
11173
11174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11175 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11176
11177 if(NULL == pWdaParams)
11178 {
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11180 "%s: pWdaParams received NULL", __func__);
11181 VOS_ASSERT(0);
11182 return;
11183 }
11184
11185 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011186 if (NULL == pWDA)
11187 {
11188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11189 "%s:pWDA is NULL", __func__);
11190 VOS_ASSERT(0);
11191 return ;
11192 }
11193
Yue Ma7f44bbe2013-04-12 11:47:39 -070011194 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11195 pWowlExitParams->status = wdiStatus;
11196
11197 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11198 {
11199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11200 vos_mem_free(pWdaParams);
11201 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11202 }
11203
11204 return;
11205}
11206/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 * FUNCTION: WDA_ProcessWowlExitReq
11208 * Request to WDI to add WOWL Bcast pattern
11209 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011210VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11211 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011212{
11213 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011214 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011215 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11216 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11217 sizeof(WDI_WowlExitReqParamsType)) ;
11218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011220 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011221 if(NULL == wdiWowlExitInfo)
11222 {
11223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011224 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011225 VOS_ASSERT(0);
11226 return VOS_STATUS_E_NOMEM;
11227 }
11228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11229 if(NULL == pWdaParams)
11230 {
11231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011232 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011233 VOS_ASSERT(0);
11234 vos_mem_free(wdiWowlExitInfo);
11235 return VOS_STATUS_E_NOMEM;
11236 }
11237
11238 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11239 pWowlExitParams->bssIdx;
11240
Yue Ma7f44bbe2013-04-12 11:47:39 -070011241 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11242 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011243
11244 /* Store param pointer as passed in by caller */
11245 /* store Params pass it to WDI */
11246 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11247 pWdaParams->pWdaContext = pWDA;
11248 pWdaParams->wdaMsgParam = pWowlExitParams;
11249
11250 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011251 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011252
Jeff Johnson43971f52012-07-17 12:26:56 -070011253 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 {
11255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011257 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11259 vos_mem_free(pWdaParams->wdaMsgParam);
11260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011261 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011262 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011263}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011264/*
11265 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11266 * Request to WDI to determine whether a given station is capable of
11267 * using HW-based frame translation
11268 */
11269v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11270 tANI_U8 staIdx)
11271{
11272 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11273}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011274
11275/*
11276 * FUNCTION: WDA_IsSelfSTA
11277 * Request to WDI to determine whether a given STAID is self station
11278 * index.
11279 */
11280v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11281{
11282
11283 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11284
Girish Gowli05cf44e2014-06-12 21:53:37 +053011285 if (NULL != pWDA)
11286 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11287 else
11288 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011289}
Jeff Johnson295189b2012-06-20 16:38:30 -070011290/*
11291 * FUNCTION: WDA_NvDownloadReqCallback
11292 * send NV Download RSP back to PE
11293 */
11294void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11295 void* pUserData)
11296{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011297
11298 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011299 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011300
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011302 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011303
11304 if(NULL == pWdaParams)
11305 {
11306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011307 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011308 VOS_ASSERT(0) ;
11309 return ;
11310 }
11311
11312 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011313 if (NULL == pWDA)
11314 {
11315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11316 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011317
11318 if(pWdaParams->wdaWdiApiMsgParam)
11319 {
11320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11321 }
11322 vos_mem_free(pWdaParams);
11323
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011324 VOS_ASSERT(0);
11325 return ;
11326 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011327
Jeff Johnson295189b2012-06-20 16:38:30 -070011328 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11330 vos_mem_free(pWdaParams);
11331
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 return ;
11334}
Jeff Johnson295189b2012-06-20 16:38:30 -070011335/*
11336 * FUNCTION: WDA_ProcessNvDownloadReq
11337 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11338 */
11339VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11340{
11341 /* Initialize the local Variables*/
11342 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11343 v_VOID_t *pNvBuffer=NULL;
11344 v_SIZE_t bufferSize = 0;
11345 WDI_Status status = WDI_STATUS_E_FAILURE;
11346 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011347 tWDA_ReqParams *pWdaParams ;
11348
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011350 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011351 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 {
11353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011354 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011355 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 return VOS_STATUS_E_FAILURE;
11357 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011358
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011360 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11361
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11363 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 if(NULL == wdiNvDownloadReqParam)
11365 {
11366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 VOS_ASSERT(0);
11369 return VOS_STATUS_E_NOMEM;
11370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 /* Copy Params to wdiNvDownloadReqParam*/
11372 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11373 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011374
11375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11376 if(NULL == pWdaParams)
11377 {
11378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011379 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011380 VOS_ASSERT(0);
11381 vos_mem_free(wdiNvDownloadReqParam);
11382 return VOS_STATUS_E_NOMEM;
11383 }
11384
Jeff Johnson295189b2012-06-20 16:38:30 -070011385 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011386 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11387 pWdaParams->wdaMsgParam = NULL;
11388 pWdaParams->pWdaContext = pWDA;
11389
11390
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011392
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011394 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11395
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 if(IS_WDI_STATUS_FAILURE(status))
11397 {
11398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11399 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11401 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404}
11405/*
11406 * FUNCTION: WDA_FlushAcReqCallback
11407 * send Flush AC RSP back to TL
11408 */
11409void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11410{
11411 vos_msg_t wdaMsg = {0} ;
11412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11413 tFlushACReq *pFlushACReqParams;
11414 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 if(NULL == pWdaParams)
11418 {
11419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011421 VOS_ASSERT(0) ;
11422 return ;
11423 }
11424
11425 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11426 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11427 if(NULL == pFlushACRspParams)
11428 {
11429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011432 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 return ;
11434 }
11435 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11436 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11437 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11438 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11439 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011440 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 vos_mem_free(pWdaParams->wdaMsgParam) ;
11442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11443 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11445 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11446 // POST message to TL
11447 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11448
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 return ;
11450}
Jeff Johnson295189b2012-06-20 16:38:30 -070011451/*
11452 * FUNCTION: WDA_ProcessFlushAcReq
11453 * Request to WDI to Update the DELBA REQ params.
11454 */
11455VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11456 tFlushACReq *pFlushAcReqParams)
11457{
11458 WDI_Status status = WDI_STATUS_SUCCESS ;
11459 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11460 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11461 sizeof(WDI_FlushAcReqParamsType)) ;
11462 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 if(NULL == wdiFlushAcReqParam)
11464 {
11465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 VOS_ASSERT(0);
11468 return VOS_STATUS_E_NOMEM;
11469 }
11470 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11471 if(NULL == pWdaParams)
11472 {
11473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 VOS_ASSERT(0);
11476 vos_mem_free(wdiFlushAcReqParam);
11477 return VOS_STATUS_E_NOMEM;
11478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11482 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11483 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11484 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 /* Store Flush AC pointer, as this will be used for response */
11486 /* store Params pass it to WDI */
11487 pWdaParams->pWdaContext = pWDA;
11488 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11489 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11491 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 if(IS_WDI_STATUS_FAILURE(status))
11493 {
11494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11495 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11496 vos_mem_free(pWdaParams->wdaMsgParam) ;
11497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11498 vos_mem_free(pWdaParams) ;
11499 //TODO: respond to TL with failure
11500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011502}
Jeff Johnson295189b2012-06-20 16:38:30 -070011503/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011504 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 *
11506 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011507void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011508{
11509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011510 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011511 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512
11513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011514 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 if(NULL == pWdaParams)
11516 {
11517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011518 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011519 VOS_ASSERT(0) ;
11520 return ;
11521 }
11522 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011523 if (NULL == pWDA)
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11526 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011527 vos_mem_free(pWdaParams->wdaMsgParam) ;
11528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11529 vos_mem_free(pWdaParams) ;
11530
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011531 VOS_ASSERT(0);
11532 return ;
11533 }
11534
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11536 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11537 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11538 {
11539 pWDA->wdaAmpSessionOn = VOS_FALSE;
11540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 vos_mem_free(pWdaParams->wdaMsgParam) ;
11542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11543 vos_mem_free(pWdaParams) ;
11544 /*
11545 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11546 * param here
11547 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 return ;
11549}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011550/*
11551 * FUNCTION: WDA_BtAmpEventReqCallback
11552 * Free memory.
11553 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11554 */
11555void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11556{
11557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011558 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011559 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011560
Yue Ma7f44bbe2013-04-12 11:47:39 -070011561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11562 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11563
11564 if(NULL == pWdaParams)
11565 {
11566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11567 "%s: pWdaParams received NULL", __func__);
11568 VOS_ASSERT(0);
11569 return;
11570 }
11571
11572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011573 if (NULL == pWDA)
11574 {
11575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11576 "%s:pWDA is NULL", __func__);
11577 VOS_ASSERT(0);
11578 return ;
11579 }
11580
Yue Ma7f44bbe2013-04-12 11:47:39 -070011581 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11582
11583 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11584 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11585 {
11586 pWDA->wdaAmpSessionOn = VOS_FALSE;
11587 }
11588
11589 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11590 {
11591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11592 vos_mem_free(pWdaParams->wdaMsgParam);
11593 vos_mem_free(pWdaParams);
11594 }
11595
11596 return;
11597}
Jeff Johnson295189b2012-06-20 16:38:30 -070011598/*
11599 * FUNCTION: WDA_ProcessBtAmpEventReq
11600 * Request to WDI to Update with BT AMP events.
11601 */
11602VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11603 tSmeBtAmpEvent *pBtAmpEventParams)
11604{
11605 WDI_Status status = WDI_STATUS_SUCCESS ;
11606 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11607 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11608 sizeof(WDI_BtAmpEventParamsType)) ;
11609 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 if(NULL == wdiBtAmpEventParam)
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 VOS_ASSERT(0);
11617 return VOS_STATUS_E_NOMEM;
11618 }
11619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11620 if(NULL == pWdaParams)
11621 {
11622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 VOS_ASSERT(0);
11625 vos_mem_free(wdiBtAmpEventParam);
11626 return VOS_STATUS_E_NOMEM;
11627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11629 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011630 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11631 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011632 /* Store BT AMP event pointer, as this will be used for response */
11633 /* store Params pass it to WDI */
11634 pWdaParams->pWdaContext = pWDA;
11635 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11636 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011638 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011639 if(IS_WDI_STATUS_FAILURE(status))
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11643 vos_mem_free(pWdaParams->wdaMsgParam) ;
11644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11645 vos_mem_free(pWdaParams) ;
11646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11648 {
11649 pWDA->wdaAmpSessionOn = VOS_TRUE;
11650 }
11651 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011652}
11653
Jeff Johnson295189b2012-06-20 16:38:30 -070011654/*
11655 * FUNCTION: WDA_FTMCommandReqCallback
11656 * Handle FTM CMD response came from HAL
11657 * Route responce to HDD FTM
11658 */
11659void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11660 void *usrData)
11661{
11662 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11664 {
11665 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011666 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 return;
11668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 /* Release Current FTM Command Request */
11670 vos_mem_free(pWDA->wdaFTMCmdReq);
11671 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 /* Post FTM Responce to HDD FTM */
11673 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 return;
11675}
Jeff Johnson295189b2012-06-20 16:38:30 -070011676/*
11677 * FUNCTION: WDA_ProcessFTMCommand
11678 * Send FTM command to WDI
11679 */
11680VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11681 tPttMsgbuffer *pPTTFtmCmd)
11682{
11683 WDI_Status status = WDI_STATUS_SUCCESS;
11684 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 ftmCMDReq = (WDI_FTMCommandReqType *)
11686 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11687 if(NULL == ftmCMDReq)
11688 {
11689 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11690 "WDA FTM Command buffer alloc fail");
11691 return VOS_STATUS_E_NOMEM;
11692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11694 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 /* Send command to WDI */
11697 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 return status;
11699}
Jeff Johnsone7245742012-09-05 17:12:55 -070011700#ifdef FEATURE_OEM_DATA_SUPPORT
11701/*
11702 * FUNCTION: WDA_StartOemDataReqCallback
11703 *
11704 */
11705void WDA_StartOemDataReqCallback(
11706 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11707 void* pUserData)
11708{
11709 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011711 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011712 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011713
Jeff Johnsone7245742012-09-05 17:12:55 -070011714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011715 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011716
11717 if(NULL == pWdaParams)
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011721 VOS_ASSERT(0) ;
11722 return ;
11723 }
11724 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11725
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011726 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011727 {
11728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011729 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011730 VOS_ASSERT(0);
11731 return ;
11732 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011733
Jeff Johnsone7245742012-09-05 17:12:55 -070011734 /*
11735 * Allocate memory for response params sent to PE
11736 */
11737 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11738
11739 // Check if memory is allocated for OemdataMeasRsp Params.
11740 if(NULL == pOemDataRspParams)
11741 {
11742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11743 "OEM DATA WDA callback alloc fail");
11744 VOS_ASSERT(0) ;
11745 return;
11746 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011747
Jeff Johnsone7245742012-09-05 17:12:55 -070011748 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11750 vos_mem_free(pWdaParams->wdaMsgParam);
11751 vos_mem_free(pWdaParams) ;
11752
Jeff Johnsone7245742012-09-05 17:12:55 -070011753 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011754 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011755 * Also, here success always means that we have atleast one BSSID.
11756 */
11757 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11758
11759 //enable Tx
11760 status = WDA_ResumeDataTx(pWDA);
11761 if(status != VOS_STATUS_SUCCESS)
11762 {
11763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11764 }
11765 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11766 return ;
11767}
11768/*
11769 * FUNCTION: WDA_ProcessStartOemDataReq
11770 * Send Start Oem Data Req to WDI
11771 */
11772VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11773 tStartOemDataReq *pOemDataReqParams)
11774{
11775 WDI_Status status = WDI_STATUS_SUCCESS;
11776 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011777 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011778
11779 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11780
11781 if(NULL == wdiOemDataReqParams)
11782 {
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011785 VOS_ASSERT(0);
11786 return VOS_STATUS_E_NOMEM;
11787 }
11788
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011789 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11790 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11791 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11792 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011793
11794 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11795
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11797 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011798 {
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011801 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011802 vos_mem_free(pOemDataReqParams);
11803 VOS_ASSERT(0);
11804 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011805 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011806
Bernald44a1ae2013-01-09 08:30:39 -080011807 pWdaParams->pWdaContext = (void*)pWDA;
11808 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11809 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011810
11811 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11812 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011813
11814 if(IS_WDI_STATUS_FAILURE(status))
11815 {
11816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11817 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11819 vos_mem_free(pWdaParams->wdaMsgParam);
11820 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011821 }
11822 return CONVERT_WDI2VOS_STATUS(status) ;
11823}
11824#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011825/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011826 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 *
11828 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011829void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011830{
11831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011834 if(NULL == pWdaParams)
11835 {
11836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 VOS_ASSERT(0) ;
11839 return ;
11840 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011841
11842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11843 vos_mem_free(pWdaParams->wdaMsgParam);
11844 vos_mem_free(pWdaParams);
11845
11846 return ;
11847}
11848/*
11849 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11850 * Free memory.
11851 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11852 */
11853void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11854{
11855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11856
11857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11858 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11859
11860 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11863 "%s: pWdaParams received NULL", __func__);
11864 VOS_ASSERT(0);
11865 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011867
11868 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 {
11870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011871 vos_mem_free(pWdaParams->wdaMsgParam);
11872 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011874
11875 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011876}
Jeff Johnson295189b2012-06-20 16:38:30 -070011877#ifdef WLAN_FEATURE_GTK_OFFLOAD
11878/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011879 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011880 *
11881 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011882void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011883 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011884{
11885 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11886
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011888 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011889 if(NULL == pWdaParams)
11890 {
11891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11892 "%s: pWdaParams received NULL", __func__);
11893 VOS_ASSERT(0);
11894 return;
11895 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011896
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 vos_mem_free(pWdaParams->wdaMsgParam) ;
11898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11899 vos_mem_free(pWdaParams) ;
11900
11901 //print a msg, nothing else to do
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011903 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011904
11905 return ;
11906}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011907/*
11908 * FUNCTION: WDA_GTKOffloadReqCallback
11909 * Free memory.
11910 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11911 */
11912void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11913{
11914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011915
Yue Ma7f44bbe2013-04-12 11:47:39 -070011916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11917 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11918
11919 if(NULL == pWdaParams)
11920 {
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11922 "%s: pWdaParams received NULL", __func__);
11923 VOS_ASSERT(0);
11924 return;
11925 }
11926
11927 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11928 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011929 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11930 sizeof(WDI_GtkOffloadReqMsg));
11931 vos_mem_zero(pWdaParams->wdaMsgParam,
11932 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11934 vos_mem_free(pWdaParams->wdaMsgParam);
11935 vos_mem_free(pWdaParams);
11936 }
11937
11938 return;
11939}
Jeff Johnson295189b2012-06-20 16:38:30 -070011940/*
11941 * FUNCTION: WDA_ProcessGTKOffloadReq
11942 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11943 * to broadcast traffic (sta mode).
11944 */
11945VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11946 tpSirGtkOffloadParams pGtkOffloadParams)
11947{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011948 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11950 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11951 sizeof(WDI_GtkOffloadReqMsg)) ;
11952 tWDA_ReqParams *pWdaParams ;
11953
11954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011956
11957 if(NULL == wdiGtkOffloadReqMsg)
11958 {
11959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011961 VOS_ASSERT(0);
11962 return VOS_STATUS_E_NOMEM;
11963 }
11964
11965 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11966 if(NULL == pWdaParams)
11967 {
11968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 VOS_ASSERT(0);
11971 vos_mem_free(wdiGtkOffloadReqMsg);
11972 return VOS_STATUS_E_NOMEM;
11973 }
11974
11975 //
11976 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11977 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011978
11979 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011980 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011981
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11983 // Copy KCK
11984 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11985 // Copy KEK
11986 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11987 // Copy KeyReplayCounter
11988 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11989 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11990
Yue Ma7f44bbe2013-04-12 11:47:39 -070011991 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11992 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011993
Jeff Johnson295189b2012-06-20 16:38:30 -070011994
11995 /* Store Params pass it to WDI */
11996 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11997 pWdaParams->pWdaContext = pWDA;
11998 /* Store param pointer as passed in by caller */
11999 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12000
Yue Ma7f44bbe2013-04-12 11:47:39 -070012001 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012002
12003 if(IS_WDI_STATUS_FAILURE(status))
12004 {
12005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12006 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012007 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12008 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12010 vos_mem_free(pWdaParams->wdaMsgParam);
12011 vos_mem_free(pWdaParams);
12012 }
12013
12014 return CONVERT_WDI2VOS_STATUS(status) ;
12015}
12016
12017/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012018 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 *
12020 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012021void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012022 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012023{
12024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12025 tWDA_CbContext *pWDA;
12026 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012027 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 vos_msg_t vosMsg;
12029
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012031 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012032
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012033 if(NULL == pWdaParams)
12034 {
12035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12036 "%s: pWdaParams received NULL", __func__);
12037 VOS_ASSERT(0);
12038 return;
12039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012040
Nirav Shah374de6e2014-02-13 16:40:01 +053012041 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12042 if(NULL == pGtkOffloadGetInfoRsp)
12043 {
12044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12045 "%s: vos_mem_malloc failed ", __func__);
12046 VOS_ASSERT(0);
12047 return;
12048 }
12049
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12051 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12052
12053 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12054 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12055
12056 /* Message Header */
12057 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012058 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012059
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012060 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12061 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12062 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12063 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12064 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012065
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012066 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12067 pwdiGtkOffloadGetInfoRsparams->bssId,
12068 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 /* VOS message wrapper */
12070 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12071 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12072 vosMsg.bodyval = 0;
12073
12074 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12075 {
12076 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012077 vos_mem_zero(pGtkOffloadGetInfoRsp,
12078 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12080 }
12081
12082 vos_mem_free(pWdaParams->wdaMsgParam) ;
12083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12084 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012085
12086 return;
12087}
12088/*
12089 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12090 * Free memory and send RSP back to SME.
12091 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12092 */
12093void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12094{
12095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12096 vos_msg_t vosMsg;
12097
12098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12099 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12100
12101 if(NULL == pWdaParams)
12102 {
12103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12104 "%s: pWdaParams received NULL", __func__);
12105 VOS_ASSERT(0);
12106 return;
12107 }
12108
12109 /* VOS message wrapper */
12110 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12111 vosMsg.bodyptr = NULL;
12112 vosMsg.bodyval = 0;
12113
12114 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12115 {
12116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12117 vos_mem_free(pWdaParams->wdaMsgParam);
12118 vos_mem_free(pWdaParams);
12119 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12120 }
12121
12122 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012123}
12124#endif
12125
12126/*
12127 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12128 * Request to WDI to set Tx Per Tracking configurations
12129 */
12130VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12131{
12132 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012133 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12135 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12136 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12137 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012139 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 if(NULL == pwdiSetTxPerTrackingReqParams)
12141 {
12142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 vos_mem_free(pTxPerTrackingParams);
12145 VOS_ASSERT(0);
12146 return VOS_STATUS_E_NOMEM;
12147 }
12148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12149 if(NULL == pWdaParams)
12150 {
12151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12154 vos_mem_free(pTxPerTrackingParams);
12155 VOS_ASSERT(0);
12156 return VOS_STATUS_E_NOMEM;
12157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12159 pTxPerTrackingParams->ucTxPerTrackingEnable;
12160 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12161 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12162 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12163 pTxPerTrackingParams->ucTxPerTrackingRatio;
12164 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12165 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012166 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12167 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012168 /* Store param pointer as passed in by caller */
12169 /* store Params pass it to WDI
12170 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12171 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12172 pWdaParams->pWdaContext = pWDA;
12173 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012174 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012175 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012176 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 {
12178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12179 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012180 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012181 vos_mem_free(pWdaParams->wdaMsgParam) ;
12182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12183 vos_mem_free(pWdaParams) ;
12184 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012185 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012186
12187}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012188/*
12189 * FUNCTION: WDA_HALDumpCmdCallback
12190 * Send the VOS complete .
12191 */
12192void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12193 void* pUserData)
12194{
12195 tANI_U8 *buffer = NULL;
12196 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012197 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 if(NULL == pWdaParams)
12199 {
12200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012201 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012202 VOS_ASSERT(0) ;
12203 return ;
12204 }
12205
12206 pWDA = pWdaParams->pWdaContext;
12207 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012208 if(wdiRspParams->usBufferLen > 0)
12209 {
12210 /*Copy the Resp data to UMAC supplied buffer*/
12211 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12212 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012213
12214 if (!pWdaParams->wdaHALDumpAsync)
12215 {/* Indicate VOSS about the start complete */
12216 vos_WDAComplete_cback(pWDA->pVosContext);
12217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12219 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 return ;
12221}
12222
Jeff Johnson295189b2012-06-20 16:38:30 -070012223/*
12224 * FUNCTION: WDA_ProcessHALDumpCmdReq
12225 * Send Dump command to WDI
12226 */
12227VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12228 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012229 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012230{
12231 WDI_Status status = WDI_STATUS_SUCCESS;
12232 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12233 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012234 tWDA_HalDumpReqParams *pWdaParams ;
12235
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 pVosContextType pVosContext = NULL;
12237 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12239 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012240 if(pVosContext)
12241 {
12242 if (pVosContext->isLogpInProgress)
12243 {
12244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12245 "%s:LOGP in Progress. Ignore!!!", __func__);
12246 return VOS_STATUS_E_BUSY;
12247 }
12248 }
12249 else
12250 {
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12252 "%s: VOS Context Null", __func__);
12253 return VOS_STATUS_E_RESOURCES;
12254 }
12255
Siddharth Bhal68115602015-01-18 20:44:55 +053012256 if (NULL == pVosContext->pWDAContext)
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12259 "%s: WDA Context Null", __func__);
12260 return VOS_STATUS_E_RESOURCES;
12261 }
12262 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012263 if(NULL == pWdaParams)
12264 {
12265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012267 return VOS_STATUS_E_NOMEM;
12268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 /* Allocate memory WDI request structure*/
12270 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12271 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12272 if(NULL == wdiHALDumpCmdReqParam)
12273 {
12274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12275 "WDA HAL DUMP Command buffer alloc fail");
12276 vos_mem_free(pWdaParams);
12277 return WDI_STATUS_E_FAILURE;
12278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012279 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 /* Extract the arguments */
12281 wdiHalDumpCmdInfo->command = cmd;
12282 wdiHalDumpCmdInfo->argument1 = arg1;
12283 wdiHalDumpCmdInfo->argument2 = arg2;
12284 wdiHalDumpCmdInfo->argument3 = arg3;
12285 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012286 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012287 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012288 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289
12290 /* Response message will be passed through the buffer */
12291 pWdaParams->wdaMsgParam = (void *)pBuffer;
12292
12293 /* store Params pass it to WDI */
12294 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012295 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012296 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12297 pWdaParams);
12298 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12299 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012301 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12302 WDA_DUMPCMD_WAIT_TIMEOUT );
12303 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012305 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12306 {
12307 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12308 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12309 }
12310 else
12311 {
12312 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12313 "%s: WDA_HALDUMP reporting other error",__func__);
12314 }
12315 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012317 }
12318 return status;
12319}
Jeff Johnson295189b2012-06-20 16:38:30 -070012320#ifdef WLAN_FEATURE_GTK_OFFLOAD
12321/*
12322 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12323 * Request to WDI to get GTK Offload Information
12324 */
12325VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12326 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12327{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012328 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12330 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12331 tWDA_ReqParams *pWdaParams ;
12332
12333 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12334 {
12335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 VOS_ASSERT(0);
12338 return VOS_STATUS_E_NOMEM;
12339 }
12340
12341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12342 if(NULL == pWdaParams)
12343 {
12344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 VOS_ASSERT(0);
12347 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12348 return VOS_STATUS_E_NOMEM;
12349 }
12350
Yue Ma7f44bbe2013-04-12 11:47:39 -070012351 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12352 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012353
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 /* Store Params pass it to WDI */
12355 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12356 pWdaParams->pWdaContext = pWDA;
12357 /* Store param pointer as passed in by caller */
12358 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12359
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012360 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012361 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012362
Yue Ma7f44bbe2013-04-12 11:47:39 -070012363 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012364
12365 if(IS_WDI_STATUS_FAILURE(status))
12366 {
12367 /* failure returned by WDI API */
12368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12369 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12371 vos_mem_free(pWdaParams) ;
12372 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12373 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12374 }
12375
12376 return CONVERT_WDI2VOS_STATUS(status) ;
12377}
12378#endif // WLAN_FEATURE_GTK_OFFLOAD
12379
12380/*
Yue Mab9c86f42013-08-14 15:59:08 -070012381 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12382 *
12383 */
12384VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12385 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12386{
12387 WDI_Status wdiStatus;
12388 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12389
12390 addPeriodicTxPtrnParams =
12391 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12392
12393 if (NULL == addPeriodicTxPtrnParams)
12394 {
12395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12396 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12397 __func__);
12398
12399 return VOS_STATUS_E_NOMEM;
12400 }
12401
12402 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12403 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12404
12405 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12406 addPeriodicTxPtrnParams->pUserData = pWDA;
12407
12408 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12409
12410 if (WDI_STATUS_PENDING == wdiStatus)
12411 {
12412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12413 "Pending received for %s:%d", __func__, __LINE__ );
12414 }
12415 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12416 {
12417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12418 "Failure in %s:%d", __func__, __LINE__ );
12419 }
12420
12421 vos_mem_free(addPeriodicTxPtrnParams);
12422
12423 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12424}
12425
12426/*
12427 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12428 *
12429 */
12430VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12431 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12432{
12433 WDI_Status wdiStatus;
12434 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12435
12436 delPeriodicTxPtrnParams =
12437 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12438
12439 if (NULL == delPeriodicTxPtrnParams)
12440 {
12441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12442 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12443 __func__);
12444
12445 return VOS_STATUS_E_NOMEM;
12446 }
12447
12448 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12449 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12450
12451 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12452 delPeriodicTxPtrnParams->pUserData = pWDA;
12453
12454 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12455
12456 if (WDI_STATUS_PENDING == wdiStatus)
12457 {
12458 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12459 "Pending received for %s:%d", __func__, __LINE__ );
12460 }
12461 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12462 {
12463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12464 "Failure in %s:%d", __func__, __LINE__ );
12465 }
12466
12467 vos_mem_free(delPeriodicTxPtrnParams);
12468
12469 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12470}
12471
Rajeev79dbe4c2013-10-05 11:03:42 +053012472#ifdef FEATURE_WLAN_BATCH_SCAN
12473/*
12474 * FUNCTION: WDA_ProcessStopBatchScanInd
12475 *
12476 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12477 *
12478 * PARAM:
12479 * pWDA: pointer to WDA context
12480 * pReq: pointer to stop batch scan request
12481 */
12482VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12483 tSirStopBatchScanInd *pReq)
12484{
12485 WDI_Status wdiStatus;
12486 WDI_StopBatchScanIndType wdiReq;
12487
12488 wdiReq.param = pReq->param;
12489
12490 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12491
12492 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12493 {
12494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12495 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12496 }
12497
12498 vos_mem_free(pReq);
12499
12500 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12501}
12502/*==========================================================================
12503 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12504
12505 DESCRIPTION
12506 API to pull batch scan result from FW
12507
12508 PARAMETERS
12509 pWDA: Pointer to WDA context
12510 pGetBatchScanReq: Pointer to get batch scan result indication
12511
12512 RETURN VALUE
12513 NONE
12514
12515===========================================================================*/
12516VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12517 tSirTriggerBatchScanResultInd *pReq)
12518{
12519 WDI_Status wdiStatus;
12520 WDI_TriggerBatchScanResultIndType wdiReq;
12521
12522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12523 "------> %s " ,__func__);
12524
12525 wdiReq.param = pReq->param;
12526
12527 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12528
12529 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12530 {
12531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12532 "Trigger batch scan result ind failed %s:%d",
12533 __func__, wdiStatus);
12534 }
12535
12536 vos_mem_free(pReq);
12537
12538 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12539}
12540
12541/*==========================================================================
12542 FUNCTION WDA_SetBatchScanRespCallback
12543
12544 DESCRIPTION
12545 API to process set batch scan response from FW
12546
12547 PARAMETERS
12548 pRsp: Pointer to set batch scan response
12549 pUserData: Pointer to user data
12550
12551 RETURN VALUE
12552 NONE
12553
12554===========================================================================*/
12555void WDA_SetBatchScanRespCallback
12556(
12557 WDI_SetBatchScanRspType *pRsp,
12558 void* pUserData
12559)
12560{
12561 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12562 tpAniSirGlobal pMac;
12563 void *pCallbackContext;
12564 tWDA_CbContext *pWDA = NULL ;
12565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12566
12567
12568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12569 "<------ %s " ,__func__);
12570 if (NULL == pWdaParams)
12571 {
12572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12573 "%s: pWdaParams received NULL", __func__);
12574 VOS_ASSERT(0) ;
12575 return ;
12576 }
12577
12578 /*extract WDA context*/
12579 pWDA = pWdaParams->pWdaContext;
12580 if (NULL == pWDA)
12581 {
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12583 "%s:pWDA is NULL can't invole HDD callback",
12584 __func__);
12585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12586 vos_mem_free(pWdaParams->wdaMsgParam);
12587 vos_mem_free(pWdaParams);
12588 VOS_ASSERT(0);
12589 return;
12590 }
12591
12592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12593 vos_mem_free(pWdaParams->wdaMsgParam);
12594 vos_mem_free(pWdaParams);
12595
12596 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12597 if (NULL == pMac)
12598 {
12599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12600 "%s:pMac is NULL", __func__);
12601 VOS_ASSERT(0);
12602 return;
12603 }
12604
12605 pHddSetBatchScanRsp =
12606 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12607 if (NULL == pHddSetBatchScanRsp)
12608 {
12609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12610 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12611 VOS_ASSERT(0);
12612 return;
12613 }
12614
12615 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12616
12617 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12618 /*call hdd callback with set batch scan response data*/
12619 if(pMac->pmc.setBatchScanReqCallback)
12620 {
12621 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12622 }
12623 else
12624 {
12625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12626 "%s:HDD callback is null", __func__);
12627 VOS_ASSERT(0);
12628 }
12629
12630 vos_mem_free(pHddSetBatchScanRsp);
12631 return ;
12632}
12633
12634/*==========================================================================
12635 FUNCTION WDA_ProcessSetBatchScanReq
12636
12637 DESCRIPTION
12638 API to send set batch scan request to WDI
12639
12640 PARAMETERS
12641 pWDA: Pointer to WDA context
12642 pSetBatchScanReq: Pointer to set batch scan req
12643
12644 RETURN VALUE
12645 NONE
12646
12647===========================================================================*/
12648VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12649 tSirSetBatchScanReq *pSetBatchScanReq)
12650{
12651 WDI_Status status;
12652 tWDA_ReqParams *pWdaParams ;
12653 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12654
12655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12656 "------> %s " ,__func__);
12657
12658 pWdiSetBatchScanReq =
12659 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12660 if (NULL == pWdiSetBatchScanReq)
12661 {
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12663 "%s: VOS MEM Alloc Failure", __func__);
12664 vos_mem_free(pSetBatchScanReq);
12665 VOS_ASSERT(0);
12666 return VOS_STATUS_E_NOMEM;
12667 }
12668
12669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12670 if (NULL == pWdaParams)
12671 {
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12673 "%s: VOS MEM Alloc Failure", __func__);
12674 VOS_ASSERT(0);
12675 vos_mem_free(pSetBatchScanReq);
12676 vos_mem_free(pWdiSetBatchScanReq);
12677 return VOS_STATUS_E_NOMEM;
12678 }
12679
12680 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12681 pWdiSetBatchScanReq->numberOfScansToBatch =
12682 pSetBatchScanReq->numberOfScansToBatch;
12683 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12684 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12685 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12686
12687 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12688 pWdaParams->pWdaContext = pWDA;
12689 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12690
12691 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12692 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12693 if (IS_WDI_STATUS_FAILURE(status))
12694 {
12695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12696 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12698 vos_mem_free(pWdaParams->wdaMsgParam);
12699 vos_mem_free(pWdaParams);
12700 }
12701 return CONVERT_WDI2VOS_STATUS(status);
12702}
12703
12704#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012705/*
12706 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12707 *
12708 * DESCRIPTION: This function sends start/update OBSS scan
12709 * inidcation message to WDI
12710 *
12711 * PARAM:
12712 * pWDA: pointer to WDA context
12713 * pReq: pointer to start OBSS scan request
12714 */
12715VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12716 tSirHT40OBSSScanInd *pReq)
12717{
12718 WDI_Status status;
12719 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12720 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012721
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12723 "------> %s " ,__func__);
12724 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12725 wdiOBSSScanParams.pUserData = pWDA;
12726
12727 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12728 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12729 pWdiOBSSScanInd->scanType = pReq->scanType;
12730 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12731 pReq->OBSSScanActiveDwellTime;
12732 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12733 pReq->OBSSScanPassiveDwellTime;
12734 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12735 pReq->BSSChannelWidthTriggerScanInterval;
12736 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12737 pReq->BSSWidthChannelTransitionDelayFactor;
12738 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12739 pReq->OBSSScanActiveTotalPerChannel;
12740 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12741 pReq->OBSSScanPassiveTotalPerChannel;
12742 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12743 pReq->OBSSScanActivityThreshold;
12744 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12745 vos_mem_copy(pWdiOBSSScanInd->channels,
12746 pReq->channels,
12747 pReq->channelCount);
12748 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12749 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12750 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12751 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12752 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12753
12754 vos_mem_copy(pWdiOBSSScanInd->ieField,
12755 pReq->ieField,
12756 pReq->ieFieldLen);
12757
12758 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12759 if (WDI_STATUS_PENDING == status)
12760 {
12761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12762 "Pending received for %s:%d ",__func__,__LINE__ );
12763 }
12764 else if (WDI_STATUS_SUCCESS_SYNC != status)
12765 {
12766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12767 "Failure in %s:%d ",__func__,__LINE__ );
12768 }
12769 return CONVERT_WDI2VOS_STATUS(status) ;
12770}
12771/*
12772 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12773 *
12774 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12775 *
12776 * PARAM:
12777 * pWDA: pointer to WDA context
12778 * pReq: pointer to stop batch scan request
12779 */
12780VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12781 tANI_U8 *bssIdx)
12782{
12783 WDI_Status status;
12784
12785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12786 "------> %s " ,__func__);
12787
12788 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12789 if (WDI_STATUS_PENDING == status)
12790 {
12791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12792 "Pending received for %s:%d ",__func__,__LINE__ );
12793 }
12794 else if (WDI_STATUS_SUCCESS_SYNC != status)
12795 {
12796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12797 "Failure in %s:%d ",__func__,__LINE__ );
12798 }
12799 return CONVERT_WDI2VOS_STATUS(status) ;
12800}
Yue Mab9c86f42013-08-14 15:59:08 -070012801/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012802 * FUNCTION: WDA_ProcessRateUpdateInd
12803 *
12804 */
12805VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12806 tSirRateUpdateInd *pRateUpdateParams)
12807{
12808 WDI_Status wdiStatus;
12809 WDI_RateUpdateIndParams rateUpdateParams;
12810
12811 vos_mem_copy(rateUpdateParams.bssid,
12812 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12813
12814 rateUpdateParams.ucastDataRateTxFlag =
12815 pRateUpdateParams->ucastDataRateTxFlag;
12816 rateUpdateParams.reliableMcastDataRateTxFlag =
12817 pRateUpdateParams->reliableMcastDataRateTxFlag;
12818 rateUpdateParams.mcastDataRate24GHzTxFlag =
12819 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12820 rateUpdateParams.mcastDataRate5GHzTxFlag =
12821 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12822
12823 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12824 rateUpdateParams.reliableMcastDataRate =
12825 pRateUpdateParams->reliableMcastDataRate;
12826 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12827 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12828
12829 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12830 rateUpdateParams.pUserData = pWDA;
12831
12832 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12833
12834 if (WDI_STATUS_PENDING == wdiStatus)
12835 {
12836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12837 "Pending received for %s:%d", __func__, __LINE__ );
12838 }
12839 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12840 {
12841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12842 "Failure in %s:%d", __func__, __LINE__ );
12843 }
12844
12845 vos_mem_free(pRateUpdateParams);
12846
12847 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12848}
12849
12850/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012851 * -------------------------------------------------------------------------
12852 * DATA interface with WDI for Mgmt Frames
12853 * -------------------------------------------------------------------------
12854 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012855/*
12856 * FUNCTION: WDA_TxComplete
12857 * Callback function for the WDA_TxPacket
12858 */
12859VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12860 VOS_STATUS status )
12861{
12862
12863 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12864 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012865 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012866
Mihir Shete63341222015-03-24 15:39:18 +053012867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12868
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 if(NULL == wdaContext)
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12872 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012873 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012875 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012876 return VOS_STATUS_E_FAILURE;
12877 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012878
12879 /*Check if frame was timed out or not*/
12880 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12881 (v_PVOID_t)&uUserData);
12882
12883 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12884 {
12885 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012886 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12887 "%s: MGMT Frame Tx timed out",
12888 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012889 vos_pkt_return_packet(pData);
12890 return VOS_STATUS_SUCCESS;
12891 }
12892
Jeff Johnson295189b2012-06-20 16:38:30 -070012893 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12894 if( NULL!=wdaContext->pTxCbFunc)
12895 {
12896 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012897 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 {
12899 wdaContext->pTxCbFunc(pMac, pData);
12900 }
12901 else
12902 {
12903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012904 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012905 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012906 //Return from here since we reaching here because the packet already timeout
12907 return status;
12908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 }
12910
12911 /*
12912 * Trigger the event to bring the HAL TL Tx complete function to come
12913 * out of wait
12914 * Let the coe above to complete the packet first. When this event is set,
12915 * the thread waiting for the event may run and set Vospacket_freed causing the original
12916 * packet not being freed.
12917 */
12918 status = vos_event_set(&wdaContext->txFrameEvent);
12919 if(!VOS_IS_STATUS_SUCCESS(status))
12920 {
12921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012922 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012924 return status;
12925}
Jeff Johnson295189b2012-06-20 16:38:30 -070012926/*
12927 * FUNCTION: WDA_TxPacket
12928 * Forward TX management frame to WDI
12929 */
12930VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12931 void *pFrmBuf,
12932 tANI_U16 frmLen,
12933 eFrameType frmType,
12934 eFrameTxDir txDir,
12935 tANI_U8 tid,
12936 pWDATxRxCompFunc pCompFunc,
12937 void *pData,
12938 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012939 tANI_U32 txFlag,
12940 tANI_U32 txBdToken
12941 )
Jeff Johnson295189b2012-06-20 16:38:30 -070012942{
12943 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12944 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12945 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12946 tANI_U8 eventIdx = 0;
12947 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12948 tpAniSirGlobal pMac;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012949
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 if((NULL == pWDA)||(NULL == pFrmBuf))
12951 {
12952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012953 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012954 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012955 VOS_ASSERT(0);
12956 return VOS_STATUS_E_FAILURE;
12957 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012958
Jeff Johnson295189b2012-06-20 16:38:30 -070012959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012960 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
12961 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12963 if(NULL == pMac)
12964 {
12965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012966 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 VOS_ASSERT(0);
12968 return VOS_STATUS_E_FAILURE;
12969 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012970
Jeff Johnson295189b2012-06-20 16:38:30 -070012971 /* store the call back function in WDA context */
12972 pWDA->pTxCbFunc = pCompFunc;
12973 /* store the call back for the function of ackTxComplete */
12974 if( pAckTxComp )
12975 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012976 if( NULL != pWDA->pAckTxCbFunc )
12977 {
12978 /* Already TxComp is active no need to active again */
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012980 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012981 pWDA->pAckTxCbFunc( pMac, 0);
12982 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983
Jeff Johnsone7245742012-09-05 17:12:55 -070012984 if( VOS_STATUS_SUCCESS !=
12985 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12986 {
12987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12988 "Tx Complete timeout Timer Stop Failed ");
12989 }
12990 else
12991 {
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012993 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012994 }
12995 }
12996
12997 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12998 pWDA->pAckTxCbFunc = pAckTxComp;
12999 if( VOS_STATUS_SUCCESS !=
13000 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13001 {
13002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13003 "Tx Complete Timer Start Failed ");
13004 pWDA->pAckTxCbFunc = NULL;
13005 return eHAL_STATUS_FAILURE;
13006 }
13007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 /* Reset the event to be not signalled */
13009 status = vos_event_reset(&pWDA->txFrameEvent);
13010 if(!VOS_IS_STATUS_SUCCESS(status))
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013013 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013014 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13015 if( pAckTxComp )
13016 {
13017 pWDA->pAckTxCbFunc = NULL;
13018 if( VOS_STATUS_SUCCESS !=
13019 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13020 {
13021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13022 "Tx Complete timeout Timer Stop Failed ");
13023 }
13024 }
13025 return VOS_STATUS_E_FAILURE;
13026 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013027
13028 /* If Peer Sta mask is set don't overwrite to self sta */
13029 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013030 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013031 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013032 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013033 else
13034 {
Ganesh K08bce952012-12-13 15:04:41 -080013035 /* Get system role, use the self station if in unknown role or STA role */
13036 systemRole = wdaGetGlobalSystemRole(pMac);
13037 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13038 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013039#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013040 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013041#endif
Ganesh K08bce952012-12-13 15:04:41 -080013042 ))
13043 {
13044 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13045 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013047
Jeff Johnsone7245742012-09-05 17:12:55 -070013048 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13049 disassoc frame reaches the HW, HAL has already deleted the peer station */
13050 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013051 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013052 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013053 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013055 /*Send Probe request frames on self sta idx*/
13056 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 /* Since we donot want probe responses to be retried, send probe responses
13059 through the NO_ACK queues */
13060 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13061 {
13062 //probe response is sent out using self station and no retries options.
13063 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13064 }
13065 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13066 {
13067 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13068 }
13069 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013070 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013071
13072 /*Set frame tag to 0
13073 We will use the WDA user data in order to tag a frame as expired*/
13074 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13075 (v_PVOID_t)0);
13076
13077
13078 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013079 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13080 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 {
13082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013083 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013085 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 -070013086 if( pAckTxComp )
13087 {
13088 pWDA->pAckTxCbFunc = NULL;
13089 if( VOS_STATUS_SUCCESS !=
13090 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13091 {
13092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13093 "Tx Complete timeout Timer Stop Failed ");
13094 }
13095 }
13096 return VOS_STATUS_E_FAILURE;
13097 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013098 /*
13099 * Wait for the event to be set by the TL, to get the response of TX
13100 * complete, this event should be set by the Callback function called by TL
13101 */
13102 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13103 &eventIdx);
13104 if(!VOS_IS_STATUS_SUCCESS(status))
13105 {
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13107 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013108 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013109
13110 /*Tag Frame as timed out for later deletion*/
13111 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13112 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13114 after the packet gets completed(packet freed once)*/
13115
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013116 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013117 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013118
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 /* check whether the packet was freed already,so need not free again when
13120 * TL calls the WDA_Txcomplete routine
13121 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013122 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13123 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 {
13125 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013126 } */
13127
Jeff Johnson295189b2012-06-20 16:38:30 -070013128 if( pAckTxComp )
13129 {
13130 pWDA->pAckTxCbFunc = NULL;
13131 if( VOS_STATUS_SUCCESS !=
13132 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13133 {
13134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13135 "Tx Complete timeout Timer Stop Failed ");
13136 }
13137 }
13138 status = VOS_STATUS_E_FAILURE;
13139 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013140#ifdef WLAN_DUMP_MGMTFRAMES
13141 if (VOS_IS_STATUS_SUCCESS(status))
13142 {
13143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13144 "%s() TX packet : SubType %d", __func__,pFc->subType);
13145 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13146 pData, frmLen);
13147 }
13148#endif
13149
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013150 if (VOS_IS_STATUS_SUCCESS(status))
13151 {
13152 if (pMac->fEnableDebugLog & 0x1)
13153 {
13154 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13155 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13156 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13157 {
13158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13159 pFc->type, pFc->subType);
13160 }
13161 }
13162 }
13163
13164
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 return status;
13166}
Jeff Johnson295189b2012-06-20 16:38:30 -070013167/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013168 * FUNCTION: WDA_ProcessDHCPStartInd
13169 * Forward DHCP Start to WDI
13170 */
13171static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13172 tAniDHCPInd *dhcpStartInd)
13173{
13174 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013175 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013176
c_hpothu0b0cab72014-02-13 21:52:40 +053013177 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13178 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013179 sizeof(tSirMacAddr));
13180
c_hpothu0b0cab72014-02-13 21:52:40 +053013181 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013182
c_hpothu0b0cab72014-02-13 21:52:40 +053013183 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013184 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13186 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013187 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013188 else if (WDI_STATUS_SUCCESS_SYNC != status)
13189 {
13190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13191 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13192 }
13193
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013194 vos_mem_free(dhcpStartInd);
13195 return CONVERT_WDI2VOS_STATUS(status) ;
13196}
13197
13198 /*
13199 * FUNCTION: WDA_ProcessDHCPStopInd
13200 * Forward DHCP Stop to WDI
13201 */
13202 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13203 tAniDHCPInd *dhcpStopInd)
13204 {
13205 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013206 WDI_DHCPInd wdiDHCPInd;
13207
13208 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13209 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13210
13211 status = WDI_dhcpStopInd(&wdiDHCPInd);
13212
13213 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013214 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13216 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013217 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013218 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013219 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13221 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013222 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013223
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013224 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013225
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013226 return CONVERT_WDI2VOS_STATUS(status) ;
13227 }
13228
13229/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013230 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13231 *
13232 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13233 *
13234 * PARAM:
13235 * pWDA: pointer to WDA context
13236 * pReq: pointer to stop batch scan request
13237 */
13238VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13239 tpSpoofMacAddrReqParams pReq)
13240{
13241 WDI_Status wdiStatus;
13242 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13243 tWDA_ReqParams *pWdaParams;
13244
13245 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13246 sizeof(WDI_SpoofMacAddrInfoType));
13247 if(NULL == WDI_SpoofMacAddrInfoParams) {
13248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13249 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13250 VOS_ASSERT(0);
13251 return VOS_STATUS_E_NOMEM;
13252 }
13253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13254 if(NULL == pWdaParams) {
13255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13256 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013257 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013258 VOS_ASSERT(0);
13259 return VOS_STATUS_E_NOMEM;
13260 }
13261
13262 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13263 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13264
13265 pWdaParams->pWdaContext = pWDA;
13266 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013267 pWdaParams->wdaMsgParam = (void *)pReq;
13268
13269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13270 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13271
Siddharth Bhal171788a2014-09-29 21:02:40 +053013272 /* store Params pass it to WDI */
13273 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13274
13275 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013276 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13277 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013278
13279 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13280 {
13281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13282 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13284 vos_mem_free(pWdaParams->wdaMsgParam);
13285 vos_mem_free(pWdaParams);
13286 }
13287
13288 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13289}
13290
13291/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 * FUNCTION: WDA_McProcessMsg
13293 * Trigger DAL-AL to start CFG download
13294 */
13295VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13296{
13297 VOS_STATUS status = VOS_STATUS_SUCCESS;
13298 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013299 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013300 {
13301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013302 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 VOS_ASSERT(0);
13304 return VOS_STATUS_E_FAILURE;
13305 }
13306
13307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013308 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013309
13310 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13311 if(NULL == pWDA )
13312 {
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013314 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013316 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 return VOS_STATUS_E_FAILURE;
13318 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 /* Process all the WDA messages.. */
13320 switch( pMsg->type )
13321 {
13322 case WNI_CFG_DNLD_REQ:
13323 {
13324 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 /* call WDA complete event if config download success */
13326 if( VOS_IS_STATUS_SUCCESS(status) )
13327 {
13328 vos_WDAComplete_cback(pVosContext);
13329 }
13330 else
13331 {
13332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13333 "WDA Config Download failure" );
13334 }
13335 break ;
13336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 /*
13338 * Init SCAN request from PE, convert it into DAL format
13339 * and send it to DAL
13340 */
13341 case WDA_INIT_SCAN_REQ:
13342 {
13343 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13344 break ;
13345 }
13346 /* start SCAN request from PE */
13347 case WDA_START_SCAN_REQ:
13348 {
13349 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13350 break ;
13351 }
13352 /* end SCAN request from PE */
13353 case WDA_END_SCAN_REQ:
13354 {
13355 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13356 break ;
13357 }
13358 /* end SCAN request from PE */
13359 case WDA_FINISH_SCAN_REQ:
13360 {
13361 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13362 break ;
13363 }
13364 /* join request from PE */
13365 case WDA_CHNL_SWITCH_REQ:
13366 {
13367 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13368 {
13369 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13370 }
13371 else
13372 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013373 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13374 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13375 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13376 {
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13378 "call ProcessChannelSwitchReq_V1" );
13379 WDA_ProcessChannelSwitchReq_V1(pWDA,
13380 (tSwitchChannelParams*)pMsg->bodyptr) ;
13381 }
13382 else
13383 {
13384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13385 "call ProcessChannelSwitchReq" );
13386 WDA_ProcessChannelSwitchReq(pWDA,
13387 (tSwitchChannelParams*)pMsg->bodyptr) ;
13388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 }
13390 break ;
13391 }
13392 /* ADD BSS request from PE */
13393 case WDA_ADD_BSS_REQ:
13394 {
13395 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13396 break ;
13397 }
13398 case WDA_ADD_STA_REQ:
13399 {
13400 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13401 break ;
13402 }
13403 case WDA_DELETE_BSS_REQ:
13404 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013405 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13406 break ;
13407 }
13408 case WDA_DELETE_STA_REQ:
13409 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013410 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13411 break ;
13412 }
13413 case WDA_CONFIG_PARAM_UPDATE_REQ:
13414 {
13415 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13416 break ;
13417 }
13418 case WDA_SET_BSSKEY_REQ:
13419 {
13420 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13421 break ;
13422 }
13423 case WDA_SET_STAKEY_REQ:
13424 {
13425 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13426 break ;
13427 }
13428 case WDA_SET_STA_BCASTKEY_REQ:
13429 {
13430 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13431 break ;
13432 }
13433 case WDA_REMOVE_BSSKEY_REQ:
13434 {
13435 WDA_ProcessRemoveBssKeyReq(pWDA,
13436 (tRemoveBssKeyParams *)pMsg->bodyptr);
13437 break ;
13438 }
13439 case WDA_REMOVE_STAKEY_REQ:
13440 {
13441 WDA_ProcessRemoveStaKeyReq(pWDA,
13442 (tRemoveStaKeyParams *)pMsg->bodyptr);
13443 break ;
13444 }
13445 case WDA_REMOVE_STA_BCASTKEY_REQ:
13446 {
13447 /* TODO: currently UMAC is not sending this request, Add the code for
13448 handling this request when UMAC supports */
13449 break;
13450 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013451#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 case WDA_TSM_STATS_REQ:
13453 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013454 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 break;
13456 }
13457#endif
13458 case WDA_UPDATE_EDCA_PROFILE_IND:
13459 {
13460 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13461 break;
13462 }
13463 case WDA_ADD_TS_REQ:
13464 {
13465 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13466 break;
13467 }
13468 case WDA_DEL_TS_REQ:
13469 {
13470 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13471 break;
13472 }
13473 case WDA_ADDBA_REQ:
13474 {
13475 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13476 break;
13477 }
13478 case WDA_DELBA_IND:
13479 {
13480 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13481 break;
13482 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013483 case WDA_UPDATE_CHAN_LIST_REQ:
13484 {
13485 WDA_ProcessUpdateChannelList(pWDA,
13486 (tSirUpdateChanList *)pMsg->bodyptr);
13487 break;
13488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013489 case WDA_SET_LINK_STATE:
13490 {
13491 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13492 break;
13493 }
13494 case WDA_GET_STATISTICS_REQ:
13495 {
13496 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13497 break;
13498 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013499#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013500 case WDA_GET_ROAM_RSSI_REQ:
13501 {
13502 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13503 break;
13504 }
13505#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 case WDA_PWR_SAVE_CFG:
13507 {
13508 if(pWDA->wdaState == WDA_READY_STATE)
13509 {
13510 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13511 }
13512 else
13513 {
13514 if(NULL != pMsg->bodyptr)
13515 {
13516 vos_mem_free(pMsg->bodyptr);
13517 }
13518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13519 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13520 }
13521 break;
13522 }
13523 case WDA_ENTER_IMPS_REQ:
13524 {
13525 if(pWDA->wdaState == WDA_READY_STATE)
13526 {
13527 WDA_ProcessEnterImpsReq(pWDA);
13528 }
13529 else
13530 {
13531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13532 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13533 }
13534 break;
13535 }
13536 case WDA_EXIT_IMPS_REQ:
13537 {
13538 if(pWDA->wdaState == WDA_READY_STATE)
13539 {
13540 WDA_ProcessExitImpsReq(pWDA);
13541 }
13542 else
13543 {
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13545 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13546 }
13547 break;
13548 }
13549 case WDA_ENTER_BMPS_REQ:
13550 {
13551 if(pWDA->wdaState == WDA_READY_STATE)
13552 {
13553 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13554 }
13555 else
13556 {
13557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13558 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13559 }
13560 break;
13561 }
13562 case WDA_EXIT_BMPS_REQ:
13563 {
13564 if(pWDA->wdaState == WDA_READY_STATE)
13565 {
13566 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13567 }
13568 else
13569 {
13570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13571 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13572 }
13573 break;
13574 }
13575 case WDA_ENTER_UAPSD_REQ:
13576 {
13577 if(pWDA->wdaState == WDA_READY_STATE)
13578 {
13579 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13580 }
13581 else
13582 {
13583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13584 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13585 }
13586 break;
13587 }
13588 case WDA_EXIT_UAPSD_REQ:
13589 {
13590 if(pWDA->wdaState == WDA_READY_STATE)
13591 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013592 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013593 }
13594 else
13595 {
13596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13597 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13598 }
13599 break;
13600 }
13601 case WDA_UPDATE_UAPSD_IND:
13602 {
13603 if(pWDA->wdaState == WDA_READY_STATE)
13604 {
13605 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13606 }
13607 else
13608 {
13609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13610 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13611 }
13612 break;
13613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013614 case WDA_REGISTER_PE_CALLBACK :
13615 {
13616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13617 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13618 /*TODO: store the PE callback */
13619 /* Do Nothing? MSG Body should be freed at here */
13620 if(NULL != pMsg->bodyptr)
13621 {
13622 vos_mem_free(pMsg->bodyptr);
13623 }
13624 break;
13625 }
13626 case WDA_SYS_READY_IND :
13627 {
13628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13629 "Handling msg type WDA_SYS_READY_IND " );
13630 pWDA->wdaState = WDA_READY_STATE;
13631 if(NULL != pMsg->bodyptr)
13632 {
13633 vos_mem_free(pMsg->bodyptr);
13634 }
13635 break;
13636 }
13637 case WDA_BEACON_FILTER_IND :
13638 {
13639 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13640 break;
13641 }
13642 case WDA_BTC_SET_CFG:
13643 {
13644 /*TODO: handle this while dealing with BTC */
13645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13646 "Handling msg type WDA_BTC_SET_CFG " );
13647 /* Do Nothing? MSG Body should be freed at here */
13648 if(NULL != pMsg->bodyptr)
13649 {
13650 vos_mem_free(pMsg->bodyptr);
13651 }
13652 break;
13653 }
13654 case WDA_SIGNAL_BT_EVENT:
13655 {
13656 /*TODO: handle this while dealing with BTC */
13657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13658 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13659 /* Do Nothing? MSG Body should be freed at here */
13660 if(NULL != pMsg->bodyptr)
13661 {
13662 vos_mem_free(pMsg->bodyptr);
13663 }
13664 break;
13665 }
13666 case WDA_CFG_RXP_FILTER_REQ:
13667 {
13668 WDA_ProcessConfigureRxpFilterReq(pWDA,
13669 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13670 break;
13671 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013672 case WDA_MGMT_LOGGING_INIT_REQ:
13673 {
13674 WDA_ProcessMgmtLoggingInitReq(pWDA,
13675 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
13676 break;
13677 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013678 case WDA_GET_FRAME_LOG_REQ:
13679 {
13680 WDA_ProcessGetFrameLogReq(pWDA,
13681 (tAniGetFrameLogReq *)pMsg->bodyptr);
13682 break;
13683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013684 case WDA_SET_HOST_OFFLOAD:
13685 {
13686 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13687 break;
13688 }
13689 case WDA_SET_KEEP_ALIVE:
13690 {
13691 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13692 break;
13693 }
13694#ifdef WLAN_NS_OFFLOAD
13695 case WDA_SET_NS_OFFLOAD:
13696 {
13697 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13698 break;
13699 }
13700#endif //WLAN_NS_OFFLOAD
13701 case WDA_ADD_STA_SELF_REQ:
13702 {
13703 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13704 break;
13705 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013706 case WDA_DEL_STA_SELF_REQ:
13707 {
13708 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13709 break;
13710 }
13711 case WDA_WOWL_ADD_BCAST_PTRN:
13712 {
13713 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13714 break;
13715 }
13716 case WDA_WOWL_DEL_BCAST_PTRN:
13717 {
13718 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13719 break;
13720 }
13721 case WDA_WOWL_ENTER_REQ:
13722 {
13723 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13724 break;
13725 }
13726 case WDA_WOWL_EXIT_REQ:
13727 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013728 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 break;
13730 }
13731 case WDA_TL_FLUSH_AC_REQ:
13732 {
13733 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13734 break;
13735 }
13736 case WDA_SIGNAL_BTAMP_EVENT:
13737 {
13738 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13739 break;
13740 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013741 case WDA_FW_STATS_GET_REQ:
13742 {
13743 WDA_ProcessFWStatsGetReq(pWDA,
13744 (tSirFWStatsGetReq *)pMsg->bodyptr);
13745 break;
13746 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013747#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13748 case WDA_LINK_LAYER_STATS_SET_REQ:
13749 {
13750 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13751 break;
13752 }
13753 case WDA_LINK_LAYER_STATS_GET_REQ:
13754 {
13755 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13756 break;
13757 }
13758 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13759 {
13760 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13761 break;
13762 }
13763#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013764#ifdef WLAN_FEATURE_EXTSCAN
13765 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13766 {
13767 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13768 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13769 break;
13770 }
13771 case WDA_EXTSCAN_START_REQ:
13772 {
13773 WDA_ProcessEXTScanStartReq(pWDA,
13774 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13775 break;
13776 }
13777 case WDA_EXTSCAN_STOP_REQ:
13778 {
13779 WDA_ProcessEXTScanStopReq(pWDA,
13780 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13781 break;
13782 }
13783 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13784 {
13785 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13786 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13787 break;
13788 }
13789 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13790 {
13791 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13792 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13793 break;
13794 }
13795 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13796 {
13797 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13798 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13799 break;
13800 }
13801 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13802 {
13803 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13804 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13805 break;
13806 }
13807 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13808 {
13809 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13810 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13811 break;
13812 }
13813#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013814#ifdef WDA_UT
13815 case WDA_WDI_EVENT_MSG:
13816 {
13817 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13818 break ;
13819 }
13820#endif
13821 case WDA_UPDATE_BEACON_IND:
13822 {
13823 WDA_ProcessUpdateBeaconParams(pWDA,
13824 (tUpdateBeaconParams *)pMsg->bodyptr);
13825 break;
13826 }
13827 case WDA_SEND_BEACON_REQ:
13828 {
13829 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13830 break;
13831 }
13832 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13833 {
13834 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13835 (tSendProbeRespParams *)pMsg->bodyptr);
13836 break;
13837 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013838#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 case WDA_SET_MAX_TX_POWER_REQ:
13840 {
13841 WDA_ProcessSetMaxTxPowerReq(pWDA,
13842 (tMaxTxPowerParams *)pMsg->bodyptr);
13843 break;
13844 }
13845#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013846 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13847 {
13848 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13849 pMsg->bodyptr);
13850 break;
13851 }
schang86c22c42013-03-13 18:41:24 -070013852 case WDA_SET_TX_POWER_REQ:
13853 {
13854 WDA_ProcessSetTxPowerReq(pWDA,
13855 (tSirSetTxPowerReq *)pMsg->bodyptr);
13856 break;
13857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 case WDA_SET_P2P_GO_NOA_REQ:
13859 {
13860 WDA_ProcessSetP2PGONOAReq(pWDA,
13861 (tP2pPsParams *)pMsg->bodyptr);
13862 break;
13863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 /* timer related messages */
13865 case WDA_TIMER_BA_ACTIVITY_REQ:
13866 {
13867 WDA_BaCheckActivity(pWDA) ;
13868 break ;
13869 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013870
13871 /* timer related messages */
13872 case WDA_TIMER_TRAFFIC_STATS_IND:
13873 {
13874 WDA_TimerTrafficStatsInd(pWDA);
13875 break;
13876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013877#ifdef WLAN_FEATURE_VOWIFI_11R
13878 case WDA_AGGR_QOS_REQ:
13879 {
13880 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13881 break;
13882 }
13883#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 case WDA_FTM_CMD_REQ:
13885 {
13886 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13887 break ;
13888 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013889#ifdef FEATURE_OEM_DATA_SUPPORT
13890 case WDA_START_OEM_DATA_REQ:
13891 {
13892 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13893 break;
13894 }
13895#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013896 /* Tx Complete Time out Indication */
13897 case WDA_TX_COMPLETE_TIMEOUT_IND:
13898 {
13899 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13900 break;
13901 }
13902 case WDA_WLAN_SUSPEND_IND:
13903 {
13904 WDA_ProcessWlanSuspendInd(pWDA,
13905 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13906 break;
13907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013908 case WDA_WLAN_RESUME_REQ:
13909 {
13910 WDA_ProcessWlanResumeReq(pWDA,
13911 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13912 break;
13913 }
13914
13915 case WDA_UPDATE_CF_IND:
13916 {
13917 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13918 pMsg->bodyptr = NULL;
13919 break;
13920 }
13921#ifdef FEATURE_WLAN_SCAN_PNO
13922 case WDA_SET_PNO_REQ:
13923 {
13924 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13925 break;
13926 }
13927 case WDA_UPDATE_SCAN_PARAMS_REQ:
13928 {
13929 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13930 break;
13931 }
13932 case WDA_SET_RSSI_FILTER_REQ:
13933 {
13934 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13935 break;
13936 }
13937#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013938#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013939 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013940 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013941 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013942 break;
13943 }
13944#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013945 case WDA_SET_TX_PER_TRACKING_REQ:
13946 {
13947 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13948 break;
13949 }
13950
13951#ifdef WLAN_FEATURE_PACKET_FILTERING
13952 case WDA_8023_MULTICAST_LIST_REQ:
13953 {
13954 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13955 break;
13956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13958 {
13959 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13960 break;
13961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013962 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13963 {
13964 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13965 break;
13966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13968 {
13969 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13970 break;
13971 }
13972#endif // WLAN_FEATURE_PACKET_FILTERING
13973
13974
13975 case WDA_TRANSMISSION_CONTROL_IND:
13976 {
13977 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13978 break;
13979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 case WDA_SET_POWER_PARAMS_REQ:
13981 {
13982 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13983 break;
13984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013985#ifdef WLAN_FEATURE_GTK_OFFLOAD
13986 case WDA_GTK_OFFLOAD_REQ:
13987 {
13988 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13989 break;
13990 }
13991
13992 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13993 {
13994 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13995 break;
13996 }
13997#endif //WLAN_FEATURE_GTK_OFFLOAD
13998
13999 case WDA_SET_TM_LEVEL_REQ:
14000 {
14001 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14002 break;
14003 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014004
Mohit Khanna4a70d262012-09-11 16:30:12 -070014005 case WDA_UPDATE_OP_MODE:
14006 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014007 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14008 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14009 {
14010 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14011 }
14012 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014013 {
14014 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14015 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14016 else
14017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014018 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014019 }
14020 else
14021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014022 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014023 break;
14024 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014025#ifdef WLAN_FEATURE_11W
14026 case WDA_EXCLUDE_UNENCRYPTED_IND:
14027 {
14028 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14029 break;
14030 }
14031#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014032#ifdef FEATURE_WLAN_TDLS
14033 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14034 {
14035 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14036 break;
14037 }
14038#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014039 case WDA_DHCP_START_IND:
14040 {
14041 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14042 break;
14043 }
14044 case WDA_DHCP_STOP_IND:
14045 {
14046 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14047 break;
14048 }
Leo Chang9056f462013-08-01 19:21:11 -070014049#ifdef FEATURE_WLAN_LPHB
14050 case WDA_LPHB_CONF_REQ:
14051 {
14052 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14053 break;
14054 }
14055#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014056 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14057 {
14058 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14059 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14060 break;
14061 }
14062 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14063 {
14064 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14065 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14066 break;
14067 }
14068
Rajeev79dbe4c2013-10-05 11:03:42 +053014069#ifdef FEATURE_WLAN_BATCH_SCAN
14070 case WDA_SET_BATCH_SCAN_REQ:
14071 {
14072 WDA_ProcessSetBatchScanReq(pWDA,
14073 (tSirSetBatchScanReq *)pMsg->bodyptr);
14074 break;
14075 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014076 case WDA_RATE_UPDATE_IND:
14077 {
14078 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14079 break;
14080 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014081 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14082 {
14083 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14084 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14085 break;
14086 }
14087 case WDA_STOP_BATCH_SCAN_IND:
14088 {
14089 WDA_ProcessStopBatchScanInd(pWDA,
14090 (tSirStopBatchScanInd *)pMsg->bodyptr);
14091 break;
14092 }
c_hpothu92367912014-05-01 15:18:17 +053014093 case WDA_GET_BCN_MISS_RATE_REQ:
14094 WDA_ProcessGetBcnMissRateReq(pWDA,
14095 (tSirBcnMissRateReq *)pMsg->bodyptr);
14096 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014097#endif
14098
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014099 case WDA_HT40_OBSS_SCAN_IND:
14100 {
14101 WDA_ProcessHT40OBSSScanInd(pWDA,
14102 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14103 break;
14104 }
14105 case WDA_HT40_OBSS_STOP_SCAN_IND:
14106 {
14107 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14108 (tANI_U8*)pMsg->bodyptr);
14109 break;
14110 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014111// tdlsoffchan
14112#ifdef FEATURE_WLAN_TDLS
14113 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14114 {
14115 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14116 break;
14117 }
14118#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014119 case WDA_SPOOF_MAC_ADDR_REQ:
14120 {
14121 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14122 break;
14123 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014124 case WDA_ENCRYPT_MSG_REQ:
14125 {
14126 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14127 break;
14128 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014129
14130 case WDA_NAN_REQUEST:
14131 {
14132 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14133 break;
14134 }
14135
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 default:
14137 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014139 "No Handling for msg type %x in WDA "
14140 ,pMsg->type);
14141 /* Do Nothing? MSG Body should be freed at here */
14142 if(NULL != pMsg->bodyptr)
14143 {
14144 vos_mem_free(pMsg->bodyptr);
14145 }
14146 //WDA_VOS_ASSERT(0) ;
14147 }
14148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 return status ;
14150}
14151
Jeff Johnson295189b2012-06-20 16:38:30 -070014152/*
14153 * FUNCTION: WDA_LowLevelIndCallback
14154 * IND API callback from WDI, send Ind to PE
14155 */
14156void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14157 void* pUserData )
14158{
14159 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14160#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14161 tSirRSSINotification rssiNotification;
14162#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014163 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 {
14165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014166 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 VOS_ASSERT(0);
14168 return ;
14169 }
14170
14171 switch(wdiLowLevelInd->wdiIndicationType)
14172 {
14173 case WDI_RSSI_NOTIFICATION_IND:
14174 {
14175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14176 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014177#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14178 rssiNotification.bReserved =
14179 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14180 rssiNotification.bRssiThres1NegCross =
14181 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14182 rssiNotification.bRssiThres1PosCross =
14183 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14184 rssiNotification.bRssiThres2NegCross =
14185 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14186 rssiNotification.bRssiThres2PosCross =
14187 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14188 rssiNotification.bRssiThres3NegCross =
14189 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14190 rssiNotification.bRssiThres3PosCross =
14191 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014192 rssiNotification.avgRssi = (v_S7_t)
14193 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014194 WLANTL_BMPSRSSIRegionChangedNotification(
14195 pWDA->pVosContext,
14196 &rssiNotification);
14197#endif
14198 break ;
14199 }
14200 case WDI_MISSED_BEACON_IND:
14201 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014202 tpSirSmeMissedBeaconInd pMissBeacInd =
14203 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14205 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014207 if(NULL == pMissBeacInd)
14208 {
14209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14210 "%s: VOS MEM Alloc Failure", __func__);
14211 break;
14212 }
14213 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14214 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14215 pMissBeacInd->bssIdx =
14216 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14217 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 break ;
14219 }
14220 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14221 {
14222 /* TODO: Decode Ind and send Ind to PE */
14223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14224 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14225 break ;
14226 }
14227
14228 case WDI_MIC_FAILURE_IND:
14229 {
14230 tpSirSmeMicFailureInd pMicInd =
14231 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14232
14233 if(NULL == pMicInd)
14234 {
14235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 break;
14238 }
14239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14240 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14242 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14243 vos_mem_copy(pMicInd->bssId,
14244 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14245 sizeof(tSirMacAddr));
14246 vos_mem_copy(pMicInd->info.srcMacAddr,
14247 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14248 sizeof(tSirMacAddr));
14249 vos_mem_copy(pMicInd->info.taMacAddr,
14250 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14251 sizeof(tSirMacAddr));
14252 vos_mem_copy(pMicInd->info.dstMacAddr,
14253 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14254 sizeof(tSirMacAddr));
14255 vos_mem_copy(pMicInd->info.rxMacAddr,
14256 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14257 sizeof(tSirMacAddr));
14258 pMicInd->info.multicast =
14259 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14260 pMicInd->info.keyId=
14261 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14262 pMicInd->info.IV1=
14263 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14264 vos_mem_copy(pMicInd->info.TSC,
14265 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014266 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14267 (void *)pMicInd , 0) ;
14268 break ;
14269 }
14270 case WDI_FATAL_ERROR_IND:
14271 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014272 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014273 /* TODO: Decode Ind and send Ind to PE */
14274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14275 "Received WDI_FATAL_ERROR_IND from WDI ");
14276 break ;
14277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014278 case WDI_DEL_STA_IND:
14279 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014280 tpDeleteStaContext pDelSTACtx =
14281 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14282
14283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14284 "Received WDI_DEL_STA_IND from WDI ");
14285 if(NULL == pDelSTACtx)
14286 {
14287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014289 break;
14290 }
14291 vos_mem_copy(pDelSTACtx->addr2,
14292 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14293 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014294 vos_mem_copy(pDelSTACtx->bssId,
14295 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14296 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014297 pDelSTACtx->assocId =
14298 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14299 pDelSTACtx->reasonCode =
14300 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14301 pDelSTACtx->staId =
14302 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014303 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14304 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014305 break ;
14306 }
14307 case WDI_COEX_IND:
14308 {
14309 tANI_U32 index;
14310 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014311 tSirSmeCoexInd *pSmeCoexInd;
14312
14313 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14314 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14315 {
14316 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14317 {
14318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14319 FL("Coex state: 0x%x coex feature: 0x%x"),
14320 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14321 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14322
14323 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14324 {
14325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14326 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14327 }
14328 }
14329 break;
14330 }
14331
14332 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014333 if(NULL == pSmeCoexInd)
14334 {
14335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014336 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014337 break;
14338 }
14339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14340 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014341 /* Message Header */
14342 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14343 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014344 /* Info from WDI Indication */
14345 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14346 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14347 {
14348 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014350 /* VOS message wrapper */
14351 vosMsg.type = eWNI_SME_COEX_IND;
14352 vosMsg.bodyptr = (void *)pSmeCoexInd;
14353 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014354 /* Send message to SME */
14355 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14356 {
14357 /* free the mem and return */
14358 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14359 }
14360 else
14361 {
14362 /* DEBUG */
14363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14364 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14365 pSmeCoexInd->coexIndType,
14366 pSmeCoexInd->coexIndData[0],
14367 pSmeCoexInd->coexIndData[1],
14368 pSmeCoexInd->coexIndData[2],
14369 pSmeCoexInd->coexIndData[3]);
14370 }
14371 break;
14372 }
14373 case WDI_TX_COMPLETE_IND:
14374 {
14375 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14376 /* Calling TxCompleteAck Indication from wda context*/
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14378 "Complete Indication received from HAL");
14379 if( pWDA->pAckTxCbFunc )
14380 {
14381 if( VOS_STATUS_SUCCESS !=
14382 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14383 {
14384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14385 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014386 }
14387 if (IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
14388 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14389 else
14390 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014391 pWDA->pAckTxCbFunc = NULL;
14392 }
14393 else
14394 {
14395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14396 "Tx Complete Indication is received after timeout ");
14397 }
14398 break;
14399 }
Viral Modid86bde22012-12-10 13:09:21 -080014400 case WDI_P2P_NOA_START_IND :
14401 {
14402 tSirP2PNoaStart *pP2pNoaStart =
14403 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14404
14405 if (NULL == pP2pNoaStart)
14406 {
14407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14408 "Memory allocation failure, "
14409 "WDI_P2P_NOA_START_IND not forwarded");
14410 break;
14411 }
14412 pP2pNoaStart->status =
14413 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14414 pP2pNoaStart->bssIdx =
14415 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14416 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14417 (void *)pP2pNoaStart , 0) ;
14418 break;
14419 }
14420
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014421#ifdef FEATURE_WLAN_TDLS
14422 case WDI_TDLS_IND :
14423 {
14424 tSirTdlsInd *pTdlsInd =
14425 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14426
14427 if (NULL == pTdlsInd)
14428 {
14429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14430 "Memory allocation failure, "
14431 "WDI_TDLS_IND not forwarded");
14432 break;
14433 }
14434 pTdlsInd->status =
14435 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14436 pTdlsInd->assocId =
14437 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14438 pTdlsInd->staIdx =
14439 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14440 pTdlsInd->reasonCode =
14441 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14442 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14443 (void *)pTdlsInd , 0) ;
14444 break;
14445 }
14446#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014447 case WDI_P2P_NOA_ATTR_IND :
14448 {
14449 tSirP2PNoaAttr *pP2pNoaAttr =
14450 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14452 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014453 if (NULL == pP2pNoaAttr)
14454 {
14455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14456 "Memory allocation failure, "
14457 "WDI_P2P_NOA_ATTR_IND not forwarded");
14458 break;
14459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014460 pP2pNoaAttr->index =
14461 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14462 pP2pNoaAttr->oppPsFlag =
14463 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14464 pP2pNoaAttr->ctWin =
14465 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14466
14467 pP2pNoaAttr->uNoa1IntervalCnt =
14468 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14469 pP2pNoaAttr->uNoa1Duration =
14470 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14471 pP2pNoaAttr->uNoa1Interval =
14472 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14473 pP2pNoaAttr->uNoa1StartTime =
14474 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014475 pP2pNoaAttr->uNoa2IntervalCnt =
14476 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14477 pP2pNoaAttr->uNoa2Duration =
14478 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14479 pP2pNoaAttr->uNoa2Interval =
14480 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14481 pP2pNoaAttr->uNoa2StartTime =
14482 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14484 (void *)pP2pNoaAttr , 0) ;
14485 break;
14486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014487#ifdef FEATURE_WLAN_SCAN_PNO
14488 case WDI_PREF_NETWORK_FOUND_IND:
14489 {
14490 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014491 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14492 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14493 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14494 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14495
Jeff Johnson295189b2012-06-20 16:38:30 -070014496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14497 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014498 if (NULL == pPrefNetworkFoundInd)
14499 {
14500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14501 "Memory allocation failure, "
14502 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014503 if (NULL !=
14504 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14505 {
14506 wpalMemoryFree(
14507 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14508 );
14509 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014511 break;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 /* Message Header */
14514 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014515 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014516
14517 /* Info from WDI Indication */
14518 pPrefNetworkFoundInd->ssId.length =
14519 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014520 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14522 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14523 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014524 if (NULL !=
14525 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14526 {
14527 pPrefNetworkFoundInd->frameLength =
14528 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14529 vos_mem_copy( pPrefNetworkFoundInd->data,
14530 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14531 pPrefNetworkFoundInd->frameLength);
14532 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14533 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14534 }
14535 else
14536 {
14537 pPrefNetworkFoundInd->frameLength = 0;
14538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 /* VOS message wrapper */
14541 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14542 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14543 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 /* Send message to SME */
14545 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14546 {
14547 /* free the mem and return */
14548 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014550 break;
14551 }
14552#endif // FEATURE_WLAN_SCAN_PNO
14553
14554#ifdef WLAN_WAKEUP_EVENTS
14555 case WDI_WAKE_REASON_IND:
14556 {
14557 vos_msg_t vosMsg;
14558 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14559 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14560 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14561
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014563 "[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 -070014564 wdiLowLevelInd->wdiIndicationType,
14565 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14566 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14567 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14568
14569 if (NULL == pWakeReasonInd)
14570 {
14571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14572 "Memory allocation failure, "
14573 "WDI_WAKE_REASON_IND not forwarded");
14574 break;
14575 }
14576
14577 vos_mem_zero(pWakeReasonInd, allocSize);
14578
14579 /* Message Header */
14580 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14581 pWakeReasonInd->mesgLen = allocSize;
14582
14583 /* Info from WDI Indication */
14584 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14585 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14586 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14587 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14588 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14589 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14590 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14591 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14592
14593 /* VOS message wrapper */
14594 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14595 vosMsg.bodyptr = (void *) pWakeReasonInd;
14596 vosMsg.bodyval = 0;
14597
14598 /* Send message to SME */
14599 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14600 {
14601 /* free the mem and return */
14602 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14603 }
14604
14605 break;
14606 }
14607#endif // WLAN_WAKEUP_EVENTS
14608
14609 case WDI_TX_PER_HIT_IND:
14610 {
14611 vos_msg_t vosMsg;
14612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14613 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14614 /* VOS message wrapper */
14615 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14616 vosMsg.bodyptr = NULL;
14617 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014618 /* Send message to SME */
14619 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14620 {
14621 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14622 }
14623 break;
14624 }
14625
Leo Chang9056f462013-08-01 19:21:11 -070014626#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014627 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014628 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014629 vos_msg_t vosMsg;
14630 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014631
Leo Changd9df8aa2013-09-26 13:32:26 -070014632 lphbInd =
14633 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14634 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014635 {
14636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14637 "%s: LPHB IND buffer alloc Fail", __func__);
14638 return ;
14639 }
14640
Leo Changd9df8aa2013-09-26 13:32:26 -070014641 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014642 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014643 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014644 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014645 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014646 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14647
14648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014649 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014650 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14651
Leo Changd9df8aa2013-09-26 13:32:26 -070014652 vosMsg.type = eWNI_SME_LPHB_IND;
14653 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014654 vosMsg.bodyval = 0;
14655 /* Send message to SME */
14656 if (VOS_STATUS_SUCCESS !=
14657 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14658 {
14659 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14660 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014661 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014662 }
14663 break;
14664 }
14665#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014666 case WDI_PERIODIC_TX_PTRN_FW_IND:
14667 {
14668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14669 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14670 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14671 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14672 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14673 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14674 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14675
14676 break;
14677 }
Leo Chang9056f462013-08-01 19:21:11 -070014678
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014679 case WDI_IBSS_PEER_INACTIVITY_IND:
14680 {
14681 tSirIbssPeerInactivityInd *pIbssInd =
14682 (tSirIbssPeerInactivityInd *)
14683 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14684
14685 if (NULL == pIbssInd)
14686 {
14687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14688 "Memory allocation failure, "
14689 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14690 break;
14691 }
14692
14693 pIbssInd->bssIdx =
14694 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14695 pIbssInd->staIdx =
14696 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14697 vos_mem_copy(pIbssInd->peerAddr,
14698 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14699 sizeof(tSirMacAddr));
14700 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14701 break;
14702 }
14703
Rajeev79dbe4c2013-10-05 11:03:42 +053014704#ifdef FEATURE_WLAN_BATCH_SCAN
14705 case WDI_BATCH_SCAN_RESULT_IND:
14706 {
14707 void *pBatchScanResult;
14708 void *pCallbackContext;
14709 tpAniSirGlobal pMac;
14710
14711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14712 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14713
14714 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014715 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014716 {
14717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14718 "%s:pWDA is NULL", __func__);
14719 VOS_ASSERT(0);
14720 return;
14721 }
14722
14723 pBatchScanResult =
14724 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14725 if (NULL == pBatchScanResult)
14726 {
14727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14728 "%s:Batch scan result from FW is null can't invoke HDD callback",
14729 __func__);
14730 VOS_ASSERT(0);
14731 return;
14732 }
14733
14734 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14735 if (NULL == pMac)
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "%s:pMac is NULL", __func__);
14739 VOS_ASSERT(0);
14740 return;
14741 }
14742
14743 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14744 /*call hdd callback with set batch scan response data*/
14745 if(pMac->pmc.batchScanResultCallback)
14746 {
14747 pMac->pmc.batchScanResultCallback(pCallbackContext,
14748 pBatchScanResult);
14749 }
14750 else
14751 {
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14753 "%s:HDD callback is null", __func__);
14754 VOS_ASSERT(0);
14755 }
14756 break;
14757 }
14758#endif
14759
Leo Chang0b0e45a2013-12-15 15:18:55 -080014760#ifdef FEATURE_WLAN_CH_AVOID
14761 case WDI_CH_AVOID_IND:
14762 {
14763 vos_msg_t vosMsg;
14764 tSirChAvoidIndType *chAvoidInd;
14765
14766 chAvoidInd =
14767 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14768 if (NULL == chAvoidInd)
14769 {
14770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14771 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14772 return ;
14773 }
14774
14775 chAvoidInd->avoidRangeCount =
14776 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14777 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14778 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14779 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14780
14781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14782 "%s : WDA CH avoid notification", __func__);
14783
14784 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14785 vosMsg.bodyptr = chAvoidInd;
14786 vosMsg.bodyval = 0;
14787 /* Send message to SME */
14788 if (VOS_STATUS_SUCCESS !=
14789 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14790 {
14791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14792 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14793 vos_mem_free(chAvoidInd);
14794 }
14795 break;
14796 }
14797#endif /* FEATURE_WLAN_CH_AVOID */
14798
Sunil Duttbd736ed2014-05-26 21:19:41 +053014799#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14800 case WDI_LL_STATS_RESULTS_IND:
14801 {
14802 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014803 tpAniSirGlobal pMac;
14804
14805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14806 "Received WDI_LL_STATS_RESULTS_IND from FW");
14807
14808 /*sanity check*/
14809 if (NULL == pWDA)
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14812 "%s:pWDA is NULL", __func__);
14813 VOS_ASSERT(0);
14814 return;
14815 }
14816
14817 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014818 (void *)wdiLowLevelInd->
14819 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014820 if (NULL == pLinkLayerStatsInd)
14821 {
14822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14823 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14824 __func__);
14825 VOS_ASSERT(0);
14826 return;
14827 }
14828
14829 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14830 if (NULL == pMac)
14831 {
14832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14833 "%s:pMac is NULL", __func__);
14834 VOS_ASSERT(0);
14835 return;
14836 }
14837
Dino Mycled3d50022014-07-07 12:58:25 +053014838 /* call hdd callback with Link Layer Statistics.
14839 * vdev_id/ifacId in link_stats_results will be
14840 * used to retrieve the correct HDD context
14841 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014842 if (pMac->sme.pLinkLayerStatsIndCallback)
14843 {
Dino Mycled3d50022014-07-07 12:58:25 +053014844 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014845 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014846 pLinkLayerStatsInd,
14847 wdiLowLevelInd->
14848 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014849 }
14850 else
14851 {
14852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14853 "%s:HDD callback is null", __func__);
14854 }
14855 break;
14856 }
14857#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14858
Dino Mycle41bdc942014-06-10 11:30:24 +053014859#ifdef WLAN_FEATURE_EXTSCAN
14860 case WDI_EXTSCAN_PROGRESS_IND:
14861 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14862 case WDI_EXTSCAN_SCAN_RESULT_IND:
14863 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14864 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14865 {
14866 void *pEXTScanData;
14867 void *pCallbackContext;
14868 tpAniSirGlobal pMac;
14869 tANI_U16 indType;
14870
14871 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14872 "Received WDI_EXTSCAN Indications from FW");
14873 /*sanity check*/
14874 if (NULL == pWDA)
14875 {
14876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14877 "%s:pWDA is NULL", __func__);
14878 VOS_ASSERT(0);
14879 return;
14880 }
14881 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14882 {
14883 indType = WDA_EXTSCAN_PROGRESS_IND;
14884
14885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14886 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14887 }
14888 if (wdiLowLevelInd->wdiIndicationType ==
14889 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14890 {
14891 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14892
14893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14894 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14895 }
14896 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14897 {
14898 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14899
14900 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14901 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14902 }
14903 if (wdiLowLevelInd->wdiIndicationType ==
14904 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14905 {
14906 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14907
14908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14909 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14910 }
14911 if (wdiLowLevelInd->wdiIndicationType ==
14912 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14913 {
14914 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14915
14916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14917 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14918 }
14919
14920 pEXTScanData =
14921 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14922 if (NULL == pEXTScanData)
14923 {
14924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14925 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14926 __func__);
14927 VOS_ASSERT(0);
14928 return;
14929 }
14930
14931 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14932 if (NULL == pMac)
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14935 "%s:pMac is NULL", __func__);
14936 VOS_ASSERT(0);
14937 return;
14938 }
14939
14940 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14941
14942 if(pMac->sme.pEXTScanIndCb)
14943 {
14944 pMac->sme.pEXTScanIndCb(pCallbackContext,
14945 indType,
14946 pEXTScanData);
14947 }
14948 else
14949 {
14950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14951 "%s:HDD callback is null", __func__);
14952 }
14953 break;
14954 }
14955#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014956 case WDI_DEL_BA_IND:
14957 {
14958 tpBADeleteParams pDelBAInd =
14959 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14960
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "Received WDI_DEL_BA_IND from WDI ");
14963 if(NULL == pDelBAInd)
14964 {
14965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14966 "%s: VOS MEM Alloc Failure", __func__);
14967 break;
14968 }
14969 vos_mem_copy(pDelBAInd->peerMacAddr,
14970 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14971 sizeof(tSirMacAddr));
14972 vos_mem_copy(pDelBAInd->bssId,
14973 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14974 sizeof(tSirMacAddr));
14975 pDelBAInd->staIdx =
14976 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14977 pDelBAInd->baTID =
14978 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14979 pDelBAInd->baDirection =
14980 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14981 pDelBAInd->reasonCode =
14982 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14983
14984 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14985 (void *)pDelBAInd , 0) ;
14986 break;
14987 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014988 case WDI_NAN_EVENT_IND:
14989 {
14990 vos_msg_t vosMsg;
14991 tpSirNanEvent pSirNanEvent = NULL;
14992
14993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14994 "Received WDI_NAN_EVENT");
14995
14996 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
14997 - sizeof( pSirNanEvent->event_data)
14998 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
14999
15000 if (NULL == pSirNanEvent)
15001 {
15002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15003 "%s: VOS MEM Alloc Failure", __func__);
15004 VOS_ASSERT(0) ;
15005 break;
15006 }
15007
15008 pSirNanEvent->event_data_len =
15009 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15010
15011 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15012 {
15013 vos_mem_copy( pSirNanEvent->event_data,
15014 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15015 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15016 }
15017
15018 /* VOS message wrapper */
15019 vosMsg.type = eWNI_SME_NAN_EVENT;
15020 vosMsg.bodyptr = pSirNanEvent;
15021 vosMsg.bodyval = 0;
15022
15023 /* Send message to SME */
15024 if (VOS_STATUS_SUCCESS
15025 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15026 {
15027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15028 "post eWNI_SME_NAN_EVENT to SME Failed");
15029 vos_mem_free(pSirNanEvent);
15030 }
15031 break;
15032 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015033
Jeff Johnson295189b2012-06-20 16:38:30 -070015034 default:
15035 {
15036 /* TODO error */
15037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15038 "Received UNKNOWN Indication from WDI ");
15039 }
15040 }
15041 return ;
15042}
15043
Jeff Johnson295189b2012-06-20 16:38:30 -070015044/*
15045 * BA related processing in WDA.
15046 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015047void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15048 void* pUserData)
15049{
15050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15051 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015052 if(NULL == pWdaParams)
15053 {
15054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015056 VOS_ASSERT(0) ;
15057 return ;
15058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015059 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015060 vos_mem_free(pWdaParams->wdaMsgParam) ;
15061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15062 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015065 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15066 {
15067 tANI_U8 i = 0 ;
15068 tBaActivityInd *baActivityInd = NULL ;
15069 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15070 tANI_U8 allocSize = sizeof(tBaActivityInd)
15071 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15072 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15073 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015074 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 if(NULL == baActivityInd)
15076 {
15077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 VOS_ASSERT(0) ;
15080 return;
15081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015082 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15083 sizeof(tSirMacAddr)) ;
15084 baActivityInd->baCandidateCnt = baCandidateCount ;
15085
15086 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15087 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15088
15089 for(i = 0 ; i < baCandidateCount ; i++)
15090 {
15091 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015092 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15093 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015094 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15095 {
15096 baCandidate->baInfo[tid].fBaEnable =
15097 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15098 baCandidate->baInfo[tid].startingSeqNum =
15099 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15100 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015101 wdiBaCandidate++ ;
15102 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015104 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15105 }
15106 else
15107 {
15108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15109 "BA Trigger RSP with Failure received ");
15110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015111 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015112}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015113
15114
15115/*
15116 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15117 * during MCC
15118 */
15119void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15120{
15121 wpt_uint32 enabled;
15122 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15123 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15124 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15125
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015126 if (NULL == pMac )
15127 {
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15129 "%s: Invoked with invalid MAC context ", __func__ );
15130 VOS_ASSERT(0);
15131 return;
15132 }
15133
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015134 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15135 != eSIR_SUCCESS)
15136 {
15137 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15138 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15139 return;
15140 }
15141
15142 if(!enabled)
15143 {
15144 return;
15145 }
15146
15147 if(NULL == pWDA)
15148 {
15149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15150 "%s:WDA context is NULL", __func__);
15151 VOS_ASSERT(0);
15152 return;
15153 }
15154
15155 if(activate)
15156 {
15157 if( VOS_STATUS_SUCCESS !=
15158 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15159 {
15160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15161 "Traffic Stats Timer Start Failed ");
15162 return;
15163 }
15164 WDI_DS_ActivateTrafficStats();
15165 }
15166 else
15167 {
15168 WDI_DS_DeactivateTrafficStats();
15169 WDI_DS_ClearTrafficStats();
15170
15171 if( VOS_STATUS_SUCCESS !=
15172 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15173 {
15174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15175 "Traffic Stats Timer Stop Failed ");
15176 return;
15177 }
15178 }
15179}
15180
15181/*
15182 * Traffic Stats Timer handler
15183 */
15184void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15185{
15186 WDI_Status wdiStatus;
15187 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15188 WDI_TrafficStatsIndType trafficStatsIndParams;
15189 wpt_uint32 length, enabled;
15190 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15191
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015192 if (NULL == pMac )
15193 {
15194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15195 "%s: Invoked with invalid MAC context ", __func__ );
15196 VOS_ASSERT(0);
15197 return;
15198 }
15199
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015200 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15201 != eSIR_SUCCESS)
15202 {
15203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15204 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15205 return;
15206 }
15207
15208 if(!enabled)
15209 {
15210 WDI_DS_DeactivateTrafficStats();
15211 return;
15212 }
15213
15214 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15215
15216 if(pWdiTrafficStats != NULL)
15217 {
15218 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15219 trafficStatsIndParams.length = length;
15220 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015221 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015222 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15223 trafficStatsIndParams.pUserData = pWDA;
15224
15225 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15226
15227 if(WDI_STATUS_PENDING == wdiStatus)
15228 {
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15230 "Pending received for %s:%d ",__func__,__LINE__ );
15231 }
15232 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15233 {
15234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15235 "Failure in %s:%d ",__func__,__LINE__ );
15236 }
15237
15238 WDI_DS_ClearTrafficStats();
15239 }
15240 else
15241 {
15242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15243 "pWdiTrafficStats is Null");
15244 }
15245
15246 if( VOS_STATUS_SUCCESS !=
15247 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15248 {
15249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15250 "Traffic Stats Timer Start Failed ");
15251 return;
15252 }
15253}
15254
Jeff Johnson295189b2012-06-20 16:38:30 -070015255/*
15256 * BA Activity check timer handler
15257 */
15258void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15259{
15260 tANI_U8 curSta = 0 ;
15261 tANI_U8 tid = 0 ;
15262 tANI_U8 size = 0 ;
15263 tANI_U8 baCandidateCount = 0 ;
15264 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015265 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015266 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015267 tpAniSirGlobal pMac;
15268
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015269 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015270 {
15271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015272 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 VOS_ASSERT(0);
15274 return ;
15275 }
15276 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15277 {
15278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15279 "Inconsistent STA entries in WDA");
15280 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015281 }
15282 if(NULL == pWDA->pVosContext)
15283 {
15284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15285 "%s: pVosContext is NULL",__func__);
15286 VOS_ASSERT(0);
15287 return ;
15288 }
15289 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015290 if(NULL == pMac)
15291 {
15292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15293 "%s: pMac is NULL",__func__);
15294 VOS_ASSERT(0);
15295 return ;
15296 }
15297
Abhishek Singh0644e482014-10-06 18:38:23 +053015298 if (wlan_cfgGetInt(pMac,
15299 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15300 eSIR_SUCCESS)
15301 {
15302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15303 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15304 val = 0;
15305 }
15306
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 /* walk through all STA entries and find out TX packet count */
15308 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15309 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015310 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015311#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015312 // We can only do BA on "hard" STAs.
15313 if (!(IS_HWSTA_IDX(curSta)))
15314 {
15315 continue;
15316 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015317#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015318 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15319 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015320 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 tANI_U32 txPktCount = 0 ;
15322 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015324 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15325 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015326 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15327 curSta, tid, &txPktCount)))
15328 {
15329#if 0
15330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15331 "************* %d:%d, %d ",curSta, txPktCount,
15332 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15333#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015334 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15335 (currentOperChan <= SIR_11B_CHANNEL_END)))
15336 {
15337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15338 "%s: BTC disabled aggregation - dont start "
15339 "TX ADDBA req",__func__);
15340 }
15341 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015342 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015343 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15344 pWDA->wdaGlobalSystemRole) && txPktCount )
15345 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15346 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 {
15348 /* get prepare for sending message to HAL */
15349 //baCandidate[baCandidateCount].staIdx = curSta ;
15350 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15351 newBaCandidate = WDA_ENABLE_BA ;
15352 }
15353 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15354 }
15355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015356 /* fill the entry for all the sta with given TID's */
15357 if(WDA_ENABLE_BA == newBaCandidate)
15358 {
15359 /* move to next BA candidate */
15360 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15361 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15362 baCandidateCount++ ;
15363 newBaCandidate = WDA_DISABLE_BA ;
15364 }
15365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015366 /* prepare and send message to hal */
15367 if( 0 < baCandidateCount)
15368 {
15369 WDI_Status status = WDI_STATUS_SUCCESS ;
15370 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15371 tWDA_ReqParams *pWdaParams =
15372 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 if(NULL == pWdaParams)
15374 {
15375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015377 VOS_ASSERT(0) ;
15378 return;
15379 }
15380 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15381 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15382 if(NULL == wdiTriggerBaReq)
15383 {
15384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015386 VOS_ASSERT(0) ;
15387 vos_mem_free(pWdaParams);
15388 return;
15389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 do
15391 {
15392 WDI_TriggerBAReqinfoType *triggerBaInfo =
15393 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15394 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15395 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15396 * for each request */
15397 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15398 triggerBaInfo->ucBASessionID = 0;
15399 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15400 } while(0) ;
15401 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015404 pWdaParams->pWdaContext = pWDA;
15405 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15406 pWdaParams->wdaMsgParam = NULL;
15407 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15408 WDA_TriggerBaReqCallback, pWdaParams) ;
15409 if(IS_WDI_STATUS_FAILURE(status))
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15412 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15413 vos_mem_free(pWdaParams->wdaMsgParam) ;
15414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15415 vos_mem_free(pWdaParams) ;
15416 }
15417 }
15418 else
15419 {
15420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15421 "There is no TID for initiating BA");
15422 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015423 if( VOS_STATUS_SUCCESS !=
15424 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15425 {
15426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15427 "BA Activity Timer Stop Failed ");
15428 return ;
15429 }
15430 if( VOS_STATUS_SUCCESS !=
15431 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15432 {
15433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15434 "BA Activity Timer Start Failed ");
15435 return;
15436 }
15437 return ;
15438}
Jeff Johnson295189b2012-06-20 16:38:30 -070015439/*
15440 * WDA common routine to create timer used by WDA.
15441 */
15442static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15443{
Jeff Johnson295189b2012-06-20 16:38:30 -070015444 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15445 tANI_U32 val = 0 ;
15446 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15447
15448 if(NULL == pMac)
15449 {
15450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015451 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015452 VOS_ASSERT(0);
15453 return VOS_STATUS_E_FAILURE;
15454 }
15455 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15456 != eSIR_SUCCESS)
15457 {
15458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15459 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15460 return VOS_STATUS_E_FAILURE;
15461 }
15462 val = SYS_MS_TO_TICKS(val) ;
15463
15464 /* BA activity check timer */
15465 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15466 "BA Activity Check timer", WDA_TimerHandler,
15467 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15468 if(status != TX_SUCCESS)
15469 {
15470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15471 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015472 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015475 /* Tx Complete Timeout timer */
15476 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15477 "Tx Complete Check timer", WDA_TimerHandler,
15478 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015479 if(status != TX_SUCCESS)
15480 {
15481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15482 "Unable to create Tx Complete Timeout timer");
15483 /* Destroy timer of BA activity check timer */
15484 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15485 if(status != TX_SUCCESS)
15486 {
15487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15488 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015489 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015490 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015491 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015492 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015493
15494 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15495
15496 /* Traffic Stats timer */
15497 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15498 "Traffic Stats timer", WDA_TimerHandler,
15499 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15500 if(status != TX_SUCCESS)
15501 {
15502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15503 "Unable to create traffic stats timer");
15504 /* Destroy timer of BA activity check timer */
15505 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15506 if(status != TX_SUCCESS)
15507 {
15508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15509 "Unable to Destroy BA activity timer");
15510 }
15511 /* Destroy timer of tx complete timer */
15512 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15513 if(status != TX_SUCCESS)
15514 {
15515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15516 "Unable to Tx complete timer");
15517 }
15518 return VOS_STATUS_E_FAILURE ;
15519 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015520 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015521}
Jeff Johnson295189b2012-06-20 16:38:30 -070015522/*
15523 * WDA common routine to destroy timer used by WDA.
15524 */
15525static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15526{
15527 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015528 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15529 if(status != TX_SUCCESS)
15530 {
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "Unable to Destroy Tx Complete Timeout timer");
15533 return eSIR_FAILURE ;
15534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015535 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15536 if(status != TX_SUCCESS)
15537 {
15538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15539 "Unable to Destroy BA activity timer");
15540 return eSIR_FAILURE ;
15541 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015542 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15543 if(status != TX_SUCCESS)
15544 {
15545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15546 "Unable to Destroy traffic stats timer");
15547 return eSIR_FAILURE ;
15548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015549 return eSIR_SUCCESS ;
15550}
Jeff Johnson295189b2012-06-20 16:38:30 -070015551/*
15552 * WDA timer handler.
15553 */
15554void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15555{
15556 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15557 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015558 /*
15559 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15560 */
15561 wdaMsg.type = timerInfo ;
15562 wdaMsg.bodyptr = NULL;
15563 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015564 /* post the message.. */
15565 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15566 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15567 {
15568 vosStatus = VOS_STATUS_E_BADMSG;
15569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015570}
Jeff Johnson295189b2012-06-20 16:38:30 -070015571/*
15572 * WDA Tx Complete timeout Indication.
15573 */
15574void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15575{
15576 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015577 if( pWDA->pAckTxCbFunc )
15578 {
15579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015580 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 pWDA->pAckTxCbFunc( pMac, 0);
15582 pWDA->pAckTxCbFunc = NULL;
15583 }
15584 else
15585 {
15586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015587 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015589}
Jeff Johnson295189b2012-06-20 16:38:30 -070015590/*
15591 * WDA Set REG Domain to VOS NV
15592 */
Abhishek Singha306a442013-11-07 18:39:01 +053015593eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15594 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015595{
Abhishek Singha306a442013-11-07 18:39:01 +053015596 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 {
15598 return eHAL_STATUS_INVALID_PARAMETER;
15599 }
15600 return eHAL_STATUS_SUCCESS;
15601}
Jeff Johnson295189b2012-06-20 16:38:30 -070015602
Jeff Johnson295189b2012-06-20 16:38:30 -070015603#ifdef FEATURE_WLAN_SCAN_PNO
15604/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015605 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 *
15607 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015608void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015609{
15610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015611 tSirPNOScanReq *pPNOScanReqParams;
15612
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015614 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015615 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 {
15617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015618 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015619 VOS_ASSERT(0) ;
15620 return ;
15621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015622
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015623 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15624 if(pPNOScanReqParams->statusCallback)
15625 {
15626 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15627 (status == WDI_STATUS_SUCCESS) ?
15628 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15629 }
15630
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015631 if (pPNOScanReqParams->enable == 1)
15632 {
15633 if (pPNOScanReqParams->aNetworks)
15634 vos_mem_free(pPNOScanReqParams->aNetworks);
15635 if (pPNOScanReqParams->p24GProbeTemplate)
15636 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15637 if (pPNOScanReqParams->p5GProbeTemplate)
15638 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15639 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15641 vos_mem_free(pWdaParams->wdaMsgParam);
15642 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015643
15644 return ;
15645}
Jeff Johnson295189b2012-06-20 16:38:30 -070015646/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015647 * FUNCTION: WDA_PNOScanReqCallback
15648 * Free memory.
15649 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15650 */
15651void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015652{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015654 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015655
15656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15657 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15658
15659 if(NULL == pWdaParams)
15660 {
15661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15662 "%s: pWdaParams received NULL", __func__);
15663 VOS_ASSERT(0);
15664 return;
15665 }
15666
15667 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15668 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015669 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15670 if(pPNOScanReqParams->statusCallback)
15671 {
15672 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15673 VOS_STATUS_E_FAILURE);
15674 }
15675
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015676 if (pPNOScanReqParams->enable == 1)
15677 {
15678 if (pPNOScanReqParams->aNetworks)
15679 vos_mem_free(pPNOScanReqParams->aNetworks);
15680 if (pPNOScanReqParams->p24GProbeTemplate)
15681 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15682 if (pPNOScanReqParams->p5GProbeTemplate)
15683 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15684 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15686 vos_mem_free(pWdaParams->wdaMsgParam);
15687 vos_mem_free(pWdaParams);
15688 }
15689
15690 return;
15691}
15692/*
15693 * FUNCTION: WDA_UpdateScanParamsRespCallback
15694 *
15695 */
15696void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15697{
15698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015700 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015701 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 {
15703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015704 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015705 VOS_ASSERT(0) ;
15706 return ;
15707 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015708
15709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15710 vos_mem_free(pWdaParams->wdaMsgParam);
15711 vos_mem_free(pWdaParams);
15712
Jeff Johnson295189b2012-06-20 16:38:30 -070015713 return ;
15714}
Jeff Johnson295189b2012-06-20 16:38:30 -070015715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015716 * FUNCTION: WDA_UpdateScanParamsReqCallback
15717 * Free memory.
15718 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15719 */
15720void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15721{
15722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15723
15724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15725 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15726
15727 if(NULL == pWdaParams)
15728 {
15729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15730 "%s: pWdaParams received NULL", __func__);
15731 VOS_ASSERT(0);
15732 return;
15733 }
15734
15735 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15736 {
15737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15738 vos_mem_free(pWdaParams->wdaMsgParam);
15739 vos_mem_free(pWdaParams);
15740 }
15741
15742 return;
15743}
15744/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015745 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15746 * Request to WDI to set Preferred Network List.Offload
15747 */
15748VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15749 tSirPNOScanReq *pPNOScanReqParams)
15750{
Jeff Johnson43971f52012-07-17 12:26:56 -070015751 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015752 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15753 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15754 tWDA_ReqParams *pWdaParams ;
15755 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015757 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015758 if(NULL == pwdiPNOScanReqInfo)
15759 {
15760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015762 VOS_ASSERT(0);
15763 return VOS_STATUS_E_NOMEM;
15764 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15766 if(NULL == pWdaParams)
15767 {
15768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015770 VOS_ASSERT(0);
15771 vos_mem_free(pwdiPNOScanReqInfo);
15772 return VOS_STATUS_E_NOMEM;
15773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015774 //
15775 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15776 //
15777 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15778 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15780 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15781 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15783 {
15784 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15785 &pPNOScanReqParams->aNetworks[i],
15786 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 /*Scan timer intervals*/
15789 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15790 &pPNOScanReqParams->scanTimers,
15791 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 /*Probe template for 2.4GHz band*/
15793 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15794 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15795 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015796 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15797 pPNOScanReqParams->p24GProbeTemplate,
15798 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015799 /*Probe template for 5GHz band*/
15800 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15801 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15802 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015803 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15804 pPNOScanReqParams->p5GProbeTemplate,
15805 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015806 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15807 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015808
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 /* Store Params pass it to WDI */
15810 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15811 pWdaParams->pWdaContext = pWDA;
15812 /* Store param pointer as passed in by caller */
15813 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015814 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015815 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015816 if(IS_WDI_STATUS_FAILURE(status))
15817 {
15818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15819 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015820 if(pPNOScanReqParams->statusCallback)
15821 {
15822 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15823 VOS_STATUS_E_FAILURE);
15824 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015825 if (pPNOScanReqParams->enable == 1)
15826 {
15827 if (pPNOScanReqParams->aNetworks)
15828 vos_mem_free(pPNOScanReqParams->aNetworks);
15829 if (pPNOScanReqParams->p24GProbeTemplate)
15830 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15831 if (pPNOScanReqParams->p5GProbeTemplate)
15832 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15833 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15835 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015836
Jeff Johnson295189b2012-06-20 16:38:30 -070015837 pWdaParams->wdaWdiApiMsgParam = NULL;
15838 pWdaParams->wdaMsgParam = NULL;
15839 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015840 return CONVERT_WDI2VOS_STATUS(status) ;
15841}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015842
15843#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15844
15845void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15846{
15847 /*Convert the CSR Auth types to WDI Auth types */
15848 switch (csrAuthType)
15849 {
15850 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15851 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15852 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015853#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015854 case eCSR_AUTH_TYPE_CCKM_WPA:
15855 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15856 break;
15857#endif
15858 case eCSR_AUTH_TYPE_WPA:
15859 *AuthType = eWDA_AUTH_TYPE_WPA;
15860 break;
15861 case eCSR_AUTH_TYPE_WPA_PSK:
15862 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15863 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015864#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015865 case eCSR_AUTH_TYPE_CCKM_RSN:
15866 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15867 break;
15868#endif
15869 case eCSR_AUTH_TYPE_RSN:
15870 *AuthType = eWDA_AUTH_TYPE_RSN;
15871 break;
15872 case eCSR_AUTH_TYPE_RSN_PSK:
15873 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15874 break;
15875#if defined WLAN_FEATURE_VOWIFI_11R
15876 case eCSR_AUTH_TYPE_FT_RSN:
15877 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15878 break;
15879 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15880 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15881 break;
15882#endif
15883#ifdef FEATURE_WLAN_WAPI
15884 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15885 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15886 break;
15887 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15888 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15889 break;
15890#endif /* FEATURE_WLAN_WAPI */
15891 case eCSR_AUTH_TYPE_SHARED_KEY:
15892 case eCSR_AUTH_TYPE_AUTOSWITCH:
15893 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15894 break;
15895#if 0
15896 case eCSR_AUTH_TYPE_SHARED_KEY:
15897 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15898 break;
15899 case eCSR_AUTH_TYPE_AUTOSWITCH:
15900 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15901#endif
15902 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015904 "%s: Unknown Auth Type", __func__);
15905 break;
15906 }
15907}
15908void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15909{
15910 switch (csrEncrType)
15911 {
15912 case eCSR_ENCRYPT_TYPE_NONE:
15913 *EncrType = WDI_ED_NONE;
15914 break;
15915 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15916 case eCSR_ENCRYPT_TYPE_WEP40:
15917 *EncrType = WDI_ED_WEP40;
15918 break;
15919 case eCSR_ENCRYPT_TYPE_WEP104:
15920 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15921 *EncrType = WDI_ED_WEP104;
15922 break;
15923 case eCSR_ENCRYPT_TYPE_TKIP:
15924 *EncrType = WDI_ED_TKIP;
15925 break;
15926 case eCSR_ENCRYPT_TYPE_AES:
15927 *EncrType = WDI_ED_CCMP;
15928 break;
15929#ifdef WLAN_FEATURE_11W
15930 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15931 *EncrType = WDI_ED_AES_128_CMAC;
15932 break;
15933#endif
15934#ifdef FEATURE_WLAN_WAPI
15935 case eCSR_ENCRYPT_TYPE_WPI:
15936 *EncrType = WDI_ED_WPI;
15937 break;
15938#endif
15939 case eCSR_ENCRYPT_TYPE_ANY:
15940 *EncrType = WDI_ED_ANY;
15941 break;
15942
15943 default:
15944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15945 "%s: Unknown Encryption Type", __func__);
15946 break;
15947 }
15948}
15949
15950/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015951 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015952 * Request to WDI to set Roam Offload Scan
15953 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015954VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015955 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15956{
15957 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015958 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15959 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015960 tWDA_ReqParams *pWdaParams ;
15961 v_U8_t csrAuthType;
15962 WDI_RoamNetworkType *pwdiRoamNetworkType;
15963 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15965 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015966 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015967 {
15968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15969 "%s: VOS MEM Alloc Failure", __func__);
15970 VOS_ASSERT(0);
15971 return VOS_STATUS_E_NOMEM;
15972 }
15973 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15974 if (NULL == pWdaParams)
15975 {
15976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15977 "%s: VOS MEM Alloc Failure", __func__);
15978 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015979 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015980 return VOS_STATUS_E_NOMEM;
15981 }
15982
15983 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015984 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015985 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015986 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15987 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015988 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15989 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15990 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15991 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15992 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15993 sizeof(pwdiRoamNetworkType->currAPbssid));
15994 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15995 csrAuthType);
15996 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15997 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15998 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15999 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16000 pwdiRoamOffloadScanInfo->LookupThreshold =
16001 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016002 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16003 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016004 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16005 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016006 pwdiRoamOffloadScanInfo->MAWCEnabled =
16007 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016008 pwdiRoamOffloadScanInfo->Command =
16009 pRoamOffloadScanReqParams->Command ;
16010 pwdiRoamOffloadScanInfo->StartScanReason =
16011 pRoamOffloadScanReqParams->StartScanReason ;
16012 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16013 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16014 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16015 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16016 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16017 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16018 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16019 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16020 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16021 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016022 pwdiRoamOffloadScanInfo->IsESEEnabled =
16023 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016024 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16025 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16026 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16027 pwdiRoamNetworkType->ssId.ucLength =
16028 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16029 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16030 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16031 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16032 pwdiRoamNetworkType->ChannelCount =
16033 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16034 pwdiRoamOffloadScanInfo->ChannelCacheType =
16035 pRoamOffloadScanReqParams->ChannelCacheType;
16036 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16037 pRoamOffloadScanReqParams->ValidChannelList,
16038 pRoamOffloadScanReqParams->ValidChannelCount);
16039 pwdiRoamOffloadScanInfo->ValidChannelCount =
16040 pRoamOffloadScanReqParams->ValidChannelCount;
16041 pwdiRoamOffloadScanInfo->us24GProbeSize =
16042 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16043 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16044 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16045 pRoamOffloadScanReqParams->p24GProbeTemplate,
16046 pwdiRoamOffloadScanInfo->us24GProbeSize);
16047 pwdiRoamOffloadScanInfo->us5GProbeSize =
16048 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16049 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16050 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16051 pRoamOffloadScanReqParams->p5GProbeTemplate,
16052 pwdiRoamOffloadScanInfo->us5GProbeSize);
16053 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16054 pRoamOffloadScanReqParams->MDID.mdiePresent;
16055 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16056 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016057 pwdiRoamOffloadScanInfo->nProbes =
16058 pRoamOffloadScanReqParams->nProbes;
16059 pwdiRoamOffloadScanInfo->HomeAwayTime =
16060 pRoamOffloadScanReqParams->HomeAwayTime;
16061 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016062 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016063 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016064 pWdaParams->pWdaContext = pWDA;
16065 /* Store param pointer as passed in by caller */
16066 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016067 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016068 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16069 if(IS_WDI_STATUS_FAILURE(status))
16070 {
16071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16072 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16074 vos_mem_free(pWdaParams->wdaMsgParam);
16075 pWdaParams->wdaWdiApiMsgParam = NULL;
16076 pWdaParams->wdaMsgParam = NULL;
16077 }
16078 return CONVERT_WDI2VOS_STATUS(status) ;
16079}
16080#endif
16081
Jeff Johnson295189b2012-06-20 16:38:30 -070016082/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016083 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016084 *
16085 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016086void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016087{
16088 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16089
16090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016091 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016092
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016093 if(NULL == pWdaParams)
16094 {
16095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016096 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016097 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016098 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016099 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016100
Jeff Johnson295189b2012-06-20 16:38:30 -070016101 vos_mem_free(pWdaParams->wdaMsgParam) ;
16102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16103 vos_mem_free(pWdaParams) ;
16104
16105 return ;
16106}
16107/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016108 * FUNCTION: WDA_RssiFilterReqCallback
16109 * Free memory.
16110 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16111 */
16112void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16113{
16114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16115
16116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16117 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16118
16119 if(NULL == pWdaParams)
16120 {
16121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16122 "%s: pWdaParams received NULL", __func__);
16123 VOS_ASSERT(0);
16124 return;
16125 }
16126
16127 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16128 {
16129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16130 vos_mem_free(pWdaParams->wdaMsgParam);
16131 vos_mem_free(pWdaParams);
16132 }
16133
16134 return;
16135}
16136/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016137 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016138 * Request to WDI to set Preferred Network List.Offload
16139 */
16140VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16141 tSirSetRSSIFilterReq* pRssiFilterParams)
16142{
Jeff Johnson43971f52012-07-17 12:26:56 -070016143 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016144 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16145 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16146 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016149 if(NULL == pwdiSetRssiFilterReqInfo)
16150 {
16151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016153 VOS_ASSERT(0);
16154 return VOS_STATUS_E_NOMEM;
16155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16157 if(NULL == pWdaParams)
16158 {
16159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016161 VOS_ASSERT(0);
16162 vos_mem_free(pwdiSetRssiFilterReqInfo);
16163 return VOS_STATUS_E_NOMEM;
16164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016165 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016166 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16167 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016168
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 /* Store Params pass it to WDI */
16170 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16171 pWdaParams->pWdaContext = pWDA;
16172 /* Store param pointer as passed in by caller */
16173 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016174 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016175 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016176 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016177 if(IS_WDI_STATUS_FAILURE(status))
16178 {
16179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16180 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16182 vos_mem_free(pWdaParams->wdaMsgParam);
16183 pWdaParams->wdaWdiApiMsgParam = NULL;
16184 pWdaParams->wdaMsgParam = NULL;
16185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 return CONVERT_WDI2VOS_STATUS(status) ;
16187}
16188
Jeff Johnson295189b2012-06-20 16:38:30 -070016189/*
16190 * FUNCTION: WDA_ProcessUpdateScanParams
16191 * Request to WDI to update Scan Parameters
16192 */
16193VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16194 tSirUpdateScanParams *pUpdateScanParams)
16195{
Jeff Johnson43971f52012-07-17 12:26:56 -070016196 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016197 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16198 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16199 sizeof(WDI_UpdateScanParamsInfoType)) ;
16200 tWDA_ReqParams *pWdaParams ;
16201 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016203 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016204 if(NULL == wdiUpdateScanParamsInfoType)
16205 {
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016208 VOS_ASSERT(0);
16209 return VOS_STATUS_E_NOMEM;
16210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16212 if ( NULL == pWdaParams )
16213 {
16214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016216 VOS_ASSERT(0);
16217 vos_mem_free(wdiUpdateScanParamsInfoType);
16218 return VOS_STATUS_E_NOMEM;
16219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016220 //
16221 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16222 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16224 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16225 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16226 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016227 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016228 pUpdateScanParams->b11dEnabled,
16229 pUpdateScanParams->b11dResolved,
16230 pUpdateScanParams->ucChannelCount,
16231 pUpdateScanParams->usPassiveMinChTime,
16232 pUpdateScanParams->usPassiveMaxChTime,
16233 pUpdateScanParams->usActiveMinChTime,
16234 pUpdateScanParams->usActiveMaxChTime,
16235 sizeof(tSirUpdateScanParams),
16236 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16237
Jeff Johnson295189b2012-06-20 16:38:30 -070016238 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16239 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016240 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16241 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016242 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16243 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016244 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16245 pUpdateScanParams->usActiveMaxChTime;
16246 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16247 pUpdateScanParams->usActiveMinChTime;
16248 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16249 pUpdateScanParams->usPassiveMaxChTime;
16250 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16251 pUpdateScanParams->usPassiveMinChTime;
16252
Jeff Johnson295189b2012-06-20 16:38:30 -070016253 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016254 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16255 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016256
Jeff Johnson295189b2012-06-20 16:38:30 -070016257 for ( i = 0; i <
16258 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16259 i++)
16260 {
16261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16262 "Update Scan Parameters channel: %d",
16263 pUpdateScanParams->aChannels[i]);
16264
16265 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16266 pUpdateScanParams->aChannels[i];
16267 }
16268
Yue Ma7f44bbe2013-04-12 11:47:39 -070016269 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16270 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016271
Jeff Johnson295189b2012-06-20 16:38:30 -070016272 /* Store Params pass it to WDI */
16273 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16274 pWdaParams->pWdaContext = pWDA;
16275 /* Store param pointer as passed in by caller */
16276 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016277
Jeff Johnson295189b2012-06-20 16:38:30 -070016278
16279
16280 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016281 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016283 if(IS_WDI_STATUS_FAILURE(status))
16284 {
16285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16286 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16288 vos_mem_free(pWdaParams->wdaMsgParam);
16289 vos_mem_free(pWdaParams);
16290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016291 return CONVERT_WDI2VOS_STATUS(status) ;
16292}
16293#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016294
16295#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16296/*
16297 * FUNCTION: WDA_RoamOffloadScanReqCallback
16298 *
16299 */
16300void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16301{
16302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016303 vos_msg_t vosMsg;
16304 wpt_uint8 reason = 0;
16305
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016307 "<------ %s " ,__func__);
16308 if (NULL == pWdaParams)
16309 {
16310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16311 "%s: pWdaParams received NULL", __func__);
16312 VOS_ASSERT(0) ;
16313 return ;
16314 }
16315 if ( pWdaParams != NULL )
16316 {
16317 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16318 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016319 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16321 }
16322 if ( pWdaParams->wdaMsgParam != NULL)
16323 {
16324 vos_mem_free(pWdaParams->wdaMsgParam);
16325 }
16326
16327 vos_mem_free(pWdaParams) ;
16328 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016329 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16330 vosMsg.bodyptr = NULL;
16331 if (WDI_STATUS_SUCCESS != status)
16332 {
16333 reason = 0;
16334 }
16335 vosMsg.bodyval = reason;
16336 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16337 {
16338 /* free the mem and return */
16339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016340 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016341 }
16342
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016343 return ;
16344}
16345#endif
16346
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016347/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016348 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016349 *
16350 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016351void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016352{
16353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16354
16355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16356 "<------ %s " ,__func__);
16357
16358 if(NULL == pWdaParams)
16359 {
16360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16361 "%s: pWdaParams received NULL", __func__);
16362 VOS_ASSERT(0);
16363 return;
16364 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016365
16366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16367 vos_mem_free(pWdaParams->wdaMsgParam);
16368 vos_mem_free(pWdaParams);
16369
16370 return;
16371}
16372/*
16373 * FUNCTION: WDA_SetPowerParamsReqCallback
16374 * Free memory.
16375 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16376 */
16377void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16378{
16379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16380
16381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16382 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16383
16384 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016385 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16387 "%s: pWdaParams received NULL", __func__);
16388 VOS_ASSERT(0);
16389 return;
16390 }
16391
16392 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16393 {
16394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16395 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016396 vos_mem_free(pWdaParams);
16397 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016398
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016399 return;
16400}
16401
Jeff Johnson295189b2012-06-20 16:38:30 -070016402#ifdef WLAN_FEATURE_PACKET_FILTERING
16403/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016404 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016405 *
16406 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016407void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016408 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16409 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016410{
16411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016414 if(NULL == pWdaParams)
16415 {
16416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016417 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016418 VOS_ASSERT(0) ;
16419 return ;
16420 }
16421
16422 vos_mem_free(pWdaParams->wdaMsgParam) ;
16423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16424 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016425 //print a msg, nothing else to do
16426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016427 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016428 return ;
16429}
Jeff Johnson295189b2012-06-20 16:38:30 -070016430/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016431 * FUNCTION: WDA_8023MulticastListReqCallback
16432 * Free memory.
16433 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16434 */
16435void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16436{
16437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16438
16439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16440 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16441
16442 if(NULL == pWdaParams)
16443 {
16444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16445 "%s: pWdaParams received NULL", __func__);
16446 VOS_ASSERT(0);
16447 return;
16448 }
16449
16450 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16451 {
16452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16453 vos_mem_free(pWdaParams->wdaMsgParam);
16454 vos_mem_free(pWdaParams);
16455 }
16456
16457 return;
16458}
16459/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016460 * FUNCTION: WDA_Process8023MulticastListReq
16461 * Request to WDI to add 8023 Multicast List
16462 */
16463VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16464 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16465{
Jeff Johnson43971f52012-07-17 12:26:56 -070016466 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016467 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16468 tWDA_ReqParams *pWdaParams ;
16469 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016471 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016472 pwdiFltPktSetMcListReqParamsType =
16473 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16474 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16475 ) ;
16476 if(NULL == pwdiFltPktSetMcListReqParamsType)
16477 {
16478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016480 return VOS_STATUS_E_NOMEM;
16481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16483 if(NULL == pWdaParams)
16484 {
16485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016487 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16488 return VOS_STATUS_E_NOMEM;
16489 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016490
Jeff Johnson295189b2012-06-20 16:38:30 -070016491 //
16492 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16493 //
16494 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016495 pRcvFltMcAddrList->ulMulticastAddrCnt;
16496
16497 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16498 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16499 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16500 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16501
Jeff Johnson295189b2012-06-20 16:38:30 -070016502 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16503 {
16504 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16505 &(pRcvFltMcAddrList->multicastAddr[i]),
16506 sizeof(tSirMacAddr));
16507 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016508 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16509 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016510
Jeff Johnson295189b2012-06-20 16:38:30 -070016511 /* Store Params pass it to WDI */
16512 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16513 pWdaParams->pWdaContext = pWDA;
16514 /* Store param pointer as passed in by caller */
16515 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016516 status = WDI_8023MulticastListReq(
16517 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016518 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016519 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016520 if(IS_WDI_STATUS_FAILURE(status))
16521 {
16522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16523 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16525 vos_mem_free(pWdaParams->wdaMsgParam);
16526 vos_mem_free(pWdaParams);
16527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016528 return CONVERT_WDI2VOS_STATUS(status) ;
16529}
Jeff Johnson295189b2012-06-20 16:38:30 -070016530/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016531 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016532 *
16533 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016534void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016535 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16536 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016537{
16538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016540 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016541 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 if(NULL == pWdaParams)
16543 {
16544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016545 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016546 VOS_ASSERT(0) ;
16547 return ;
16548 }
16549
16550 vos_mem_free(pWdaParams->wdaMsgParam) ;
16551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16552 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016553 //print a msg, nothing else to do
16554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016555 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016556 return ;
16557}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016558
16559/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016560 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16561 * Free memory.
16562 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016563 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016564void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016565 void* pUserData)
16566{
16567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16568
16569 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16570 "<------ %s, wdiStatus: %d",
16571 __func__, wdiStatus);
16572
16573 if (NULL == pWdaParams)
16574 {
16575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16576 "%s: Invalid pWdaParams pointer", __func__);
16577 VOS_ASSERT(0);
16578 return;
16579 }
16580
16581 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16582 {
16583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16584 vos_mem_free(pWdaParams->wdaMsgParam);
16585 vos_mem_free(pWdaParams);
16586 }
16587
16588 return;
16589}
16590
Jeff Johnson295189b2012-06-20 16:38:30 -070016591/*
16592 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16593 * Request to WDI to set Receive Filters
16594 */
16595VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16596 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16597{
Jeff Johnson43971f52012-07-17 12:26:56 -070016598 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016599 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16600 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16601 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16602 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16603 tWDA_ReqParams *pWdaParams ;
16604 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016606 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016607 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16608 {
16609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016611 VOS_ASSERT(0);
16612 return VOS_STATUS_E_NOMEM;
16613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16615 if(NULL == pWdaParams)
16616 {
16617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016619 VOS_ASSERT(0);
16620 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16621 return VOS_STATUS_E_NOMEM;
16622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016623 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16624 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16625 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16626 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016627 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16628 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16629
16630 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16631 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016632
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16634 "FID %d FT %d NParams %d CT %d",
16635 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16636 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16637 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16638 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016639 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16640 {
16641 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16642 &pRcvPktFilterCfg->paramsData[i],
16643 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016645 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016646 pwdiSetRcvPktFilterReqParamsType->
16647 wdiPktFilterCfg.paramsData[i].protocolLayer,
16648 pwdiSetRcvPktFilterReqParamsType->
16649 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016651 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016652 pwdiSetRcvPktFilterReqParamsType->
16653 wdiPktFilterCfg.paramsData[i].dataOffset,
16654 pwdiSetRcvPktFilterReqParamsType->
16655 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016657 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016658 pwdiSetRcvPktFilterReqParamsType->
16659 wdiPktFilterCfg.paramsData[i].compareData[0],
16660 pwdiSetRcvPktFilterReqParamsType->
16661 wdiPktFilterCfg.paramsData[i].compareData[1],
16662 pwdiSetRcvPktFilterReqParamsType->
16663 wdiPktFilterCfg.paramsData[i].compareData[2],
16664 pwdiSetRcvPktFilterReqParamsType->
16665 wdiPktFilterCfg.paramsData[i].compareData[3],
16666 pwdiSetRcvPktFilterReqParamsType->
16667 wdiPktFilterCfg.paramsData[i].compareData[4],
16668 pwdiSetRcvPktFilterReqParamsType->
16669 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016671 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016672 pwdiSetRcvPktFilterReqParamsType->
16673 wdiPktFilterCfg.paramsData[i].dataMask[0],
16674 pwdiSetRcvPktFilterReqParamsType->
16675 wdiPktFilterCfg.paramsData[i].dataMask[1],
16676 pwdiSetRcvPktFilterReqParamsType->
16677 wdiPktFilterCfg.paramsData[i].dataMask[2],
16678 pwdiSetRcvPktFilterReqParamsType->
16679 wdiPktFilterCfg.paramsData[i].dataMask[3],
16680 pwdiSetRcvPktFilterReqParamsType->
16681 wdiPktFilterCfg.paramsData[i].dataMask[4],
16682 pwdiSetRcvPktFilterReqParamsType->
16683 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016685 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016686 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 /* Store Params pass it to WDI */
16688 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16689 pWdaParams->pWdaContext = pWDA;
16690 /* Store param pointer as passed in by caller */
16691 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016692 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016693 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016694 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016695 if(IS_WDI_STATUS_FAILURE(status))
16696 {
16697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16698 "Failure in SetFilter(),free all the memory,status %d ",status);
16699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16700 vos_mem_free(pWdaParams->wdaMsgParam);
16701 vos_mem_free(pWdaParams);
16702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016703 return CONVERT_WDI2VOS_STATUS(status) ;
16704}
Jeff Johnson295189b2012-06-20 16:38:30 -070016705/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016706 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016707 *
16708 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016709void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016710 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16711 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016712{
16713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16714 tWDA_CbContext *pWDA;
16715 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16716 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16717 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16718 tANI_U8 i;
16719 vos_msg_t vosMsg;
16720
16721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016723 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16724
Jeff Johnsone7245742012-09-05 17:12:55 -070016725 if(NULL == pRcvFltPktMatchCntRsp)
16726 {
16727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016728 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016729 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016730 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016731 return ;
16732 }
16733
Jeff Johnson295189b2012-06-20 16:38:30 -070016734 if(NULL == pWdaParams)
16735 {
16736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016737 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016738 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016739 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016740 return ;
16741 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016742 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16743 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016744 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16745 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16746
16747 /* Message Header */
16748 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16749 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16750
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016751 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016752
16753 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16754 {
16755 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16756 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16757 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016758 /* VOS message wrapper */
16759 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16760 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16761 vosMsg.bodyval = 0;
16762 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16763 {
16764 /* free the mem and return */
16765 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16766 }
16767
16768 vos_mem_free(pWdaParams->wdaMsgParam) ;
16769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16770 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016771
16772 return;
16773}
16774/*
16775 * FUNCTION: WDA_FilterMatchCountReqCallback
16776 * Free memory and send RSP back to SME.
16777 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16778 */
16779void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16780{
16781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16782 vos_msg_t vosMsg;
16783
16784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16785 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16786
16787 if(NULL == pWdaParams)
16788 {
16789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16790 "%s: pWdaParams received NULL", __func__);
16791 VOS_ASSERT(0);
16792 return;
16793 }
16794
16795 /* VOS message wrapper */
16796 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16797 vosMsg.bodyptr = NULL;
16798 vosMsg.bodyval = 0;
16799
16800 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16801 {
16802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16803 vos_mem_free(pWdaParams->wdaMsgParam);
16804 vos_mem_free(pWdaParams);
16805 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16806 }
16807
16808 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016809}
Jeff Johnson295189b2012-06-20 16:38:30 -070016810/*
16811 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16812 * Request to WDI to get PC Filter Match Count
16813 */
16814VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16815{
Jeff Johnson43971f52012-07-17 12:26:56 -070016816 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016817 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16818 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16819 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016821 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016822 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16823 {
16824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016825 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016826 VOS_ASSERT(0);
16827 return VOS_STATUS_E_NOMEM;
16828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016829 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16830 if(NULL == pWdaParams)
16831 {
16832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016834 VOS_ASSERT(0);
16835 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16836 return VOS_STATUS_E_NOMEM;
16837 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016838
Yue Ma7f44bbe2013-04-12 11:47:39 -070016839 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16840 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016841
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016842 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16843 pRcvFltPktMatchRsp->bssId,
16844 sizeof(wpt_macAddr));
16845
Jeff Johnson295189b2012-06-20 16:38:30 -070016846 /* Store Params pass it to WDI */
16847 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16848 pWdaParams->pWdaContext = pWDA;
16849 /* Store param pointer as passed in by caller */
16850 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016851 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016852 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016853 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016854 if(IS_WDI_STATUS_FAILURE(status))
16855 {
16856 /* failure returned by WDI API */
16857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16858 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16860 vos_mem_free(pWdaParams) ;
16861 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16862 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016864 return CONVERT_WDI2VOS_STATUS(status) ;
16865}
Jeff Johnson295189b2012-06-20 16:38:30 -070016866/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016867 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016868 *
16869 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016870void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016871 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16872 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016873{
16874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016877/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16878 if(NULL == pWdaParams)
16879 {
16880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016881 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016882 VOS_ASSERT(0) ;
16883 return ;
16884 }
16885
16886 vos_mem_free(pWdaParams->wdaMsgParam) ;
16887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16888 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016889 //print a msg, nothing else to do
16890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016891 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016892 return ;
16893}
Jeff Johnson295189b2012-06-20 16:38:30 -070016894/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016895 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16896 * Free memory.
16897 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16898 */
16899void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16900{
16901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16902
16903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16904 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16905
16906 if(NULL == pWdaParams)
16907 {
16908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16909 "%s: Invalid pWdaParams pointer", __func__);
16910 VOS_ASSERT(0);
16911 return;
16912 }
16913
16914 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16915 {
16916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16917 vos_mem_free(pWdaParams->wdaMsgParam);
16918 vos_mem_free(pWdaParams);
16919 }
16920
16921 return;
16922}
16923/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016924 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16925 * Request to WDI to clear Receive Filters
16926 */
16927VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16928 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16929{
Jeff Johnson43971f52012-07-17 12:26:56 -070016930 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016931 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16932 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16933 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016935 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016936 if(NULL == pwdiRcvFltPktClearReqParamsType)
16937 {
16938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016940 VOS_ASSERT(0);
16941 return VOS_STATUS_E_NOMEM;
16942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16944 if(NULL == pWdaParams)
16945 {
16946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016948 VOS_ASSERT(0);
16949 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16950 return VOS_STATUS_E_NOMEM;
16951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016952 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16953 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016954 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16955 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16956 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16957 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016958
Yue Ma7f44bbe2013-04-12 11:47:39 -070016959 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016960 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016961 /* Store Params pass it to WDI */
16962 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16963 pWdaParams->pWdaContext = pWDA;
16964 /* Store param pointer as passed in by caller */
16965 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016966 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016967 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016968 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016969 if(IS_WDI_STATUS_FAILURE(status))
16970 {
16971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16972 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016974 vos_mem_free(pWdaParams->wdaMsgParam);
16975 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016976 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016977 return CONVERT_WDI2VOS_STATUS(status) ;
16978}
16979#endif // WLAN_FEATURE_PACKET_FILTERING
16980
Jeff Johnson295189b2012-06-20 16:38:30 -070016981/*
16982 * FUNCTION: WDA_ProcessSetPowerParamsReq
16983 * Request to WDI to set power params
16984 */
16985VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16986 tSirSetPowerParamsReq *pPowerParams)
16987{
Jeff Johnson43971f52012-07-17 12:26:56 -070016988 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016989 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16990 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016991 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 if(NULL == pwdiSetPowerParamsReqInfo)
16995 {
16996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016998 VOS_ASSERT(0);
16999 return VOS_STATUS_E_NOMEM;
17000 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17002 if(NULL == pWdaParams)
17003 {
17004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017006 VOS_ASSERT(0);
17007 vos_mem_free(pwdiSetPowerParamsReqInfo);
17008 return VOS_STATUS_E_NOMEM;
17009 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017010
Jeff Johnson295189b2012-06-20 16:38:30 -070017011
17012 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17013 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017014 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17015 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017016 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17017 pPowerParams->uListenInterval;
17018 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17019 pPowerParams->uBcastMcastFilter;
17020 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17021 pPowerParams->uEnableBET;
17022 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17023 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017024 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17025 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017026 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17027 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017028
Jeff Johnson295189b2012-06-20 16:38:30 -070017029 /* Store Params pass it to WDI */
17030 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17031 pWdaParams->pWdaContext = pWDA;
17032 /* Store param pointer as passed in by caller */
17033 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017034 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017035 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017036 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017037 if(IS_WDI_STATUS_FAILURE(status))
17038 {
17039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17040 "Failure in Set power params REQ WDI API, free all the memory " );
17041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17042 vos_mem_free(pWdaParams->wdaMsgParam);
17043 pWdaParams->wdaWdiApiMsgParam = NULL;
17044 pWdaParams->wdaMsgParam = NULL;
17045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017046 return CONVERT_WDI2VOS_STATUS(status) ;
17047}
17048
17049/*
17050 * FUNCTION: WDA_SetTmLevelRspCallback
17051 * Set TM Level response
17052 */
17053void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17054{
17055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17056
17057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017059
17060 if(NULL == pWdaParams)
17061 {
17062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017064 VOS_ASSERT(0) ;
17065 return ;
17066 }
17067
17068 /* Dose not need to send notification to upper layer
17069 * Just free allocated resources */
17070 if( pWdaParams != NULL )
17071 {
17072 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17073 {
17074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17075 }
17076 vos_mem_free(pWdaParams->wdaMsgParam) ;
17077 vos_mem_free(pWdaParams) ;
17078 }
17079}
17080
17081/*
17082 * FUNCTION: WDA_ProcessSetTmLevelReq
17083 * Set TM Level request
17084 */
17085VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17086 tAniSetTmLevelReq *setTmLevelReq)
17087{
17088 WDI_Status status = WDI_STATUS_SUCCESS ;
17089 tWDA_ReqParams *pWdaParams ;
17090 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17091 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17092 sizeof(WDI_SetTmLevelReqType)) ;
17093 if(NULL == wdiSetTmLevelReq)
17094 {
17095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017097 VOS_ASSERT(0);
17098 return VOS_STATUS_E_NOMEM;
17099 }
17100
17101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17102 if(NULL == pWdaParams)
17103 {
17104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 VOS_ASSERT(0);
17107 vos_mem_free(wdiSetTmLevelReq);
17108 return VOS_STATUS_E_NOMEM;
17109 }
17110
17111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017113
17114 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17115 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17116
17117 pWdaParams->pWdaContext = pWDA;
17118 pWdaParams->wdaMsgParam = setTmLevelReq;
17119 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17120
17121 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17122 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17123
17124 if(IS_WDI_STATUS_FAILURE(status))
17125 {
17126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017127 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017128 vos_mem_free(pWdaParams->wdaMsgParam) ;
17129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17130 vos_mem_free(pWdaParams) ;
17131 }
17132
17133 return CONVERT_WDI2VOS_STATUS(status) ;
17134}
17135
17136VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17137 tpTxControlParams pTxCtrlParam)
17138{
17139 VOS_STATUS wdaStatus;
17140
17141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017142 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017143 if( pTxCtrlParam == NULL )
17144 {
17145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017146 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017147 return VOS_STATUS_E_FAILURE;
17148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017149 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17150 {
17151 wdaStatus = WDA_SuspendDataTx(pWDA);
17152 }
17153 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17154 {
17155 wdaStatus = WDA_ResumeDataTx(pWDA);
17156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017157 return wdaStatus;
17158}
17159
17160 /* FUNCTION WDA_featureCapsExchange
17161 * WDA API to invoke capability exchange between host and FW.
17162 */
17163void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17164{
17165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017166 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017167 WDI_featureCapsExchangeReq( NULL, pVosContext);
17168}
17169
Yathish9f22e662012-12-10 14:21:35 -080017170/* FUNCTION WDA_disableCapablityFeature
17171 * WDA API to diable Active mode offload in host.
17172 */
17173void WDA_disableCapablityFeature(tANI_U8 feature_index)
17174{
17175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17176 "%s:enter", __func__ );
17177 WDI_disableCapablityFeature(feature_index);
17178}
17179
Jeff Johnson295189b2012-06-20 16:38:30 -070017180 /* FUNCTION WDA_getHostWlanFeatCaps
17181 * Wrapper for WDI API, that will return if the feature (enum value).passed
17182 * to this API is supported or not in Host
17183 * return value
17184 * 0 - implies feature is NOT Supported
17185 * any non zero value - implies feature is SUPPORTED
17186 */
17187tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17188{
17189 return WDI_getHostWlanFeatCaps(featEnumValue);
17190}
17191
17192 /* FUNCTION WDA_getFwWlanFeatCaps
17193 * Wrapper for WDI API, that will return if the feature (enum value).passed
17194 * to this API is supported or not in FW
17195 * return value
17196 * 0 - implies feature is NOT Supported
17197 * any non zero value - implies feature is SUPPORTED
17198 */
17199tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17200{
17201 return WDI_getFwWlanFeatCaps(featEnumValue);
17202}
17203
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017204
Jeff Johnson295189b2012-06-20 16:38:30 -070017205/*
17206 * FUNCTION: WDA_shutdown
17207 * Shutdown WDA/WDI without handshaking with Riva.
17208 * Synchronous function.
17209 */
17210VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17211{
17212 WDI_Status wdiStatus;
17213 //tANI_U8 eventIdx = 0;
17214 VOS_STATUS status = VOS_STATUS_SUCCESS;
17215 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017216 if (NULL == pWDA)
17217 {
17218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017219 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017220 VOS_ASSERT(0);
17221 return VOS_STATUS_E_FAILURE;
17222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017223 /* FTM mode stay START_STATE */
17224 if( (WDA_READY_STATE != pWDA->wdaState) &&
17225 (WDA_INIT_STATE != pWDA->wdaState) &&
17226 (WDA_START_STATE != pWDA->wdaState) )
17227 {
17228 VOS_ASSERT(0);
17229 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017230
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017231 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17232 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017233 {
17234 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017235 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017236 }
Leo Chang9d76f622013-08-23 16:34:52 -070017237 else
17238 {
17239 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17240 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017241
Jeff Johnson295189b2012-06-20 16:38:30 -070017242 /* call WDI shutdown */
17243 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017244 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17245 {
17246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17247 "error in WDA Stop" );
17248 status = VOS_STATUS_E_FAILURE;
17249 }
17250 /* WDI stop is synchrnous, shutdown is complete when it returns */
17251 pWDA->wdaState = WDA_STOP_STATE;
17252
Jeff Johnson295189b2012-06-20 16:38:30 -070017253 /* shutdown should perform the stop & close actions. */
17254 /* Destroy the event */
17255 status = vos_event_destroy(&pWDA->txFrameEvent);
17256 if(!VOS_IS_STATUS_SUCCESS(status))
17257 {
17258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017259 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017260 status = VOS_STATUS_E_FAILURE;
17261 }
17262 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17263 if(!VOS_IS_STATUS_SUCCESS(status))
17264 {
17265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017266 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017267 status = VOS_STATUS_E_FAILURE;
17268 }
17269 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17270 if(!VOS_IS_STATUS_SUCCESS(status))
17271 {
17272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017273 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017274 status = VOS_STATUS_E_FAILURE;
17275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017276 /* free WDA context */
17277 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17278 if ( !VOS_IS_STATUS_SUCCESS(status) )
17279 {
17280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17281 "error in WDA close " );
17282 status = VOS_STATUS_E_FAILURE;
17283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017284 return status;
17285}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017286
Jeff Johnsone7245742012-09-05 17:12:55 -070017287/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017288 * FUNCTION: WDA_setNeedShutdown
17289 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017290 */
17291
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017292void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017293{
17294 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017295 if(pWDA == NULL)
17296 {
17297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17298 "Could not get the WDA Context pointer" );
17299 return;
17300 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017301 pWDA->needShutdown = TRUE;
17302}
17303/*
17304 * FUNCTION: WDA_needShutdown
17305 * WDA needs a shutdown
17306 */
17307
17308v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17309{
17310 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017311 if(pWDA == NULL)
17312 {
17313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17314 "Could not get the WDA Context pointer" );
17315 return 0;
17316 }
17317 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017318}
17319
Mohit Khanna4a70d262012-09-11 16:30:12 -070017320#ifdef WLAN_FEATURE_11AC
17321/*
17322 * FUNCTION: WDA_SetBeaconFilterReqCallback
17323 *
17324 */
17325void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17326{
17327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017329 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017330 if(NULL == pWdaParams)
17331 {
17332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017333 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017334 VOS_ASSERT(0) ;
17335 return ;
17336 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017337
Mohit Khanna4a70d262012-09-11 16:30:12 -070017338 vos_mem_free(pWdaParams->wdaMsgParam) ;
17339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17340 vos_mem_free(pWdaParams) ;
17341 /*
17342 * No respone required for SetBeaconFilter req so just free the request
17343 * param here
17344 */
17345
17346 return ;
17347}
17348
17349VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17350 tUpdateVHTOpMode *pData)
17351{
17352 WDI_Status status = WDI_STATUS_SUCCESS ;
17353 tWDA_ReqParams *pWdaParams ;
17354 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17355 sizeof(WDI_UpdateVHTOpMode)) ;
17356 if(NULL == wdiTemp)
17357 {
17358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017359 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017360 VOS_ASSERT(0);
17361 return VOS_STATUS_E_NOMEM;
17362 }
17363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17364 if(NULL == pWdaParams)
17365 {
17366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017367 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017368 VOS_ASSERT(0);
17369 vos_mem_free(wdiTemp);
17370 return VOS_STATUS_E_NOMEM;
17371 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17373 "------> %s Opmode = %d and staid = %d" ,
17374 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017375 wdiTemp->opMode = pData->opMode;
17376 wdiTemp->staId = pData->staId;
17377
17378 pWdaParams->pWdaContext = pWDA;
17379 /* Store Req pointer, as this will be used for response */
17380 pWdaParams->wdaMsgParam = (void *)pData;
17381 /* store Params pass it to WDI */
17382 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17383
17384 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17385
17386 if(IS_WDI_STATUS_FAILURE(status))
17387 {
17388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17389 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17391 vos_mem_free(pWdaParams->wdaMsgParam);
17392 vos_mem_free(pWdaParams);
17393 }
17394 return CONVERT_WDI2VOS_STATUS(status) ;
17395}
17396#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017397
17398/*==========================================================================
17399 FUNCTION WDA_TransportChannelDebug
17400
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017401 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017402 Display Transport Channel debugging information
17403 User may request to display DXE channel snapshot
17404 Or if host driver detects any abnormal stcuk may display
17405
17406 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017407 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017408 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017409 debugFlags : Enable stall detect features
17410 defined by WPAL_DeviceDebugFlags
17411 These features may effect
17412 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017413
17414 RETURN VALUE
17415 NONE
17416
17417===========================================================================*/
17418void WDA_TransportChannelDebug
17419(
schang6295e542013-03-12 15:31:23 -070017420 tpAniSirGlobal pMac,
17421 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017422 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017423)
17424{
Mihir Shete40a55652014-03-02 14:14:47 +053017425 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017426 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017427}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017428
17429/*==========================================================================
17430 FUNCTION WDA_SetEnableSSR
17431
17432 DESCRIPTION
17433 API to enable/disable SSR on WDI timeout
17434
17435 PARAMETERS
17436 enableSSR : enable/disable SSR
17437
17438 RETURN VALUE
17439 NONE
17440
17441===========================================================================*/
17442void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17443{
17444 WDI_SetEnableSSR(enableSSR);
17445}
Leo Chang9056f462013-08-01 19:21:11 -070017446
17447#ifdef FEATURE_WLAN_LPHB
17448/*
17449 * FUNCTION: WDA_LPHBconfRspCallback
17450 *
17451 */
17452void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17453{
17454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17455
17456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17457 "<------ %s " ,__func__);
17458 if (NULL == pWdaParams)
17459 {
17460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17461 "%s: pWdaParams received NULL", __func__);
17462 VOS_ASSERT(0) ;
17463 return ;
17464 }
17465
17466 /* Do not need to send notification to upper layer
17467 * Just free allocated resources */
17468 if (pWdaParams != NULL)
17469 {
17470 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17471 {
17472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17473 }
17474 vos_mem_free(pWdaParams->wdaMsgParam) ;
17475 vos_mem_free(pWdaParams) ;
17476 }
17477
17478 return;
17479}
17480
17481/*
17482 * FUNCTION: WDA_ProcessLPHBConfReq
17483 *
17484 */
17485VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17486 tSirLPHBReq *pData)
17487{
17488 WDI_Status wdiStatus;
17489 tWDA_ReqParams *pWdaParams ;
17490
17491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17492 "------> %s " , __func__);
17493
17494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17495 if (NULL == pWdaParams)
17496 {
17497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17498 "%s: VOS MEM Alloc Failure", __func__);
17499 VOS_ASSERT(0);
17500 vos_mem_free(pData);
17501 return VOS_STATUS_E_NOMEM;
17502 }
17503
17504 pWdaParams->pWdaContext = pWDA;
17505 pWdaParams->wdaMsgParam = (void *)pData;
17506 pWdaParams->wdaWdiApiMsgParam = NULL;
17507
17508 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17509 if (WDI_STATUS_PENDING == wdiStatus)
17510 {
17511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17512 "Pending received for %s:%d ", __func__, __LINE__);
17513 }
17514 else if (WDI_STATUS_SUCCESS != wdiStatus)
17515 {
17516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17517 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17518 vos_mem_free(pWdaParams->wdaMsgParam);
17519 vos_mem_free(pWdaParams);
17520 }
17521
17522 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17523}
17524#endif /* FEATURE_WLAN_LPHB */
17525
c_hpothu92367912014-05-01 15:18:17 +053017526void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17527 void* pUserData)
17528{
17529 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17530
17531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17532 "<------ %s " ,__func__);
17533 if (NULL == pBcnMissRateInfo)
17534 {
17535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17536 "%s: pWdaParams received NULL", __func__);
17537 VOS_ASSERT(0) ;
17538 return ;
17539 }
17540 if (pBcnMissRateInfo->callback)
17541 {
17542 pBcnMissRateInfo->callback(status, bcnMissRate,
17543 pBcnMissRateInfo->data);
17544 }
17545 vos_mem_free(pUserData);
17546
17547 return;
17548}
17549
17550v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17551 tSirBcnMissRateReq *pData)
17552{
17553 WDI_Status wdiStatus;
17554 tSirBcnMissRateInfo *pBcnMissRateInfo;
17555
17556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17557 "------> %s " , __func__);
17558
17559 pBcnMissRateInfo =
17560 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17561 if (NULL == pBcnMissRateInfo)
17562 {
17563 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17564 "%s: VOS MEM Alloc Failure", __func__);
17565 VOS_ASSERT(0);
17566 vos_mem_free(pData);
17567 return;
17568 }
17569
17570 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17571 pBcnMissRateInfo->data = pData->data;
17572
17573 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17574 WDA_GetBcnMissRateCallback,
17575 pData->bssid);
17576 if (WDI_STATUS_PENDING == wdiStatus)
17577 {
17578 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17579 "Pending received for %s:%d ", __func__, __LINE__);
17580 }
17581 else if (WDI_STATUS_SUCCESS != wdiStatus)
17582 {
17583 if (pBcnMissRateInfo->callback)
17584 {
17585 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17586 -1, pBcnMissRateInfo->data);
17587 }
17588 }
17589 vos_mem_free(pData);
17590}
Dino Mycle41bdc942014-06-10 11:30:24 +053017591
17592#ifdef WLAN_FEATURE_EXTSCAN
17593
17594/*==========================================================================
17595 FUNCTION WDA_EXTScanStartRspCallback
17596
17597 DESCRIPTION
17598 API to send EXTScan Start Response to HDD
17599
17600 PARAMETERS
17601 pEventData: Response from FW
17602 pUserData:
17603===========================================================================*/
17604void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17605{
17606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17607 tWDA_CbContext *pWDA = NULL;
17608 void *pCallbackContext;
17609 tpAniSirGlobal pMac;
17610
17611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17612 "%s:", __func__);
17613 if (NULL == pWdaParams)
17614 {
17615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17616 "%s: pWdaParams received NULL", __func__);
17617 VOS_ASSERT(0);
17618 return;
17619 }
17620
17621 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17622
17623 if (NULL == pWDA)
17624 {
17625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17626 "%s: pWDA received NULL", __func__);
17627 VOS_ASSERT(0);
17628 goto error;
17629 }
17630
17631 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17632 if (NULL == pMac)
17633 {
17634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17635 "%s:pMac is NULL", __func__);
17636 VOS_ASSERT(0);
17637 goto error;
17638 }
17639
17640 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17641
17642 if (pMac->sme.pEXTScanIndCb)
17643 {
17644 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17645 pEventData);
17646 }
17647 else
17648 {
17649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17650 "%s:HDD callback is null", __func__);
17651 VOS_ASSERT(0);
17652 }
17653
17654error:
17655
17656 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17657 {
17658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17659 }
17660 if (pWdaParams->wdaMsgParam != NULL)
17661 {
17662 vos_mem_free(pWdaParams->wdaMsgParam);
17663 }
17664 vos_mem_free(pWdaParams) ;
17665
17666 return;
17667}
17668
17669/*==========================================================================
17670 FUNCTION WDA_EXTScanStopRspCallback
17671
17672 DESCRIPTION
17673 API to send EXTScan Stop Response to HDD
17674
17675 PARAMETERS
17676 pEventData: Response from FW
17677 pUserData:
17678===========================================================================*/
17679void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17680{
17681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17682 tWDA_CbContext *pWDA = NULL;
17683 void *pCallbackContext;
17684 tpAniSirGlobal pMac;
17685
17686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17687 "%s:", __func__);
17688 if (NULL == pWdaParams)
17689 {
17690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17691 "%s: pWdaParams received NULL", __func__);
17692 VOS_ASSERT(0);
17693 return;
17694 }
17695
17696 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17697
17698 if (NULL == pWDA)
17699 {
17700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17701 "%s: pWDA received NULL", __func__);
17702 VOS_ASSERT(0);
17703 goto error;
17704 }
17705
17706 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17707 if (NULL == pMac)
17708 {
17709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17710 "%s:pMac is NULL", __func__);
17711 VOS_ASSERT(0);
17712 goto error;
17713 }
17714 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17715
17716 if (pMac->sme.pEXTScanIndCb)
17717 {
17718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17719 "%s:HDD call back function called", __func__);
17720 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17721 pEventData);
17722 }
17723 else
17724 {
17725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17726 "%s:HDD callback is null", __func__);
17727 VOS_ASSERT(0);
17728 }
17729
17730error:
17731
17732 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17733 {
17734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17735 }
17736 if (pWdaParams->wdaMsgParam != NULL)
17737 {
17738 vos_mem_free(pWdaParams->wdaMsgParam);
17739 }
17740 vos_mem_free(pWdaParams) ;
17741
17742
17743 return;
17744}
17745
17746/*==========================================================================
17747 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17748
17749 DESCRIPTION
17750 API to send EXTScan Get Cached Results Response to HDD
17751
17752 PARAMETERS
17753 pEventData: Response from FW
17754 pUserData:
17755===========================================================================*/
17756void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17757{
17758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17759 tWDA_CbContext *pWDA = NULL;
17760 void *pCallbackContext;
17761 tpAniSirGlobal pMac;
17762
17763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17764 "%s: ", __func__);
17765 if (NULL == pWdaParams)
17766 {
17767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17768 "%s: pWdaParams received NULL", __func__);
17769 VOS_ASSERT(0);
17770 return;
17771 }
17772
17773 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17774
17775 if (NULL == pWDA)
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "%s: pWDA received NULL", __func__);
17779 VOS_ASSERT(0);
17780 goto error;
17781 }
17782
17783 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17784 if (NULL == pMac)
17785 {
17786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17787 "%s:pMac is NULL", __func__);
17788 VOS_ASSERT(0);
17789 goto error;
17790 }
17791
17792 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17793
17794 if (pMac->sme.pEXTScanIndCb)
17795 {
17796 pMac->sme.pEXTScanIndCb(pCallbackContext,
17797 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17798 pEventData);
17799 }
17800 else
17801 {
17802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17803 "%s:HDD callback is null", __func__);
17804 VOS_ASSERT(0);
17805 }
17806
17807
17808error:
17809
17810 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17811 {
17812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17813 }
17814 if (pWdaParams->wdaMsgParam != NULL)
17815 {
17816 vos_mem_free(pWdaParams->wdaMsgParam);
17817 }
17818 vos_mem_free(pWdaParams) ;
17819
17820 return;
17821}
17822
17823/*==========================================================================
17824 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17825
17826 DESCRIPTION
17827 API to send EXTScan Get Capabilities Response to HDD
17828
17829 PARAMETERS
17830 pEventData: Response from FW
17831 pUserData:
17832===========================================================================*/
17833void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17834{
17835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17836 tWDA_CbContext *pWDA = NULL;
17837 void *pCallbackContext;
17838 tpAniSirGlobal pMac;
17839
17840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17841 "%s:", __func__);
17842 if (NULL == pWdaParams)
17843 {
17844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17845 "%s: pWdaParams received NULL", __func__);
17846 VOS_ASSERT(0);
17847 return;
17848 }
17849
17850 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17851
17852 if (NULL == pWDA)
17853 {
17854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17855 "%s: pWDA received NULL", __func__);
17856 VOS_ASSERT(0);
17857 goto error;
17858 }
17859
17860 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17861 if (NULL == pMac)
17862 {
17863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17864 "%s:pMac is NULL", __func__);
17865 VOS_ASSERT(0);
17866 goto error;
17867 }
17868
17869 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17870
17871 if (pMac->sme.pEXTScanIndCb)
17872 {
17873 pMac->sme.pEXTScanIndCb(pCallbackContext,
17874 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17875 pEventData);
17876 }
17877 else
17878 {
17879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17880 "%s:HDD callback is null", __func__);
17881 VOS_ASSERT(0);
17882 }
17883
17884
17885error:
17886
17887 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17888 {
17889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17890 }
17891 if (pWdaParams->wdaMsgParam != NULL)
17892 {
17893 vos_mem_free(pWdaParams->wdaMsgParam);
17894 }
17895 vos_mem_free(pWdaParams) ;
17896
17897 return;
17898}
17899
17900/*==========================================================================
17901 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17902
17903 DESCRIPTION
17904 API to send EXTScan Set BSSID Hotlist Response to HDD
17905
17906 PARAMETERS
17907 pEventData: Response from FW
17908 pUserData:
17909===========================================================================*/
17910void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17911{
17912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17913 tWDA_CbContext *pWDA = NULL;
17914 void *pCallbackContext;
17915 tpAniSirGlobal pMac;
17916
17917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17918 "%s: ", __func__);
17919 if (NULL == pWdaParams)
17920 {
17921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17922 "%s: pWdaParams received NULL", __func__);
17923 VOS_ASSERT(0) ;
17924 return;
17925 }
17926
17927 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17928
17929 if (NULL == pWDA)
17930 {
17931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17932 "%s: pWDA received NULL", __func__);
17933 VOS_ASSERT(0);
17934 goto error;
17935 }
17936
17937 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17938 if (NULL == pMac)
17939 {
17940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17941 "%s:pMac is NULL", __func__);
17942 VOS_ASSERT(0);
17943 goto error;
17944 }
17945
17946 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17947
17948 if (pMac->sme.pEXTScanIndCb)
17949 {
17950 pMac->sme.pEXTScanIndCb(pCallbackContext,
17951 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17952 pEventData);
17953 }
17954 else
17955 {
17956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17957 "%s:HDD callback is null", __func__);
17958 VOS_ASSERT(0);
17959 }
17960
17961
17962error:
17963
17964 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17965 {
17966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17967 }
17968 if (pWdaParams->wdaMsgParam != NULL)
17969 {
17970 vos_mem_free(pWdaParams->wdaMsgParam);
17971 }
17972 vos_mem_free(pWdaParams) ;
17973
17974 return;
17975}
17976
17977/*==========================================================================
17978 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17979
17980 DESCRIPTION
17981 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17982
17983 PARAMETERS
17984 pEventData: Response from FW
17985 pUserData:
17986===========================================================================*/
17987void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17988{
17989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17990 tWDA_CbContext *pWDA = NULL;
17991 void *pCallbackContext;
17992 tpAniSirGlobal pMac;
17993
17994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17995 "%s:", __func__);
17996 if (NULL == pWdaParams)
17997 {
17998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17999 "%s: pWdaParams received NULL", __func__);
18000 VOS_ASSERT(0) ;
18001 return;
18002 }
18003
18004 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18005
18006 if (NULL == pWDA)
18007 {
18008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18009 "%s: pWDA received NULL", __func__);
18010 VOS_ASSERT(0);
18011 goto error;
18012 }
18013
18014 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18015 if (NULL == pMac)
18016 {
18017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18018 "%s:pMac is NULL", __func__);
18019 VOS_ASSERT(0);
18020 goto error;
18021 }
18022
18023 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18024
18025 if (pMac->sme.pEXTScanIndCb)
18026 {
18027 pMac->sme.pEXTScanIndCb(pCallbackContext,
18028 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18029 pEventData);
18030 }
18031 else
18032 {
18033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18034 "%s:HDD callback is null", __func__);
18035 VOS_ASSERT(0);
18036 }
18037
18038
18039error:
18040
18041 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18042 {
18043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18044 }
18045 if (pWdaParams->wdaMsgParam != NULL)
18046 {
18047 vos_mem_free(pWdaParams->wdaMsgParam);
18048 }
18049 vos_mem_free(pWdaParams) ;
18050
18051 return;
18052}
18053
18054/*==========================================================================
18055 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18056
18057 DESCRIPTION
18058 API to send EXTScan Set Significant RSSI Change RSP to HDD
18059
18060 PARAMETERS
18061 pEventData: Response from FW
18062 pUserData:
18063===========================================================================*/
18064void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18065{
18066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18067 tWDA_CbContext *pWDA = NULL;
18068 void *pCallbackContext;
18069 tpAniSirGlobal pMac;
18070
18071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18072 "%s:", __func__);
18073 if (NULL == pWdaParams)
18074 {
18075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18076 "%s: pWdaParams received NULL", __func__);
18077 VOS_ASSERT(0) ;
18078 return;
18079 }
18080
18081 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18082
18083 if (NULL == pWDA)
18084 {
18085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18086 "%s: pWDA received NULL", __func__);
18087 VOS_ASSERT(0);
18088 goto error;
18089 }
18090
18091 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18092 if (NULL == pMac)
18093 {
18094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18095 "%s:pMac is NULL", __func__);
18096 VOS_ASSERT(0);
18097 goto error;
18098 }
18099
18100 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18101
18102 if (pMac->sme.pEXTScanIndCb)
18103 {
18104 pMac->sme.pEXTScanIndCb(pCallbackContext,
18105 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18106 pEventData);
18107 }
18108 else
18109 {
18110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18111 "%s:HDD callback is null", __func__);
18112 VOS_ASSERT(0);
18113 }
18114
18115
18116error:
18117
18118 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18119 {
18120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18121 }
18122 if (pWdaParams->wdaMsgParam != NULL)
18123 {
18124 vos_mem_free(pWdaParams->wdaMsgParam);
18125 }
18126 vos_mem_free(pWdaParams) ;
18127
18128 return;
18129}
18130
18131/*==========================================================================
18132 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18133
18134 DESCRIPTION
18135 API to send EXTScan Set Significant RSSI Change RSP to HDD
18136
18137 PARAMETERS
18138 pEventData: Response from FW
18139 pUserData:
18140===========================================================================*/
18141void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18142 void* pUserData)
18143{
18144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18145 tWDA_CbContext *pWDA = NULL;
18146 void *pCallbackContext;
18147 tpAniSirGlobal pMac;
18148
18149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18150 "%s:", __func__);
18151 if (NULL == pWdaParams)
18152 {
18153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18154 "%s: pWdaParams received NULL", __func__);
18155 VOS_ASSERT(0) ;
18156 return;
18157 }
18158
18159 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18160
18161 if (NULL == pWDA)
18162 {
18163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18164 "%s: pWDA received NULL", __func__);
18165 VOS_ASSERT(0);
18166 goto error;
18167 }
18168
18169 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18170 if (NULL == pMac)
18171 {
18172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18173 "%s:pMac is NULL", __func__);
18174 VOS_ASSERT(0);
18175 goto error;
18176 }
18177
18178 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18179
18180 if (pMac->sme.pEXTScanIndCb)
18181 {
18182 pMac->sme.pEXTScanIndCb(pCallbackContext,
18183 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18184 pEventData);
18185 }
18186 else
18187 {
18188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18189 "%s:HDD callback is null", __func__);
18190 VOS_ASSERT(0);
18191 }
18192
18193
18194error:
18195
18196 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18197 {
18198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18199 }
18200 if (pWdaParams->wdaMsgParam != NULL)
18201 {
18202 vos_mem_free(pWdaParams->wdaMsgParam);
18203 }
18204 vos_mem_free(pWdaParams) ;
18205
18206 return;
18207}
18208
18209/*==========================================================================
18210 FUNCTION WDA_ProcessEXTScanStartReq
18211
18212 DESCRIPTION
18213 API to send EXTScan Start Request to WDI
18214
18215 PARAMETERS
18216 pWDA: Pointer to WDA context
18217 wdaRequest: Pointer to EXTScan req parameters
18218===========================================================================*/
18219VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18220 tSirEXTScanStartReqParams *wdaRequest)
18221{
18222 WDI_Status status = WDI_STATUS_SUCCESS;
18223 tWDA_ReqParams *pWdaParams;
18224
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18226 "%s: ", __func__);
18227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18228 if (NULL == pWdaParams)
18229 {
18230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18231 "%s: VOS MEM Alloc Failure", __func__);
18232 VOS_ASSERT(0);
18233 return VOS_STATUS_E_NOMEM;
18234 }
18235 pWdaParams->pWdaContext = pWDA;
18236 pWdaParams->wdaMsgParam = wdaRequest;
18237 pWdaParams->wdaWdiApiMsgParam = NULL;
18238
18239 status = WDI_EXTScanStartReq((void *)wdaRequest,
18240 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18241 (void *)pWdaParams);
18242 if (IS_WDI_STATUS_FAILURE(status))
18243 {
18244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18245 "Failure to request. Free all the memory " );
18246 vos_mem_free(pWdaParams->wdaMsgParam);
18247 vos_mem_free(pWdaParams);
18248 }
18249 return CONVERT_WDI2VOS_STATUS(status);
18250}
18251
18252/*==========================================================================
18253 FUNCTION WDA_ProcessEXTScanStopReq
18254
18255 DESCRIPTION
18256 API to send EXTScan Start Request to WDI
18257
18258 PARAMETERS
18259 pWDA: Pointer to WDA context
18260 wdaRequest: Pointer to EXTScan req parameters
18261===========================================================================*/
18262VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18263 tSirEXTScanStopReqParams *wdaRequest)
18264{
18265 WDI_Status status = WDI_STATUS_SUCCESS;
18266 tWDA_ReqParams *pWdaParams;
18267
18268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18269 "%s:", __func__);
18270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18271 if (NULL == pWdaParams)
18272 {
18273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18274 "%s: VOS MEM Alloc Failure", __func__);
18275 VOS_ASSERT(0);
18276 return VOS_STATUS_E_NOMEM;
18277 }
18278 pWdaParams->pWdaContext = pWDA;
18279 pWdaParams->wdaMsgParam = wdaRequest;
18280 pWdaParams->wdaWdiApiMsgParam = NULL;
18281
18282 status = WDI_EXTScanStopReq((void *)wdaRequest,
18283 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18284 (void *)pWdaParams);
18285 if (IS_WDI_STATUS_FAILURE(status))
18286 {
18287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18288 "Failure to request. Free all the memory " );
18289 vos_mem_free(pWdaParams->wdaMsgParam);
18290 vos_mem_free(pWdaParams);
18291 }
18292 return CONVERT_WDI2VOS_STATUS(status);
18293}
18294
18295/*==========================================================================
18296 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18297
18298 DESCRIPTION
18299 API to send EXTScan Get Cached Results Request to WDI
18300
18301 PARAMETERS
18302 pWDA: Pointer to WDA context
18303 wdaRequest: Pointer to EXTScan req parameters
18304===========================================================================*/
18305VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18306 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18307{
18308 WDI_Status status = WDI_STATUS_SUCCESS;
18309 tWDA_ReqParams *pWdaParams;
18310
18311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18312 "%s: ", __func__);
18313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18314 if (NULL == pWdaParams)
18315 {
18316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18317 "%s: VOS MEM Alloc Failure", __func__);
18318 VOS_ASSERT(0);
18319 return VOS_STATUS_E_NOMEM;
18320 }
18321 pWdaParams->pWdaContext = pWDA;
18322 pWdaParams->wdaMsgParam = wdaRequest;
18323 pWdaParams->wdaWdiApiMsgParam = NULL;
18324
18325 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18326 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18327 (void *)pWdaParams);
18328 if (IS_WDI_STATUS_FAILURE(status))
18329 {
18330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18331 "Failure to request. Free all the memory " );
18332 vos_mem_free(pWdaParams->wdaMsgParam);
18333 vos_mem_free(pWdaParams);
18334 }
18335 return CONVERT_WDI2VOS_STATUS(status);
18336}
18337
18338/*==========================================================================
18339 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18340
18341 DESCRIPTION
18342 API to send EXTScan Get Capabilities Request to WDI
18343
18344 PARAMETERS
18345 pWDA: Pointer to WDA context
18346 wdaRequest: Pointer to EXTScan req parameters
18347===========================================================================*/
18348VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18349 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18350{
18351 WDI_Status status = WDI_STATUS_SUCCESS;
18352 tWDA_ReqParams *pWdaParams;
18353
18354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18355 "%s:", __func__);
18356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18357 if (NULL == pWdaParams)
18358 {
18359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18360 "%s: VOS MEM Alloc Failure", __func__);
18361 VOS_ASSERT(0);
18362 return VOS_STATUS_E_NOMEM;
18363 }
18364 pWdaParams->pWdaContext = pWDA;
18365 pWdaParams->wdaMsgParam = wdaRequest;
18366 pWdaParams->wdaWdiApiMsgParam = NULL;
18367
18368 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18369 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18370 (void *)pWdaParams);
18371 if (IS_WDI_STATUS_FAILURE(status))
18372 {
18373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18374 "Failure to request. Free all the memory " );
18375 vos_mem_free(pWdaParams->wdaMsgParam);
18376 vos_mem_free(pWdaParams);
18377 }
18378 return CONVERT_WDI2VOS_STATUS(status);
18379}
18380
18381/*==========================================================================
18382 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18383
18384 DESCRIPTION
18385 API to send Set BSSID Hotlist Request to WDI
18386
18387 PARAMETERS
18388 pWDA: Pointer to WDA context
18389 wdaRequest: Pointer to EXTScan req parameters
18390===========================================================================*/
18391VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18392 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18393{
18394 WDI_Status status = WDI_STATUS_SUCCESS;
18395 tWDA_ReqParams *pWdaParams;
18396
18397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18398 "%s: ", __func__);
18399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18400 if (NULL == pWdaParams)
18401 {
18402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18403 "%s: VOS MEM Alloc Failure", __func__);
18404 VOS_ASSERT(0);
18405 return VOS_STATUS_E_NOMEM;
18406 }
18407 pWdaParams->pWdaContext = pWDA;
18408 pWdaParams->wdaMsgParam = wdaRequest;
18409 pWdaParams->wdaWdiApiMsgParam = NULL;
18410
18411 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18412 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18413 (void *)pWdaParams);
18414 if (IS_WDI_STATUS_FAILURE(status))
18415 {
18416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18417 "Failure to request. Free all the memory " );
18418 vos_mem_free(pWdaParams->wdaMsgParam);
18419 vos_mem_free(pWdaParams);
18420 }
18421 return CONVERT_WDI2VOS_STATUS(status);
18422}
18423
18424/*==========================================================================
18425 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18426
18427 DESCRIPTION
18428 API to send Reset BSSID Hotlist Request to WDI
18429
18430 PARAMETERS
18431 pWDA: Pointer to WDA context
18432 wdaRequest: Pointer to EXTScan req parameters
18433===========================================================================*/
18434VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18435 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18436{
18437 WDI_Status status = WDI_STATUS_SUCCESS;
18438 tWDA_ReqParams *pWdaParams;
18439
18440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18441 "%s:", __func__);
18442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18443 if (NULL == pWdaParams)
18444 {
18445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18446 "%s: VOS MEM Alloc Failure", __func__);
18447 VOS_ASSERT(0);
18448 return VOS_STATUS_E_NOMEM;
18449 }
18450 pWdaParams->pWdaContext = pWDA;
18451 pWdaParams->wdaMsgParam = wdaRequest;
18452 pWdaParams->wdaWdiApiMsgParam = NULL;
18453
18454 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18455 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18456 (void *)pWdaParams);
18457 if (IS_WDI_STATUS_FAILURE(status))
18458 {
18459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18460 "Failure to request. Free all the memory " );
18461 vos_mem_free(pWdaParams->wdaMsgParam);
18462 vos_mem_free(pWdaParams);
18463 }
18464 return CONVERT_WDI2VOS_STATUS(status);
18465}
18466
18467/*==========================================================================
18468 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18469
18470 DESCRIPTION
18471 API to send Set Significant RSSI Change Request to WDI
18472
18473 PARAMETERS
18474 pWDA: Pointer to WDA context
18475 wdaRequest: Pointer to EXTScan req parameters
18476===========================================================================*/
18477VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18478 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18479{
18480 WDI_Status status = WDI_STATUS_SUCCESS;
18481 tWDA_ReqParams *pWdaParams;
18482
18483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18484 "%s: ", __func__);
18485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18486 if (NULL == pWdaParams)
18487 {
18488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18489 "%s: VOS MEM Alloc Failure", __func__);
18490 VOS_ASSERT(0);
18491 return VOS_STATUS_E_NOMEM;
18492 }
18493 pWdaParams->pWdaContext = pWDA;
18494 pWdaParams->wdaMsgParam = wdaRequest;
18495 pWdaParams->wdaWdiApiMsgParam = NULL;
18496
18497 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18498 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18499 (void *)pWdaParams);
18500 if (IS_WDI_STATUS_FAILURE(status))
18501 {
18502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18503 "Failure to request. Free all the memory " );
18504 vos_mem_free(pWdaParams->wdaMsgParam);
18505 vos_mem_free(pWdaParams);
18506 }
18507 return CONVERT_WDI2VOS_STATUS(status);
18508}
18509
18510/*==========================================================================
18511 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18512
18513 DESCRIPTION
18514 API to send Reset Significant RSSI Change Request to WDI
18515
18516 PARAMETERS
18517 pWDA: Pointer to WDA context
18518 wdaRequest: Pointer to EXTScan req parameters
18519===========================================================================*/
18520VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18521 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18522{
18523 WDI_Status status = WDI_STATUS_SUCCESS;
18524 tWDA_ReqParams *pWdaParams;
18525
18526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18527 "%s:", __func__);
18528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18529 if (NULL == pWdaParams)
18530 {
18531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18532 "%s: VOS MEM Alloc Failure", __func__);
18533 VOS_ASSERT(0);
18534 return VOS_STATUS_E_NOMEM;
18535 }
18536 pWdaParams->pWdaContext = pWDA;
18537 pWdaParams->wdaMsgParam = wdaRequest;
18538 pWdaParams->wdaWdiApiMsgParam = NULL;
18539
18540 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18541 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18542 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18543 (void *)pWdaParams);
18544 if (IS_WDI_STATUS_FAILURE(status))
18545 {
18546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18547 "Failure to request. Free all the memory " );
18548 vos_mem_free(pWdaParams->wdaMsgParam);
18549 vos_mem_free(pWdaParams);
18550 }
18551 return CONVERT_WDI2VOS_STATUS(status);
18552}
18553#endif /* WLAN_FEATURE_EXTSCAN */
18554
Sunil Duttbd736ed2014-05-26 21:19:41 +053018555#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18556
18557/*==========================================================================
18558 FUNCTION WDA_LLStatsSetRspCallback
18559
18560 DESCRIPTION
18561 API to process set link layer statistics response from FW
18562
18563 PARAMETERS
18564 pRsp: Pointer to set link layer statistics response
18565 pUserData: Pointer to user data
18566
18567 RETURN VALUE
18568 NONE
18569
18570===========================================================================*/
18571void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18572{
18573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18574
18575
18576 if (NULL == pWdaParams)
18577 {
18578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18579 "%s: pWdaParams received NULL", __func__);
18580 VOS_ASSERT(0) ;
18581 return ;
18582 }
18583
18584 /* Do not need to send notification to upper layer
18585 * Just free allocated resources */
18586 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18587 {
18588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18589 }
18590 if (pWdaParams->wdaMsgParam != NULL)
18591 {
18592 vos_mem_free(pWdaParams->wdaMsgParam);
18593 }
18594 vos_mem_free(pWdaParams) ;
18595
18596 return;
18597}
18598
18599/*==========================================================================
18600 FUNCTION WDA_ProcessLLStatsSetReq
18601
18602 DESCRIPTION
18603 API to send Set Link Layer Stats request to WDI
18604
18605 PARAMETERS
18606 pWDA: Pointer to WDA context
18607 wdaRequest: Pointer to set Link Layer Stats req parameters
18608===========================================================================*/
18609VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18610 tSirLLStatsSetReq *wdaRequest)
18611{
18612 WDI_Status status = WDI_STATUS_SUCCESS;
18613 tWDA_ReqParams *pWdaParams;
18614
18615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18616 if (NULL == pWdaParams)
18617 {
18618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18619 "%s: VOS MEM Alloc Failure", __func__);
18620 VOS_ASSERT(0);
18621 return VOS_STATUS_E_NOMEM;
18622 }
18623 pWdaParams->pWdaContext = pWDA;
18624 pWdaParams->wdaMsgParam = wdaRequest;
18625 pWdaParams->wdaWdiApiMsgParam = NULL;
18626
18627 status = WDI_LLStatsSetReq((void *)wdaRequest,
18628 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18629 (void *)pWdaParams);
18630 if (IS_WDI_STATUS_FAILURE(status))
18631 {
18632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18633 "Failure to request. Free all the memory " );
18634 vos_mem_free(pWdaParams->wdaMsgParam);
18635 vos_mem_free(pWdaParams);
18636 }
18637 return CONVERT_WDI2VOS_STATUS(status);
18638}
18639
18640/*==========================================================================
18641 FUNCTION WDA_LLStatsGetRspCallback
18642
18643 DESCRIPTION
18644 API to process get link layer statistics response from FW
18645
18646 PARAMETERS
18647 pRsp: Pointer to get link layer statistics response
18648 pUserData: Pointer to user data
18649
18650 RETURN VALUE
18651 NONE
18652
18653===========================================================================*/
18654void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18655{
18656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18657
18658 if (NULL == pWdaParams)
18659 {
18660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18661 "%s: pWdaParams received NULL", __func__);
18662 VOS_ASSERT(0) ;
18663 return ;
18664 }
18665
18666 /* Do not need to send notification to upper layer
18667 * Just free allocated resources */
18668 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18669 {
18670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18671 }
18672 if (pWdaParams->wdaMsgParam != NULL)
18673 {
18674 vos_mem_free(pWdaParams->wdaMsgParam);
18675 }
18676 vos_mem_free(pWdaParams) ;
18677
18678 return;
18679}
18680
18681/*==========================================================================
18682 FUNCTION WDA_ProcessLLStatsGetReq
18683
18684 DESCRIPTION
18685 API to send Get Link Layer Stats request to WDI
18686
18687 PARAMETERS
18688 pWDA: Pointer to WDA context
18689 wdaRequest: Pointer to get Link Layer Stats req parameters
18690===========================================================================*/
18691VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18692 tSirLLStatsGetReq *wdaRequest)
18693{
18694 WDI_Status status = WDI_STATUS_SUCCESS;
18695 tWDA_ReqParams *pWdaParams;
18696
18697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18698 if (NULL == pWdaParams)
18699 {
18700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18701 "%s: VOS MEM Alloc Failure", __func__);
18702 VOS_ASSERT(0);
18703 return VOS_STATUS_E_NOMEM;
18704 }
18705 pWdaParams->pWdaContext = pWDA;
18706 pWdaParams->wdaMsgParam = wdaRequest;
18707 pWdaParams->wdaWdiApiMsgParam = NULL;
18708
18709 status = WDI_LLStatsGetReq((void *) wdaRequest,
18710 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18711 (void *)pWdaParams);
18712 if (IS_WDI_STATUS_FAILURE(status))
18713 {
18714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18715 "Failure to request. Free all the memory " );
18716 vos_mem_free(pWdaParams->wdaMsgParam);
18717 vos_mem_free(pWdaParams);
18718 }
18719 return CONVERT_WDI2VOS_STATUS(status);
18720}
18721
18722/*==========================================================================
18723 FUNCTION WDA_LLStatsClearRspCallback
18724
18725 DESCRIPTION
18726 API to process clear link layer statistics response from FW
18727
18728 PARAMETERS
18729 pRsp: Pointer to clear link layer statistics response
18730 pUserData: Pointer to user data
18731
18732 RETURN VALUE
18733 NONE
18734
18735===========================================================================*/
18736void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18737{
18738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18739
18740
18741 if (NULL == pWdaParams)
18742 {
18743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18744 "%s: pWdaParams received NULL", __func__);
18745 VOS_ASSERT(0) ;
18746 return ;
18747 }
18748 /* Do not need to send notification to upper layer
18749 * Just free allocated resources */
18750 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18751 {
18752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18753 }
18754 if (pWdaParams->wdaMsgParam != NULL)
18755 {
18756 vos_mem_free(pWdaParams->wdaMsgParam);
18757 }
18758 vos_mem_free(pWdaParams) ;
18759 return;
18760}
18761
18762/*==========================================================================
18763 FUNCTION WDA_ProcessLLStatsClearReq
18764
18765 DESCRIPTION
18766 API to send Clear Link Layer Stats request to WDI
18767
18768 PARAMETERS
18769 pWDA: Pointer to WDA context
18770 wdaRequest: Pointer to earLink Layer Stats req
18771===========================================================================*/
18772VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18773 tSirLLStatsClearReq *wdaRequest)
18774{
18775 WDI_Status status = WDI_STATUS_SUCCESS;
18776 tWDA_ReqParams *pWdaParams;
18777
18778 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18779 if (NULL == pWdaParams)
18780 {
18781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18782 "%s: VOS MEM Alloc Failure", __func__);
18783 VOS_ASSERT(0);
18784 return VOS_STATUS_E_NOMEM;
18785 }
18786 pWdaParams->pWdaContext = pWDA;
18787 pWdaParams->wdaMsgParam = wdaRequest;
18788 pWdaParams->wdaWdiApiMsgParam = NULL;
18789
18790 status = WDI_LLStatsClearReq((void *) wdaRequest,
18791 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18792 (void *)pWdaParams);
18793 if (IS_WDI_STATUS_FAILURE(status))
18794 {
18795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18796 "Failure to request. Free all the memory " );
18797 vos_mem_free(pWdaParams->wdaMsgParam);
18798 vos_mem_free(pWdaParams);
18799 }
18800 return CONVERT_WDI2VOS_STATUS(status);
18801}
18802
18803#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018804
Abhishek Singh85b74712014-10-08 11:38:19 +053018805void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18806{
18807 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18808
18809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18810 "<------ %s " ,__func__);
18811 if (NULL == fwStatsinfo)
18812 {
18813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18814 "%s: pWdaParams received NULL", __func__);
18815 VOS_ASSERT(0);
18816 return;
18817 }
18818
18819 if(fwStatsinfo->callback)
18820 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18821
18822 vos_mem_free(pUserData);
18823 return;
18824}
18825
18826
18827v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18828 tSirFWStatsGetReq *pData)
18829{
18830
18831 WDI_Status wdiStatus;
18832 tSirFWStatsInfo *fwStatsinfo;
18833
18834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18835 "------> %s" , __func__);
18836
18837 fwStatsinfo =
18838 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18839 if (NULL == fwStatsinfo)
18840 {
18841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18842 "%s: VOS MEM Alloc Failure", __func__);
18843 VOS_ASSERT(0);
18844 vos_mem_free(pData);
18845 return;
18846 }
18847
18848 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18849 fwStatsinfo->data = pData->data;
18850
18851 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18852 WDA_FWStatsGetRspCallback,
18853 pData->stats);
18854 if (WDI_STATUS_PENDING == wdiStatus)
18855 {
18856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18857 "Pending received for %s:%d ", __func__, __LINE__);
18858 }
18859 else if (WDI_STATUS_SUCCESS != wdiStatus)
18860 {
18861 if (fwStatsinfo->callback)
18862 {
18863 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18864 }
18865 vos_mem_free(fwStatsinfo);
18866 }
18867 vos_mem_free(pData);
18868}
18869
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018870/*==========================================================================
18871 FUNCTION WDA_EncryptMsgRspCallback
18872
18873 DESCRIPTION
18874 API to send Encrypt message response to HDD
18875
18876 PARAMETERS
18877 pEventData: Response from FW
18878 pUserData: Data sent to firmware as part of request
18879===========================================================================*/
18880void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18881 void* pUserData)
18882{
18883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18884 tWDA_CbContext *pWDA = NULL;
18885 tpAniSirGlobal pMac;
18886 vos_msg_t vosMsg;
18887 tpSirEncryptedDataRspParams pEncRspParams;
18888 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18889
18890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18891 FL("%s:"), __func__);
18892 if (NULL == pWdaParams)
18893 {
18894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18895 FL("%s: pWdaParams received NULL"), __func__);
18896 VOS_ASSERT(0);
18897 return;
18898 }
18899
18900 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18901
18902 if (NULL == pWDA)
18903 {
18904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18905 FL("%s: pWDA received NULL"), __func__);
18906 VOS_ASSERT(0);
18907 goto error;
18908 }
18909
18910 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18911 if (NULL == pMac)
18912 {
18913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18914 FL("%s:pMac is NULL"), __func__);
18915 VOS_ASSERT(0);
18916 goto error;
18917 }
18918
18919 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18920
18921 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18922 if (NULL == pEncRspParams)
18923 {
18924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18925 FL("%s: VOS MEM Alloc Failure"), __func__);
18926 VOS_ASSERT(0);
18927 goto error;
18928 }
18929
18930 /* Message Header */
18931 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18932 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18933 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18934 pEncryptedDataRsp->encryptedPayload.length;
18935 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18936 pEncryptedDataRsp->encryptedPayload.data,
18937 pEncryptedDataRsp->encryptedPayload.length);
18938
18939 /* VOS message wrapper */
18940 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18941 vosMsg.bodyptr = (void *)pEncRspParams;
18942 vosMsg.bodyval = 0;
18943
18944 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18945 {
18946 /* free the mem */
18947 vos_mem_free((v_VOID_t *) pEncRspParams);
18948 }
18949
18950error:
18951
18952 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18953 {
18954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18955 }
18956 if (pWdaParams->wdaMsgParam != NULL)
18957 {
18958 vos_mem_free(pWdaParams->wdaMsgParam);
18959 }
18960 vos_mem_free(pWdaParams) ;
18961
18962 return;
18963}
18964/*==========================================================================
18965 FUNCTION WDA_ProcessEncryptMsgReq
18966
18967 DESCRIPTION
18968 API to send Encrypt message Request to WDI
18969
18970 PARAMETERS
18971 pWDA: Pointer to WDA context
18972 wdaRequest: Pointer to Encrypt_msg req parameters
18973===========================================================================*/
18974VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18975 u8 *wdaRequest)
18976{
18977 WDI_Status status = WDI_STATUS_SUCCESS;
18978 tWDA_ReqParams *pWdaParams;
18979
18980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18981 FL("%s: "), __func__);
18982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18983 if (NULL == pWdaParams)
18984 {
18985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18986 FL("%s: VOS MEM Alloc Failure"), __func__);
18987 VOS_ASSERT(0);
18988 return VOS_STATUS_E_NOMEM;
18989 }
18990 pWdaParams->pWdaContext = pWDA;
18991 pWdaParams->wdaMsgParam = wdaRequest;
18992 pWdaParams->wdaWdiApiMsgParam = NULL;
18993
18994 status = WDI_EncryptMsgReq((void *)wdaRequest,
18995 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18996 (void *)pWdaParams);
18997 if (IS_WDI_STATUS_FAILURE(status))
18998 {
18999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19000 FL("Failure to request. Free all the memory " ));
19001 vos_mem_free(pWdaParams->wdaMsgParam);
19002 vos_mem_free(pWdaParams);
19003 }
19004 return CONVERT_WDI2VOS_STATUS(status);
19005}