blob: e202947bbedba46a0f2b7506a1229d87681ba101 [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;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308328 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008330 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308331
8332
8333 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8334 if (NULL == wdiEnterImpsReqParams)
8335 {
8336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8337 "%s: VOS MEM Alloc Failure", __func__);
8338 VOS_ASSERT(0);
8339 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8340 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8341 return VOS_STATUS_E_NOMEM;
8342 }
8343
8344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8345 if (NULL == pWdaParams)
8346 {
8347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8348 "%s: VOS MEM Alloc Failure", __func__);
8349 VOS_ASSERT(0);
8350 vos_mem_free(wdiEnterImpsReqParams);
8351 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8352 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8353 return VOS_STATUS_E_NOMEM;
8354 }
8355
8356 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8357 wdiEnterImpsReqParams->pUserData = pWdaParams;
8358
8359 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8360 pWdaParams->wdaMsgParam = NULL;
8361 pWdaParams->pWdaContext = pWDA;
8362
8363 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8364 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8365 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 if(IS_WDI_STATUS_FAILURE(status))
8367 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308368 if (! (failcnt & 0xF))
8369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8370 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8371 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308372 vos_mem_free(wdiEnterImpsReqParams);
8373 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008374 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 return CONVERT_WDI2VOS_STATUS(status) ;
8377}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308378
8379/*
8380 * FUNCTION: WDA_ExitImpsRespCallback
8381 * send Exit IMPS RSP back to PE
8382 */
8383void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8384{
8385 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8386 tWDA_CbContext *pWDA;
8387
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8389 "<------ %s " ,__func__);
8390
8391 if (NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8394 "%s: pWdaParams received NULL", __func__);
8395 VOS_ASSERT(0);
8396 return;
8397 }
8398 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8399
8400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8401 vos_mem_free(pWdaParams);
8402
8403 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8404 return;
8405}
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407/*
8408 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 */
8410void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8411{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008414 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308415 if(NULL == pWdaParams)
8416 {
8417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8418 "%s: pWdaParams received NULL", __func__);
8419 VOS_ASSERT(0);
8420 return;
8421 }
8422
8423 if (IS_WDI_STATUS_FAILURE(status))
8424 {
8425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8426 vos_mem_free(pWdaParams);
8427 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8428 {
8429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8430 FL("reload wlan driver"));
8431 wpalWlanReload();
8432 }
8433 }
8434 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008435}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308436
Jeff Johnson295189b2012-06-20 16:38:30 -07008437/*
8438 * FUNCTION: WDA_ProcessExitImpsReq
8439 * Request to WDI to Exit IMPS power state.
8440 */
8441VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8442{
8443 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308444 tWDA_ReqParams *pWdaParams;
8445 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8446
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308449 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8450 sizeof(WDI_ExitImpsReqParamsType));
8451 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8454 "%s: VOS MEM Alloc Failure", __func__);
8455 VOS_ASSERT(0);
8456 return VOS_STATUS_E_NOMEM;
8457 }
8458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8459 if(NULL == pWdaParams)
8460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8462 "%s: VOS MEM Alloc Failure", __func__);
8463 VOS_ASSERT(0);
8464 vos_mem_free(wdiExitImpsReqParams);
8465 return VOS_STATUS_E_NOMEM;
8466 }
8467 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8468 wdiExitImpsReqParams->pUserData = pWdaParams;
8469
8470 /* Store param pointer as passed in by caller */
8471 /* store Params pass it to WDI */
8472 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8473 pWdaParams->pWdaContext = pWDA;
8474 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8475 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8476 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8477 pWdaParams);
8478 if (IS_WDI_STATUS_FAILURE(status))
8479 {
8480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8481 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8483 vos_mem_free(pWdaParams);
8484 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008486 return CONVERT_WDI2VOS_STATUS(status) ;
8487}
Jeff Johnson295189b2012-06-20 16:38:30 -07008488/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008489 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 * send Enter BMPS RSP back to PE
8491 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008492void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008493{
8494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308495 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008496 tEnterBmpsParams *pEnterBmpsRspParams;
8497
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008499 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 if(NULL == pWdaParams)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 VOS_ASSERT(0) ;
8505 return ;
8506 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008507
8508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308509 if (NULL == pWDA)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308513
8514 if(pWdaParams->wdaWdiApiMsgParam)
8515 {
8516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8517 }
8518 vos_mem_free(pWdaParams);
8519
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308520 VOS_ASSERT(0);
8521 return ;
8522 }
8523
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008524 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8525
8526 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008527 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008528
8529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008531 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8532
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 return ;
8534}
Jeff Johnson295189b2012-06-20 16:38:30 -07008535/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008536 * FUNCTION: WDA_EnterBmpsReqCallback
8537 * Free memory and send Enter BMPS RSP back to PE.
8538 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8539 */
8540void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8541{
8542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308543 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008544 tEnterBmpsParams *pEnterBmpsRspParams;
8545
8546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8547 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8548
8549 if(NULL == pWdaParams)
8550 {
8551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8552 "%s: pWdaParams received NULL", __func__);
8553 VOS_ASSERT(0);
8554 return;
8555 }
8556
8557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308558 if (NULL == pWDA)
8559 {
8560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8561 "%s:pWDA is NULL", __func__);
8562 VOS_ASSERT(0);
8563 return ;
8564 }
8565
Yue Ma7f44bbe2013-04-12 11:47:39 -07008566 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8567 pEnterBmpsRspParams->status = wdiStatus;
8568
8569 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8570 {
8571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8572 vos_mem_free(pWdaParams);
8573 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8574 }
8575
8576 return;
8577}
8578/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 * FUNCTION: WDA_ProcessEnterBmpsReq
8580 * Request to WDI to Enter BMPS power state.
8581 */
8582VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8583 tEnterBmpsParams *pEnterBmpsReqParams)
8584{
8585 WDI_Status status = WDI_STATUS_SUCCESS;
8586 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8587 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008590 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 VOS_ASSERT(0);
8595 return VOS_STATUS_E_FAILURE;
8596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8598 if (NULL == wdiEnterBmpsReqParams)
8599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008603 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8604 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 return VOS_STATUS_E_NOMEM;
8606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8608 if (NULL == pWdaParams)
8609 {
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_ASSERT(0);
8613 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008614 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8615 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 return VOS_STATUS_E_NOMEM;
8617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8619 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8620 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8621 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008622 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8624 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8625 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008626 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8627 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008628
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 /* Store param pointer as passed in by caller */
8630 /* store Params pass it to WDI */
8631 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008632 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008635 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 if (IS_WDI_STATUS_FAILURE(status))
8637 {
8638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8639 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008641 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008643 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 return CONVERT_WDI2VOS_STATUS(status);
8646}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008647
8648
8649static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8650 WDI_Status wdiStatus,
8651 tExitBmpsParams *pExitBmpsReqParams)
8652{
8653 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8654
8655 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8656}
8657
8658
Jeff Johnson295189b2012-06-20 16:38:30 -07008659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008660 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 * send Exit BMPS RSP back to PE
8662 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008663void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008664{
8665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308666 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008667 tExitBmpsParams *pExitBmpsRspParams;
8668
Jeff Johnson295189b2012-06-20 16:38:30 -07008669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 if(NULL == pWdaParams)
8672 {
8673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 VOS_ASSERT(0) ;
8676 return ;
8677 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008678
8679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308680 if (NULL == pWDA)
8681 {
8682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8683 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308684
8685 if(pWdaParams->wdaWdiApiMsgParam)
8686 {
8687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8688 }
8689 vos_mem_free(pWdaParams);
8690
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308691 VOS_ASSERT(0);
8692 return ;
8693 }
8694
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008695 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8696
8697 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008698 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008699
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8701 vos_mem_free(pWdaParams) ;
8702
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008703 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 return ;
8705}
Jeff Johnson295189b2012-06-20 16:38:30 -07008706/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008707 * FUNCTION: WDA_ExitBmpsReqCallback
8708 * Free memory and send Exit BMPS RSP back to PE.
8709 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8710 */
8711void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8712{
8713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308714 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008715 tExitBmpsParams *pExitBmpsRspParams;
8716
8717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8718 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8719
8720 if(NULL == pWdaParams)
8721 {
8722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8723 "%s: pWdaParams received NULL", __func__);
8724 VOS_ASSERT(0);
8725 return;
8726 }
8727
8728 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308729 if (NULL == pWDA)
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8732 "%s:pWDA is NULL", __func__);
8733 VOS_ASSERT(0);
8734 return ;
8735 }
8736
Yue Ma7f44bbe2013-04-12 11:47:39 -07008737 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8738 pExitBmpsRspParams->status = wdiStatus;
8739
8740 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8741 {
8742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8743 vos_mem_free(pWdaParams);
8744 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8745 }
8746
8747 return;
8748}
8749/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 * FUNCTION: WDA_ProcessExitBmpsReq
8751 * Request to WDI to Exit BMPS power state.
8752 */
8753VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8754 tExitBmpsParams *pExitBmpsReqParams)
8755{
8756 WDI_Status status = WDI_STATUS_SUCCESS ;
8757 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8758 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8759 sizeof(WDI_ExitBmpsReqParamsType)) ;
8760 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 if(NULL == wdiExitBmpsReqParams)
8764 {
8765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008768 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 return VOS_STATUS_E_NOMEM;
8770 }
8771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8772 if(NULL == pWdaParams)
8773 {
8774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008776 VOS_ASSERT(0);
8777 vos_mem_free(wdiExitBmpsReqParams);
8778 return VOS_STATUS_E_NOMEM;
8779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008781
8782 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8783
Yue Ma7f44bbe2013-04-12 11:47:39 -07008784 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8785 wdiExitBmpsReqParams->pUserData = pWdaParams;
8786
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 /* Store param pointer as passed in by caller */
8788 /* store Params pass it to WDI */
8789 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8790 pWdaParams->pWdaContext = pWDA;
8791 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008793 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 if(IS_WDI_STATUS_FAILURE(status))
8795 {
8796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8797 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8799 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008800 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 return CONVERT_WDI2VOS_STATUS(status) ;
8803}
Jeff Johnson295189b2012-06-20 16:38:30 -07008804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008805 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 * send Enter UAPSD RSP back to PE
8807 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008808void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008809{
8810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308811 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008812 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008814 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 if(NULL == pWdaParams)
8816 {
8817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008818 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 VOS_ASSERT(0) ;
8820 return ;
8821 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008822
8823 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308824 if (NULL == pWDA)
8825 {
8826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8827 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308828
8829 if(pWdaParams->wdaWdiApiMsgParam)
8830 {
8831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8832 }
8833 vos_mem_free(pWdaParams);
8834
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308835 VOS_ASSERT(0);
8836 return ;
8837 }
8838
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008839 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8840
8841 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008842 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008843
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8845 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008846 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 return ;
8848}
Jeff Johnson295189b2012-06-20 16:38:30 -07008849/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008850 * FUNCTION: WDA_EnterUapsdReqCallback
8851 * Free memory and send Enter UAPSD RSP back to PE.
8852 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8853 */
8854void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8855{
8856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8857 tWDA_CbContext *pWDA;
8858 tUapsdParams *pEnterUapsdRsqParams;
8859
8860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8862
8863 if(NULL == pWdaParams)
8864 {
8865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8866 "%s: pWdaParams received NULL", __func__);
8867 VOS_ASSERT(0);
8868 return;
8869 }
8870
8871 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308872 if (NULL == pWDA)
8873 {
8874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8875 "%s:pWDA is NULL", __func__);
8876 VOS_ASSERT(0);
8877 return ;
8878 }
8879
Yue Ma7f44bbe2013-04-12 11:47:39 -07008880 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8881 pEnterUapsdRsqParams->status = wdiStatus;
8882
8883 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8884 {
8885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8886 vos_mem_free(pWdaParams);
8887 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8888 }
8889
8890 return;
8891}
8892/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 * FUNCTION: WDA_ProcessEnterUapsdReq
8894 * Request to WDI to Enter UAPSD power state.
8895 */
8896VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8897 tUapsdParams *pEnterUapsdReqParams)
8898{
8899 WDI_Status status = WDI_STATUS_SUCCESS ;
8900 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8901 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8902 sizeof(WDI_EnterUapsdReqParamsType)) ;
8903 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008906 if(NULL == wdiEnterUapsdReqParams)
8907 {
8908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 VOS_ASSERT(0);
8911 return VOS_STATUS_E_NOMEM;
8912 }
8913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8914 if(NULL == pWdaParams)
8915 {
8916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 VOS_ASSERT(0);
8919 vos_mem_free(wdiEnterUapsdReqParams);
8920 return VOS_STATUS_E_NOMEM;
8921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8923 pEnterUapsdReqParams->beDeliveryEnabled;
8924 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8925 pEnterUapsdReqParams->beTriggerEnabled;
8926 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8927 pEnterUapsdReqParams->bkDeliveryEnabled;
8928 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8929 pEnterUapsdReqParams->bkTriggerEnabled;
8930 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8931 pEnterUapsdReqParams->viDeliveryEnabled;
8932 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8933 pEnterUapsdReqParams->viTriggerEnabled;
8934 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8935 pEnterUapsdReqParams->voDeliveryEnabled;
8936 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8937 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008938 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008939
Yue Ma7f44bbe2013-04-12 11:47:39 -07008940 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8941 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008942
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 /* Store param pointer as passed in by caller */
8944 /* store Params pass it to WDI */
8945 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8946 pWdaParams->pWdaContext = pWDA;
8947 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008949 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 if(IS_WDI_STATUS_FAILURE(status))
8951 {
8952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8953 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8954 vos_mem_free(pWdaParams->wdaMsgParam) ;
8955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8956 vos_mem_free(pWdaParams) ;
8957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 return CONVERT_WDI2VOS_STATUS(status) ;
8959}
Jeff Johnson295189b2012-06-20 16:38:30 -07008960/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008961 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 * send Exit UAPSD RSP back to PE
8963 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008964void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008965{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008966
8967 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8968 tWDA_CbContext *pWDA;
8969 tExitUapsdParams *pExitUapsdRspParams;
8970
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008972 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008973 if(NULL == pWdaParams)
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008976 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008977 VOS_ASSERT(0);
8978 return;
8979 }
8980
8981 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8982 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8983
8984 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008985 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008986
8987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8988 vos_mem_free(pWdaParams) ;
8989
8990 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 return ;
8992}
Jeff Johnson295189b2012-06-20 16:38:30 -07008993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008994 * FUNCTION: WDA_ExitUapsdReqCallback
8995 * Free memory and send Exit UAPSD RSP back to PE.
8996 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8997 */
8998void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8999{
9000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309001 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009002 tExitUapsdParams *pExitUapsdRspParams;
9003
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9005 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9006
9007 if(NULL == pWdaParams)
9008 {
9009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9010 "%s: pWdaParams received NULL", __func__);
9011 VOS_ASSERT(0);
9012 return;
9013 }
9014
9015 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309016 if (NULL == pWDA)
9017 {
9018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9019 "%s:pWDA is NULL", __func__);
9020 VOS_ASSERT(0);
9021 return ;
9022 }
9023
Yue Ma7f44bbe2013-04-12 11:47:39 -07009024 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9025 pExitUapsdRspParams->status = wdiStatus;
9026
9027 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9028 {
9029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9030 vos_mem_free(pWdaParams);
9031 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9032 }
9033
9034 return;
9035}
9036/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 * FUNCTION: WDA_ProcessExitUapsdReq
9038 * Request to WDI to Exit UAPSD power state.
9039 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009040VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9041 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009042{
9043 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009044 tWDA_ReqParams *pWdaParams ;
9045 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9046 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9047 sizeof(WDI_ExitUapsdReqParamsType)) ;
9048
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009050 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009051
9052 if(NULL == wdiExitUapsdReqParams)
9053 {
9054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009055 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009056 VOS_ASSERT(0);
9057 return VOS_STATUS_E_NOMEM;
9058 }
9059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9060 if(NULL == pWdaParams)
9061 {
9062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009063 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009064 VOS_ASSERT(0);
9065 vos_mem_free(wdiExitUapsdReqParams);
9066 return VOS_STATUS_E_NOMEM;
9067 }
9068
9069 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009070 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9071 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009072
9073 /* Store param pointer as passed in by caller */
9074 /* store Params pass it to WDI */
9075 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9076 pWdaParams->pWdaContext = pWDA;
9077 pWdaParams->wdaMsgParam = pExitUapsdParams;
9078
Yue Ma7f44bbe2013-04-12 11:47:39 -07009079 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 if(IS_WDI_STATUS_FAILURE(status))
9081 {
9082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9083 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009084 vos_mem_free(pWdaParams->wdaMsgParam) ;
9085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9086 vos_mem_free(pWdaParams) ;
9087
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 return CONVERT_WDI2VOS_STATUS(status) ;
9090}
9091
Jeff Johnson295189b2012-06-20 16:38:30 -07009092/*
9093 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9094 *
9095 */
9096void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9097{
9098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 if(NULL == pWdaParams)
9102 {
9103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 VOS_ASSERT(0) ;
9106 return ;
9107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 if( pWdaParams != NULL )
9109 {
9110 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9111 {
9112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9113 }
9114 if( pWdaParams->wdaMsgParam != NULL )
9115 {
9116 vos_mem_free(pWdaParams->wdaMsgParam) ;
9117 }
9118 vos_mem_free(pWdaParams) ;
9119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 return ;
9121}
Jeff Johnson295189b2012-06-20 16:38:30 -07009122/*
9123 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9124 * Request to WDI to set the power save params at start.
9125 */
9126VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9127 tSirPowerSaveCfg *pPowerSaveCfg)
9128{
9129 WDI_Status status = WDI_STATUS_SUCCESS ;
9130 tHalCfg *tlvStruct = NULL ;
9131 tANI_U8 *tlvStructStart = NULL ;
9132 v_PVOID_t *configParam;
9133 tANI_U32 configParamSize;
9134 tANI_U32 *configDataValue;
9135 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9136 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009138 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009139 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9140 {
9141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009142 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009144 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 return VOS_STATUS_E_FAILURE;
9146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9148 if (NULL == wdiPowerSaveCfg)
9149 {
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009153 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 return VOS_STATUS_E_NOMEM;
9155 }
9156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9157 if(NULL == pWdaParams)
9158 {
9159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 VOS_ASSERT(0);
9162 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009163 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 return VOS_STATUS_E_NOMEM;
9165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9167 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 if(NULL == configParam)
9169 {
9170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009171 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009172 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 vos_mem_free(pWdaParams);
9174 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009175 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 return VOS_STATUS_E_NOMEM;
9177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 vos_mem_set(configParam, configParamSize, 0);
9179 wdiPowerSaveCfg->pConfigBuffer = configParam;
9180 tlvStruct = (tHalCfg *)configParam;
9181 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9183 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9184 tlvStruct->length = sizeof(tANI_U32);
9185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9186 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9188 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9190 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9191 tlvStruct->length = sizeof(tANI_U32);
9192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9193 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9195 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9197 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9198 tlvStruct->length = sizeof(tANI_U32);
9199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9200 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9202 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9204 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9205 tlvStruct->length = sizeof(tANI_U32);
9206 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9207 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9209 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9211 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9212 tlvStruct->length = sizeof(tANI_U32);
9213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9214 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9216 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9218 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9219 tlvStruct->length = sizeof(tANI_U32);
9220 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9221 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9223 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9225 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9226 tlvStruct->length = sizeof(tANI_U32);
9227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9228 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9230 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9232 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9233 tlvStruct->length = sizeof(tANI_U32);
9234 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9235 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9236 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9237 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9239 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9240 tlvStruct->length = sizeof(tANI_U32);
9241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9242 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9243 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9244 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9246 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9247 tlvStruct->length = sizeof(tANI_U32);
9248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9249 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9251 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9253 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9254 tlvStruct->length = sizeof(tANI_U32);
9255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9256 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9258 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 /* store Params pass it to WDI */
9262 pWdaParams->wdaMsgParam = configParam;
9263 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9264 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9266 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 if(IS_WDI_STATUS_FAILURE(status))
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9270 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9271 vos_mem_free(pWdaParams->wdaMsgParam);
9272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9273 vos_mem_free(pWdaParams);
9274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 return CONVERT_WDI2VOS_STATUS(status);
9277}
Jeff Johnson295189b2012-06-20 16:38:30 -07009278/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009279 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 *
9281 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009282void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009283{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9285
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009287 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009288
9289 if(NULL == pWdaParams)
9290 {
9291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9292 "%s: pWdaParams received NULL", __func__);
9293 VOS_ASSERT(0);
9294 return ;
9295 }
9296
9297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 vos_mem_free(pWdaParams);
9299
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 return ;
9301}
Jeff Johnson295189b2012-06-20 16:38:30 -07009302/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009303 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9304 * Free memory.
9305 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9306 */
9307void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9308{
9309 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9310
9311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9312 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9313
9314 if(NULL == pWdaParams)
9315 {
9316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9317 "%s: pWdaParams received NULL", __func__);
9318 VOS_ASSERT(0);
9319 return;
9320 }
9321
9322 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9323 {
9324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9325 vos_mem_free(pWdaParams);
9326 }
9327
9328 return;
9329}
9330/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 * FUNCTION: WDA_SetUapsdAcParamsReq
9332 * Request to WDI to set the UAPSD params for an ac (sta mode).
9333 */
9334VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9335 tUapsdInfo *pUapsdInfo)
9336{
9337 WDI_Status status = WDI_STATUS_SUCCESS;
9338 tWDA_CbContext *pWDA = NULL ;
9339 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9340 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9341 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9342 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 if(NULL == wdiUapsdParams)
9346 {
9347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009349 VOS_ASSERT(0);
9350 return VOS_STATUS_E_NOMEM;
9351 }
9352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9353 if(NULL == pWdaParams)
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 VOS_ASSERT(0);
9358 vos_mem_free(wdiUapsdParams);
9359 return VOS_STATUS_E_NOMEM;
9360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009361 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9362 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9363 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9364 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9365 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9366 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009367 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9368 wdiUapsdParams->pUserData = pWdaParams;
9369
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 pWdaParams->pWdaContext = pWDA;
9372 /* Store param pointer as passed in by caller */
9373 pWdaParams->wdaMsgParam = pUapsdInfo;
9374 /* store Params pass it to WDI */
9375 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009377 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009378 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 if(IS_WDI_STATUS_FAILURE(status))
9380 {
9381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9382 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9384 vos_mem_free(pWdaParams);
9385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9387 return VOS_STATUS_SUCCESS;
9388 else
9389 return VOS_STATUS_E_FAILURE;
9390
Jeff Johnson295189b2012-06-20 16:38:30 -07009391}
9392/*
9393 * FUNCTION: WDA_ClearUapsdAcParamsReq
9394 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9395 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9396 * and again enter the UPASD with the modified params. Hence the disable
9397 * function was kept empty.
9398 *
9399 */
9400VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9401{
9402 /* do nothing */
9403 return VOS_STATUS_SUCCESS;
9404}
Jeff Johnson295189b2012-06-20 16:38:30 -07009405/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009406 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 *
9408 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009409void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009410{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9412
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009414 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009415
9416 if(NULL == pWdaParams)
9417 {
9418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009419 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009420 VOS_ASSERT(0) ;
9421 return ;
9422 }
9423
9424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9425 vos_mem_free(pWdaParams->wdaMsgParam);
9426 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009427
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 //print a msg, nothing else to do
9429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009430 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 return ;
9432}
Jeff Johnson295189b2012-06-20 16:38:30 -07009433/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009434 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9435 * Free memory.
9436 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9437 */
9438void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9439{
9440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9441
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9443 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9444
9445 if(NULL == pWdaParams)
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9448 "%s: pWdaParams received NULL", __func__);
9449 VOS_ASSERT(0);
9450 return;
9451 }
9452
9453 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9454 {
9455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9456 vos_mem_free(pWdaParams->wdaMsgParam);
9457 vos_mem_free(pWdaParams);
9458 }
9459
9460 return;
9461}
9462/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 * FUNCTION: WDA_UpdateUapsdParamsReq
9464 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9465 */
9466VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9467 tUpdateUapsdParams* pUpdateUapsdInfo)
9468{
9469 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009470 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9472 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9473 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009474 tWDA_ReqParams *pWdaParams = NULL;
9475
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009477 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 if(NULL == wdiUpdateUapsdParams)
9479 {
9480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 VOS_ASSERT(0);
9483 return VOS_STATUS_E_NOMEM;
9484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9486 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9487 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009488 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9489 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009490
9491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9492 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 {
9494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009497 vos_mem_free(pUpdateUapsdInfo);
9498 vos_mem_free(wdiUpdateUapsdParams);
9499 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009502 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009504 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9505 pWdaParams->pWdaContext = pWDA;
9506
Jeff Johnson43971f52012-07-17 12:26:56 -07009507 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009508 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009509 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510
Jeff Johnson43971f52012-07-17 12:26:56 -07009511 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 {
9513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9514 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009515 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9517 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009518 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009520 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009521}
Jeff Johnson295189b2012-06-20 16:38:30 -07009522/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009523 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 *
9525 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009526void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009527{
9528 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009530 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009531 if(WDI_STATUS_SUCCESS != wdiStatus)
9532 {
9533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009534 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 if(NULL == pWdaParams)
9537 {
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009539 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 VOS_ASSERT(0) ;
9541 return ;
9542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9544 vos_mem_free(pWdaParams->wdaMsgParam);
9545 vos_mem_free(pWdaParams);
9546 return ;
9547}
Jeff Johnson295189b2012-06-20 16:38:30 -07009548/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009549 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9550 * Free memory.
9551 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9552 */
9553void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9554{
9555 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9556
9557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9558 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9559
9560 if(NULL == pWdaParams)
9561 {
9562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9563 "%s: pWdaParams received NULL", __func__);
9564 VOS_ASSERT(0);
9565 return;
9566 }
9567
9568 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9569 {
9570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9571 vos_mem_free(pWdaParams->wdaMsgParam);
9572 vos_mem_free(pWdaParams);
9573 }
9574
9575 return;
9576}
9577/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9579 *
9580 */
9581VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9582 tSirWlanSetRxpFilters *pWlanSuspendParam)
9583{
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009585 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309586 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309588 /* Sanity Check
9589 * This is very unlikely and add assert to collect more info next time */
9590 if(NULL == pWlanSuspendParam)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9593 "%s: pWlanSuspendParam received NULL", __func__);
9594 VOS_ASSERT(0) ;
9595 return VOS_STATUS_E_FAULT;
9596 }
9597 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9598 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009600 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 if(NULL == wdiRxpFilterParams)
9602 {
9603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 VOS_ASSERT(0);
9606 vos_mem_free(pWlanSuspendParam);
9607 return VOS_STATUS_E_NOMEM;
9608 }
9609 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9610 if(NULL == pWdaParams)
9611 {
9612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009614 VOS_ASSERT(0);
9615 vos_mem_free(wdiRxpFilterParams);
9616 vos_mem_free(pWlanSuspendParam);
9617 return VOS_STATUS_E_NOMEM;
9618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9620 pWlanSuspendParam->setMcstBcstFilter;
9621 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9622 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9623
Yue Ma7f44bbe2013-04-12 11:47:39 -07009624 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9625 wdiRxpFilterParams->pUserData = pWdaParams;
9626
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 pWdaParams->pWdaContext = pWDA;
9628 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9629 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009630 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009631 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009632 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009633 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 {
9635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9636 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009637 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9639 vos_mem_free(pWdaParams->wdaMsgParam);
9640 vos_mem_free(pWdaParams);
9641 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009642 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009643}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309644
9645/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309646 * FUNCTION: WDA_ProcessGetFrameLogReq
9647 * Request to WDI to get the Frame Log.
9648 */
9649VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9650 tAniGetFrameLogReq *pGetFrameLog)
9651{
9652 VOS_STATUS status = VOS_STATUS_SUCCESS;
9653 WDI_Status wstatus;
9654 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9655 tWDA_ReqParams *pWdaParams ;
9656
9657 /* Sanity Check*/
9658 if(NULL == pGetFrameLog)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9661 "%s: pMgmtLoggingInitParam received NULL", __func__);
9662 VOS_ASSERT(0) ;
9663 return VOS_STATUS_E_FAULT;
9664 }
9665
9666 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9667 sizeof(WDI_GetFrameLogReqInfoType));
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9669 "------> %s " ,__func__);
9670
9671 if(NULL == wdiGetFrameLogInfo)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9674 "%s: VOS MEM Alloc Failure", __func__);
9675 VOS_ASSERT(0);
9676 vos_mem_free(pGetFrameLog);
9677 return VOS_STATUS_E_NOMEM;
9678 }
9679
9680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9681 if(NULL == pWdaParams)
9682 {
9683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9684 "%s: VOS MEM Alloc Failure", __func__);
9685 VOS_ASSERT(0);
9686 vos_mem_free(wdiGetFrameLogInfo);
9687 vos_mem_free(pGetFrameLog);
9688 return VOS_STATUS_E_NOMEM;
9689 }
9690
9691 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9692
9693 pWdaParams->pWdaContext = pWDA;
9694 pWdaParams->wdaMsgParam = pGetFrameLog;
9695 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9696
9697 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9698 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9699 pWdaParams);
9700 if(IS_WDI_STATUS_FAILURE(wstatus))
9701 {
9702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9703 "Failure in get frame log REQ WDI API, free all the memory" );
9704 status = CONVERT_WDI2VOS_STATUS(wstatus);
9705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9706 vos_mem_free(pWdaParams->wdaMsgParam);
9707 vos_mem_free(pWdaParams);
9708 }
9709 return status;
9710}
9711
9712/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309713 * FUNCTION: WDA_ProcessMgmtLoggingInitReq
9714 *
9715 */
9716VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
9717 tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
9718{
9719 VOS_STATUS status = VOS_STATUS_SUCCESS;
9720 WDI_Status wstatus;
9721 WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
9722 tWDA_ReqParams *pWdaParams ;
9723
9724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9725 "------> %s " ,__func__);
9726
9727 /* Sanity Check*/
9728 if(NULL == pMgmtLoggingInitParam)
9729 {
9730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9731 "%s: pMgmtLoggingInitParam received NULL", __func__);
9732 VOS_ASSERT(0) ;
9733 return VOS_STATUS_E_FAULT;
9734 }
9735
9736 wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
9737 sizeof(WDI_MgmtLoggingInitReqInfoType));
9738 if(NULL == wdiMgmtLoggingInitInfo)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9741 "%s: VOS MEM Alloc Failure", __func__);
9742 VOS_ASSERT(0);
9743 vos_mem_free(pMgmtLoggingInitParam);
9744 return VOS_STATUS_E_NOMEM;
9745 }
9746
9747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9748 if(NULL == pWdaParams)
9749 {
9750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9751 "%s: VOS MEM Alloc Failure", __func__);
9752 VOS_ASSERT(0);
9753 vos_mem_free(wdiMgmtLoggingInitInfo);
9754 vos_mem_free(pMgmtLoggingInitParam);
9755 return VOS_STATUS_E_NOMEM;
9756 }
9757
9758 wdiMgmtLoggingInitInfo->enableFlag=
9759 pMgmtLoggingInitParam->enableFlag;
9760 wdiMgmtLoggingInitInfo->frameType=
9761 pMgmtLoggingInitParam->frameType;
9762 wdiMgmtLoggingInitInfo->frameSize=
9763 pMgmtLoggingInitParam->frameSize;
9764 wdiMgmtLoggingInitInfo->bufferMode=
9765 pMgmtLoggingInitParam->bufferMode;
9766
9767 pWdaParams->pWdaContext = pWDA;
9768 pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
9769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
9770
9771 wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
9772 (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
9773 pWdaParams);
9774 if(IS_WDI_STATUS_FAILURE(wstatus))
9775 {
9776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9777 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9778 status = CONVERT_WDI2VOS_STATUS(wstatus);
9779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9780 vos_mem_free(pWdaParams->wdaMsgParam);
9781 vos_mem_free(pWdaParams);
9782 }
9783
9784 return status;
9785}
9786
Jeff Johnson295189b2012-06-20 16:38:30 -07009787/*
9788 * FUNCTION: WDA_WdiIndicationCallback
9789 *
9790 */
9791void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9792 void* pUserData)
9793{
9794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009796}
Jeff Johnson295189b2012-06-20 16:38:30 -07009797/*
9798 * FUNCTION: WDA_ProcessWlanSuspendInd
9799 *
9800 */
9801VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9802 tSirWlanSuspendParam *pWlanSuspendParam)
9803{
9804 WDI_Status wdiStatus;
9805 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009808 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9809 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9810 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9811 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9814 if(WDI_STATUS_PENDING == wdiStatus)
9815 {
9816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009817 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 }
9819 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9820 {
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009822 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 vos_mem_free(pWlanSuspendParam);
9825 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9826}
9827
Chet Lanctot186b5732013-03-18 10:26:30 -07009828#ifdef WLAN_FEATURE_11W
9829/*
9830 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9831 *
9832 */
9833VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9834 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9835{
9836 WDI_Status wdiStatus;
9837 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9839 "------> %s ", __func__);
9840
9841 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9842 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9843 sizeof(tSirMacAddr));
9844
9845 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9846 wdiExclUnencryptParams.pUserData = pWDA;
9847
9848 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9849 if(WDI_STATUS_PENDING == wdiStatus)
9850 {
9851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9852 "Pending received for %s:%d ", __func__, __LINE__ );
9853 }
9854 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9855 {
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9857 "Failure in %s:%d ", __func__, __LINE__ );
9858 }
9859 vos_mem_free(pExclUnencryptParam);
9860 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9861}
9862#endif
9863
Jeff Johnson295189b2012-06-20 16:38:30 -07009864/*
9865 * FUNCTION: WDA_ProcessWlanResumeCallback
9866 *
9867 */
9868void WDA_ProcessWlanResumeCallback(
9869 WDI_SuspendResumeRspParamsType *resumeRspParams,
9870 void* pUserData)
9871{
9872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009875 if(NULL == pWdaParams)
9876 {
9877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009878 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 VOS_ASSERT(0) ;
9880 return ;
9881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9883 {
9884 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009885 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9888 vos_mem_free(pWdaParams->wdaMsgParam);
9889 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 return ;
9891}
Jeff Johnson295189b2012-06-20 16:38:30 -07009892/*
9893 * FUNCTION: WDA_ProcessWlanResumeReq
9894 *
9895 */
9896VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9897 tSirWlanResumeParam *pWlanResumeParam)
9898{
9899 WDI_Status wdiStatus;
9900 WDI_ResumeParamsType *wdiResumeParams =
9901 (WDI_ResumeParamsType *)vos_mem_malloc(
9902 sizeof(WDI_ResumeParamsType) ) ;
9903 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 if(NULL == wdiResumeParams)
9907 {
9908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 VOS_ASSERT(0);
9911 return VOS_STATUS_E_NOMEM;
9912 }
9913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9914 if(NULL == pWdaParams)
9915 {
9916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 VOS_ASSERT(0);
9919 vos_mem_free(wdiResumeParams);
9920 return VOS_STATUS_E_NOMEM;
9921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9923 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 wdiResumeParams->wdiReqStatusCB = NULL;
9926 pWdaParams->wdaMsgParam = pWlanResumeParam;
9927 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9928 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9930 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9931 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9933 {
9934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9935 "Failure in Host Resume REQ WDI API, free all the memory " );
9936 VOS_ASSERT(0);
9937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9938 vos_mem_free(pWdaParams->wdaMsgParam);
9939 vos_mem_free(pWdaParams);
9940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9942}
9943
Jeff Johnson295189b2012-06-20 16:38:30 -07009944/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009946 *
9947 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009948void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009949{
9950 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009952 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 if(NULL == pWdaParams)
9954 {
9955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009956 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 VOS_ASSERT(0) ;
9958 return ;
9959 }
9960
9961 vos_mem_free(pWdaParams->wdaMsgParam) ;
9962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9963 vos_mem_free(pWdaParams) ;
9964 /*
9965 * No respone required for SetBeaconFilter req so just free the request
9966 * param here
9967 */
9968
Jeff Johnson295189b2012-06-20 16:38:30 -07009969 return ;
9970}
Jeff Johnson295189b2012-06-20 16:38:30 -07009971/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009972 * FUNCTION: WDA_SetBeaconFilterReqCallback
9973 * Free memory.
9974 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9975 */
9976void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9977{
9978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9979
9980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9981 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9982
9983 if(NULL == pWdaParams)
9984 {
9985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9986 "%s: pWdaParams received NULL", __func__);
9987 VOS_ASSERT(0);
9988 return;
9989 }
9990
9991 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9992 {
9993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9994 vos_mem_free(pWdaParams->wdaMsgParam);
9995 vos_mem_free(pWdaParams);
9996 }
9997
9998 return;
9999}
10000/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 * FUNCTION: WDA_SetBeaconFilterReq
10002 * Request to WDI to send the beacon filtering related information.
10003 */
10004VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10005 tBeaconFilterMsg* pBeaconFilterInfo)
10006{
10007 WDI_Status status = WDI_STATUS_SUCCESS;
10008 tANI_U8 *dstPtr, *srcPtr;
10009 tANI_U8 filterLength;
10010 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10011 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10012 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 if(NULL == wdiBeaconFilterInfo)
10017 {
10018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 VOS_ASSERT(0);
10021 return VOS_STATUS_E_NOMEM;
10022 }
10023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10024 if(NULL == pWdaParams)
10025 {
10026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 VOS_ASSERT(0);
10029 vos_mem_free(wdiBeaconFilterInfo);
10030 return VOS_STATUS_E_NOMEM;
10031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10033 pBeaconFilterInfo->beaconInterval;
10034 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10035 pBeaconFilterInfo->capabilityInfo;
10036 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10037 pBeaconFilterInfo->capabilityMask;
10038 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010039
10040 //Fill the BssIdx
10041 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10042
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 //Fill structure with info contained in the beaconFilterTable
10044 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10045 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10046 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10047 if(WDI_BEACON_FILTER_LEN < filterLength)
10048 {
10049 filterLength = WDI_BEACON_FILTER_LEN;
10050 }
10051 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010052 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10053 wdiBeaconFilterInfo->pUserData = pWdaParams;
10054
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 /* Store param pointer as passed in by caller */
10056 /* store Params pass it to WDI */
10057 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10058 pWdaParams->pWdaContext = pWDA;
10059 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10060
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010062 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 if(IS_WDI_STATUS_FAILURE(status))
10064 {
10065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10066 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10067 vos_mem_free(pWdaParams->wdaMsgParam) ;
10068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10069 vos_mem_free(pWdaParams) ;
10070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 return CONVERT_WDI2VOS_STATUS(status) ;
10072}
Jeff Johnson295189b2012-06-20 16:38:30 -070010073/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010074 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 *
10076 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010078{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10080
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010082 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010083
10084 if(NULL == pWdaParams)
10085 {
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010087 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010088 VOS_ASSERT(0) ;
10089 return ;
10090 }
10091
10092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10093 vos_mem_free(pWdaParams->wdaMsgParam);
10094 vos_mem_free(pWdaParams);
10095
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 //print a msg, nothing else to do
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010098 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 return ;
10100}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010101/*
10102 * FUNCTION: WDA_RemBeaconFilterReqCallback
10103 * Free memory.
10104 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10105 */
10106void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10107{
10108 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10109
10110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10111 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10112
10113 if(NULL == pWdaParams)
10114 {
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10116 "%s: pWdaParams received NULL", __func__);
10117 VOS_ASSERT(0);
10118 return;
10119 }
10120
10121 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10122 {
10123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10124 vos_mem_free(pWdaParams->wdaMsgParam);
10125 vos_mem_free(pWdaParams);
10126 }
10127
10128 return;
10129}
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 // TODO: PE does not have this feature for now implemented,
10131 // but the support for removing beacon filter exists between
10132 // HAL and FW. This function can be called whenever PE defines
10133 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010134/*
10135 * FUNCTION: WDA_RemBeaconFilterReq
10136 * Request to WDI to send the removal of beacon filtering related information.
10137 */
10138VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10139 tRemBeaconFilterMsg* pBeaconFilterInfo)
10140{
10141 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010142 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10144 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10145 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010146 tWDA_ReqParams *pWdaParams ;
10147
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010149 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 if(NULL == wdiBeaconFilterInfo)
10151 {
10152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010153 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 VOS_ASSERT(0);
10155 return VOS_STATUS_E_NOMEM;
10156 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010157 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10158 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 {
10160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010161 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010163 vos_mem_free(wdiBeaconFilterInfo);
10164 vos_mem_free(pBeaconFilterInfo);
10165 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167
10168 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10169 pBeaconFilterInfo->ucIeCount;
10170 //Fill structure with info contained in the ucRemIeId
10171 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10172 pBeaconFilterInfo->ucRemIeId,
10173 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10174 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10175 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176
10177 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010178 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010180 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10181
10182 pWdaParams->pWdaContext = pWDA;
10183
Jeff Johnson43971f52012-07-17 12:26:56 -070010184 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010185 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010186 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 {
10188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10189 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010190 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10192 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010193 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010195 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010196}
Jeff Johnson295189b2012-06-20 16:38:30 -070010197/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010198 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 *
10200 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010201void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010202{
10203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 if(NULL == pWdaParams)
10207 {
10208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 VOS_ASSERT(0) ;
10211 return ;
10212 }
10213
10214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10215 vos_mem_free(pWdaParams) ;
10216
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 return ;
10218}
Jeff Johnson295189b2012-06-20 16:38:30 -070010219/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010220 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10221 * Free memory.
10222 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10223 */
10224void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10225{
10226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10227
10228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10229 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10230
10231 if(NULL == pWdaParams)
10232 {
10233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10234 "%s: pWdaParams received NULL", __func__);
10235 VOS_ASSERT(0);
10236 return;
10237 }
10238
10239 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10240 {
10241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10242 vos_mem_free(pWdaParams);
10243 }
10244
10245 return;
10246}
10247/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 * FUNCTION: WDA_SetRSSIThresholdsReq
10249 * Request to WDI to set the RSSI thresholds (sta mode).
10250 */
10251VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10252{
10253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 tWDA_CbContext *pWDA = NULL ;
10256 v_PVOID_t pVosContext = NULL;
10257 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10258 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10259 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10260 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010262 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 if(NULL == wdiRSSIThresholdsInfo)
10264 {
10265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 VOS_ASSERT(0);
10268 return VOS_STATUS_E_NOMEM;
10269 }
10270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10271 if(NULL == pWdaParams)
10272 {
10273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_ASSERT(0);
10276 vos_mem_free(wdiRSSIThresholdsInfo);
10277 return VOS_STATUS_E_NOMEM;
10278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10281 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10282 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010289 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10290 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10292 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10293
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 /* Store param pointer as passed in by caller */
10295 /* store Params pass it to WDI */
10296 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10297 pWdaParams->pWdaContext = pWDA;
10298 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010299 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010300 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010301 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010305 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10307 vos_mem_free(pWdaParams) ;
10308 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010309 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010310
10311}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010312/*
Yue Madb90ac12013-04-04 13:39:13 -070010313 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 *
10315 */
Yue Madb90ac12013-04-04 13:39:13 -070010316void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010317{
10318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10319
10320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010322 if(NULL == pWdaParams)
10323 {
10324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 VOS_ASSERT(0) ;
10327 return ;
10328 }
10329
10330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10331 vos_mem_free(pWdaParams->wdaMsgParam);
10332 vos_mem_free(pWdaParams) ;
10333
10334 //print a msg, nothing else to do
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010336 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 return ;
10338}
Jeff Johnson295189b2012-06-20 16:38:30 -070010339/*
Yue Madb90ac12013-04-04 13:39:13 -070010340 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010341 * Free memory.
10342 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010343 */
10344void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10345{
10346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10347
10348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10349 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10350
10351 if(NULL == pWdaParams)
10352 {
10353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10354 "%s: Invalid pWdaParams pointer", __func__);
10355 VOS_ASSERT(0);
10356 return;
10357 }
10358
10359 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10360 {
10361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10362 vos_mem_free(pWdaParams->wdaMsgParam);
10363 vos_mem_free(pWdaParams);
10364 }
10365
10366 return;
10367}
10368/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 * FUNCTION: WDA_ProcessHostOffloadReq
10370 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10371 * to broadcast traffic (sta mode).
10372 */
10373VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10374 tSirHostOffloadReq *pHostOffloadParams)
10375{
10376 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010377 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10379 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10380 sizeof(WDI_HostOffloadReqParamsType)) ;
10381 tWDA_ReqParams *pWdaParams ;
10382
10383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010384 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010385
10386 if(NULL == wdiHostOffloadInfo)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 VOS_ASSERT(0);
10391 return VOS_STATUS_E_NOMEM;
10392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10394 if(NULL == pWdaParams)
10395 {
10396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 VOS_ASSERT(0);
10399 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010400 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 return VOS_STATUS_E_NOMEM;
10402 }
10403
10404 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10405 pHostOffloadParams->offloadType;
10406 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10407 pHostOffloadParams->enableOrDisable;
10408
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010409 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10410 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10411
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10413 {
10414 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10415 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10416 pHostOffloadParams->params.hostIpv4Addr,
10417 4);
10418 break;
10419 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10420 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10421 pHostOffloadParams->params.hostIpv6Addr,
10422 16);
10423 break;
10424 case SIR_IPV6_NS_OFFLOAD:
10425 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10426 pHostOffloadParams->params.hostIpv6Addr,
10427 16);
10428
10429#ifdef WLAN_NS_OFFLOAD
10430 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10431 {
10432 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10433 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10434 16);
10435 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10436 }
10437 else
10438 {
10439 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10440 }
10441
10442 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10443 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10444 16);
10445 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10446 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10447 6);
10448
10449 //Only two are supported so let's go through them without a loop
10450 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10451 {
10452 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10453 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10454 16);
10455 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10456 }
10457 else
10458 {
10459 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10460 }
10461
10462 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10463 {
10464 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10465 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10466 16);
10467 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10468 }
10469 else
10470 {
10471 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10472 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010473 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10474 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010475 break;
10476#endif //WLAN_NS_OFFLOAD
10477 default:
10478 {
10479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10480 "No Handling for Offload Type %x in WDA "
10481 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10482 //WDA_VOS_ASSERT(0) ;
10483 }
10484 }
Yue Madb90ac12013-04-04 13:39:13 -070010485 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10486 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010487
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010489 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010490 /* store Params pass it to WDI */
10491 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10492 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010493
Jeff Johnson295189b2012-06-20 16:38:30 -070010494
Jeff Johnson43971f52012-07-17 12:26:56 -070010495 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010496 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010497
Jeff Johnson43971f52012-07-17 12:26:56 -070010498 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 {
10500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010501 "Failure in host offload REQ WDI API, free all the memory %d",
10502 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010503 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10505 vos_mem_free(pWdaParams->wdaMsgParam);
10506 vos_mem_free(pWdaParams) ;
10507 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010508 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010509
10510}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010511/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010512 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 *
10514 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010515void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010516{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10518
Jeff Johnson295189b2012-06-20 16:38:30 -070010519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010520 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010521
10522 if(NULL == pWdaParams)
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010525 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010526 VOS_ASSERT(0) ;
10527 return ;
10528 }
10529
10530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10531 vos_mem_free(pWdaParams->wdaMsgParam);
10532 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010533
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 //print a msg, nothing else to do
10535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010536 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 return ;
10538}
Jeff Johnson295189b2012-06-20 16:38:30 -070010539/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010540 * FUNCTION: WDA_KeepAliveReqCallback
10541 * Free memory.
10542 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10543 */
10544void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10545{
10546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10547
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10549 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10550
10551 if(NULL == pWdaParams)
10552 {
10553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10554 "%s: pWdaParams received NULL", __func__);
10555 VOS_ASSERT(0);
10556 return;
10557 }
10558
10559 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10560 {
10561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10562 vos_mem_free(pWdaParams->wdaMsgParam);
10563 vos_mem_free(pWdaParams);
10564 }
10565
10566 return;
10567}
10568/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 * FUNCTION: WDA_ProcessKeepAliveReq
10570 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10571 * wakeup due to broadcast traffic (sta mode).
10572 */
10573VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10574 tSirKeepAliveReq *pKeepAliveParams)
10575{
10576 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010577 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010578 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10579 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10580 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010581 tWDA_ReqParams *pWdaParams;
10582
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010585 if(NULL == wdiKeepAliveInfo)
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010590 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010591 return VOS_STATUS_E_NOMEM;
10592 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010593
10594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10595 if(NULL == pWdaParams)
10596 {
10597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010598 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010599 VOS_ASSERT(0);
10600 vos_mem_free(wdiKeepAliveInfo);
10601 vos_mem_free(pKeepAliveParams);
10602 return VOS_STATUS_E_NOMEM;
10603 }
10604
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10606 pKeepAliveParams->packetType;
10607 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10608 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010609
10610 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10611 pKeepAliveParams->bssId,
10612 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010613
10614 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10615 {
10616 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10617 pKeepAliveParams->hostIpv4Addr,
10618 SIR_IPV4_ADDR_LEN);
10619 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10620 pKeepAliveParams->destIpv4Addr,
10621 SIR_IPV4_ADDR_LEN);
10622 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10623 pKeepAliveParams->destMacAddr,
10624 SIR_MAC_ADDR_LEN);
10625 }
10626 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10627 {
10628 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10629 SIR_IPV4_ADDR_LEN,
10630 0);
10631 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10632 SIR_IPV4_ADDR_LEN,
10633 0);
10634 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10635 SIR_MAC_ADDR_LEN,
10636 0);
10637 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010638 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10639 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010640
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010642 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010644 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10645 pWdaParams->pWdaContext = pWDA;
10646
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10648 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10649 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10650 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10651 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10653 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10654 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10655 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10658 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10660 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10661 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10662 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10663 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10664 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10666 "TimePeriod %d PacketType %d",
10667 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10668 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010669 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010670 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010671
Jeff Johnson43971f52012-07-17 12:26:56 -070010672 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 {
10674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10675 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010676 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10678 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010679 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010681 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010682
10683}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010685 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 *
10687 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010688void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010689 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10690 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010691{
10692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 if(NULL == pWdaParams)
10696 {
10697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010698 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 VOS_ASSERT(0) ;
10700 return ;
10701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10703 vos_mem_free(pWdaParams->wdaMsgParam);
10704 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 return ;
10706}
Jeff Johnson295189b2012-06-20 16:38:30 -070010707/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010708 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10709 * Free memory.
10710 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10711 */
10712void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10713{
10714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10715
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10717 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10718
10719 if(NULL == pWdaParams)
10720 {
10721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10722 "%s: pWdaParams received NULL", __func__);
10723 VOS_ASSERT(0);
10724 return;
10725 }
10726
10727 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10728 {
10729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10730 vos_mem_free(pWdaParams->wdaMsgParam);
10731 vos_mem_free(pWdaParams);
10732 }
10733
10734 return;
10735}
10736
10737/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10739 * Request to WDI to add WOWL Bcast pattern
10740 */
10741VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10742 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10743{
10744 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010745 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10747 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10748 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10749 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010751 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 if(NULL == wdiWowlAddBcPtrnInfo)
10753 {
10754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 VOS_ASSERT(0);
10757 return VOS_STATUS_E_NOMEM;
10758 }
10759 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10760 if(NULL == pWdaParams)
10761 {
10762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 VOS_ASSERT(0);
10765 vos_mem_free(wdiWowlAddBcPtrnInfo);
10766 return VOS_STATUS_E_NOMEM;
10767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10769 pWowlAddBcPtrnParams->ucPatternId;
10770 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10771 pWowlAddBcPtrnParams->ucPatternByteOffset;
10772 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10773 pWowlAddBcPtrnParams->ucPatternMaskSize;
10774 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10775 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10777 {
10778 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10779 pWowlAddBcPtrnParams->ucPattern,
10780 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10781 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10782 pWowlAddBcPtrnParams->ucPatternMask,
10783 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10784 }
10785 else
10786 {
10787 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10788 pWowlAddBcPtrnParams->ucPattern,
10789 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10790 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10791 pWowlAddBcPtrnParams->ucPatternMask,
10792 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10793
10794 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10795 pWowlAddBcPtrnParams->ucPatternExt,
10796 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10797 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10798 pWowlAddBcPtrnParams->ucPatternMaskExt,
10799 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10800 }
10801
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010802 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10803 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10804
Yue Ma7f44bbe2013-04-12 11:47:39 -070010805 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10806 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010807 /* Store param pointer as passed in by caller */
10808 /* store Params pass it to WDI */
10809 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10810 pWdaParams->pWdaContext = pWDA;
10811 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010812 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010813 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010814 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 {
10816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10817 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010818 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 vos_mem_free(pWdaParams->wdaMsgParam) ;
10820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10821 vos_mem_free(pWdaParams) ;
10822 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010823 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010824
10825}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010826/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010827 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 *
10829 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010830void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010831 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10832 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010833{
10834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 if(NULL == pWdaParams)
10838 {
10839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_ASSERT(0) ;
10842 return ;
10843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10845 vos_mem_free(pWdaParams->wdaMsgParam);
10846 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 return ;
10848}
Jeff Johnson295189b2012-06-20 16:38:30 -070010849/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010850 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10851 * Free memory.
10852 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10853 */
10854void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10855{
10856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10857
10858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10859 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10860
10861 if(NULL == pWdaParams)
10862 {
10863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10864 "%s: pWdaParams received NULL", __func__);
10865 VOS_ASSERT(0);
10866 return;
10867 }
10868
10869 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10870 {
10871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10872 vos_mem_free(pWdaParams->wdaMsgParam);
10873 vos_mem_free(pWdaParams);
10874 }
10875
10876 return;
10877}
10878/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10880 * Request to WDI to delete WOWL Bcast pattern
10881 */
10882VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10883 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10884{
10885 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010886 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10888 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10889 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10890 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010893 if(NULL == wdiWowlDelBcPtrnInfo)
10894 {
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 VOS_ASSERT(0);
10898 return VOS_STATUS_E_NOMEM;
10899 }
10900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10901 if(NULL == pWdaParams)
10902 {
10903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 VOS_ASSERT(0);
10906 vos_mem_free(wdiWowlDelBcPtrnInfo);
10907 return VOS_STATUS_E_NOMEM;
10908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10910 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010911
10912 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10913 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10914
Yue Ma7f44bbe2013-04-12 11:47:39 -070010915 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10916 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 /* Store param pointer as passed in by caller */
10918 /* store Params pass it to WDI */
10919 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10920 pWdaParams->pWdaContext = pWDA;
10921 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010922 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010923 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010924 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 {
10926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10927 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010928 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 vos_mem_free(pWdaParams->wdaMsgParam) ;
10930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10931 vos_mem_free(pWdaParams) ;
10932 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010933 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010934
10935}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010936/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010937 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 *
10939 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010940void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010941{
10942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010943 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010946 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 if(NULL == pWdaParams)
10948 {
10949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 VOS_ASSERT(0) ;
10952 return ;
10953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010955 if (NULL == pWDA)
10956 {
10957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10958 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010959
10960 if(pWdaParams->wdaWdiApiMsgParam)
10961 {
10962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10963 }
10964 vos_mem_free(pWdaParams);
10965
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010966 VOS_ASSERT(0);
10967 return ;
10968 }
10969
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10971
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010972 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10973
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10975 vos_mem_free(pWdaParams) ;
10976
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010977 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010978 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010980 return ;
10981}
Jeff Johnson295189b2012-06-20 16:38:30 -070010982/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010983 * FUNCTION: WDA_WowlEnterReqCallback
10984 * Free memory and send WOWL Enter RSP back to PE.
10985 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10986 */
10987void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10988{
10989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010990 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010991 tSirHalWowlEnterParams *pWowlEnterParams;
10992
10993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10994 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10995
10996 if(NULL == pWdaParams)
10997 {
10998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10999 "%s: pWdaParams received NULL", __func__);
11000 VOS_ASSERT(0);
11001 return;
11002 }
11003
11004 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011005 if (NULL == pWDA)
11006 {
11007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11008 "%s:pWDA is NULL", __func__);
11009 VOS_ASSERT(0);
11010 return ;
11011 }
11012
Yue Ma7f44bbe2013-04-12 11:47:39 -070011013 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11014 pWowlEnterParams->status = wdiStatus;
11015
11016 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11017 {
11018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11019 vos_mem_free(pWdaParams);
11020 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11021 }
11022
11023 return;
11024}
11025/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 * FUNCTION: WDA_ProcessWowlEnterReq
11027 * Request to WDI to enter WOWL
11028 */
11029VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11030 tSirHalWowlEnterParams *pWowlEnterParams)
11031{
11032 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011033 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11035 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11036 sizeof(WDI_WowlEnterReqParamsType)) ;
11037 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011039 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 if(NULL == wdiWowlEnterInfo)
11041 {
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 VOS_ASSERT(0);
11045 return VOS_STATUS_E_NOMEM;
11046 }
11047 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11048 if(NULL == pWdaParams)
11049 {
11050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 VOS_ASSERT(0);
11053 vos_mem_free(wdiWowlEnterInfo);
11054 return VOS_STATUS_E_NOMEM;
11055 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011056
11057 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11058
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11060 pWowlEnterParams->magicPtrn,
11061 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11063 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11065 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11067 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11069 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11071 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011072 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11073 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11075 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11077 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011078#ifdef WLAN_WAKEUP_EVENTS
11079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11080 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11081
11082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11083 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11084
11085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11086 pWowlEnterParams->ucWowNetScanOffloadMatch;
11087
11088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11089 pWowlEnterParams->ucWowGTKRekeyError;
11090
11091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11092 pWowlEnterParams->ucWoWBSSConnLoss;
11093#endif // WLAN_WAKEUP_EVENTS
11094
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011095 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11096 pWowlEnterParams->bssIdx;
11097
Yue Ma7f44bbe2013-04-12 11:47:39 -070011098 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11099 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 /* Store param pointer as passed in by caller */
11101 /* store Params pass it to WDI */
11102 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11103 pWdaParams->pWdaContext = pWDA;
11104 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011105 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011106 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011107 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 {
11109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11110 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011111 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011112 vos_mem_free(pWdaParams->wdaMsgParam) ;
11113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11114 vos_mem_free(pWdaParams) ;
11115 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011116 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011117
11118}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011119/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011120 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 *
11122 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011123void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011124{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011126 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011127 tSirHalWowlExitParams *pWowlExitParams;
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011129 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011130 if(NULL == pWdaParams)
11131 {
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011133 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011134 VOS_ASSERT(0) ;
11135 return ;
11136 }
11137 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011138 if (NULL == pWDA)
11139 {
11140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11141 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011142
11143 if(pWdaParams->wdaWdiApiMsgParam)
11144 {
11145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11146 }
11147 vos_mem_free(pWdaParams);
11148
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011149 VOS_ASSERT(0);
11150 return ;
11151 }
11152
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011153 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11154
11155 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011156 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011157
11158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11159 vos_mem_free(pWdaParams) ;
11160
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011162 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011163 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 return ;
11165}
Jeff Johnson295189b2012-06-20 16:38:30 -070011166/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011167 * FUNCTION: WDA_WowlExitReqCallback
11168 * Free memory and send WOWL Exit RSP back to PE.
11169 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11170 */
11171void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11172{
11173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011174 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011175 tSirHalWowlExitParams *pWowlExitParams;
11176
11177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11178 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11179
11180 if(NULL == pWdaParams)
11181 {
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11183 "%s: pWdaParams received NULL", __func__);
11184 VOS_ASSERT(0);
11185 return;
11186 }
11187
11188 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011189 if (NULL == pWDA)
11190 {
11191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11192 "%s:pWDA is NULL", __func__);
11193 VOS_ASSERT(0);
11194 return ;
11195 }
11196
Yue Ma7f44bbe2013-04-12 11:47:39 -070011197 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11198 pWowlExitParams->status = wdiStatus;
11199
11200 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11201 {
11202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11203 vos_mem_free(pWdaParams);
11204 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11205 }
11206
11207 return;
11208}
11209/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011210 * FUNCTION: WDA_ProcessWowlExitReq
11211 * Request to WDI to add WOWL Bcast pattern
11212 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011213VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11214 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011215{
11216 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011217 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011218 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11219 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11220 sizeof(WDI_WowlExitReqParamsType)) ;
11221 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011223 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011224 if(NULL == wdiWowlExitInfo)
11225 {
11226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011227 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011228 VOS_ASSERT(0);
11229 return VOS_STATUS_E_NOMEM;
11230 }
11231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11232 if(NULL == pWdaParams)
11233 {
11234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011235 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011236 VOS_ASSERT(0);
11237 vos_mem_free(wdiWowlExitInfo);
11238 return VOS_STATUS_E_NOMEM;
11239 }
11240
11241 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11242 pWowlExitParams->bssIdx;
11243
Yue Ma7f44bbe2013-04-12 11:47:39 -070011244 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11245 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011246
11247 /* Store param pointer as passed in by caller */
11248 /* store Params pass it to WDI */
11249 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11250 pWdaParams->pWdaContext = pWDA;
11251 pWdaParams->wdaMsgParam = pWowlExitParams;
11252
11253 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011254 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011255
Jeff Johnson43971f52012-07-17 12:26:56 -070011256 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 {
11258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11259 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011260 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11262 vos_mem_free(pWdaParams->wdaMsgParam);
11263 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011265 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011266}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011267/*
11268 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11269 * Request to WDI to determine whether a given station is capable of
11270 * using HW-based frame translation
11271 */
11272v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11273 tANI_U8 staIdx)
11274{
11275 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11276}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011277
11278/*
11279 * FUNCTION: WDA_IsSelfSTA
11280 * Request to WDI to determine whether a given STAID is self station
11281 * index.
11282 */
11283v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11284{
11285
11286 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11287
Girish Gowli05cf44e2014-06-12 21:53:37 +053011288 if (NULL != pWDA)
11289 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11290 else
11291 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011292}
Jeff Johnson295189b2012-06-20 16:38:30 -070011293/*
11294 * FUNCTION: WDA_NvDownloadReqCallback
11295 * send NV Download RSP back to PE
11296 */
11297void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11298 void* pUserData)
11299{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011300
11301 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011302 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011303
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011305 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011306
11307 if(NULL == pWdaParams)
11308 {
11309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011310 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011311 VOS_ASSERT(0) ;
11312 return ;
11313 }
11314
11315 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011316 if (NULL == pWDA)
11317 {
11318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11319 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011320
11321 if(pWdaParams->wdaWdiApiMsgParam)
11322 {
11323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11324 }
11325 vos_mem_free(pWdaParams);
11326
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011327 VOS_ASSERT(0);
11328 return ;
11329 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011330
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11333 vos_mem_free(pWdaParams);
11334
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 return ;
11337}
Jeff Johnson295189b2012-06-20 16:38:30 -070011338/*
11339 * FUNCTION: WDA_ProcessNvDownloadReq
11340 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11341 */
11342VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11343{
11344 /* Initialize the local Variables*/
11345 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11346 v_VOID_t *pNvBuffer=NULL;
11347 v_SIZE_t bufferSize = 0;
11348 WDI_Status status = WDI_STATUS_E_FAILURE;
11349 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011350 tWDA_ReqParams *pWdaParams ;
11351
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011353 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011354 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011357 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011358 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 return VOS_STATUS_E_FAILURE;
11360 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011361
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011363 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11364
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11366 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 if(NULL == wdiNvDownloadReqParam)
11368 {
11369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 VOS_ASSERT(0);
11372 return VOS_STATUS_E_NOMEM;
11373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 /* Copy Params to wdiNvDownloadReqParam*/
11375 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11376 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011377
11378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11379 if(NULL == pWdaParams)
11380 {
11381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011382 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011383 VOS_ASSERT(0);
11384 vos_mem_free(wdiNvDownloadReqParam);
11385 return VOS_STATUS_E_NOMEM;
11386 }
11387
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011389 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11390 pWdaParams->wdaMsgParam = NULL;
11391 pWdaParams->pWdaContext = pWDA;
11392
11393
Jeff Johnson295189b2012-06-20 16:38:30 -070011394 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011395
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011397 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11398
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 if(IS_WDI_STATUS_FAILURE(status))
11400 {
11401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11402 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11404 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011407}
11408/*
11409 * FUNCTION: WDA_FlushAcReqCallback
11410 * send Flush AC RSP back to TL
11411 */
11412void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11413{
11414 vos_msg_t wdaMsg = {0} ;
11415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11416 tFlushACReq *pFlushACReqParams;
11417 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 if(NULL == pWdaParams)
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 VOS_ASSERT(0) ;
11425 return ;
11426 }
11427
11428 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11429 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11430 if(NULL == pFlushACRspParams)
11431 {
11432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011433 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011434 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011435 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 return ;
11437 }
11438 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11439 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11440 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11441 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11442 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011443 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 vos_mem_free(pWdaParams->wdaMsgParam) ;
11445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11446 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11448 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11449 // POST message to TL
11450 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11451
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 return ;
11453}
Jeff Johnson295189b2012-06-20 16:38:30 -070011454/*
11455 * FUNCTION: WDA_ProcessFlushAcReq
11456 * Request to WDI to Update the DELBA REQ params.
11457 */
11458VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11459 tFlushACReq *pFlushAcReqParams)
11460{
11461 WDI_Status status = WDI_STATUS_SUCCESS ;
11462 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11463 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11464 sizeof(WDI_FlushAcReqParamsType)) ;
11465 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 if(NULL == wdiFlushAcReqParam)
11467 {
11468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 VOS_ASSERT(0);
11471 return VOS_STATUS_E_NOMEM;
11472 }
11473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11474 if(NULL == pWdaParams)
11475 {
11476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 VOS_ASSERT(0);
11479 vos_mem_free(wdiFlushAcReqParam);
11480 return VOS_STATUS_E_NOMEM;
11481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011483 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011484 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11485 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11486 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11487 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 /* Store Flush AC pointer, as this will be used for response */
11489 /* store Params pass it to WDI */
11490 pWdaParams->pWdaContext = pWDA;
11491 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11492 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11494 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 if(IS_WDI_STATUS_FAILURE(status))
11496 {
11497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11498 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11499 vos_mem_free(pWdaParams->wdaMsgParam) ;
11500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11501 vos_mem_free(pWdaParams) ;
11502 //TODO: respond to TL with failure
11503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011505}
Jeff Johnson295189b2012-06-20 16:38:30 -070011506/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011507 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 *
11509 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011510void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011511{
11512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011513 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011514 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515
11516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011517 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 if(NULL == pWdaParams)
11519 {
11520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011521 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 VOS_ASSERT(0) ;
11523 return ;
11524 }
11525 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011526 if (NULL == pWDA)
11527 {
11528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11529 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011530 vos_mem_free(pWdaParams->wdaMsgParam) ;
11531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11532 vos_mem_free(pWdaParams) ;
11533
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011534 VOS_ASSERT(0);
11535 return ;
11536 }
11537
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11539 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11540 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11541 {
11542 pWDA->wdaAmpSessionOn = VOS_FALSE;
11543 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 vos_mem_free(pWdaParams->wdaMsgParam) ;
11545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11546 vos_mem_free(pWdaParams) ;
11547 /*
11548 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11549 * param here
11550 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 return ;
11552}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011553/*
11554 * FUNCTION: WDA_BtAmpEventReqCallback
11555 * Free memory.
11556 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11557 */
11558void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11559{
11560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011561 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011562 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011563
Yue Ma7f44bbe2013-04-12 11:47:39 -070011564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11565 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11566
11567 if(NULL == pWdaParams)
11568 {
11569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11570 "%s: pWdaParams received NULL", __func__);
11571 VOS_ASSERT(0);
11572 return;
11573 }
11574
11575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011576 if (NULL == pWDA)
11577 {
11578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11579 "%s:pWDA is NULL", __func__);
11580 VOS_ASSERT(0);
11581 return ;
11582 }
11583
Yue Ma7f44bbe2013-04-12 11:47:39 -070011584 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11585
11586 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11587 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11588 {
11589 pWDA->wdaAmpSessionOn = VOS_FALSE;
11590 }
11591
11592 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11593 {
11594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11595 vos_mem_free(pWdaParams->wdaMsgParam);
11596 vos_mem_free(pWdaParams);
11597 }
11598
11599 return;
11600}
Jeff Johnson295189b2012-06-20 16:38:30 -070011601/*
11602 * FUNCTION: WDA_ProcessBtAmpEventReq
11603 * Request to WDI to Update with BT AMP events.
11604 */
11605VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11606 tSmeBtAmpEvent *pBtAmpEventParams)
11607{
11608 WDI_Status status = WDI_STATUS_SUCCESS ;
11609 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11610 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11611 sizeof(WDI_BtAmpEventParamsType)) ;
11612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 if(NULL == wdiBtAmpEventParam)
11616 {
11617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 VOS_ASSERT(0);
11620 return VOS_STATUS_E_NOMEM;
11621 }
11622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11623 if(NULL == pWdaParams)
11624 {
11625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011627 VOS_ASSERT(0);
11628 vos_mem_free(wdiBtAmpEventParam);
11629 return VOS_STATUS_E_NOMEM;
11630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11632 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011633 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11634 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 /* Store BT AMP event pointer, as this will be used for response */
11636 /* store Params pass it to WDI */
11637 pWdaParams->pWdaContext = pWDA;
11638 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11639 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011641 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011642 if(IS_WDI_STATUS_FAILURE(status))
11643 {
11644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11645 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11646 vos_mem_free(pWdaParams->wdaMsgParam) ;
11647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11648 vos_mem_free(pWdaParams) ;
11649 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11651 {
11652 pWDA->wdaAmpSessionOn = VOS_TRUE;
11653 }
11654 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011655}
11656
Jeff Johnson295189b2012-06-20 16:38:30 -070011657/*
11658 * FUNCTION: WDA_FTMCommandReqCallback
11659 * Handle FTM CMD response came from HAL
11660 * Route responce to HDD FTM
11661 */
11662void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11663 void *usrData)
11664{
11665 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011666 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11667 {
11668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011669 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 return;
11671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 /* Release Current FTM Command Request */
11673 vos_mem_free(pWDA->wdaFTMCmdReq);
11674 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 /* Post FTM Responce to HDD FTM */
11676 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 return;
11678}
Jeff Johnson295189b2012-06-20 16:38:30 -070011679/*
11680 * FUNCTION: WDA_ProcessFTMCommand
11681 * Send FTM command to WDI
11682 */
11683VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11684 tPttMsgbuffer *pPTTFtmCmd)
11685{
11686 WDI_Status status = WDI_STATUS_SUCCESS;
11687 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011688 ftmCMDReq = (WDI_FTMCommandReqType *)
11689 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11690 if(NULL == ftmCMDReq)
11691 {
11692 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11693 "WDA FTM Command buffer alloc fail");
11694 return VOS_STATUS_E_NOMEM;
11695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11697 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 /* Send command to WDI */
11700 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 return status;
11702}
Jeff Johnsone7245742012-09-05 17:12:55 -070011703#ifdef FEATURE_OEM_DATA_SUPPORT
11704/*
11705 * FUNCTION: WDA_StartOemDataReqCallback
11706 *
11707 */
11708void WDA_StartOemDataReqCallback(
11709 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11710 void* pUserData)
11711{
11712 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011714 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011715 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011716
Jeff Johnsone7245742012-09-05 17:12:55 -070011717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011718 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011719
11720 if(NULL == pWdaParams)
11721 {
11722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011723 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011724 VOS_ASSERT(0) ;
11725 return ;
11726 }
11727 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11728
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011729 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011730 {
11731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011732 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011733 VOS_ASSERT(0);
11734 return ;
11735 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011736
Jeff Johnsone7245742012-09-05 17:12:55 -070011737 /*
11738 * Allocate memory for response params sent to PE
11739 */
11740 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11741
11742 // Check if memory is allocated for OemdataMeasRsp Params.
11743 if(NULL == pOemDataRspParams)
11744 {
11745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "OEM DATA WDA callback alloc fail");
11747 VOS_ASSERT(0) ;
11748 return;
11749 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011750
Jeff Johnsone7245742012-09-05 17:12:55 -070011751 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11753 vos_mem_free(pWdaParams->wdaMsgParam);
11754 vos_mem_free(pWdaParams) ;
11755
Jeff Johnsone7245742012-09-05 17:12:55 -070011756 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011757 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011758 * Also, here success always means that we have atleast one BSSID.
11759 */
11760 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11761
11762 //enable Tx
11763 status = WDA_ResumeDataTx(pWDA);
11764 if(status != VOS_STATUS_SUCCESS)
11765 {
11766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11767 }
11768 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11769 return ;
11770}
11771/*
11772 * FUNCTION: WDA_ProcessStartOemDataReq
11773 * Send Start Oem Data Req to WDI
11774 */
11775VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11776 tStartOemDataReq *pOemDataReqParams)
11777{
11778 WDI_Status status = WDI_STATUS_SUCCESS;
11779 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011780 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011781
11782 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11783
11784 if(NULL == wdiOemDataReqParams)
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011788 VOS_ASSERT(0);
11789 return VOS_STATUS_E_NOMEM;
11790 }
11791
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011792 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11793 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11794 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11795 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011796
11797 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11798
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11800 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011801 {
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011804 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011805 vos_mem_free(pOemDataReqParams);
11806 VOS_ASSERT(0);
11807 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011808 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011809
Bernald44a1ae2013-01-09 08:30:39 -080011810 pWdaParams->pWdaContext = (void*)pWDA;
11811 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11812 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011813
11814 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11815 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011816
11817 if(IS_WDI_STATUS_FAILURE(status))
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11822 vos_mem_free(pWdaParams->wdaMsgParam);
11823 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011824 }
11825 return CONVERT_WDI2VOS_STATUS(status) ;
11826}
11827#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011828/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011829 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011830 *
11831 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011832void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011833{
11834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 if(NULL == pWdaParams)
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 VOS_ASSERT(0) ;
11842 return ;
11843 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011844
11845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11846 vos_mem_free(pWdaParams->wdaMsgParam);
11847 vos_mem_free(pWdaParams);
11848
11849 return ;
11850}
11851/*
11852 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11853 * Free memory.
11854 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11855 */
11856void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11857{
11858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11859
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11862
11863 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011864 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11866 "%s: pWdaParams received NULL", __func__);
11867 VOS_ASSERT(0);
11868 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011870
11871 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 {
11873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011874 vos_mem_free(pWdaParams->wdaMsgParam);
11875 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011877
11878 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011879}
Jeff Johnson295189b2012-06-20 16:38:30 -070011880#ifdef WLAN_FEATURE_GTK_OFFLOAD
11881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011882 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 *
11884 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011885void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011886 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011887{
11888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11889
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011891 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011892 if(NULL == pWdaParams)
11893 {
11894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11895 "%s: pWdaParams received NULL", __func__);
11896 VOS_ASSERT(0);
11897 return;
11898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011899
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 vos_mem_free(pWdaParams->wdaMsgParam) ;
11901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11902 vos_mem_free(pWdaParams) ;
11903
11904 //print a msg, nothing else to do
11905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011906 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011907
11908 return ;
11909}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011910/*
11911 * FUNCTION: WDA_GTKOffloadReqCallback
11912 * Free memory.
11913 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11914 */
11915void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11916{
11917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011918
Yue Ma7f44bbe2013-04-12 11:47:39 -070011919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11920 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11921
11922 if(NULL == pWdaParams)
11923 {
11924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11925 "%s: pWdaParams received NULL", __func__);
11926 VOS_ASSERT(0);
11927 return;
11928 }
11929
11930 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11931 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011932 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11933 sizeof(WDI_GtkOffloadReqMsg));
11934 vos_mem_zero(pWdaParams->wdaMsgParam,
11935 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11937 vos_mem_free(pWdaParams->wdaMsgParam);
11938 vos_mem_free(pWdaParams);
11939 }
11940
11941 return;
11942}
Jeff Johnson295189b2012-06-20 16:38:30 -070011943/*
11944 * FUNCTION: WDA_ProcessGTKOffloadReq
11945 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11946 * to broadcast traffic (sta mode).
11947 */
11948VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11949 tpSirGtkOffloadParams pGtkOffloadParams)
11950{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011951 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11953 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11954 sizeof(WDI_GtkOffloadReqMsg)) ;
11955 tWDA_ReqParams *pWdaParams ;
11956
11957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011958 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011959
11960 if(NULL == wdiGtkOffloadReqMsg)
11961 {
11962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 VOS_ASSERT(0);
11965 return VOS_STATUS_E_NOMEM;
11966 }
11967
11968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11969 if(NULL == pWdaParams)
11970 {
11971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 VOS_ASSERT(0);
11974 vos_mem_free(wdiGtkOffloadReqMsg);
11975 return VOS_STATUS_E_NOMEM;
11976 }
11977
11978 //
11979 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11980 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011981
11982 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011983 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011984
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11986 // Copy KCK
11987 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11988 // Copy KEK
11989 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11990 // Copy KeyReplayCounter
11991 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11992 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11993
Yue Ma7f44bbe2013-04-12 11:47:39 -070011994 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11995 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011996
Jeff Johnson295189b2012-06-20 16:38:30 -070011997
11998 /* Store Params pass it to WDI */
11999 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12000 pWdaParams->pWdaContext = pWDA;
12001 /* Store param pointer as passed in by caller */
12002 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12003
Yue Ma7f44bbe2013-04-12 11:47:39 -070012004 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012005
12006 if(IS_WDI_STATUS_FAILURE(status))
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12009 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012010 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12011 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12013 vos_mem_free(pWdaParams->wdaMsgParam);
12014 vos_mem_free(pWdaParams);
12015 }
12016
12017 return CONVERT_WDI2VOS_STATUS(status) ;
12018}
12019
12020/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012021 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012022 *
12023 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012024void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012025 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012026{
12027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12028 tWDA_CbContext *pWDA;
12029 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012030 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 vos_msg_t vosMsg;
12032
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012034 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012035
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012036 if(NULL == pWdaParams)
12037 {
12038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12039 "%s: pWdaParams received NULL", __func__);
12040 VOS_ASSERT(0);
12041 return;
12042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012043
Nirav Shah374de6e2014-02-13 16:40:01 +053012044 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12045 if(NULL == pGtkOffloadGetInfoRsp)
12046 {
12047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12048 "%s: vos_mem_malloc failed ", __func__);
12049 VOS_ASSERT(0);
12050 return;
12051 }
12052
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12054 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12055
12056 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12057 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12058
12059 /* Message Header */
12060 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012061 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012062
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012063 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12064 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12065 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12066 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12067 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012068
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012069 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12070 pwdiGtkOffloadGetInfoRsparams->bssId,
12071 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 /* VOS message wrapper */
12073 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12074 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12075 vosMsg.bodyval = 0;
12076
12077 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12078 {
12079 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012080 vos_mem_zero(pGtkOffloadGetInfoRsp,
12081 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12083 }
12084
12085 vos_mem_free(pWdaParams->wdaMsgParam) ;
12086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12087 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012088
12089 return;
12090}
12091/*
12092 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12093 * Free memory and send RSP back to SME.
12094 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12095 */
12096void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12097{
12098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12099 vos_msg_t vosMsg;
12100
12101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12102 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12103
12104 if(NULL == pWdaParams)
12105 {
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12107 "%s: pWdaParams received NULL", __func__);
12108 VOS_ASSERT(0);
12109 return;
12110 }
12111
12112 /* VOS message wrapper */
12113 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12114 vosMsg.bodyptr = NULL;
12115 vosMsg.bodyval = 0;
12116
12117 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12118 {
12119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12120 vos_mem_free(pWdaParams->wdaMsgParam);
12121 vos_mem_free(pWdaParams);
12122 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12123 }
12124
12125 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012126}
12127#endif
12128
12129/*
12130 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12131 * Request to WDI to set Tx Per Tracking configurations
12132 */
12133VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12134{
12135 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012136 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12138 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12139 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12140 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012142 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012143 if(NULL == pwdiSetTxPerTrackingReqParams)
12144 {
12145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 vos_mem_free(pTxPerTrackingParams);
12148 VOS_ASSERT(0);
12149 return VOS_STATUS_E_NOMEM;
12150 }
12151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12152 if(NULL == pWdaParams)
12153 {
12154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12157 vos_mem_free(pTxPerTrackingParams);
12158 VOS_ASSERT(0);
12159 return VOS_STATUS_E_NOMEM;
12160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12162 pTxPerTrackingParams->ucTxPerTrackingEnable;
12163 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12164 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12165 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12166 pTxPerTrackingParams->ucTxPerTrackingRatio;
12167 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12168 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012169 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12170 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012171 /* Store param pointer as passed in by caller */
12172 /* store Params pass it to WDI
12173 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12174 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12175 pWdaParams->pWdaContext = pWDA;
12176 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012177 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012178 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012179 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012180 {
12181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12182 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012183 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012184 vos_mem_free(pWdaParams->wdaMsgParam) ;
12185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12186 vos_mem_free(pWdaParams) ;
12187 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012188 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012189
12190}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012191/*
12192 * FUNCTION: WDA_HALDumpCmdCallback
12193 * Send the VOS complete .
12194 */
12195void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12196 void* pUserData)
12197{
12198 tANI_U8 *buffer = NULL;
12199 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012200 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012201 if(NULL == pWdaParams)
12202 {
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012204 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012205 VOS_ASSERT(0) ;
12206 return ;
12207 }
12208
12209 pWDA = pWdaParams->pWdaContext;
12210 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012211 if(wdiRspParams->usBufferLen > 0)
12212 {
12213 /*Copy the Resp data to UMAC supplied buffer*/
12214 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12215 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012216
12217 if (!pWdaParams->wdaHALDumpAsync)
12218 {/* Indicate VOSS about the start complete */
12219 vos_WDAComplete_cback(pWDA->pVosContext);
12220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12222 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012223 return ;
12224}
12225
Jeff Johnson295189b2012-06-20 16:38:30 -070012226/*
12227 * FUNCTION: WDA_ProcessHALDumpCmdReq
12228 * Send Dump command to WDI
12229 */
12230VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12231 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012232 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012233{
12234 WDI_Status status = WDI_STATUS_SUCCESS;
12235 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12236 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012237 tWDA_HalDumpReqParams *pWdaParams ;
12238
Jeff Johnson295189b2012-06-20 16:38:30 -070012239 pVosContextType pVosContext = NULL;
12240 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012241 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12242 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012243 if(pVosContext)
12244 {
12245 if (pVosContext->isLogpInProgress)
12246 {
12247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12248 "%s:LOGP in Progress. Ignore!!!", __func__);
12249 return VOS_STATUS_E_BUSY;
12250 }
12251 }
12252 else
12253 {
12254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12255 "%s: VOS Context Null", __func__);
12256 return VOS_STATUS_E_RESOURCES;
12257 }
12258
Siddharth Bhal68115602015-01-18 20:44:55 +053012259 if (NULL == pVosContext->pWDAContext)
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12262 "%s: WDA Context Null", __func__);
12263 return VOS_STATUS_E_RESOURCES;
12264 }
12265 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012266 if(NULL == pWdaParams)
12267 {
12268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012270 return VOS_STATUS_E_NOMEM;
12271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012272 /* Allocate memory WDI request structure*/
12273 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12274 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12275 if(NULL == wdiHALDumpCmdReqParam)
12276 {
12277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12278 "WDA HAL DUMP Command buffer alloc fail");
12279 vos_mem_free(pWdaParams);
12280 return WDI_STATUS_E_FAILURE;
12281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 /* Extract the arguments */
12284 wdiHalDumpCmdInfo->command = cmd;
12285 wdiHalDumpCmdInfo->argument1 = arg1;
12286 wdiHalDumpCmdInfo->argument2 = arg2;
12287 wdiHalDumpCmdInfo->argument3 = arg3;
12288 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012291 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012292
12293 /* Response message will be passed through the buffer */
12294 pWdaParams->wdaMsgParam = (void *)pBuffer;
12295
12296 /* store Params pass it to WDI */
12297 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012299 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12300 pWdaParams);
12301 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12302 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012304 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12305 WDA_DUMPCMD_WAIT_TIMEOUT );
12306 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012308 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12309 {
12310 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12311 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12312 }
12313 else
12314 {
12315 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12316 "%s: WDA_HALDUMP reporting other error",__func__);
12317 }
12318 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 }
12321 return status;
12322}
Jeff Johnson295189b2012-06-20 16:38:30 -070012323#ifdef WLAN_FEATURE_GTK_OFFLOAD
12324/*
12325 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12326 * Request to WDI to get GTK Offload Information
12327 */
12328VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12329 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12330{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012331 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12333 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12334 tWDA_ReqParams *pWdaParams ;
12335
12336 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 VOS_ASSERT(0);
12341 return VOS_STATUS_E_NOMEM;
12342 }
12343
12344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12345 if(NULL == pWdaParams)
12346 {
12347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012349 VOS_ASSERT(0);
12350 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12351 return VOS_STATUS_E_NOMEM;
12352 }
12353
Yue Ma7f44bbe2013-04-12 11:47:39 -070012354 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12355 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012356
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 /* Store Params pass it to WDI */
12358 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12359 pWdaParams->pWdaContext = pWDA;
12360 /* Store param pointer as passed in by caller */
12361 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12362
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012363 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012364 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012365
Yue Ma7f44bbe2013-04-12 11:47:39 -070012366 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012367
12368 if(IS_WDI_STATUS_FAILURE(status))
12369 {
12370 /* failure returned by WDI API */
12371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12372 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12374 vos_mem_free(pWdaParams) ;
12375 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12376 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12377 }
12378
12379 return CONVERT_WDI2VOS_STATUS(status) ;
12380}
12381#endif // WLAN_FEATURE_GTK_OFFLOAD
12382
12383/*
Yue Mab9c86f42013-08-14 15:59:08 -070012384 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12385 *
12386 */
12387VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12388 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12389{
12390 WDI_Status wdiStatus;
12391 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12392
12393 addPeriodicTxPtrnParams =
12394 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12395
12396 if (NULL == addPeriodicTxPtrnParams)
12397 {
12398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12399 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12400 __func__);
12401
12402 return VOS_STATUS_E_NOMEM;
12403 }
12404
12405 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12406 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12407
12408 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12409 addPeriodicTxPtrnParams->pUserData = pWDA;
12410
12411 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12412
12413 if (WDI_STATUS_PENDING == wdiStatus)
12414 {
12415 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12416 "Pending received for %s:%d", __func__, __LINE__ );
12417 }
12418 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12419 {
12420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12421 "Failure in %s:%d", __func__, __LINE__ );
12422 }
12423
12424 vos_mem_free(addPeriodicTxPtrnParams);
12425
12426 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12427}
12428
12429/*
12430 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12431 *
12432 */
12433VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12434 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12435{
12436 WDI_Status wdiStatus;
12437 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12438
12439 delPeriodicTxPtrnParams =
12440 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12441
12442 if (NULL == delPeriodicTxPtrnParams)
12443 {
12444 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12445 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12446 __func__);
12447
12448 return VOS_STATUS_E_NOMEM;
12449 }
12450
12451 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12452 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12453
12454 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12455 delPeriodicTxPtrnParams->pUserData = pWDA;
12456
12457 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12458
12459 if (WDI_STATUS_PENDING == wdiStatus)
12460 {
12461 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12462 "Pending received for %s:%d", __func__, __LINE__ );
12463 }
12464 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12465 {
12466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12467 "Failure in %s:%d", __func__, __LINE__ );
12468 }
12469
12470 vos_mem_free(delPeriodicTxPtrnParams);
12471
12472 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12473}
12474
Rajeev79dbe4c2013-10-05 11:03:42 +053012475#ifdef FEATURE_WLAN_BATCH_SCAN
12476/*
12477 * FUNCTION: WDA_ProcessStopBatchScanInd
12478 *
12479 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12480 *
12481 * PARAM:
12482 * pWDA: pointer to WDA context
12483 * pReq: pointer to stop batch scan request
12484 */
12485VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12486 tSirStopBatchScanInd *pReq)
12487{
12488 WDI_Status wdiStatus;
12489 WDI_StopBatchScanIndType wdiReq;
12490
12491 wdiReq.param = pReq->param;
12492
12493 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12494
12495 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12496 {
12497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12498 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12499 }
12500
12501 vos_mem_free(pReq);
12502
12503 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12504}
12505/*==========================================================================
12506 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12507
12508 DESCRIPTION
12509 API to pull batch scan result from FW
12510
12511 PARAMETERS
12512 pWDA: Pointer to WDA context
12513 pGetBatchScanReq: Pointer to get batch scan result indication
12514
12515 RETURN VALUE
12516 NONE
12517
12518===========================================================================*/
12519VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12520 tSirTriggerBatchScanResultInd *pReq)
12521{
12522 WDI_Status wdiStatus;
12523 WDI_TriggerBatchScanResultIndType wdiReq;
12524
12525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12526 "------> %s " ,__func__);
12527
12528 wdiReq.param = pReq->param;
12529
12530 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12531
12532 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12533 {
12534 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12535 "Trigger batch scan result ind failed %s:%d",
12536 __func__, wdiStatus);
12537 }
12538
12539 vos_mem_free(pReq);
12540
12541 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12542}
12543
12544/*==========================================================================
12545 FUNCTION WDA_SetBatchScanRespCallback
12546
12547 DESCRIPTION
12548 API to process set batch scan response from FW
12549
12550 PARAMETERS
12551 pRsp: Pointer to set batch scan response
12552 pUserData: Pointer to user data
12553
12554 RETURN VALUE
12555 NONE
12556
12557===========================================================================*/
12558void WDA_SetBatchScanRespCallback
12559(
12560 WDI_SetBatchScanRspType *pRsp,
12561 void* pUserData
12562)
12563{
12564 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12565 tpAniSirGlobal pMac;
12566 void *pCallbackContext;
12567 tWDA_CbContext *pWDA = NULL ;
12568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12569
12570
12571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12572 "<------ %s " ,__func__);
12573 if (NULL == pWdaParams)
12574 {
12575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12576 "%s: pWdaParams received NULL", __func__);
12577 VOS_ASSERT(0) ;
12578 return ;
12579 }
12580
12581 /*extract WDA context*/
12582 pWDA = pWdaParams->pWdaContext;
12583 if (NULL == pWDA)
12584 {
12585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12586 "%s:pWDA is NULL can't invole HDD callback",
12587 __func__);
12588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12589 vos_mem_free(pWdaParams->wdaMsgParam);
12590 vos_mem_free(pWdaParams);
12591 VOS_ASSERT(0);
12592 return;
12593 }
12594
12595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12596 vos_mem_free(pWdaParams->wdaMsgParam);
12597 vos_mem_free(pWdaParams);
12598
12599 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12600 if (NULL == pMac)
12601 {
12602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12603 "%s:pMac is NULL", __func__);
12604 VOS_ASSERT(0);
12605 return;
12606 }
12607
12608 pHddSetBatchScanRsp =
12609 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12610 if (NULL == pHddSetBatchScanRsp)
12611 {
12612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12613 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12614 VOS_ASSERT(0);
12615 return;
12616 }
12617
12618 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12619
12620 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12621 /*call hdd callback with set batch scan response data*/
12622 if(pMac->pmc.setBatchScanReqCallback)
12623 {
12624 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12625 }
12626 else
12627 {
12628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12629 "%s:HDD callback is null", __func__);
12630 VOS_ASSERT(0);
12631 }
12632
12633 vos_mem_free(pHddSetBatchScanRsp);
12634 return ;
12635}
12636
12637/*==========================================================================
12638 FUNCTION WDA_ProcessSetBatchScanReq
12639
12640 DESCRIPTION
12641 API to send set batch scan request to WDI
12642
12643 PARAMETERS
12644 pWDA: Pointer to WDA context
12645 pSetBatchScanReq: Pointer to set batch scan req
12646
12647 RETURN VALUE
12648 NONE
12649
12650===========================================================================*/
12651VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12652 tSirSetBatchScanReq *pSetBatchScanReq)
12653{
12654 WDI_Status status;
12655 tWDA_ReqParams *pWdaParams ;
12656 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12657
12658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12659 "------> %s " ,__func__);
12660
12661 pWdiSetBatchScanReq =
12662 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12663 if (NULL == pWdiSetBatchScanReq)
12664 {
12665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12666 "%s: VOS MEM Alloc Failure", __func__);
12667 vos_mem_free(pSetBatchScanReq);
12668 VOS_ASSERT(0);
12669 return VOS_STATUS_E_NOMEM;
12670 }
12671
12672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12673 if (NULL == pWdaParams)
12674 {
12675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12676 "%s: VOS MEM Alloc Failure", __func__);
12677 VOS_ASSERT(0);
12678 vos_mem_free(pSetBatchScanReq);
12679 vos_mem_free(pWdiSetBatchScanReq);
12680 return VOS_STATUS_E_NOMEM;
12681 }
12682
12683 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12684 pWdiSetBatchScanReq->numberOfScansToBatch =
12685 pSetBatchScanReq->numberOfScansToBatch;
12686 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12687 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12688 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12689
12690 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12691 pWdaParams->pWdaContext = pWDA;
12692 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12693
12694 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12695 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12696 if (IS_WDI_STATUS_FAILURE(status))
12697 {
12698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12699 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12701 vos_mem_free(pWdaParams->wdaMsgParam);
12702 vos_mem_free(pWdaParams);
12703 }
12704 return CONVERT_WDI2VOS_STATUS(status);
12705}
12706
12707#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012708/*
12709 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12710 *
12711 * DESCRIPTION: This function sends start/update OBSS scan
12712 * inidcation message to WDI
12713 *
12714 * PARAM:
12715 * pWDA: pointer to WDA context
12716 * pReq: pointer to start OBSS scan request
12717 */
12718VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12719 tSirHT40OBSSScanInd *pReq)
12720{
12721 WDI_Status status;
12722 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12723 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012724
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12726 "------> %s " ,__func__);
12727 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12728 wdiOBSSScanParams.pUserData = pWDA;
12729
12730 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12731 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12732 pWdiOBSSScanInd->scanType = pReq->scanType;
12733 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12734 pReq->OBSSScanActiveDwellTime;
12735 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12736 pReq->OBSSScanPassiveDwellTime;
12737 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12738 pReq->BSSChannelWidthTriggerScanInterval;
12739 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12740 pReq->BSSWidthChannelTransitionDelayFactor;
12741 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12742 pReq->OBSSScanActiveTotalPerChannel;
12743 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12744 pReq->OBSSScanPassiveTotalPerChannel;
12745 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12746 pReq->OBSSScanActivityThreshold;
12747 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12748 vos_mem_copy(pWdiOBSSScanInd->channels,
12749 pReq->channels,
12750 pReq->channelCount);
12751 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12752 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12753 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12754 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12755 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12756
12757 vos_mem_copy(pWdiOBSSScanInd->ieField,
12758 pReq->ieField,
12759 pReq->ieFieldLen);
12760
12761 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12762 if (WDI_STATUS_PENDING == status)
12763 {
12764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12765 "Pending received for %s:%d ",__func__,__LINE__ );
12766 }
12767 else if (WDI_STATUS_SUCCESS_SYNC != status)
12768 {
12769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12770 "Failure in %s:%d ",__func__,__LINE__ );
12771 }
12772 return CONVERT_WDI2VOS_STATUS(status) ;
12773}
12774/*
12775 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12776 *
12777 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12778 *
12779 * PARAM:
12780 * pWDA: pointer to WDA context
12781 * pReq: pointer to stop batch scan request
12782 */
12783VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12784 tANI_U8 *bssIdx)
12785{
12786 WDI_Status status;
12787
12788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12789 "------> %s " ,__func__);
12790
12791 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12792 if (WDI_STATUS_PENDING == status)
12793 {
12794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12795 "Pending received for %s:%d ",__func__,__LINE__ );
12796 }
12797 else if (WDI_STATUS_SUCCESS_SYNC != status)
12798 {
12799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12800 "Failure in %s:%d ",__func__,__LINE__ );
12801 }
12802 return CONVERT_WDI2VOS_STATUS(status) ;
12803}
Yue Mab9c86f42013-08-14 15:59:08 -070012804/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012805 * FUNCTION: WDA_ProcessRateUpdateInd
12806 *
12807 */
12808VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12809 tSirRateUpdateInd *pRateUpdateParams)
12810{
12811 WDI_Status wdiStatus;
12812 WDI_RateUpdateIndParams rateUpdateParams;
12813
12814 vos_mem_copy(rateUpdateParams.bssid,
12815 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12816
12817 rateUpdateParams.ucastDataRateTxFlag =
12818 pRateUpdateParams->ucastDataRateTxFlag;
12819 rateUpdateParams.reliableMcastDataRateTxFlag =
12820 pRateUpdateParams->reliableMcastDataRateTxFlag;
12821 rateUpdateParams.mcastDataRate24GHzTxFlag =
12822 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12823 rateUpdateParams.mcastDataRate5GHzTxFlag =
12824 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12825
12826 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12827 rateUpdateParams.reliableMcastDataRate =
12828 pRateUpdateParams->reliableMcastDataRate;
12829 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12830 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12831
12832 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12833 rateUpdateParams.pUserData = pWDA;
12834
12835 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12836
12837 if (WDI_STATUS_PENDING == wdiStatus)
12838 {
12839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12840 "Pending received for %s:%d", __func__, __LINE__ );
12841 }
12842 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12843 {
12844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12845 "Failure in %s:%d", __func__, __LINE__ );
12846 }
12847
12848 vos_mem_free(pRateUpdateParams);
12849
12850 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12851}
12852
12853/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 * -------------------------------------------------------------------------
12855 * DATA interface with WDI for Mgmt Frames
12856 * -------------------------------------------------------------------------
12857 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012858/*
12859 * FUNCTION: WDA_TxComplete
12860 * Callback function for the WDA_TxPacket
12861 */
12862VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12863 VOS_STATUS status )
12864{
12865
12866 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12867 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012868 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012869
Mihir Shete63341222015-03-24 15:39:18 +053012870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12871
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 if(NULL == wdaContext)
12873 {
12874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12875 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012876 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012877 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012878 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 return VOS_STATUS_E_FAILURE;
12880 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012881
12882 /*Check if frame was timed out or not*/
12883 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12884 (v_PVOID_t)&uUserData);
12885
12886 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12887 {
12888 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012889 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12890 "%s: MGMT Frame Tx timed out",
12891 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012892 vos_pkt_return_packet(pData);
12893 return VOS_STATUS_SUCCESS;
12894 }
12895
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12897 if( NULL!=wdaContext->pTxCbFunc)
12898 {
12899 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012900 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 {
12902 wdaContext->pTxCbFunc(pMac, pData);
12903 }
12904 else
12905 {
12906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012907 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012908 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 //Return from here since we reaching here because the packet already timeout
12910 return status;
12911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012912 }
12913
12914 /*
12915 * Trigger the event to bring the HAL TL Tx complete function to come
12916 * out of wait
12917 * Let the coe above to complete the packet first. When this event is set,
12918 * the thread waiting for the event may run and set Vospacket_freed causing the original
12919 * packet not being freed.
12920 */
12921 status = vos_event_set(&wdaContext->txFrameEvent);
12922 if(!VOS_IS_STATUS_SUCCESS(status))
12923 {
12924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012925 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012926 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012927 return status;
12928}
Jeff Johnson295189b2012-06-20 16:38:30 -070012929/*
12930 * FUNCTION: WDA_TxPacket
12931 * Forward TX management frame to WDI
12932 */
12933VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12934 void *pFrmBuf,
12935 tANI_U16 frmLen,
12936 eFrameType frmType,
12937 eFrameTxDir txDir,
12938 tANI_U8 tid,
12939 pWDATxRxCompFunc pCompFunc,
12940 void *pData,
12941 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012942 tANI_U32 txFlag,
12943 tANI_U32 txBdToken
12944 )
Jeff Johnson295189b2012-06-20 16:38:30 -070012945{
12946 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12947 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12948 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12949 tANI_U8 eventIdx = 0;
12950 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12951 tpAniSirGlobal pMac;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012952
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 if((NULL == pWDA)||(NULL == pFrmBuf))
12954 {
12955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012956 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012957 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012958 VOS_ASSERT(0);
12959 return VOS_STATUS_E_FAILURE;
12960 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012961
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012963 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
12964 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12966 if(NULL == pMac)
12967 {
12968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012969 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012970 VOS_ASSERT(0);
12971 return VOS_STATUS_E_FAILURE;
12972 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012973
Jeff Johnson295189b2012-06-20 16:38:30 -070012974 /* store the call back function in WDA context */
12975 pWDA->pTxCbFunc = pCompFunc;
12976 /* store the call back for the function of ackTxComplete */
12977 if( pAckTxComp )
12978 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012979 if( NULL != pWDA->pAckTxCbFunc )
12980 {
12981 /* Already TxComp is active no need to active again */
12982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012983 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012984 pWDA->pAckTxCbFunc( pMac, 0);
12985 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012986
Jeff Johnsone7245742012-09-05 17:12:55 -070012987 if( VOS_STATUS_SUCCESS !=
12988 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12989 {
12990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12991 "Tx Complete timeout Timer Stop Failed ");
12992 }
12993 else
12994 {
12995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012996 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012997 }
12998 }
12999
13000 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13001 pWDA->pAckTxCbFunc = pAckTxComp;
13002 if( VOS_STATUS_SUCCESS !=
13003 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13004 {
13005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13006 "Tx Complete Timer Start Failed ");
13007 pWDA->pAckTxCbFunc = NULL;
13008 return eHAL_STATUS_FAILURE;
13009 }
13010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 /* Reset the event to be not signalled */
13012 status = vos_event_reset(&pWDA->txFrameEvent);
13013 if(!VOS_IS_STATUS_SUCCESS(status))
13014 {
13015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013016 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13018 if( pAckTxComp )
13019 {
13020 pWDA->pAckTxCbFunc = NULL;
13021 if( VOS_STATUS_SUCCESS !=
13022 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13023 {
13024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13025 "Tx Complete timeout Timer Stop Failed ");
13026 }
13027 }
13028 return VOS_STATUS_E_FAILURE;
13029 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013030
13031 /* If Peer Sta mask is set don't overwrite to self sta */
13032 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013033 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013034 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013036 else
13037 {
Ganesh K08bce952012-12-13 15:04:41 -080013038 /* Get system role, use the self station if in unknown role or STA role */
13039 systemRole = wdaGetGlobalSystemRole(pMac);
13040 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13041 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013042#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013043 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013044#endif
Ganesh K08bce952012-12-13 15:04:41 -080013045 ))
13046 {
13047 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13048 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013050
Jeff Johnsone7245742012-09-05 17:12:55 -070013051 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13052 disassoc frame reaches the HW, HAL has already deleted the peer station */
13053 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013055 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013056 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 /*Send Probe request frames on self sta idx*/
13059 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 /* Since we donot want probe responses to be retried, send probe responses
13062 through the NO_ACK queues */
13063 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13064 {
13065 //probe response is sent out using self station and no retries options.
13066 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13067 }
13068 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13069 {
13070 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13071 }
13072 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013073 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013074
13075 /*Set frame tag to 0
13076 We will use the WDA user data in order to tag a frame as expired*/
13077 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13078 (v_PVOID_t)0);
13079
13080
13081 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013082 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13083 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 {
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013086 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013087 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013088 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 -070013089 if( pAckTxComp )
13090 {
13091 pWDA->pAckTxCbFunc = NULL;
13092 if( VOS_STATUS_SUCCESS !=
13093 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13094 {
13095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13096 "Tx Complete timeout Timer Stop Failed ");
13097 }
13098 }
13099 return VOS_STATUS_E_FAILURE;
13100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 /*
13102 * Wait for the event to be set by the TL, to get the response of TX
13103 * complete, this event should be set by the Callback function called by TL
13104 */
13105 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13106 &eventIdx);
13107 if(!VOS_IS_STATUS_SUCCESS(status))
13108 {
13109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13110 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013111 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013112
13113 /*Tag Frame as timed out for later deletion*/
13114 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13115 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013116 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13117 after the packet gets completed(packet freed once)*/
13118
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013119 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013120 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013121
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 /* check whether the packet was freed already,so need not free again when
13123 * TL calls the WDA_Txcomplete routine
13124 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013125 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13126 /*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 -070013127 {
13128 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013129 } */
13130
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 if( pAckTxComp )
13132 {
13133 pWDA->pAckTxCbFunc = NULL;
13134 if( VOS_STATUS_SUCCESS !=
13135 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13136 {
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13138 "Tx Complete timeout Timer Stop Failed ");
13139 }
13140 }
13141 status = VOS_STATUS_E_FAILURE;
13142 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013143#ifdef WLAN_DUMP_MGMTFRAMES
13144 if (VOS_IS_STATUS_SUCCESS(status))
13145 {
13146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13147 "%s() TX packet : SubType %d", __func__,pFc->subType);
13148 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13149 pData, frmLen);
13150 }
13151#endif
13152
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013153 if (VOS_IS_STATUS_SUCCESS(status))
13154 {
13155 if (pMac->fEnableDebugLog & 0x1)
13156 {
13157 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13158 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13159 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13160 {
13161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13162 pFc->type, pFc->subType);
13163 }
13164 }
13165 }
13166
13167
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 return status;
13169}
Jeff Johnson295189b2012-06-20 16:38:30 -070013170/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013171 * FUNCTION: WDA_ProcessDHCPStartInd
13172 * Forward DHCP Start to WDI
13173 */
13174static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13175 tAniDHCPInd *dhcpStartInd)
13176{
13177 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013178 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013179
c_hpothu0b0cab72014-02-13 21:52:40 +053013180 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13181 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013182 sizeof(tSirMacAddr));
13183
c_hpothu0b0cab72014-02-13 21:52:40 +053013184 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013185
c_hpothu0b0cab72014-02-13 21:52:40 +053013186 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013187 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13189 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013190 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013191 else if (WDI_STATUS_SUCCESS_SYNC != status)
13192 {
13193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13194 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13195 }
13196
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013197 vos_mem_free(dhcpStartInd);
13198 return CONVERT_WDI2VOS_STATUS(status) ;
13199}
13200
13201 /*
13202 * FUNCTION: WDA_ProcessDHCPStopInd
13203 * Forward DHCP Stop to WDI
13204 */
13205 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13206 tAniDHCPInd *dhcpStopInd)
13207 {
13208 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013209 WDI_DHCPInd wdiDHCPInd;
13210
13211 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13212 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13213
13214 status = WDI_dhcpStopInd(&wdiDHCPInd);
13215
13216 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013217 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13219 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013220 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013221 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013222 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13224 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013225 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013226
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013227 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013228
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013229 return CONVERT_WDI2VOS_STATUS(status) ;
13230 }
13231
13232/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013233 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13234 *
13235 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13236 *
13237 * PARAM:
13238 * pWDA: pointer to WDA context
13239 * pReq: pointer to stop batch scan request
13240 */
13241VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13242 tpSpoofMacAddrReqParams pReq)
13243{
13244 WDI_Status wdiStatus;
13245 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13246 tWDA_ReqParams *pWdaParams;
13247
13248 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13249 sizeof(WDI_SpoofMacAddrInfoType));
13250 if(NULL == WDI_SpoofMacAddrInfoParams) {
13251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13252 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13253 VOS_ASSERT(0);
13254 return VOS_STATUS_E_NOMEM;
13255 }
13256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13257 if(NULL == pWdaParams) {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13259 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013260 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013261 VOS_ASSERT(0);
13262 return VOS_STATUS_E_NOMEM;
13263 }
13264
13265 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13266 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13267
13268 pWdaParams->pWdaContext = pWDA;
13269 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013270 pWdaParams->wdaMsgParam = (void *)pReq;
13271
13272 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13273 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13274
Siddharth Bhal171788a2014-09-29 21:02:40 +053013275 /* store Params pass it to WDI */
13276 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13277
13278 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013279 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13280 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013281
13282 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13283 {
13284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13285 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13287 vos_mem_free(pWdaParams->wdaMsgParam);
13288 vos_mem_free(pWdaParams);
13289 }
13290
13291 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13292}
13293
13294/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 * FUNCTION: WDA_McProcessMsg
13296 * Trigger DAL-AL to start CFG download
13297 */
13298VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13299{
13300 VOS_STATUS status = VOS_STATUS_SUCCESS;
13301 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013302 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 {
13304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013305 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 VOS_ASSERT(0);
13307 return VOS_STATUS_E_FAILURE;
13308 }
13309
13310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013311 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013312
13313 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13314 if(NULL == pWDA )
13315 {
13316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013317 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013319 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013320 return VOS_STATUS_E_FAILURE;
13321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013322 /* Process all the WDA messages.. */
13323 switch( pMsg->type )
13324 {
13325 case WNI_CFG_DNLD_REQ:
13326 {
13327 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 /* call WDA complete event if config download success */
13329 if( VOS_IS_STATUS_SUCCESS(status) )
13330 {
13331 vos_WDAComplete_cback(pVosContext);
13332 }
13333 else
13334 {
13335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13336 "WDA Config Download failure" );
13337 }
13338 break ;
13339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 /*
13341 * Init SCAN request from PE, convert it into DAL format
13342 * and send it to DAL
13343 */
13344 case WDA_INIT_SCAN_REQ:
13345 {
13346 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13347 break ;
13348 }
13349 /* start SCAN request from PE */
13350 case WDA_START_SCAN_REQ:
13351 {
13352 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13353 break ;
13354 }
13355 /* end SCAN request from PE */
13356 case WDA_END_SCAN_REQ:
13357 {
13358 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13359 break ;
13360 }
13361 /* end SCAN request from PE */
13362 case WDA_FINISH_SCAN_REQ:
13363 {
13364 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13365 break ;
13366 }
13367 /* join request from PE */
13368 case WDA_CHNL_SWITCH_REQ:
13369 {
13370 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13371 {
13372 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13373 }
13374 else
13375 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013376 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13377 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13378 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13379 {
13380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13381 "call ProcessChannelSwitchReq_V1" );
13382 WDA_ProcessChannelSwitchReq_V1(pWDA,
13383 (tSwitchChannelParams*)pMsg->bodyptr) ;
13384 }
13385 else
13386 {
13387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13388 "call ProcessChannelSwitchReq" );
13389 WDA_ProcessChannelSwitchReq(pWDA,
13390 (tSwitchChannelParams*)pMsg->bodyptr) ;
13391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013392 }
13393 break ;
13394 }
13395 /* ADD BSS request from PE */
13396 case WDA_ADD_BSS_REQ:
13397 {
13398 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13399 break ;
13400 }
13401 case WDA_ADD_STA_REQ:
13402 {
13403 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13404 break ;
13405 }
13406 case WDA_DELETE_BSS_REQ:
13407 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13409 break ;
13410 }
13411 case WDA_DELETE_STA_REQ:
13412 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13414 break ;
13415 }
13416 case WDA_CONFIG_PARAM_UPDATE_REQ:
13417 {
13418 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13419 break ;
13420 }
13421 case WDA_SET_BSSKEY_REQ:
13422 {
13423 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13424 break ;
13425 }
13426 case WDA_SET_STAKEY_REQ:
13427 {
13428 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13429 break ;
13430 }
13431 case WDA_SET_STA_BCASTKEY_REQ:
13432 {
13433 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13434 break ;
13435 }
13436 case WDA_REMOVE_BSSKEY_REQ:
13437 {
13438 WDA_ProcessRemoveBssKeyReq(pWDA,
13439 (tRemoveBssKeyParams *)pMsg->bodyptr);
13440 break ;
13441 }
13442 case WDA_REMOVE_STAKEY_REQ:
13443 {
13444 WDA_ProcessRemoveStaKeyReq(pWDA,
13445 (tRemoveStaKeyParams *)pMsg->bodyptr);
13446 break ;
13447 }
13448 case WDA_REMOVE_STA_BCASTKEY_REQ:
13449 {
13450 /* TODO: currently UMAC is not sending this request, Add the code for
13451 handling this request when UMAC supports */
13452 break;
13453 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013454#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 case WDA_TSM_STATS_REQ:
13456 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013457 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013458 break;
13459 }
13460#endif
13461 case WDA_UPDATE_EDCA_PROFILE_IND:
13462 {
13463 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13464 break;
13465 }
13466 case WDA_ADD_TS_REQ:
13467 {
13468 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13469 break;
13470 }
13471 case WDA_DEL_TS_REQ:
13472 {
13473 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13474 break;
13475 }
13476 case WDA_ADDBA_REQ:
13477 {
13478 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13479 break;
13480 }
13481 case WDA_DELBA_IND:
13482 {
13483 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13484 break;
13485 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013486 case WDA_UPDATE_CHAN_LIST_REQ:
13487 {
13488 WDA_ProcessUpdateChannelList(pWDA,
13489 (tSirUpdateChanList *)pMsg->bodyptr);
13490 break;
13491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 case WDA_SET_LINK_STATE:
13493 {
13494 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13495 break;
13496 }
13497 case WDA_GET_STATISTICS_REQ:
13498 {
13499 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13500 break;
13501 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013502#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013503 case WDA_GET_ROAM_RSSI_REQ:
13504 {
13505 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13506 break;
13507 }
13508#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 case WDA_PWR_SAVE_CFG:
13510 {
13511 if(pWDA->wdaState == WDA_READY_STATE)
13512 {
13513 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13514 }
13515 else
13516 {
13517 if(NULL != pMsg->bodyptr)
13518 {
13519 vos_mem_free(pMsg->bodyptr);
13520 }
13521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13522 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13523 }
13524 break;
13525 }
13526 case WDA_ENTER_IMPS_REQ:
13527 {
13528 if(pWDA->wdaState == WDA_READY_STATE)
13529 {
13530 WDA_ProcessEnterImpsReq(pWDA);
13531 }
13532 else
13533 {
13534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13535 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13536 }
13537 break;
13538 }
13539 case WDA_EXIT_IMPS_REQ:
13540 {
13541 if(pWDA->wdaState == WDA_READY_STATE)
13542 {
13543 WDA_ProcessExitImpsReq(pWDA);
13544 }
13545 else
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13548 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13549 }
13550 break;
13551 }
13552 case WDA_ENTER_BMPS_REQ:
13553 {
13554 if(pWDA->wdaState == WDA_READY_STATE)
13555 {
13556 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13557 }
13558 else
13559 {
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13561 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13562 }
13563 break;
13564 }
13565 case WDA_EXIT_BMPS_REQ:
13566 {
13567 if(pWDA->wdaState == WDA_READY_STATE)
13568 {
13569 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13570 }
13571 else
13572 {
13573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13574 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13575 }
13576 break;
13577 }
13578 case WDA_ENTER_UAPSD_REQ:
13579 {
13580 if(pWDA->wdaState == WDA_READY_STATE)
13581 {
13582 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13583 }
13584 else
13585 {
13586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13587 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13588 }
13589 break;
13590 }
13591 case WDA_EXIT_UAPSD_REQ:
13592 {
13593 if(pWDA->wdaState == WDA_READY_STATE)
13594 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013595 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013596 }
13597 else
13598 {
13599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13600 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13601 }
13602 break;
13603 }
13604 case WDA_UPDATE_UAPSD_IND:
13605 {
13606 if(pWDA->wdaState == WDA_READY_STATE)
13607 {
13608 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13609 }
13610 else
13611 {
13612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13613 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13614 }
13615 break;
13616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013617 case WDA_REGISTER_PE_CALLBACK :
13618 {
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13620 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13621 /*TODO: store the PE callback */
13622 /* Do Nothing? MSG Body should be freed at here */
13623 if(NULL != pMsg->bodyptr)
13624 {
13625 vos_mem_free(pMsg->bodyptr);
13626 }
13627 break;
13628 }
13629 case WDA_SYS_READY_IND :
13630 {
13631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13632 "Handling msg type WDA_SYS_READY_IND " );
13633 pWDA->wdaState = WDA_READY_STATE;
13634 if(NULL != pMsg->bodyptr)
13635 {
13636 vos_mem_free(pMsg->bodyptr);
13637 }
13638 break;
13639 }
13640 case WDA_BEACON_FILTER_IND :
13641 {
13642 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13643 break;
13644 }
13645 case WDA_BTC_SET_CFG:
13646 {
13647 /*TODO: handle this while dealing with BTC */
13648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13649 "Handling msg type WDA_BTC_SET_CFG " );
13650 /* Do Nothing? MSG Body should be freed at here */
13651 if(NULL != pMsg->bodyptr)
13652 {
13653 vos_mem_free(pMsg->bodyptr);
13654 }
13655 break;
13656 }
13657 case WDA_SIGNAL_BT_EVENT:
13658 {
13659 /*TODO: handle this while dealing with BTC */
13660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13661 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13662 /* Do Nothing? MSG Body should be freed at here */
13663 if(NULL != pMsg->bodyptr)
13664 {
13665 vos_mem_free(pMsg->bodyptr);
13666 }
13667 break;
13668 }
13669 case WDA_CFG_RXP_FILTER_REQ:
13670 {
13671 WDA_ProcessConfigureRxpFilterReq(pWDA,
13672 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13673 break;
13674 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013675 case WDA_MGMT_LOGGING_INIT_REQ:
13676 {
13677 WDA_ProcessMgmtLoggingInitReq(pWDA,
13678 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
13679 break;
13680 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013681 case WDA_GET_FRAME_LOG_REQ:
13682 {
13683 WDA_ProcessGetFrameLogReq(pWDA,
13684 (tAniGetFrameLogReq *)pMsg->bodyptr);
13685 break;
13686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013687 case WDA_SET_HOST_OFFLOAD:
13688 {
13689 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13690 break;
13691 }
13692 case WDA_SET_KEEP_ALIVE:
13693 {
13694 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13695 break;
13696 }
13697#ifdef WLAN_NS_OFFLOAD
13698 case WDA_SET_NS_OFFLOAD:
13699 {
13700 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13701 break;
13702 }
13703#endif //WLAN_NS_OFFLOAD
13704 case WDA_ADD_STA_SELF_REQ:
13705 {
13706 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13707 break;
13708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013709 case WDA_DEL_STA_SELF_REQ:
13710 {
13711 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13712 break;
13713 }
13714 case WDA_WOWL_ADD_BCAST_PTRN:
13715 {
13716 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13717 break;
13718 }
13719 case WDA_WOWL_DEL_BCAST_PTRN:
13720 {
13721 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13722 break;
13723 }
13724 case WDA_WOWL_ENTER_REQ:
13725 {
13726 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13727 break;
13728 }
13729 case WDA_WOWL_EXIT_REQ:
13730 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013731 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 break;
13733 }
13734 case WDA_TL_FLUSH_AC_REQ:
13735 {
13736 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13737 break;
13738 }
13739 case WDA_SIGNAL_BTAMP_EVENT:
13740 {
13741 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13742 break;
13743 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013744 case WDA_FW_STATS_GET_REQ:
13745 {
13746 WDA_ProcessFWStatsGetReq(pWDA,
13747 (tSirFWStatsGetReq *)pMsg->bodyptr);
13748 break;
13749 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013750#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13751 case WDA_LINK_LAYER_STATS_SET_REQ:
13752 {
13753 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13754 break;
13755 }
13756 case WDA_LINK_LAYER_STATS_GET_REQ:
13757 {
13758 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13759 break;
13760 }
13761 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13762 {
13763 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13764 break;
13765 }
13766#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013767#ifdef WLAN_FEATURE_EXTSCAN
13768 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13769 {
13770 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13771 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13772 break;
13773 }
13774 case WDA_EXTSCAN_START_REQ:
13775 {
13776 WDA_ProcessEXTScanStartReq(pWDA,
13777 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13778 break;
13779 }
13780 case WDA_EXTSCAN_STOP_REQ:
13781 {
13782 WDA_ProcessEXTScanStopReq(pWDA,
13783 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13784 break;
13785 }
13786 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13787 {
13788 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13789 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13790 break;
13791 }
13792 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13793 {
13794 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13795 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13796 break;
13797 }
13798 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13799 {
13800 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13801 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13802 break;
13803 }
13804 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13805 {
13806 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13807 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13808 break;
13809 }
13810 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13811 {
13812 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13813 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13814 break;
13815 }
13816#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013817#ifdef WDA_UT
13818 case WDA_WDI_EVENT_MSG:
13819 {
13820 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13821 break ;
13822 }
13823#endif
13824 case WDA_UPDATE_BEACON_IND:
13825 {
13826 WDA_ProcessUpdateBeaconParams(pWDA,
13827 (tUpdateBeaconParams *)pMsg->bodyptr);
13828 break;
13829 }
13830 case WDA_SEND_BEACON_REQ:
13831 {
13832 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13833 break;
13834 }
13835 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13836 {
13837 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13838 (tSendProbeRespParams *)pMsg->bodyptr);
13839 break;
13840 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013841#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013842 case WDA_SET_MAX_TX_POWER_REQ:
13843 {
13844 WDA_ProcessSetMaxTxPowerReq(pWDA,
13845 (tMaxTxPowerParams *)pMsg->bodyptr);
13846 break;
13847 }
13848#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013849 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13850 {
13851 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13852 pMsg->bodyptr);
13853 break;
13854 }
schang86c22c42013-03-13 18:41:24 -070013855 case WDA_SET_TX_POWER_REQ:
13856 {
13857 WDA_ProcessSetTxPowerReq(pWDA,
13858 (tSirSetTxPowerReq *)pMsg->bodyptr);
13859 break;
13860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 case WDA_SET_P2P_GO_NOA_REQ:
13862 {
13863 WDA_ProcessSetP2PGONOAReq(pWDA,
13864 (tP2pPsParams *)pMsg->bodyptr);
13865 break;
13866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013867 /* timer related messages */
13868 case WDA_TIMER_BA_ACTIVITY_REQ:
13869 {
13870 WDA_BaCheckActivity(pWDA) ;
13871 break ;
13872 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013873
13874 /* timer related messages */
13875 case WDA_TIMER_TRAFFIC_STATS_IND:
13876 {
13877 WDA_TimerTrafficStatsInd(pWDA);
13878 break;
13879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013880#ifdef WLAN_FEATURE_VOWIFI_11R
13881 case WDA_AGGR_QOS_REQ:
13882 {
13883 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13884 break;
13885 }
13886#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013887 case WDA_FTM_CMD_REQ:
13888 {
13889 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13890 break ;
13891 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013892#ifdef FEATURE_OEM_DATA_SUPPORT
13893 case WDA_START_OEM_DATA_REQ:
13894 {
13895 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13896 break;
13897 }
13898#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 /* Tx Complete Time out Indication */
13900 case WDA_TX_COMPLETE_TIMEOUT_IND:
13901 {
13902 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13903 break;
13904 }
13905 case WDA_WLAN_SUSPEND_IND:
13906 {
13907 WDA_ProcessWlanSuspendInd(pWDA,
13908 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13909 break;
13910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 case WDA_WLAN_RESUME_REQ:
13912 {
13913 WDA_ProcessWlanResumeReq(pWDA,
13914 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13915 break;
13916 }
13917
13918 case WDA_UPDATE_CF_IND:
13919 {
13920 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13921 pMsg->bodyptr = NULL;
13922 break;
13923 }
13924#ifdef FEATURE_WLAN_SCAN_PNO
13925 case WDA_SET_PNO_REQ:
13926 {
13927 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13928 break;
13929 }
13930 case WDA_UPDATE_SCAN_PARAMS_REQ:
13931 {
13932 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13933 break;
13934 }
13935 case WDA_SET_RSSI_FILTER_REQ:
13936 {
13937 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13938 break;
13939 }
13940#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013941#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013942 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013943 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013944 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013945 break;
13946 }
13947#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 case WDA_SET_TX_PER_TRACKING_REQ:
13949 {
13950 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13951 break;
13952 }
13953
13954#ifdef WLAN_FEATURE_PACKET_FILTERING
13955 case WDA_8023_MULTICAST_LIST_REQ:
13956 {
13957 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13958 break;
13959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13961 {
13962 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13963 break;
13964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013965 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13966 {
13967 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13968 break;
13969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13971 {
13972 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13973 break;
13974 }
13975#endif // WLAN_FEATURE_PACKET_FILTERING
13976
13977
13978 case WDA_TRANSMISSION_CONTROL_IND:
13979 {
13980 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13981 break;
13982 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 case WDA_SET_POWER_PARAMS_REQ:
13984 {
13985 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13986 break;
13987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013988#ifdef WLAN_FEATURE_GTK_OFFLOAD
13989 case WDA_GTK_OFFLOAD_REQ:
13990 {
13991 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13992 break;
13993 }
13994
13995 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13996 {
13997 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13998 break;
13999 }
14000#endif //WLAN_FEATURE_GTK_OFFLOAD
14001
14002 case WDA_SET_TM_LEVEL_REQ:
14003 {
14004 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14005 break;
14006 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014007
Mohit Khanna4a70d262012-09-11 16:30:12 -070014008 case WDA_UPDATE_OP_MODE:
14009 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014010 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14011 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14012 {
14013 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14014 }
14015 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014016 {
14017 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14018 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14019 else
14020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014021 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014022 }
14023 else
14024 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014025 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014026 break;
14027 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014028#ifdef WLAN_FEATURE_11W
14029 case WDA_EXCLUDE_UNENCRYPTED_IND:
14030 {
14031 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14032 break;
14033 }
14034#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014035#ifdef FEATURE_WLAN_TDLS
14036 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14037 {
14038 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14039 break;
14040 }
14041#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014042 case WDA_DHCP_START_IND:
14043 {
14044 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14045 break;
14046 }
14047 case WDA_DHCP_STOP_IND:
14048 {
14049 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14050 break;
14051 }
Leo Chang9056f462013-08-01 19:21:11 -070014052#ifdef FEATURE_WLAN_LPHB
14053 case WDA_LPHB_CONF_REQ:
14054 {
14055 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14056 break;
14057 }
14058#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014059 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14060 {
14061 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14062 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14063 break;
14064 }
14065 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14066 {
14067 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14068 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14069 break;
14070 }
14071
Rajeev79dbe4c2013-10-05 11:03:42 +053014072#ifdef FEATURE_WLAN_BATCH_SCAN
14073 case WDA_SET_BATCH_SCAN_REQ:
14074 {
14075 WDA_ProcessSetBatchScanReq(pWDA,
14076 (tSirSetBatchScanReq *)pMsg->bodyptr);
14077 break;
14078 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014079 case WDA_RATE_UPDATE_IND:
14080 {
14081 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14082 break;
14083 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014084 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14085 {
14086 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14087 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14088 break;
14089 }
14090 case WDA_STOP_BATCH_SCAN_IND:
14091 {
14092 WDA_ProcessStopBatchScanInd(pWDA,
14093 (tSirStopBatchScanInd *)pMsg->bodyptr);
14094 break;
14095 }
c_hpothu92367912014-05-01 15:18:17 +053014096 case WDA_GET_BCN_MISS_RATE_REQ:
14097 WDA_ProcessGetBcnMissRateReq(pWDA,
14098 (tSirBcnMissRateReq *)pMsg->bodyptr);
14099 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014100#endif
14101
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014102 case WDA_HT40_OBSS_SCAN_IND:
14103 {
14104 WDA_ProcessHT40OBSSScanInd(pWDA,
14105 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14106 break;
14107 }
14108 case WDA_HT40_OBSS_STOP_SCAN_IND:
14109 {
14110 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14111 (tANI_U8*)pMsg->bodyptr);
14112 break;
14113 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014114// tdlsoffchan
14115#ifdef FEATURE_WLAN_TDLS
14116 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14117 {
14118 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14119 break;
14120 }
14121#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014122 case WDA_SPOOF_MAC_ADDR_REQ:
14123 {
14124 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14125 break;
14126 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014127 case WDA_ENCRYPT_MSG_REQ:
14128 {
14129 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14130 break;
14131 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014132
14133 case WDA_NAN_REQUEST:
14134 {
14135 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14136 break;
14137 }
14138
Jeff Johnson295189b2012-06-20 16:38:30 -070014139 default:
14140 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 "No Handling for msg type %x in WDA "
14143 ,pMsg->type);
14144 /* Do Nothing? MSG Body should be freed at here */
14145 if(NULL != pMsg->bodyptr)
14146 {
14147 vos_mem_free(pMsg->bodyptr);
14148 }
14149 //WDA_VOS_ASSERT(0) ;
14150 }
14151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014152 return status ;
14153}
14154
Jeff Johnson295189b2012-06-20 16:38:30 -070014155/*
14156 * FUNCTION: WDA_LowLevelIndCallback
14157 * IND API callback from WDI, send Ind to PE
14158 */
14159void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14160 void* pUserData )
14161{
14162 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14163#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14164 tSirRSSINotification rssiNotification;
14165#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014166 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 {
14168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014169 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014170 VOS_ASSERT(0);
14171 return ;
14172 }
14173
14174 switch(wdiLowLevelInd->wdiIndicationType)
14175 {
14176 case WDI_RSSI_NOTIFICATION_IND:
14177 {
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14179 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014180#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14181 rssiNotification.bReserved =
14182 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14183 rssiNotification.bRssiThres1NegCross =
14184 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14185 rssiNotification.bRssiThres1PosCross =
14186 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14187 rssiNotification.bRssiThres2NegCross =
14188 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14189 rssiNotification.bRssiThres2PosCross =
14190 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14191 rssiNotification.bRssiThres3NegCross =
14192 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14193 rssiNotification.bRssiThres3PosCross =
14194 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014195 rssiNotification.avgRssi = (v_S7_t)
14196 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014197 WLANTL_BMPSRSSIRegionChangedNotification(
14198 pWDA->pVosContext,
14199 &rssiNotification);
14200#endif
14201 break ;
14202 }
14203 case WDI_MISSED_BEACON_IND:
14204 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014205 tpSirSmeMissedBeaconInd pMissBeacInd =
14206 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14208 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014209 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014210 if(NULL == pMissBeacInd)
14211 {
14212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14213 "%s: VOS MEM Alloc Failure", __func__);
14214 break;
14215 }
14216 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14217 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14218 pMissBeacInd->bssIdx =
14219 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14220 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 break ;
14222 }
14223 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14224 {
14225 /* TODO: Decode Ind and send Ind to PE */
14226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14227 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14228 break ;
14229 }
14230
14231 case WDI_MIC_FAILURE_IND:
14232 {
14233 tpSirSmeMicFailureInd pMicInd =
14234 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14235
14236 if(NULL == pMicInd)
14237 {
14238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014240 break;
14241 }
14242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14243 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014244 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14245 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14246 vos_mem_copy(pMicInd->bssId,
14247 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14248 sizeof(tSirMacAddr));
14249 vos_mem_copy(pMicInd->info.srcMacAddr,
14250 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14251 sizeof(tSirMacAddr));
14252 vos_mem_copy(pMicInd->info.taMacAddr,
14253 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14254 sizeof(tSirMacAddr));
14255 vos_mem_copy(pMicInd->info.dstMacAddr,
14256 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14257 sizeof(tSirMacAddr));
14258 vos_mem_copy(pMicInd->info.rxMacAddr,
14259 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14260 sizeof(tSirMacAddr));
14261 pMicInd->info.multicast =
14262 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14263 pMicInd->info.keyId=
14264 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14265 pMicInd->info.IV1=
14266 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14267 vos_mem_copy(pMicInd->info.TSC,
14268 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014269 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14270 (void *)pMicInd , 0) ;
14271 break ;
14272 }
14273 case WDI_FATAL_ERROR_IND:
14274 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014275 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 /* TODO: Decode Ind and send Ind to PE */
14277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14278 "Received WDI_FATAL_ERROR_IND from WDI ");
14279 break ;
14280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014281 case WDI_DEL_STA_IND:
14282 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014283 tpDeleteStaContext pDelSTACtx =
14284 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14285
14286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14287 "Received WDI_DEL_STA_IND from WDI ");
14288 if(NULL == pDelSTACtx)
14289 {
14290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014292 break;
14293 }
14294 vos_mem_copy(pDelSTACtx->addr2,
14295 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14296 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014297 vos_mem_copy(pDelSTACtx->bssId,
14298 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14299 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014300 pDelSTACtx->assocId =
14301 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14302 pDelSTACtx->reasonCode =
14303 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14304 pDelSTACtx->staId =
14305 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14307 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014308 break ;
14309 }
14310 case WDI_COEX_IND:
14311 {
14312 tANI_U32 index;
14313 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014314 tSirSmeCoexInd *pSmeCoexInd;
14315
14316 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14317 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14318 {
14319 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14320 {
14321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14322 FL("Coex state: 0x%x coex feature: 0x%x"),
14323 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14324 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14325
14326 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14327 {
14328 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14329 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14330 }
14331 }
14332 break;
14333 }
14334
14335 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014336 if(NULL == pSmeCoexInd)
14337 {
14338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014339 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014340 break;
14341 }
14342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14343 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014344 /* Message Header */
14345 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14346 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 /* Info from WDI Indication */
14348 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14349 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14350 {
14351 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014353 /* VOS message wrapper */
14354 vosMsg.type = eWNI_SME_COEX_IND;
14355 vosMsg.bodyptr = (void *)pSmeCoexInd;
14356 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014357 /* Send message to SME */
14358 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14359 {
14360 /* free the mem and return */
14361 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14362 }
14363 else
14364 {
14365 /* DEBUG */
14366 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14367 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14368 pSmeCoexInd->coexIndType,
14369 pSmeCoexInd->coexIndData[0],
14370 pSmeCoexInd->coexIndData[1],
14371 pSmeCoexInd->coexIndData[2],
14372 pSmeCoexInd->coexIndData[3]);
14373 }
14374 break;
14375 }
14376 case WDI_TX_COMPLETE_IND:
14377 {
14378 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14379 /* Calling TxCompleteAck Indication from wda context*/
14380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14381 "Complete Indication received from HAL");
14382 if( pWDA->pAckTxCbFunc )
14383 {
14384 if( VOS_STATUS_SUCCESS !=
14385 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14386 {
14387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14388 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014389 }
14390 if (IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
14391 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14392 else
14393 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014394 pWDA->pAckTxCbFunc = NULL;
14395 }
14396 else
14397 {
14398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14399 "Tx Complete Indication is received after timeout ");
14400 }
14401 break;
14402 }
Viral Modid86bde22012-12-10 13:09:21 -080014403 case WDI_P2P_NOA_START_IND :
14404 {
14405 tSirP2PNoaStart *pP2pNoaStart =
14406 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14407
14408 if (NULL == pP2pNoaStart)
14409 {
14410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14411 "Memory allocation failure, "
14412 "WDI_P2P_NOA_START_IND not forwarded");
14413 break;
14414 }
14415 pP2pNoaStart->status =
14416 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14417 pP2pNoaStart->bssIdx =
14418 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14419 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14420 (void *)pP2pNoaStart , 0) ;
14421 break;
14422 }
14423
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014424#ifdef FEATURE_WLAN_TDLS
14425 case WDI_TDLS_IND :
14426 {
14427 tSirTdlsInd *pTdlsInd =
14428 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14429
14430 if (NULL == pTdlsInd)
14431 {
14432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14433 "Memory allocation failure, "
14434 "WDI_TDLS_IND not forwarded");
14435 break;
14436 }
14437 pTdlsInd->status =
14438 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14439 pTdlsInd->assocId =
14440 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14441 pTdlsInd->staIdx =
14442 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14443 pTdlsInd->reasonCode =
14444 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14445 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14446 (void *)pTdlsInd , 0) ;
14447 break;
14448 }
14449#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 case WDI_P2P_NOA_ATTR_IND :
14451 {
14452 tSirP2PNoaAttr *pP2pNoaAttr =
14453 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14455 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014456 if (NULL == pP2pNoaAttr)
14457 {
14458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14459 "Memory allocation failure, "
14460 "WDI_P2P_NOA_ATTR_IND not forwarded");
14461 break;
14462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014463 pP2pNoaAttr->index =
14464 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14465 pP2pNoaAttr->oppPsFlag =
14466 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14467 pP2pNoaAttr->ctWin =
14468 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14469
14470 pP2pNoaAttr->uNoa1IntervalCnt =
14471 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14472 pP2pNoaAttr->uNoa1Duration =
14473 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14474 pP2pNoaAttr->uNoa1Interval =
14475 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14476 pP2pNoaAttr->uNoa1StartTime =
14477 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 pP2pNoaAttr->uNoa2IntervalCnt =
14479 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14480 pP2pNoaAttr->uNoa2Duration =
14481 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14482 pP2pNoaAttr->uNoa2Interval =
14483 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14484 pP2pNoaAttr->uNoa2StartTime =
14485 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014486 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14487 (void *)pP2pNoaAttr , 0) ;
14488 break;
14489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014490#ifdef FEATURE_WLAN_SCAN_PNO
14491 case WDI_PREF_NETWORK_FOUND_IND:
14492 {
14493 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014494 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14495 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14496 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14497 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14498
Jeff Johnson295189b2012-06-20 16:38:30 -070014499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14500 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 if (NULL == pPrefNetworkFoundInd)
14502 {
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14504 "Memory allocation failure, "
14505 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014506 if (NULL !=
14507 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14508 {
14509 wpalMemoryFree(
14510 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14511 );
14512 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014514 break;
14515 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014516 /* Message Header */
14517 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014518 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014519
14520 /* Info from WDI Indication */
14521 pPrefNetworkFoundInd->ssId.length =
14522 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14525 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14526 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014527 if (NULL !=
14528 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14529 {
14530 pPrefNetworkFoundInd->frameLength =
14531 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14532 vos_mem_copy( pPrefNetworkFoundInd->data,
14533 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14534 pPrefNetworkFoundInd->frameLength);
14535 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14536 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14537 }
14538 else
14539 {
14540 pPrefNetworkFoundInd->frameLength = 0;
14541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014542 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014543 /* VOS message wrapper */
14544 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14545 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14546 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 /* Send message to SME */
14548 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14549 {
14550 /* free the mem and return */
14551 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14552 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014553 break;
14554 }
14555#endif // FEATURE_WLAN_SCAN_PNO
14556
14557#ifdef WLAN_WAKEUP_EVENTS
14558 case WDI_WAKE_REASON_IND:
14559 {
14560 vos_msg_t vosMsg;
14561 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14562 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14563 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14564
14565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014566 "[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 -070014567 wdiLowLevelInd->wdiIndicationType,
14568 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14569 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14570 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14571
14572 if (NULL == pWakeReasonInd)
14573 {
14574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14575 "Memory allocation failure, "
14576 "WDI_WAKE_REASON_IND not forwarded");
14577 break;
14578 }
14579
14580 vos_mem_zero(pWakeReasonInd, allocSize);
14581
14582 /* Message Header */
14583 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14584 pWakeReasonInd->mesgLen = allocSize;
14585
14586 /* Info from WDI Indication */
14587 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14588 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14589 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14590 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14591 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14592 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14593 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14594 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14595
14596 /* VOS message wrapper */
14597 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14598 vosMsg.bodyptr = (void *) pWakeReasonInd;
14599 vosMsg.bodyval = 0;
14600
14601 /* Send message to SME */
14602 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14603 {
14604 /* free the mem and return */
14605 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14606 }
14607
14608 break;
14609 }
14610#endif // WLAN_WAKEUP_EVENTS
14611
14612 case WDI_TX_PER_HIT_IND:
14613 {
14614 vos_msg_t vosMsg;
14615 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14616 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14617 /* VOS message wrapper */
14618 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14619 vosMsg.bodyptr = NULL;
14620 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014621 /* Send message to SME */
14622 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14623 {
14624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14625 }
14626 break;
14627 }
14628
Leo Chang9056f462013-08-01 19:21:11 -070014629#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014630 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014631 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014632 vos_msg_t vosMsg;
14633 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014634
Leo Changd9df8aa2013-09-26 13:32:26 -070014635 lphbInd =
14636 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14637 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014638 {
14639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14640 "%s: LPHB IND buffer alloc Fail", __func__);
14641 return ;
14642 }
14643
Leo Changd9df8aa2013-09-26 13:32:26 -070014644 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014645 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014646 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014647 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014648 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014649 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14650
14651 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014652 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014653 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14654
Leo Changd9df8aa2013-09-26 13:32:26 -070014655 vosMsg.type = eWNI_SME_LPHB_IND;
14656 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014657 vosMsg.bodyval = 0;
14658 /* Send message to SME */
14659 if (VOS_STATUS_SUCCESS !=
14660 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14661 {
14662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14663 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014664 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014665 }
14666 break;
14667 }
14668#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014669 case WDI_PERIODIC_TX_PTRN_FW_IND:
14670 {
14671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14672 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14673 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14674 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14675 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14676 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14677 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14678
14679 break;
14680 }
Leo Chang9056f462013-08-01 19:21:11 -070014681
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014682 case WDI_IBSS_PEER_INACTIVITY_IND:
14683 {
14684 tSirIbssPeerInactivityInd *pIbssInd =
14685 (tSirIbssPeerInactivityInd *)
14686 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14687
14688 if (NULL == pIbssInd)
14689 {
14690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14691 "Memory allocation failure, "
14692 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14693 break;
14694 }
14695
14696 pIbssInd->bssIdx =
14697 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14698 pIbssInd->staIdx =
14699 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14700 vos_mem_copy(pIbssInd->peerAddr,
14701 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14702 sizeof(tSirMacAddr));
14703 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14704 break;
14705 }
14706
Rajeev79dbe4c2013-10-05 11:03:42 +053014707#ifdef FEATURE_WLAN_BATCH_SCAN
14708 case WDI_BATCH_SCAN_RESULT_IND:
14709 {
14710 void *pBatchScanResult;
14711 void *pCallbackContext;
14712 tpAniSirGlobal pMac;
14713
14714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14715 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14716
14717 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014718 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014719 {
14720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14721 "%s:pWDA is NULL", __func__);
14722 VOS_ASSERT(0);
14723 return;
14724 }
14725
14726 pBatchScanResult =
14727 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14728 if (NULL == pBatchScanResult)
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14731 "%s:Batch scan result from FW is null can't invoke HDD callback",
14732 __func__);
14733 VOS_ASSERT(0);
14734 return;
14735 }
14736
14737 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14738 if (NULL == pMac)
14739 {
14740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14741 "%s:pMac is NULL", __func__);
14742 VOS_ASSERT(0);
14743 return;
14744 }
14745
14746 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14747 /*call hdd callback with set batch scan response data*/
14748 if(pMac->pmc.batchScanResultCallback)
14749 {
14750 pMac->pmc.batchScanResultCallback(pCallbackContext,
14751 pBatchScanResult);
14752 }
14753 else
14754 {
14755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14756 "%s:HDD callback is null", __func__);
14757 VOS_ASSERT(0);
14758 }
14759 break;
14760 }
14761#endif
14762
Leo Chang0b0e45a2013-12-15 15:18:55 -080014763#ifdef FEATURE_WLAN_CH_AVOID
14764 case WDI_CH_AVOID_IND:
14765 {
14766 vos_msg_t vosMsg;
14767 tSirChAvoidIndType *chAvoidInd;
14768
14769 chAvoidInd =
14770 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14771 if (NULL == chAvoidInd)
14772 {
14773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14774 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14775 return ;
14776 }
14777
14778 chAvoidInd->avoidRangeCount =
14779 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14780 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14781 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14782 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14783
14784 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14785 "%s : WDA CH avoid notification", __func__);
14786
14787 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14788 vosMsg.bodyptr = chAvoidInd;
14789 vosMsg.bodyval = 0;
14790 /* Send message to SME */
14791 if (VOS_STATUS_SUCCESS !=
14792 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14793 {
14794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14795 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14796 vos_mem_free(chAvoidInd);
14797 }
14798 break;
14799 }
14800#endif /* FEATURE_WLAN_CH_AVOID */
14801
Sunil Duttbd736ed2014-05-26 21:19:41 +053014802#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14803 case WDI_LL_STATS_RESULTS_IND:
14804 {
14805 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014806 tpAniSirGlobal pMac;
14807
14808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14809 "Received WDI_LL_STATS_RESULTS_IND from FW");
14810
14811 /*sanity check*/
14812 if (NULL == pWDA)
14813 {
14814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14815 "%s:pWDA is NULL", __func__);
14816 VOS_ASSERT(0);
14817 return;
14818 }
14819
14820 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014821 (void *)wdiLowLevelInd->
14822 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014823 if (NULL == pLinkLayerStatsInd)
14824 {
14825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14826 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14827 __func__);
14828 VOS_ASSERT(0);
14829 return;
14830 }
14831
14832 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14833 if (NULL == pMac)
14834 {
14835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14836 "%s:pMac is NULL", __func__);
14837 VOS_ASSERT(0);
14838 return;
14839 }
14840
Dino Mycled3d50022014-07-07 12:58:25 +053014841 /* call hdd callback with Link Layer Statistics.
14842 * vdev_id/ifacId in link_stats_results will be
14843 * used to retrieve the correct HDD context
14844 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014845 if (pMac->sme.pLinkLayerStatsIndCallback)
14846 {
Dino Mycled3d50022014-07-07 12:58:25 +053014847 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014848 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014849 pLinkLayerStatsInd,
14850 wdiLowLevelInd->
14851 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014852 }
14853 else
14854 {
14855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14856 "%s:HDD callback is null", __func__);
14857 }
14858 break;
14859 }
14860#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14861
Dino Mycle41bdc942014-06-10 11:30:24 +053014862#ifdef WLAN_FEATURE_EXTSCAN
14863 case WDI_EXTSCAN_PROGRESS_IND:
14864 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14865 case WDI_EXTSCAN_SCAN_RESULT_IND:
14866 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14867 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14868 {
14869 void *pEXTScanData;
14870 void *pCallbackContext;
14871 tpAniSirGlobal pMac;
14872 tANI_U16 indType;
14873
14874 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14875 "Received WDI_EXTSCAN Indications from FW");
14876 /*sanity check*/
14877 if (NULL == pWDA)
14878 {
14879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14880 "%s:pWDA is NULL", __func__);
14881 VOS_ASSERT(0);
14882 return;
14883 }
14884 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14885 {
14886 indType = WDA_EXTSCAN_PROGRESS_IND;
14887
14888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14889 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14890 }
14891 if (wdiLowLevelInd->wdiIndicationType ==
14892 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14893 {
14894 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14895
14896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14897 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14898 }
14899 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14900 {
14901 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14902
14903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14904 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14905 }
14906 if (wdiLowLevelInd->wdiIndicationType ==
14907 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14908 {
14909 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14910
14911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14912 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14913 }
14914 if (wdiLowLevelInd->wdiIndicationType ==
14915 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14916 {
14917 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14918
14919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14920 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14921 }
14922
14923 pEXTScanData =
14924 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14925 if (NULL == pEXTScanData)
14926 {
14927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14928 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14929 __func__);
14930 VOS_ASSERT(0);
14931 return;
14932 }
14933
14934 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14935 if (NULL == pMac)
14936 {
14937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14938 "%s:pMac is NULL", __func__);
14939 VOS_ASSERT(0);
14940 return;
14941 }
14942
14943 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14944
14945 if(pMac->sme.pEXTScanIndCb)
14946 {
14947 pMac->sme.pEXTScanIndCb(pCallbackContext,
14948 indType,
14949 pEXTScanData);
14950 }
14951 else
14952 {
14953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14954 "%s:HDD callback is null", __func__);
14955 }
14956 break;
14957 }
14958#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014959 case WDI_DEL_BA_IND:
14960 {
14961 tpBADeleteParams pDelBAInd =
14962 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14963
14964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14965 "Received WDI_DEL_BA_IND from WDI ");
14966 if(NULL == pDelBAInd)
14967 {
14968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14969 "%s: VOS MEM Alloc Failure", __func__);
14970 break;
14971 }
14972 vos_mem_copy(pDelBAInd->peerMacAddr,
14973 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14974 sizeof(tSirMacAddr));
14975 vos_mem_copy(pDelBAInd->bssId,
14976 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14977 sizeof(tSirMacAddr));
14978 pDelBAInd->staIdx =
14979 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14980 pDelBAInd->baTID =
14981 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14982 pDelBAInd->baDirection =
14983 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14984 pDelBAInd->reasonCode =
14985 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14986
14987 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14988 (void *)pDelBAInd , 0) ;
14989 break;
14990 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014991 case WDI_NAN_EVENT_IND:
14992 {
14993 vos_msg_t vosMsg;
14994 tpSirNanEvent pSirNanEvent = NULL;
14995
14996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14997 "Received WDI_NAN_EVENT");
14998
14999 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15000 - sizeof( pSirNanEvent->event_data)
15001 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15002
15003 if (NULL == pSirNanEvent)
15004 {
15005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15006 "%s: VOS MEM Alloc Failure", __func__);
15007 VOS_ASSERT(0) ;
15008 break;
15009 }
15010
15011 pSirNanEvent->event_data_len =
15012 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15013
15014 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15015 {
15016 vos_mem_copy( pSirNanEvent->event_data,
15017 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15018 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15019 }
15020
15021 /* VOS message wrapper */
15022 vosMsg.type = eWNI_SME_NAN_EVENT;
15023 vosMsg.bodyptr = pSirNanEvent;
15024 vosMsg.bodyval = 0;
15025
15026 /* Send message to SME */
15027 if (VOS_STATUS_SUCCESS
15028 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15029 {
15030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15031 "post eWNI_SME_NAN_EVENT to SME Failed");
15032 vos_mem_free(pSirNanEvent);
15033 }
15034 break;
15035 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015036
Jeff Johnson295189b2012-06-20 16:38:30 -070015037 default:
15038 {
15039 /* TODO error */
15040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15041 "Received UNKNOWN Indication from WDI ");
15042 }
15043 }
15044 return ;
15045}
15046
Jeff Johnson295189b2012-06-20 16:38:30 -070015047/*
15048 * BA related processing in WDA.
15049 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015050void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15051 void* pUserData)
15052{
15053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15054 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015055 if(NULL == pWdaParams)
15056 {
15057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015058 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015059 VOS_ASSERT(0) ;
15060 return ;
15061 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015063 vos_mem_free(pWdaParams->wdaMsgParam) ;
15064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15065 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015068 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15069 {
15070 tANI_U8 i = 0 ;
15071 tBaActivityInd *baActivityInd = NULL ;
15072 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15073 tANI_U8 allocSize = sizeof(tBaActivityInd)
15074 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15075 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15076 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015077 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015078 if(NULL == baActivityInd)
15079 {
15080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015082 VOS_ASSERT(0) ;
15083 return;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15086 sizeof(tSirMacAddr)) ;
15087 baActivityInd->baCandidateCnt = baCandidateCount ;
15088
15089 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15090 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15091
15092 for(i = 0 ; i < baCandidateCount ; i++)
15093 {
15094 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015095 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15096 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015097 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15098 {
15099 baCandidate->baInfo[tid].fBaEnable =
15100 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15101 baCandidate->baInfo[tid].startingSeqNum =
15102 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15103 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015104 wdiBaCandidate++ ;
15105 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015107 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15108 }
15109 else
15110 {
15111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15112 "BA Trigger RSP with Failure received ");
15113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015115}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015116
15117
15118/*
15119 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15120 * during MCC
15121 */
15122void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15123{
15124 wpt_uint32 enabled;
15125 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15126 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15127 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15128
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015129 if (NULL == pMac )
15130 {
15131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15132 "%s: Invoked with invalid MAC context ", __func__ );
15133 VOS_ASSERT(0);
15134 return;
15135 }
15136
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015137 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15138 != eSIR_SUCCESS)
15139 {
15140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15141 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15142 return;
15143 }
15144
15145 if(!enabled)
15146 {
15147 return;
15148 }
15149
15150 if(NULL == pWDA)
15151 {
15152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15153 "%s:WDA context is NULL", __func__);
15154 VOS_ASSERT(0);
15155 return;
15156 }
15157
15158 if(activate)
15159 {
15160 if( VOS_STATUS_SUCCESS !=
15161 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15162 {
15163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15164 "Traffic Stats Timer Start Failed ");
15165 return;
15166 }
15167 WDI_DS_ActivateTrafficStats();
15168 }
15169 else
15170 {
15171 WDI_DS_DeactivateTrafficStats();
15172 WDI_DS_ClearTrafficStats();
15173
15174 if( VOS_STATUS_SUCCESS !=
15175 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15176 {
15177 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15178 "Traffic Stats Timer Stop Failed ");
15179 return;
15180 }
15181 }
15182}
15183
15184/*
15185 * Traffic Stats Timer handler
15186 */
15187void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15188{
15189 WDI_Status wdiStatus;
15190 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15191 WDI_TrafficStatsIndType trafficStatsIndParams;
15192 wpt_uint32 length, enabled;
15193 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15194
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015195 if (NULL == pMac )
15196 {
15197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15198 "%s: Invoked with invalid MAC context ", __func__ );
15199 VOS_ASSERT(0);
15200 return;
15201 }
15202
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015203 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15204 != eSIR_SUCCESS)
15205 {
15206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15207 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15208 return;
15209 }
15210
15211 if(!enabled)
15212 {
15213 WDI_DS_DeactivateTrafficStats();
15214 return;
15215 }
15216
15217 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15218
15219 if(pWdiTrafficStats != NULL)
15220 {
15221 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15222 trafficStatsIndParams.length = length;
15223 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015224 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015225 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15226 trafficStatsIndParams.pUserData = pWDA;
15227
15228 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15229
15230 if(WDI_STATUS_PENDING == wdiStatus)
15231 {
15232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15233 "Pending received for %s:%d ",__func__,__LINE__ );
15234 }
15235 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15236 {
15237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15238 "Failure in %s:%d ",__func__,__LINE__ );
15239 }
15240
15241 WDI_DS_ClearTrafficStats();
15242 }
15243 else
15244 {
15245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15246 "pWdiTrafficStats is Null");
15247 }
15248
15249 if( VOS_STATUS_SUCCESS !=
15250 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15251 {
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15253 "Traffic Stats Timer Start Failed ");
15254 return;
15255 }
15256}
15257
Jeff Johnson295189b2012-06-20 16:38:30 -070015258/*
15259 * BA Activity check timer handler
15260 */
15261void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15262{
15263 tANI_U8 curSta = 0 ;
15264 tANI_U8 tid = 0 ;
15265 tANI_U8 size = 0 ;
15266 tANI_U8 baCandidateCount = 0 ;
15267 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015268 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015269 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015270 tpAniSirGlobal pMac;
15271
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015272 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 {
15274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015275 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 VOS_ASSERT(0);
15277 return ;
15278 }
15279 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15280 {
15281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15282 "Inconsistent STA entries in WDA");
15283 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015284 }
15285 if(NULL == pWDA->pVosContext)
15286 {
15287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15288 "%s: pVosContext is NULL",__func__);
15289 VOS_ASSERT(0);
15290 return ;
15291 }
15292 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015293 if(NULL == pMac)
15294 {
15295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15296 "%s: pMac is NULL",__func__);
15297 VOS_ASSERT(0);
15298 return ;
15299 }
15300
Abhishek Singh0644e482014-10-06 18:38:23 +053015301 if (wlan_cfgGetInt(pMac,
15302 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15303 eSIR_SUCCESS)
15304 {
15305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15306 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15307 val = 0;
15308 }
15309
Jeff Johnson295189b2012-06-20 16:38:30 -070015310 /* walk through all STA entries and find out TX packet count */
15311 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15312 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015313 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015314#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015315 // We can only do BA on "hard" STAs.
15316 if (!(IS_HWSTA_IDX(curSta)))
15317 {
15318 continue;
15319 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015320#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015321 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15322 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015323 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 tANI_U32 txPktCount = 0 ;
15325 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015326 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015327 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15328 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015329 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15330 curSta, tid, &txPktCount)))
15331 {
15332#if 0
15333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15334 "************* %d:%d, %d ",curSta, txPktCount,
15335 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15336#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015337 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15338 (currentOperChan <= SIR_11B_CHANNEL_END)))
15339 {
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15341 "%s: BTC disabled aggregation - dont start "
15342 "TX ADDBA req",__func__);
15343 }
15344 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015345 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015346 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15347 pWDA->wdaGlobalSystemRole) && txPktCount )
15348 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15349 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015350 {
15351 /* get prepare for sending message to HAL */
15352 //baCandidate[baCandidateCount].staIdx = curSta ;
15353 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15354 newBaCandidate = WDA_ENABLE_BA ;
15355 }
15356 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15357 }
15358 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015359 /* fill the entry for all the sta with given TID's */
15360 if(WDA_ENABLE_BA == newBaCandidate)
15361 {
15362 /* move to next BA candidate */
15363 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15364 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15365 baCandidateCount++ ;
15366 newBaCandidate = WDA_DISABLE_BA ;
15367 }
15368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015369 /* prepare and send message to hal */
15370 if( 0 < baCandidateCount)
15371 {
15372 WDI_Status status = WDI_STATUS_SUCCESS ;
15373 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15374 tWDA_ReqParams *pWdaParams =
15375 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015376 if(NULL == pWdaParams)
15377 {
15378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015380 VOS_ASSERT(0) ;
15381 return;
15382 }
15383 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15384 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15385 if(NULL == wdiTriggerBaReq)
15386 {
15387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015389 VOS_ASSERT(0) ;
15390 vos_mem_free(pWdaParams);
15391 return;
15392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015393 do
15394 {
15395 WDI_TriggerBAReqinfoType *triggerBaInfo =
15396 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15397 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15398 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15399 * for each request */
15400 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15401 triggerBaInfo->ucBASessionID = 0;
15402 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15403 } while(0) ;
15404 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015407 pWdaParams->pWdaContext = pWDA;
15408 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15409 pWdaParams->wdaMsgParam = NULL;
15410 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15411 WDA_TriggerBaReqCallback, pWdaParams) ;
15412 if(IS_WDI_STATUS_FAILURE(status))
15413 {
15414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15415 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15416 vos_mem_free(pWdaParams->wdaMsgParam) ;
15417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15418 vos_mem_free(pWdaParams) ;
15419 }
15420 }
15421 else
15422 {
15423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15424 "There is no TID for initiating BA");
15425 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015426 if( VOS_STATUS_SUCCESS !=
15427 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15428 {
15429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15430 "BA Activity Timer Stop Failed ");
15431 return ;
15432 }
15433 if( VOS_STATUS_SUCCESS !=
15434 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15435 {
15436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15437 "BA Activity Timer Start Failed ");
15438 return;
15439 }
15440 return ;
15441}
Jeff Johnson295189b2012-06-20 16:38:30 -070015442/*
15443 * WDA common routine to create timer used by WDA.
15444 */
15445static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15446{
Jeff Johnson295189b2012-06-20 16:38:30 -070015447 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15448 tANI_U32 val = 0 ;
15449 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15450
15451 if(NULL == pMac)
15452 {
15453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015454 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015455 VOS_ASSERT(0);
15456 return VOS_STATUS_E_FAILURE;
15457 }
15458 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15459 != eSIR_SUCCESS)
15460 {
15461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15462 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15463 return VOS_STATUS_E_FAILURE;
15464 }
15465 val = SYS_MS_TO_TICKS(val) ;
15466
15467 /* BA activity check timer */
15468 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15469 "BA Activity Check timer", WDA_TimerHandler,
15470 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15471 if(status != TX_SUCCESS)
15472 {
15473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15474 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015475 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015476 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015477 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015478 /* Tx Complete Timeout timer */
15479 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15480 "Tx Complete Check timer", WDA_TimerHandler,
15481 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015482 if(status != TX_SUCCESS)
15483 {
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15485 "Unable to create Tx Complete Timeout timer");
15486 /* Destroy timer of BA activity check timer */
15487 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15488 if(status != TX_SUCCESS)
15489 {
15490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15491 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015492 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015494 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015495 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015496
15497 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15498
15499 /* Traffic Stats timer */
15500 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15501 "Traffic Stats timer", WDA_TimerHandler,
15502 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15503 if(status != TX_SUCCESS)
15504 {
15505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15506 "Unable to create traffic stats timer");
15507 /* Destroy timer of BA activity check timer */
15508 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15509 if(status != TX_SUCCESS)
15510 {
15511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15512 "Unable to Destroy BA activity timer");
15513 }
15514 /* Destroy timer of tx complete timer */
15515 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15516 if(status != TX_SUCCESS)
15517 {
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15519 "Unable to Tx complete timer");
15520 }
15521 return VOS_STATUS_E_FAILURE ;
15522 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015523 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015524}
Jeff Johnson295189b2012-06-20 16:38:30 -070015525/*
15526 * WDA common routine to destroy timer used by WDA.
15527 */
15528static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15529{
15530 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015531 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15532 if(status != TX_SUCCESS)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "Unable to Destroy Tx Complete Timeout timer");
15536 return eSIR_FAILURE ;
15537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15539 if(status != TX_SUCCESS)
15540 {
15541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15542 "Unable to Destroy BA activity timer");
15543 return eSIR_FAILURE ;
15544 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015545 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15546 if(status != TX_SUCCESS)
15547 {
15548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15549 "Unable to Destroy traffic stats timer");
15550 return eSIR_FAILURE ;
15551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015552 return eSIR_SUCCESS ;
15553}
Jeff Johnson295189b2012-06-20 16:38:30 -070015554/*
15555 * WDA timer handler.
15556 */
15557void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15558{
15559 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15560 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 /*
15562 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15563 */
15564 wdaMsg.type = timerInfo ;
15565 wdaMsg.bodyptr = NULL;
15566 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015567 /* post the message.. */
15568 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15569 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15570 {
15571 vosStatus = VOS_STATUS_E_BADMSG;
15572 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015573}
Jeff Johnson295189b2012-06-20 16:38:30 -070015574/*
15575 * WDA Tx Complete timeout Indication.
15576 */
15577void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15578{
15579 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015580 if( pWDA->pAckTxCbFunc )
15581 {
15582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015583 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015584 pWDA->pAckTxCbFunc( pMac, 0);
15585 pWDA->pAckTxCbFunc = NULL;
15586 }
15587 else
15588 {
15589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015590 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015592}
Jeff Johnson295189b2012-06-20 16:38:30 -070015593/*
15594 * WDA Set REG Domain to VOS NV
15595 */
Abhishek Singha306a442013-11-07 18:39:01 +053015596eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15597 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015598{
Abhishek Singha306a442013-11-07 18:39:01 +053015599 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015600 {
15601 return eHAL_STATUS_INVALID_PARAMETER;
15602 }
15603 return eHAL_STATUS_SUCCESS;
15604}
Jeff Johnson295189b2012-06-20 16:38:30 -070015605
Jeff Johnson295189b2012-06-20 16:38:30 -070015606#ifdef FEATURE_WLAN_SCAN_PNO
15607/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015608 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015609 *
15610 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015611void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015612{
15613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015614 tSirPNOScanReq *pPNOScanReqParams;
15615
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015617 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015618 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015619 {
15620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015621 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015622 VOS_ASSERT(0) ;
15623 return ;
15624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015625
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015626 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15627 if(pPNOScanReqParams->statusCallback)
15628 {
15629 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15630 (status == WDI_STATUS_SUCCESS) ?
15631 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15632 }
15633
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015634 if (pPNOScanReqParams->enable == 1)
15635 {
15636 if (pPNOScanReqParams->aNetworks)
15637 vos_mem_free(pPNOScanReqParams->aNetworks);
15638 if (pPNOScanReqParams->p24GProbeTemplate)
15639 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15640 if (pPNOScanReqParams->p5GProbeTemplate)
15641 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15642 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15644 vos_mem_free(pWdaParams->wdaMsgParam);
15645 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015646
15647 return ;
15648}
Jeff Johnson295189b2012-06-20 16:38:30 -070015649/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015650 * FUNCTION: WDA_PNOScanReqCallback
15651 * Free memory.
15652 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15653 */
15654void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015655{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015657 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015658
15659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15660 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15661
15662 if(NULL == pWdaParams)
15663 {
15664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15665 "%s: pWdaParams received NULL", __func__);
15666 VOS_ASSERT(0);
15667 return;
15668 }
15669
15670 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15671 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015672 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15673 if(pPNOScanReqParams->statusCallback)
15674 {
15675 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15676 VOS_STATUS_E_FAILURE);
15677 }
15678
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015679 if (pPNOScanReqParams->enable == 1)
15680 {
15681 if (pPNOScanReqParams->aNetworks)
15682 vos_mem_free(pPNOScanReqParams->aNetworks);
15683 if (pPNOScanReqParams->p24GProbeTemplate)
15684 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15685 if (pPNOScanReqParams->p5GProbeTemplate)
15686 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15687 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15689 vos_mem_free(pWdaParams->wdaMsgParam);
15690 vos_mem_free(pWdaParams);
15691 }
15692
15693 return;
15694}
15695/*
15696 * FUNCTION: WDA_UpdateScanParamsRespCallback
15697 *
15698 */
15699void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15700{
15701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015703 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015704 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015705 {
15706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015707 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015708 VOS_ASSERT(0) ;
15709 return ;
15710 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015711
15712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15713 vos_mem_free(pWdaParams->wdaMsgParam);
15714 vos_mem_free(pWdaParams);
15715
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 return ;
15717}
Jeff Johnson295189b2012-06-20 16:38:30 -070015718/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015719 * FUNCTION: WDA_UpdateScanParamsReqCallback
15720 * Free memory.
15721 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15722 */
15723void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15724{
15725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15726
15727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15728 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15729
15730 if(NULL == pWdaParams)
15731 {
15732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15733 "%s: pWdaParams received NULL", __func__);
15734 VOS_ASSERT(0);
15735 return;
15736 }
15737
15738 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15739 {
15740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15741 vos_mem_free(pWdaParams->wdaMsgParam);
15742 vos_mem_free(pWdaParams);
15743 }
15744
15745 return;
15746}
15747/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015748 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15749 * Request to WDI to set Preferred Network List.Offload
15750 */
15751VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15752 tSirPNOScanReq *pPNOScanReqParams)
15753{
Jeff Johnson43971f52012-07-17 12:26:56 -070015754 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015755 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15756 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15757 tWDA_ReqParams *pWdaParams ;
15758 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015761 if(NULL == pwdiPNOScanReqInfo)
15762 {
15763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 VOS_ASSERT(0);
15766 return VOS_STATUS_E_NOMEM;
15767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15769 if(NULL == pWdaParams)
15770 {
15771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015773 VOS_ASSERT(0);
15774 vos_mem_free(pwdiPNOScanReqInfo);
15775 return VOS_STATUS_E_NOMEM;
15776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015777 //
15778 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15779 //
15780 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15781 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15783 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15784 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15786 {
15787 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15788 &pPNOScanReqParams->aNetworks[i],
15789 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 /*Scan timer intervals*/
15792 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15793 &pPNOScanReqParams->scanTimers,
15794 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015795 /*Probe template for 2.4GHz band*/
15796 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15797 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15798 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015799 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15800 pPNOScanReqParams->p24GProbeTemplate,
15801 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015802 /*Probe template for 5GHz band*/
15803 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15804 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15805 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015806 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15807 pPNOScanReqParams->p5GProbeTemplate,
15808 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015809 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15810 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015811
Jeff Johnson295189b2012-06-20 16:38:30 -070015812 /* Store Params pass it to WDI */
15813 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15814 pWdaParams->pWdaContext = pWDA;
15815 /* Store param pointer as passed in by caller */
15816 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015817 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015818 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015819 if(IS_WDI_STATUS_FAILURE(status))
15820 {
15821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15822 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015823 if(pPNOScanReqParams->statusCallback)
15824 {
15825 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15826 VOS_STATUS_E_FAILURE);
15827 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015828 if (pPNOScanReqParams->enable == 1)
15829 {
15830 if (pPNOScanReqParams->aNetworks)
15831 vos_mem_free(pPNOScanReqParams->aNetworks);
15832 if (pPNOScanReqParams->p24GProbeTemplate)
15833 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15834 if (pPNOScanReqParams->p5GProbeTemplate)
15835 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15838 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015839
Jeff Johnson295189b2012-06-20 16:38:30 -070015840 pWdaParams->wdaWdiApiMsgParam = NULL;
15841 pWdaParams->wdaMsgParam = NULL;
15842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015843 return CONVERT_WDI2VOS_STATUS(status) ;
15844}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015845
15846#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15847
15848void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15849{
15850 /*Convert the CSR Auth types to WDI Auth types */
15851 switch (csrAuthType)
15852 {
15853 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15854 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15855 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015856#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015857 case eCSR_AUTH_TYPE_CCKM_WPA:
15858 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15859 break;
15860#endif
15861 case eCSR_AUTH_TYPE_WPA:
15862 *AuthType = eWDA_AUTH_TYPE_WPA;
15863 break;
15864 case eCSR_AUTH_TYPE_WPA_PSK:
15865 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15866 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015867#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015868 case eCSR_AUTH_TYPE_CCKM_RSN:
15869 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15870 break;
15871#endif
15872 case eCSR_AUTH_TYPE_RSN:
15873 *AuthType = eWDA_AUTH_TYPE_RSN;
15874 break;
15875 case eCSR_AUTH_TYPE_RSN_PSK:
15876 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15877 break;
15878#if defined WLAN_FEATURE_VOWIFI_11R
15879 case eCSR_AUTH_TYPE_FT_RSN:
15880 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15881 break;
15882 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15883 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15884 break;
15885#endif
15886#ifdef FEATURE_WLAN_WAPI
15887 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15888 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15889 break;
15890 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15891 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15892 break;
15893#endif /* FEATURE_WLAN_WAPI */
15894 case eCSR_AUTH_TYPE_SHARED_KEY:
15895 case eCSR_AUTH_TYPE_AUTOSWITCH:
15896 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15897 break;
15898#if 0
15899 case eCSR_AUTH_TYPE_SHARED_KEY:
15900 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15901 break;
15902 case eCSR_AUTH_TYPE_AUTOSWITCH:
15903 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15904#endif
15905 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015907 "%s: Unknown Auth Type", __func__);
15908 break;
15909 }
15910}
15911void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15912{
15913 switch (csrEncrType)
15914 {
15915 case eCSR_ENCRYPT_TYPE_NONE:
15916 *EncrType = WDI_ED_NONE;
15917 break;
15918 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15919 case eCSR_ENCRYPT_TYPE_WEP40:
15920 *EncrType = WDI_ED_WEP40;
15921 break;
15922 case eCSR_ENCRYPT_TYPE_WEP104:
15923 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15924 *EncrType = WDI_ED_WEP104;
15925 break;
15926 case eCSR_ENCRYPT_TYPE_TKIP:
15927 *EncrType = WDI_ED_TKIP;
15928 break;
15929 case eCSR_ENCRYPT_TYPE_AES:
15930 *EncrType = WDI_ED_CCMP;
15931 break;
15932#ifdef WLAN_FEATURE_11W
15933 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15934 *EncrType = WDI_ED_AES_128_CMAC;
15935 break;
15936#endif
15937#ifdef FEATURE_WLAN_WAPI
15938 case eCSR_ENCRYPT_TYPE_WPI:
15939 *EncrType = WDI_ED_WPI;
15940 break;
15941#endif
15942 case eCSR_ENCRYPT_TYPE_ANY:
15943 *EncrType = WDI_ED_ANY;
15944 break;
15945
15946 default:
15947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15948 "%s: Unknown Encryption Type", __func__);
15949 break;
15950 }
15951}
15952
15953/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015954 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015955 * Request to WDI to set Roam Offload Scan
15956 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015957VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015958 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15959{
15960 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015961 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15962 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015963 tWDA_ReqParams *pWdaParams ;
15964 v_U8_t csrAuthType;
15965 WDI_RoamNetworkType *pwdiRoamNetworkType;
15966 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15968 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015969 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015970 {
15971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15972 "%s: VOS MEM Alloc Failure", __func__);
15973 VOS_ASSERT(0);
15974 return VOS_STATUS_E_NOMEM;
15975 }
15976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15977 if (NULL == pWdaParams)
15978 {
15979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15980 "%s: VOS MEM Alloc Failure", __func__);
15981 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015982 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015983 return VOS_STATUS_E_NOMEM;
15984 }
15985
15986 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015987 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015988 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015989 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15990 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015991 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15992 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15993 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15994 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15995 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15996 sizeof(pwdiRoamNetworkType->currAPbssid));
15997 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15998 csrAuthType);
15999 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16000 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16001 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16002 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16003 pwdiRoamOffloadScanInfo->LookupThreshold =
16004 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016005 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16006 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016007 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16008 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016009 pwdiRoamOffloadScanInfo->MAWCEnabled =
16010 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016011 pwdiRoamOffloadScanInfo->Command =
16012 pRoamOffloadScanReqParams->Command ;
16013 pwdiRoamOffloadScanInfo->StartScanReason =
16014 pRoamOffloadScanReqParams->StartScanReason ;
16015 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16016 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16017 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16018 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16019 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16020 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16021 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16022 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16023 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16024 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016025 pwdiRoamOffloadScanInfo->IsESEEnabled =
16026 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016027 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16028 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16029 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16030 pwdiRoamNetworkType->ssId.ucLength =
16031 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16032 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16033 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16034 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16035 pwdiRoamNetworkType->ChannelCount =
16036 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16037 pwdiRoamOffloadScanInfo->ChannelCacheType =
16038 pRoamOffloadScanReqParams->ChannelCacheType;
16039 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16040 pRoamOffloadScanReqParams->ValidChannelList,
16041 pRoamOffloadScanReqParams->ValidChannelCount);
16042 pwdiRoamOffloadScanInfo->ValidChannelCount =
16043 pRoamOffloadScanReqParams->ValidChannelCount;
16044 pwdiRoamOffloadScanInfo->us24GProbeSize =
16045 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16046 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16047 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16048 pRoamOffloadScanReqParams->p24GProbeTemplate,
16049 pwdiRoamOffloadScanInfo->us24GProbeSize);
16050 pwdiRoamOffloadScanInfo->us5GProbeSize =
16051 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16052 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16053 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16054 pRoamOffloadScanReqParams->p5GProbeTemplate,
16055 pwdiRoamOffloadScanInfo->us5GProbeSize);
16056 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16057 pRoamOffloadScanReqParams->MDID.mdiePresent;
16058 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16059 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016060 pwdiRoamOffloadScanInfo->nProbes =
16061 pRoamOffloadScanReqParams->nProbes;
16062 pwdiRoamOffloadScanInfo->HomeAwayTime =
16063 pRoamOffloadScanReqParams->HomeAwayTime;
16064 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016065 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016066 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016067 pWdaParams->pWdaContext = pWDA;
16068 /* Store param pointer as passed in by caller */
16069 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016070 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016071 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16072 if(IS_WDI_STATUS_FAILURE(status))
16073 {
16074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16075 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16077 vos_mem_free(pWdaParams->wdaMsgParam);
16078 pWdaParams->wdaWdiApiMsgParam = NULL;
16079 pWdaParams->wdaMsgParam = NULL;
16080 }
16081 return CONVERT_WDI2VOS_STATUS(status) ;
16082}
16083#endif
16084
Jeff Johnson295189b2012-06-20 16:38:30 -070016085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016086 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016087 *
16088 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016089void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016090{
16091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16092
16093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016094 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016095
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016096 if(NULL == pWdaParams)
16097 {
16098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016099 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016100 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016101 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016102 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016103
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 vos_mem_free(pWdaParams->wdaMsgParam) ;
16105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16106 vos_mem_free(pWdaParams) ;
16107
16108 return ;
16109}
16110/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016111 * FUNCTION: WDA_RssiFilterReqCallback
16112 * Free memory.
16113 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16114 */
16115void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16116{
16117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16118
16119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16120 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16121
16122 if(NULL == pWdaParams)
16123 {
16124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16125 "%s: pWdaParams received NULL", __func__);
16126 VOS_ASSERT(0);
16127 return;
16128 }
16129
16130 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16131 {
16132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16133 vos_mem_free(pWdaParams->wdaMsgParam);
16134 vos_mem_free(pWdaParams);
16135 }
16136
16137 return;
16138}
16139/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016140 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 * Request to WDI to set Preferred Network List.Offload
16142 */
16143VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16144 tSirSetRSSIFilterReq* pRssiFilterParams)
16145{
Jeff Johnson43971f52012-07-17 12:26:56 -070016146 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016147 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16148 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16149 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016151 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016152 if(NULL == pwdiSetRssiFilterReqInfo)
16153 {
16154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016156 VOS_ASSERT(0);
16157 return VOS_STATUS_E_NOMEM;
16158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16160 if(NULL == pWdaParams)
16161 {
16162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016164 VOS_ASSERT(0);
16165 vos_mem_free(pwdiSetRssiFilterReqInfo);
16166 return VOS_STATUS_E_NOMEM;
16167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016168 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016169 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16170 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016171
Jeff Johnson295189b2012-06-20 16:38:30 -070016172 /* Store Params pass it to WDI */
16173 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16174 pWdaParams->pWdaContext = pWDA;
16175 /* Store param pointer as passed in by caller */
16176 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016177 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016178 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016180 if(IS_WDI_STATUS_FAILURE(status))
16181 {
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16183 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16185 vos_mem_free(pWdaParams->wdaMsgParam);
16186 pWdaParams->wdaWdiApiMsgParam = NULL;
16187 pWdaParams->wdaMsgParam = NULL;
16188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016189 return CONVERT_WDI2VOS_STATUS(status) ;
16190}
16191
Jeff Johnson295189b2012-06-20 16:38:30 -070016192/*
16193 * FUNCTION: WDA_ProcessUpdateScanParams
16194 * Request to WDI to update Scan Parameters
16195 */
16196VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16197 tSirUpdateScanParams *pUpdateScanParams)
16198{
Jeff Johnson43971f52012-07-17 12:26:56 -070016199 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016200 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16201 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16202 sizeof(WDI_UpdateScanParamsInfoType)) ;
16203 tWDA_ReqParams *pWdaParams ;
16204 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016206 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 if(NULL == wdiUpdateScanParamsInfoType)
16208 {
16209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016211 VOS_ASSERT(0);
16212 return VOS_STATUS_E_NOMEM;
16213 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016214 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16215 if ( NULL == pWdaParams )
16216 {
16217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016219 VOS_ASSERT(0);
16220 vos_mem_free(wdiUpdateScanParamsInfoType);
16221 return VOS_STATUS_E_NOMEM;
16222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 //
16224 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16225 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16227 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16228 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16229 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016230 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016231 pUpdateScanParams->b11dEnabled,
16232 pUpdateScanParams->b11dResolved,
16233 pUpdateScanParams->ucChannelCount,
16234 pUpdateScanParams->usPassiveMinChTime,
16235 pUpdateScanParams->usPassiveMaxChTime,
16236 pUpdateScanParams->usActiveMinChTime,
16237 pUpdateScanParams->usActiveMaxChTime,
16238 sizeof(tSirUpdateScanParams),
16239 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16240
Jeff Johnson295189b2012-06-20 16:38:30 -070016241 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16242 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016243 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16244 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016245 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16246 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016247 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16248 pUpdateScanParams->usActiveMaxChTime;
16249 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16250 pUpdateScanParams->usActiveMinChTime;
16251 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16252 pUpdateScanParams->usPassiveMaxChTime;
16253 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16254 pUpdateScanParams->usPassiveMinChTime;
16255
Jeff Johnson295189b2012-06-20 16:38:30 -070016256 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016257 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16258 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016259
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 for ( i = 0; i <
16261 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16262 i++)
16263 {
16264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16265 "Update Scan Parameters channel: %d",
16266 pUpdateScanParams->aChannels[i]);
16267
16268 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16269 pUpdateScanParams->aChannels[i];
16270 }
16271
Yue Ma7f44bbe2013-04-12 11:47:39 -070016272 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16273 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016274
Jeff Johnson295189b2012-06-20 16:38:30 -070016275 /* Store Params pass it to WDI */
16276 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16277 pWdaParams->pWdaContext = pWDA;
16278 /* Store param pointer as passed in by caller */
16279 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016280
Jeff Johnson295189b2012-06-20 16:38:30 -070016281
16282
16283 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016284 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016285 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016286 if(IS_WDI_STATUS_FAILURE(status))
16287 {
16288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16289 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16291 vos_mem_free(pWdaParams->wdaMsgParam);
16292 vos_mem_free(pWdaParams);
16293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 return CONVERT_WDI2VOS_STATUS(status) ;
16295}
16296#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016297
16298#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16299/*
16300 * FUNCTION: WDA_RoamOffloadScanReqCallback
16301 *
16302 */
16303void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16304{
16305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016306 vos_msg_t vosMsg;
16307 wpt_uint8 reason = 0;
16308
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016310 "<------ %s " ,__func__);
16311 if (NULL == pWdaParams)
16312 {
16313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16314 "%s: pWdaParams received NULL", __func__);
16315 VOS_ASSERT(0) ;
16316 return ;
16317 }
16318 if ( pWdaParams != NULL )
16319 {
16320 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16321 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016322 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16324 }
16325 if ( pWdaParams->wdaMsgParam != NULL)
16326 {
16327 vos_mem_free(pWdaParams->wdaMsgParam);
16328 }
16329
16330 vos_mem_free(pWdaParams) ;
16331 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016332 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16333 vosMsg.bodyptr = NULL;
16334 if (WDI_STATUS_SUCCESS != status)
16335 {
16336 reason = 0;
16337 }
16338 vosMsg.bodyval = reason;
16339 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16340 {
16341 /* free the mem and return */
16342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016343 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016344 }
16345
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016346 return ;
16347}
16348#endif
16349
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016351 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016352 *
16353 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016354void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016355{
16356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16357
16358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16359 "<------ %s " ,__func__);
16360
16361 if(NULL == pWdaParams)
16362 {
16363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16364 "%s: pWdaParams received NULL", __func__);
16365 VOS_ASSERT(0);
16366 return;
16367 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016368
16369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16370 vos_mem_free(pWdaParams->wdaMsgParam);
16371 vos_mem_free(pWdaParams);
16372
16373 return;
16374}
16375/*
16376 * FUNCTION: WDA_SetPowerParamsReqCallback
16377 * Free memory.
16378 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16379 */
16380void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16381{
16382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16383
16384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16385 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16386
16387 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016388 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16390 "%s: pWdaParams received NULL", __func__);
16391 VOS_ASSERT(0);
16392 return;
16393 }
16394
16395 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16396 {
16397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16398 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016399 vos_mem_free(pWdaParams);
16400 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016401
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016402 return;
16403}
16404
Jeff Johnson295189b2012-06-20 16:38:30 -070016405#ifdef WLAN_FEATURE_PACKET_FILTERING
16406/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016407 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016408 *
16409 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016410void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016411 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16412 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016413{
16414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016417 if(NULL == pWdaParams)
16418 {
16419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 VOS_ASSERT(0) ;
16422 return ;
16423 }
16424
16425 vos_mem_free(pWdaParams->wdaMsgParam) ;
16426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16427 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016428 //print a msg, nothing else to do
16429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016430 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016431 return ;
16432}
Jeff Johnson295189b2012-06-20 16:38:30 -070016433/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016434 * FUNCTION: WDA_8023MulticastListReqCallback
16435 * Free memory.
16436 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16437 */
16438void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16439{
16440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16441
16442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16443 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16444
16445 if(NULL == pWdaParams)
16446 {
16447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16448 "%s: pWdaParams received NULL", __func__);
16449 VOS_ASSERT(0);
16450 return;
16451 }
16452
16453 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16454 {
16455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16456 vos_mem_free(pWdaParams->wdaMsgParam);
16457 vos_mem_free(pWdaParams);
16458 }
16459
16460 return;
16461}
16462/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016463 * FUNCTION: WDA_Process8023MulticastListReq
16464 * Request to WDI to add 8023 Multicast List
16465 */
16466VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16467 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16468{
Jeff Johnson43971f52012-07-17 12:26:56 -070016469 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016470 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16471 tWDA_ReqParams *pWdaParams ;
16472 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016474 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016475 pwdiFltPktSetMcListReqParamsType =
16476 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16477 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16478 ) ;
16479 if(NULL == pwdiFltPktSetMcListReqParamsType)
16480 {
16481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016483 return VOS_STATUS_E_NOMEM;
16484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16486 if(NULL == pWdaParams)
16487 {
16488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16491 return VOS_STATUS_E_NOMEM;
16492 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016493
Jeff Johnson295189b2012-06-20 16:38:30 -070016494 //
16495 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16496 //
16497 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016498 pRcvFltMcAddrList->ulMulticastAddrCnt;
16499
16500 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16501 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16502 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16503 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16504
Jeff Johnson295189b2012-06-20 16:38:30 -070016505 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16506 {
16507 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16508 &(pRcvFltMcAddrList->multicastAddr[i]),
16509 sizeof(tSirMacAddr));
16510 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016511 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16512 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016513
Jeff Johnson295189b2012-06-20 16:38:30 -070016514 /* Store Params pass it to WDI */
16515 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16516 pWdaParams->pWdaContext = pWDA;
16517 /* Store param pointer as passed in by caller */
16518 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016519 status = WDI_8023MulticastListReq(
16520 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016521 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016522 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016523 if(IS_WDI_STATUS_FAILURE(status))
16524 {
16525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16526 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16528 vos_mem_free(pWdaParams->wdaMsgParam);
16529 vos_mem_free(pWdaParams);
16530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016531 return CONVERT_WDI2VOS_STATUS(status) ;
16532}
Jeff Johnson295189b2012-06-20 16:38:30 -070016533/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016534 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016535 *
16536 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016537void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016538 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16539 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016540{
16541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016544 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016545 if(NULL == pWdaParams)
16546 {
16547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016548 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016549 VOS_ASSERT(0) ;
16550 return ;
16551 }
16552
16553 vos_mem_free(pWdaParams->wdaMsgParam) ;
16554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16555 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016556 //print a msg, nothing else to do
16557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016558 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016559 return ;
16560}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016561
16562/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016563 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16564 * Free memory.
16565 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016566 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016567void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016568 void* pUserData)
16569{
16570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16571
16572 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16573 "<------ %s, wdiStatus: %d",
16574 __func__, wdiStatus);
16575
16576 if (NULL == pWdaParams)
16577 {
16578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16579 "%s: Invalid pWdaParams pointer", __func__);
16580 VOS_ASSERT(0);
16581 return;
16582 }
16583
16584 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16585 {
16586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16587 vos_mem_free(pWdaParams->wdaMsgParam);
16588 vos_mem_free(pWdaParams);
16589 }
16590
16591 return;
16592}
16593
Jeff Johnson295189b2012-06-20 16:38:30 -070016594/*
16595 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16596 * Request to WDI to set Receive Filters
16597 */
16598VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16599 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16600{
Jeff Johnson43971f52012-07-17 12:26:56 -070016601 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016602 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16603 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16604 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16605 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16606 tWDA_ReqParams *pWdaParams ;
16607 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016610 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16611 {
16612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016614 VOS_ASSERT(0);
16615 return VOS_STATUS_E_NOMEM;
16616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16618 if(NULL == pWdaParams)
16619 {
16620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016622 VOS_ASSERT(0);
16623 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16624 return VOS_STATUS_E_NOMEM;
16625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016626 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16627 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16628 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16629 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016630 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16631 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16632
16633 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16634 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016635
16636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16637 "FID %d FT %d NParams %d CT %d",
16638 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16639 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16640 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16641 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016642 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16643 {
16644 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16645 &pRcvPktFilterCfg->paramsData[i],
16646 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016648 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016649 pwdiSetRcvPktFilterReqParamsType->
16650 wdiPktFilterCfg.paramsData[i].protocolLayer,
16651 pwdiSetRcvPktFilterReqParamsType->
16652 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016654 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016655 pwdiSetRcvPktFilterReqParamsType->
16656 wdiPktFilterCfg.paramsData[i].dataOffset,
16657 pwdiSetRcvPktFilterReqParamsType->
16658 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016660 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016661 pwdiSetRcvPktFilterReqParamsType->
16662 wdiPktFilterCfg.paramsData[i].compareData[0],
16663 pwdiSetRcvPktFilterReqParamsType->
16664 wdiPktFilterCfg.paramsData[i].compareData[1],
16665 pwdiSetRcvPktFilterReqParamsType->
16666 wdiPktFilterCfg.paramsData[i].compareData[2],
16667 pwdiSetRcvPktFilterReqParamsType->
16668 wdiPktFilterCfg.paramsData[i].compareData[3],
16669 pwdiSetRcvPktFilterReqParamsType->
16670 wdiPktFilterCfg.paramsData[i].compareData[4],
16671 pwdiSetRcvPktFilterReqParamsType->
16672 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016674 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016675 pwdiSetRcvPktFilterReqParamsType->
16676 wdiPktFilterCfg.paramsData[i].dataMask[0],
16677 pwdiSetRcvPktFilterReqParamsType->
16678 wdiPktFilterCfg.paramsData[i].dataMask[1],
16679 pwdiSetRcvPktFilterReqParamsType->
16680 wdiPktFilterCfg.paramsData[i].dataMask[2],
16681 pwdiSetRcvPktFilterReqParamsType->
16682 wdiPktFilterCfg.paramsData[i].dataMask[3],
16683 pwdiSetRcvPktFilterReqParamsType->
16684 wdiPktFilterCfg.paramsData[i].dataMask[4],
16685 pwdiSetRcvPktFilterReqParamsType->
16686 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016688 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016689 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016690 /* Store Params pass it to WDI */
16691 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16692 pWdaParams->pWdaContext = pWDA;
16693 /* Store param pointer as passed in by caller */
16694 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016695 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016696 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016698 if(IS_WDI_STATUS_FAILURE(status))
16699 {
16700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16701 "Failure in SetFilter(),free all the memory,status %d ",status);
16702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16703 vos_mem_free(pWdaParams->wdaMsgParam);
16704 vos_mem_free(pWdaParams);
16705 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016706 return CONVERT_WDI2VOS_STATUS(status) ;
16707}
Jeff Johnson295189b2012-06-20 16:38:30 -070016708/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016709 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016710 *
16711 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016712void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016713 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16714 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016715{
16716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16717 tWDA_CbContext *pWDA;
16718 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16719 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16720 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16721 tANI_U8 i;
16722 vos_msg_t vosMsg;
16723
16724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016726 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16727
Jeff Johnsone7245742012-09-05 17:12:55 -070016728 if(NULL == pRcvFltPktMatchCntRsp)
16729 {
16730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016731 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016732 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016733 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016734 return ;
16735 }
16736
Jeff Johnson295189b2012-06-20 16:38:30 -070016737 if(NULL == pWdaParams)
16738 {
16739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016740 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016741 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016742 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016743 return ;
16744 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016745 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16746 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016747 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16748 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16749
16750 /* Message Header */
16751 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16752 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16753
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016754 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016755
16756 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16757 {
16758 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16759 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016761 /* VOS message wrapper */
16762 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16763 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16764 vosMsg.bodyval = 0;
16765 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16766 {
16767 /* free the mem and return */
16768 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16769 }
16770
16771 vos_mem_free(pWdaParams->wdaMsgParam) ;
16772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16773 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016774
16775 return;
16776}
16777/*
16778 * FUNCTION: WDA_FilterMatchCountReqCallback
16779 * Free memory and send RSP back to SME.
16780 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16781 */
16782void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16783{
16784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16785 vos_msg_t vosMsg;
16786
16787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16788 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16789
16790 if(NULL == pWdaParams)
16791 {
16792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16793 "%s: pWdaParams received NULL", __func__);
16794 VOS_ASSERT(0);
16795 return;
16796 }
16797
16798 /* VOS message wrapper */
16799 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16800 vosMsg.bodyptr = NULL;
16801 vosMsg.bodyval = 0;
16802
16803 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16804 {
16805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16806 vos_mem_free(pWdaParams->wdaMsgParam);
16807 vos_mem_free(pWdaParams);
16808 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16809 }
16810
16811 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016812}
Jeff Johnson295189b2012-06-20 16:38:30 -070016813/*
16814 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16815 * Request to WDI to get PC Filter Match Count
16816 */
16817VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16818{
Jeff Johnson43971f52012-07-17 12:26:56 -070016819 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16821 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16822 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016825 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16826 {
16827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016829 VOS_ASSERT(0);
16830 return VOS_STATUS_E_NOMEM;
16831 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16833 if(NULL == pWdaParams)
16834 {
16835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016837 VOS_ASSERT(0);
16838 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16839 return VOS_STATUS_E_NOMEM;
16840 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016841
Yue Ma7f44bbe2013-04-12 11:47:39 -070016842 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16843 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016844
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016845 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16846 pRcvFltPktMatchRsp->bssId,
16847 sizeof(wpt_macAddr));
16848
Jeff Johnson295189b2012-06-20 16:38:30 -070016849 /* Store Params pass it to WDI */
16850 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16851 pWdaParams->pWdaContext = pWDA;
16852 /* Store param pointer as passed in by caller */
16853 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016854 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016855 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016856 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016857 if(IS_WDI_STATUS_FAILURE(status))
16858 {
16859 /* failure returned by WDI API */
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16861 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16863 vos_mem_free(pWdaParams) ;
16864 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16865 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016867 return CONVERT_WDI2VOS_STATUS(status) ;
16868}
Jeff Johnson295189b2012-06-20 16:38:30 -070016869/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016870 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016871 *
16872 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016873void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016874 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16875 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016876{
16877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016880/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16881 if(NULL == pWdaParams)
16882 {
16883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016884 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016885 VOS_ASSERT(0) ;
16886 return ;
16887 }
16888
16889 vos_mem_free(pWdaParams->wdaMsgParam) ;
16890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16891 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016892 //print a msg, nothing else to do
16893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016894 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016895 return ;
16896}
Jeff Johnson295189b2012-06-20 16:38:30 -070016897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016898 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16899 * Free memory.
16900 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16901 */
16902void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16903{
16904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16905
16906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16907 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16908
16909 if(NULL == pWdaParams)
16910 {
16911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16912 "%s: Invalid pWdaParams pointer", __func__);
16913 VOS_ASSERT(0);
16914 return;
16915 }
16916
16917 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16918 {
16919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16920 vos_mem_free(pWdaParams->wdaMsgParam);
16921 vos_mem_free(pWdaParams);
16922 }
16923
16924 return;
16925}
16926/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016927 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16928 * Request to WDI to clear Receive Filters
16929 */
16930VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16931 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16932{
Jeff Johnson43971f52012-07-17 12:26:56 -070016933 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016934 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16935 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16936 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016938 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016939 if(NULL == pwdiRcvFltPktClearReqParamsType)
16940 {
16941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016943 VOS_ASSERT(0);
16944 return VOS_STATUS_E_NOMEM;
16945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16947 if(NULL == pWdaParams)
16948 {
16949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016951 VOS_ASSERT(0);
16952 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16953 return VOS_STATUS_E_NOMEM;
16954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016955 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16956 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016957 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16958 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16959 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16960 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016961
Yue Ma7f44bbe2013-04-12 11:47:39 -070016962 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016963 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016964 /* Store Params pass it to WDI */
16965 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16966 pWdaParams->pWdaContext = pWDA;
16967 /* Store param pointer as passed in by caller */
16968 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016969 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016970 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016971 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016972 if(IS_WDI_STATUS_FAILURE(status))
16973 {
16974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16975 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016977 vos_mem_free(pWdaParams->wdaMsgParam);
16978 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016980 return CONVERT_WDI2VOS_STATUS(status) ;
16981}
16982#endif // WLAN_FEATURE_PACKET_FILTERING
16983
Jeff Johnson295189b2012-06-20 16:38:30 -070016984/*
16985 * FUNCTION: WDA_ProcessSetPowerParamsReq
16986 * Request to WDI to set power params
16987 */
16988VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16989 tSirSetPowerParamsReq *pPowerParams)
16990{
Jeff Johnson43971f52012-07-17 12:26:56 -070016991 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016992 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16993 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016996 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016997 if(NULL == pwdiSetPowerParamsReqInfo)
16998 {
16999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017001 VOS_ASSERT(0);
17002 return VOS_STATUS_E_NOMEM;
17003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017004 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17005 if(NULL == pWdaParams)
17006 {
17007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017009 VOS_ASSERT(0);
17010 vos_mem_free(pwdiSetPowerParamsReqInfo);
17011 return VOS_STATUS_E_NOMEM;
17012 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017013
Jeff Johnson295189b2012-06-20 16:38:30 -070017014
17015 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17016 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017017 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17018 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017019 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17020 pPowerParams->uListenInterval;
17021 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17022 pPowerParams->uBcastMcastFilter;
17023 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17024 pPowerParams->uEnableBET;
17025 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17026 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017027 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17028 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017029 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17030 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017031
Jeff Johnson295189b2012-06-20 16:38:30 -070017032 /* Store Params pass it to WDI */
17033 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17034 pWdaParams->pWdaContext = pWDA;
17035 /* Store param pointer as passed in by caller */
17036 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017037 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017038 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017039 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017040 if(IS_WDI_STATUS_FAILURE(status))
17041 {
17042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17043 "Failure in Set power params REQ WDI API, free all the memory " );
17044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17045 vos_mem_free(pWdaParams->wdaMsgParam);
17046 pWdaParams->wdaWdiApiMsgParam = NULL;
17047 pWdaParams->wdaMsgParam = NULL;
17048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017049 return CONVERT_WDI2VOS_STATUS(status) ;
17050}
17051
17052/*
17053 * FUNCTION: WDA_SetTmLevelRspCallback
17054 * Set TM Level response
17055 */
17056void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17057{
17058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17059
17060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017062
17063 if(NULL == pWdaParams)
17064 {
17065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017066 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017067 VOS_ASSERT(0) ;
17068 return ;
17069 }
17070
17071 /* Dose not need to send notification to upper layer
17072 * Just free allocated resources */
17073 if( pWdaParams != NULL )
17074 {
17075 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17076 {
17077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17078 }
17079 vos_mem_free(pWdaParams->wdaMsgParam) ;
17080 vos_mem_free(pWdaParams) ;
17081 }
17082}
17083
17084/*
17085 * FUNCTION: WDA_ProcessSetTmLevelReq
17086 * Set TM Level request
17087 */
17088VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17089 tAniSetTmLevelReq *setTmLevelReq)
17090{
17091 WDI_Status status = WDI_STATUS_SUCCESS ;
17092 tWDA_ReqParams *pWdaParams ;
17093 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17094 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17095 sizeof(WDI_SetTmLevelReqType)) ;
17096 if(NULL == wdiSetTmLevelReq)
17097 {
17098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017100 VOS_ASSERT(0);
17101 return VOS_STATUS_E_NOMEM;
17102 }
17103
17104 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17105 if(NULL == pWdaParams)
17106 {
17107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 VOS_ASSERT(0);
17110 vos_mem_free(wdiSetTmLevelReq);
17111 return VOS_STATUS_E_NOMEM;
17112 }
17113
17114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017116
17117 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17118 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17119
17120 pWdaParams->pWdaContext = pWDA;
17121 pWdaParams->wdaMsgParam = setTmLevelReq;
17122 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17123
17124 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17125 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17126
17127 if(IS_WDI_STATUS_FAILURE(status))
17128 {
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017130 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017131 vos_mem_free(pWdaParams->wdaMsgParam) ;
17132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17133 vos_mem_free(pWdaParams) ;
17134 }
17135
17136 return CONVERT_WDI2VOS_STATUS(status) ;
17137}
17138
17139VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17140 tpTxControlParams pTxCtrlParam)
17141{
17142 VOS_STATUS wdaStatus;
17143
17144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017146 if( pTxCtrlParam == NULL )
17147 {
17148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017149 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017150 return VOS_STATUS_E_FAILURE;
17151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017152 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17153 {
17154 wdaStatus = WDA_SuspendDataTx(pWDA);
17155 }
17156 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17157 {
17158 wdaStatus = WDA_ResumeDataTx(pWDA);
17159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017160 return wdaStatus;
17161}
17162
17163 /* FUNCTION WDA_featureCapsExchange
17164 * WDA API to invoke capability exchange between host and FW.
17165 */
17166void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17167{
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017169 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017170 WDI_featureCapsExchangeReq( NULL, pVosContext);
17171}
17172
Yathish9f22e662012-12-10 14:21:35 -080017173/* FUNCTION WDA_disableCapablityFeature
17174 * WDA API to diable Active mode offload in host.
17175 */
17176void WDA_disableCapablityFeature(tANI_U8 feature_index)
17177{
17178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17179 "%s:enter", __func__ );
17180 WDI_disableCapablityFeature(feature_index);
17181}
17182
Jeff Johnson295189b2012-06-20 16:38:30 -070017183 /* FUNCTION WDA_getHostWlanFeatCaps
17184 * Wrapper for WDI API, that will return if the feature (enum value).passed
17185 * to this API is supported or not in Host
17186 * return value
17187 * 0 - implies feature is NOT Supported
17188 * any non zero value - implies feature is SUPPORTED
17189 */
17190tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17191{
17192 return WDI_getHostWlanFeatCaps(featEnumValue);
17193}
17194
17195 /* FUNCTION WDA_getFwWlanFeatCaps
17196 * Wrapper for WDI API, that will return if the feature (enum value).passed
17197 * to this API is supported or not in FW
17198 * return value
17199 * 0 - implies feature is NOT Supported
17200 * any non zero value - implies feature is SUPPORTED
17201 */
17202tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17203{
17204 return WDI_getFwWlanFeatCaps(featEnumValue);
17205}
17206
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017207
Jeff Johnson295189b2012-06-20 16:38:30 -070017208/*
17209 * FUNCTION: WDA_shutdown
17210 * Shutdown WDA/WDI without handshaking with Riva.
17211 * Synchronous function.
17212 */
17213VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17214{
17215 WDI_Status wdiStatus;
17216 //tANI_U8 eventIdx = 0;
17217 VOS_STATUS status = VOS_STATUS_SUCCESS;
17218 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017219 if (NULL == pWDA)
17220 {
17221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017222 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017223 VOS_ASSERT(0);
17224 return VOS_STATUS_E_FAILURE;
17225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017226 /* FTM mode stay START_STATE */
17227 if( (WDA_READY_STATE != pWDA->wdaState) &&
17228 (WDA_INIT_STATE != pWDA->wdaState) &&
17229 (WDA_START_STATE != pWDA->wdaState) )
17230 {
17231 VOS_ASSERT(0);
17232 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017233
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017234 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17235 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017236 {
17237 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017238 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017239 }
Leo Chang9d76f622013-08-23 16:34:52 -070017240 else
17241 {
17242 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17243 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017244
Jeff Johnson295189b2012-06-20 16:38:30 -070017245 /* call WDI shutdown */
17246 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017247 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17250 "error in WDA Stop" );
17251 status = VOS_STATUS_E_FAILURE;
17252 }
17253 /* WDI stop is synchrnous, shutdown is complete when it returns */
17254 pWDA->wdaState = WDA_STOP_STATE;
17255
Jeff Johnson295189b2012-06-20 16:38:30 -070017256 /* shutdown should perform the stop & close actions. */
17257 /* Destroy the event */
17258 status = vos_event_destroy(&pWDA->txFrameEvent);
17259 if(!VOS_IS_STATUS_SUCCESS(status))
17260 {
17261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017262 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017263 status = VOS_STATUS_E_FAILURE;
17264 }
17265 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17266 if(!VOS_IS_STATUS_SUCCESS(status))
17267 {
17268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017269 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017270 status = VOS_STATUS_E_FAILURE;
17271 }
17272 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17273 if(!VOS_IS_STATUS_SUCCESS(status))
17274 {
17275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017276 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017277 status = VOS_STATUS_E_FAILURE;
17278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017279 /* free WDA context */
17280 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17281 if ( !VOS_IS_STATUS_SUCCESS(status) )
17282 {
17283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17284 "error in WDA close " );
17285 status = VOS_STATUS_E_FAILURE;
17286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017287 return status;
17288}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017289
Jeff Johnsone7245742012-09-05 17:12:55 -070017290/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017291 * FUNCTION: WDA_setNeedShutdown
17292 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017293 */
17294
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017295void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017296{
17297 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017298 if(pWDA == NULL)
17299 {
17300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17301 "Could not get the WDA Context pointer" );
17302 return;
17303 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017304 pWDA->needShutdown = TRUE;
17305}
17306/*
17307 * FUNCTION: WDA_needShutdown
17308 * WDA needs a shutdown
17309 */
17310
17311v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17312{
17313 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017314 if(pWDA == NULL)
17315 {
17316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17317 "Could not get the WDA Context pointer" );
17318 return 0;
17319 }
17320 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017321}
17322
Mohit Khanna4a70d262012-09-11 16:30:12 -070017323#ifdef WLAN_FEATURE_11AC
17324/*
17325 * FUNCTION: WDA_SetBeaconFilterReqCallback
17326 *
17327 */
17328void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17329{
17330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017332 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017333 if(NULL == pWdaParams)
17334 {
17335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017336 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017337 VOS_ASSERT(0) ;
17338 return ;
17339 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017340
Mohit Khanna4a70d262012-09-11 16:30:12 -070017341 vos_mem_free(pWdaParams->wdaMsgParam) ;
17342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17343 vos_mem_free(pWdaParams) ;
17344 /*
17345 * No respone required for SetBeaconFilter req so just free the request
17346 * param here
17347 */
17348
17349 return ;
17350}
17351
17352VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17353 tUpdateVHTOpMode *pData)
17354{
17355 WDI_Status status = WDI_STATUS_SUCCESS ;
17356 tWDA_ReqParams *pWdaParams ;
17357 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17358 sizeof(WDI_UpdateVHTOpMode)) ;
17359 if(NULL == wdiTemp)
17360 {
17361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017362 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017363 VOS_ASSERT(0);
17364 return VOS_STATUS_E_NOMEM;
17365 }
17366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17367 if(NULL == pWdaParams)
17368 {
17369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017370 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017371 VOS_ASSERT(0);
17372 vos_mem_free(wdiTemp);
17373 return VOS_STATUS_E_NOMEM;
17374 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17376 "------> %s Opmode = %d and staid = %d" ,
17377 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017378 wdiTemp->opMode = pData->opMode;
17379 wdiTemp->staId = pData->staId;
17380
17381 pWdaParams->pWdaContext = pWDA;
17382 /* Store Req pointer, as this will be used for response */
17383 pWdaParams->wdaMsgParam = (void *)pData;
17384 /* store Params pass it to WDI */
17385 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17386
17387 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17388
17389 if(IS_WDI_STATUS_FAILURE(status))
17390 {
17391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17392 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17394 vos_mem_free(pWdaParams->wdaMsgParam);
17395 vos_mem_free(pWdaParams);
17396 }
17397 return CONVERT_WDI2VOS_STATUS(status) ;
17398}
17399#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017400
17401/*==========================================================================
17402 FUNCTION WDA_TransportChannelDebug
17403
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017404 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017405 Display Transport Channel debugging information
17406 User may request to display DXE channel snapshot
17407 Or if host driver detects any abnormal stcuk may display
17408
17409 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017410 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017411 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017412 debugFlags : Enable stall detect features
17413 defined by WPAL_DeviceDebugFlags
17414 These features may effect
17415 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017416
17417 RETURN VALUE
17418 NONE
17419
17420===========================================================================*/
17421void WDA_TransportChannelDebug
17422(
schang6295e542013-03-12 15:31:23 -070017423 tpAniSirGlobal pMac,
17424 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017425 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017426)
17427{
Mihir Shete40a55652014-03-02 14:14:47 +053017428 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017429 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017430}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017431
17432/*==========================================================================
17433 FUNCTION WDA_SetEnableSSR
17434
17435 DESCRIPTION
17436 API to enable/disable SSR on WDI timeout
17437
17438 PARAMETERS
17439 enableSSR : enable/disable SSR
17440
17441 RETURN VALUE
17442 NONE
17443
17444===========================================================================*/
17445void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17446{
17447 WDI_SetEnableSSR(enableSSR);
17448}
Leo Chang9056f462013-08-01 19:21:11 -070017449
17450#ifdef FEATURE_WLAN_LPHB
17451/*
17452 * FUNCTION: WDA_LPHBconfRspCallback
17453 *
17454 */
17455void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17456{
17457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17458
17459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17460 "<------ %s " ,__func__);
17461 if (NULL == pWdaParams)
17462 {
17463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17464 "%s: pWdaParams received NULL", __func__);
17465 VOS_ASSERT(0) ;
17466 return ;
17467 }
17468
17469 /* Do not need to send notification to upper layer
17470 * Just free allocated resources */
17471 if (pWdaParams != NULL)
17472 {
17473 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17474 {
17475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17476 }
17477 vos_mem_free(pWdaParams->wdaMsgParam) ;
17478 vos_mem_free(pWdaParams) ;
17479 }
17480
17481 return;
17482}
17483
17484/*
17485 * FUNCTION: WDA_ProcessLPHBConfReq
17486 *
17487 */
17488VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17489 tSirLPHBReq *pData)
17490{
17491 WDI_Status wdiStatus;
17492 tWDA_ReqParams *pWdaParams ;
17493
17494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17495 "------> %s " , __func__);
17496
17497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17498 if (NULL == pWdaParams)
17499 {
17500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17501 "%s: VOS MEM Alloc Failure", __func__);
17502 VOS_ASSERT(0);
17503 vos_mem_free(pData);
17504 return VOS_STATUS_E_NOMEM;
17505 }
17506
17507 pWdaParams->pWdaContext = pWDA;
17508 pWdaParams->wdaMsgParam = (void *)pData;
17509 pWdaParams->wdaWdiApiMsgParam = NULL;
17510
17511 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17512 if (WDI_STATUS_PENDING == wdiStatus)
17513 {
17514 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17515 "Pending received for %s:%d ", __func__, __LINE__);
17516 }
17517 else if (WDI_STATUS_SUCCESS != wdiStatus)
17518 {
17519 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17520 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17521 vos_mem_free(pWdaParams->wdaMsgParam);
17522 vos_mem_free(pWdaParams);
17523 }
17524
17525 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17526}
17527#endif /* FEATURE_WLAN_LPHB */
17528
c_hpothu92367912014-05-01 15:18:17 +053017529void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17530 void* pUserData)
17531{
17532 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17533
17534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17535 "<------ %s " ,__func__);
17536 if (NULL == pBcnMissRateInfo)
17537 {
17538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17539 "%s: pWdaParams received NULL", __func__);
17540 VOS_ASSERT(0) ;
17541 return ;
17542 }
17543 if (pBcnMissRateInfo->callback)
17544 {
17545 pBcnMissRateInfo->callback(status, bcnMissRate,
17546 pBcnMissRateInfo->data);
17547 }
17548 vos_mem_free(pUserData);
17549
17550 return;
17551}
17552
17553v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17554 tSirBcnMissRateReq *pData)
17555{
17556 WDI_Status wdiStatus;
17557 tSirBcnMissRateInfo *pBcnMissRateInfo;
17558
17559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17560 "------> %s " , __func__);
17561
17562 pBcnMissRateInfo =
17563 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17564 if (NULL == pBcnMissRateInfo)
17565 {
17566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17567 "%s: VOS MEM Alloc Failure", __func__);
17568 VOS_ASSERT(0);
17569 vos_mem_free(pData);
17570 return;
17571 }
17572
17573 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17574 pBcnMissRateInfo->data = pData->data;
17575
17576 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17577 WDA_GetBcnMissRateCallback,
17578 pData->bssid);
17579 if (WDI_STATUS_PENDING == wdiStatus)
17580 {
17581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17582 "Pending received for %s:%d ", __func__, __LINE__);
17583 }
17584 else if (WDI_STATUS_SUCCESS != wdiStatus)
17585 {
17586 if (pBcnMissRateInfo->callback)
17587 {
17588 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17589 -1, pBcnMissRateInfo->data);
17590 }
17591 }
17592 vos_mem_free(pData);
17593}
Dino Mycle41bdc942014-06-10 11:30:24 +053017594
17595#ifdef WLAN_FEATURE_EXTSCAN
17596
17597/*==========================================================================
17598 FUNCTION WDA_EXTScanStartRspCallback
17599
17600 DESCRIPTION
17601 API to send EXTScan Start Response to HDD
17602
17603 PARAMETERS
17604 pEventData: Response from FW
17605 pUserData:
17606===========================================================================*/
17607void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17608{
17609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17610 tWDA_CbContext *pWDA = NULL;
17611 void *pCallbackContext;
17612 tpAniSirGlobal pMac;
17613
17614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17615 "%s:", __func__);
17616 if (NULL == pWdaParams)
17617 {
17618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17619 "%s: pWdaParams received NULL", __func__);
17620 VOS_ASSERT(0);
17621 return;
17622 }
17623
17624 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17625
17626 if (NULL == pWDA)
17627 {
17628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17629 "%s: pWDA received NULL", __func__);
17630 VOS_ASSERT(0);
17631 goto error;
17632 }
17633
17634 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17635 if (NULL == pMac)
17636 {
17637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17638 "%s:pMac is NULL", __func__);
17639 VOS_ASSERT(0);
17640 goto error;
17641 }
17642
17643 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17644
17645 if (pMac->sme.pEXTScanIndCb)
17646 {
17647 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17648 pEventData);
17649 }
17650 else
17651 {
17652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17653 "%s:HDD callback is null", __func__);
17654 VOS_ASSERT(0);
17655 }
17656
17657error:
17658
17659 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17660 {
17661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17662 }
17663 if (pWdaParams->wdaMsgParam != NULL)
17664 {
17665 vos_mem_free(pWdaParams->wdaMsgParam);
17666 }
17667 vos_mem_free(pWdaParams) ;
17668
17669 return;
17670}
17671
17672/*==========================================================================
17673 FUNCTION WDA_EXTScanStopRspCallback
17674
17675 DESCRIPTION
17676 API to send EXTScan Stop Response to HDD
17677
17678 PARAMETERS
17679 pEventData: Response from FW
17680 pUserData:
17681===========================================================================*/
17682void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17683{
17684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17685 tWDA_CbContext *pWDA = NULL;
17686 void *pCallbackContext;
17687 tpAniSirGlobal pMac;
17688
17689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17690 "%s:", __func__);
17691 if (NULL == pWdaParams)
17692 {
17693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17694 "%s: pWdaParams received NULL", __func__);
17695 VOS_ASSERT(0);
17696 return;
17697 }
17698
17699 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17700
17701 if (NULL == pWDA)
17702 {
17703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17704 "%s: pWDA received NULL", __func__);
17705 VOS_ASSERT(0);
17706 goto error;
17707 }
17708
17709 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17710 if (NULL == pMac)
17711 {
17712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17713 "%s:pMac is NULL", __func__);
17714 VOS_ASSERT(0);
17715 goto error;
17716 }
17717 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17718
17719 if (pMac->sme.pEXTScanIndCb)
17720 {
17721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17722 "%s:HDD call back function called", __func__);
17723 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17724 pEventData);
17725 }
17726 else
17727 {
17728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17729 "%s:HDD callback is null", __func__);
17730 VOS_ASSERT(0);
17731 }
17732
17733error:
17734
17735 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17736 {
17737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17738 }
17739 if (pWdaParams->wdaMsgParam != NULL)
17740 {
17741 vos_mem_free(pWdaParams->wdaMsgParam);
17742 }
17743 vos_mem_free(pWdaParams) ;
17744
17745
17746 return;
17747}
17748
17749/*==========================================================================
17750 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17751
17752 DESCRIPTION
17753 API to send EXTScan Get Cached Results Response to HDD
17754
17755 PARAMETERS
17756 pEventData: Response from FW
17757 pUserData:
17758===========================================================================*/
17759void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17760{
17761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17762 tWDA_CbContext *pWDA = NULL;
17763 void *pCallbackContext;
17764 tpAniSirGlobal pMac;
17765
17766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17767 "%s: ", __func__);
17768 if (NULL == pWdaParams)
17769 {
17770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17771 "%s: pWdaParams received NULL", __func__);
17772 VOS_ASSERT(0);
17773 return;
17774 }
17775
17776 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17777
17778 if (NULL == pWDA)
17779 {
17780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17781 "%s: pWDA received NULL", __func__);
17782 VOS_ASSERT(0);
17783 goto error;
17784 }
17785
17786 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17787 if (NULL == pMac)
17788 {
17789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17790 "%s:pMac is NULL", __func__);
17791 VOS_ASSERT(0);
17792 goto error;
17793 }
17794
17795 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17796
17797 if (pMac->sme.pEXTScanIndCb)
17798 {
17799 pMac->sme.pEXTScanIndCb(pCallbackContext,
17800 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17801 pEventData);
17802 }
17803 else
17804 {
17805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17806 "%s:HDD callback is null", __func__);
17807 VOS_ASSERT(0);
17808 }
17809
17810
17811error:
17812
17813 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17814 {
17815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17816 }
17817 if (pWdaParams->wdaMsgParam != NULL)
17818 {
17819 vos_mem_free(pWdaParams->wdaMsgParam);
17820 }
17821 vos_mem_free(pWdaParams) ;
17822
17823 return;
17824}
17825
17826/*==========================================================================
17827 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17828
17829 DESCRIPTION
17830 API to send EXTScan Get Capabilities Response to HDD
17831
17832 PARAMETERS
17833 pEventData: Response from FW
17834 pUserData:
17835===========================================================================*/
17836void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17837{
17838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17839 tWDA_CbContext *pWDA = NULL;
17840 void *pCallbackContext;
17841 tpAniSirGlobal pMac;
17842
17843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17844 "%s:", __func__);
17845 if (NULL == pWdaParams)
17846 {
17847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17848 "%s: pWdaParams received NULL", __func__);
17849 VOS_ASSERT(0);
17850 return;
17851 }
17852
17853 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17854
17855 if (NULL == pWDA)
17856 {
17857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17858 "%s: pWDA received NULL", __func__);
17859 VOS_ASSERT(0);
17860 goto error;
17861 }
17862
17863 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17864 if (NULL == pMac)
17865 {
17866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17867 "%s:pMac is NULL", __func__);
17868 VOS_ASSERT(0);
17869 goto error;
17870 }
17871
17872 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17873
17874 if (pMac->sme.pEXTScanIndCb)
17875 {
17876 pMac->sme.pEXTScanIndCb(pCallbackContext,
17877 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17878 pEventData);
17879 }
17880 else
17881 {
17882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17883 "%s:HDD callback is null", __func__);
17884 VOS_ASSERT(0);
17885 }
17886
17887
17888error:
17889
17890 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17891 {
17892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17893 }
17894 if (pWdaParams->wdaMsgParam != NULL)
17895 {
17896 vos_mem_free(pWdaParams->wdaMsgParam);
17897 }
17898 vos_mem_free(pWdaParams) ;
17899
17900 return;
17901}
17902
17903/*==========================================================================
17904 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17905
17906 DESCRIPTION
17907 API to send EXTScan Set BSSID Hotlist Response to HDD
17908
17909 PARAMETERS
17910 pEventData: Response from FW
17911 pUserData:
17912===========================================================================*/
17913void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17914{
17915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17916 tWDA_CbContext *pWDA = NULL;
17917 void *pCallbackContext;
17918 tpAniSirGlobal pMac;
17919
17920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17921 "%s: ", __func__);
17922 if (NULL == pWdaParams)
17923 {
17924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17925 "%s: pWdaParams received NULL", __func__);
17926 VOS_ASSERT(0) ;
17927 return;
17928 }
17929
17930 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17931
17932 if (NULL == pWDA)
17933 {
17934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17935 "%s: pWDA received NULL", __func__);
17936 VOS_ASSERT(0);
17937 goto error;
17938 }
17939
17940 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17941 if (NULL == pMac)
17942 {
17943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17944 "%s:pMac is NULL", __func__);
17945 VOS_ASSERT(0);
17946 goto error;
17947 }
17948
17949 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17950
17951 if (pMac->sme.pEXTScanIndCb)
17952 {
17953 pMac->sme.pEXTScanIndCb(pCallbackContext,
17954 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17955 pEventData);
17956 }
17957 else
17958 {
17959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17960 "%s:HDD callback is null", __func__);
17961 VOS_ASSERT(0);
17962 }
17963
17964
17965error:
17966
17967 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17968 {
17969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17970 }
17971 if (pWdaParams->wdaMsgParam != NULL)
17972 {
17973 vos_mem_free(pWdaParams->wdaMsgParam);
17974 }
17975 vos_mem_free(pWdaParams) ;
17976
17977 return;
17978}
17979
17980/*==========================================================================
17981 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17982
17983 DESCRIPTION
17984 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17985
17986 PARAMETERS
17987 pEventData: Response from FW
17988 pUserData:
17989===========================================================================*/
17990void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17991{
17992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17993 tWDA_CbContext *pWDA = NULL;
17994 void *pCallbackContext;
17995 tpAniSirGlobal pMac;
17996
17997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17998 "%s:", __func__);
17999 if (NULL == pWdaParams)
18000 {
18001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18002 "%s: pWdaParams received NULL", __func__);
18003 VOS_ASSERT(0) ;
18004 return;
18005 }
18006
18007 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18008
18009 if (NULL == pWDA)
18010 {
18011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18012 "%s: pWDA received NULL", __func__);
18013 VOS_ASSERT(0);
18014 goto error;
18015 }
18016
18017 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18018 if (NULL == pMac)
18019 {
18020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18021 "%s:pMac is NULL", __func__);
18022 VOS_ASSERT(0);
18023 goto error;
18024 }
18025
18026 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18027
18028 if (pMac->sme.pEXTScanIndCb)
18029 {
18030 pMac->sme.pEXTScanIndCb(pCallbackContext,
18031 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18032 pEventData);
18033 }
18034 else
18035 {
18036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18037 "%s:HDD callback is null", __func__);
18038 VOS_ASSERT(0);
18039 }
18040
18041
18042error:
18043
18044 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18045 {
18046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18047 }
18048 if (pWdaParams->wdaMsgParam != NULL)
18049 {
18050 vos_mem_free(pWdaParams->wdaMsgParam);
18051 }
18052 vos_mem_free(pWdaParams) ;
18053
18054 return;
18055}
18056
18057/*==========================================================================
18058 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18059
18060 DESCRIPTION
18061 API to send EXTScan Set Significant RSSI Change RSP to HDD
18062
18063 PARAMETERS
18064 pEventData: Response from FW
18065 pUserData:
18066===========================================================================*/
18067void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18068{
18069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18070 tWDA_CbContext *pWDA = NULL;
18071 void *pCallbackContext;
18072 tpAniSirGlobal pMac;
18073
18074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18075 "%s:", __func__);
18076 if (NULL == pWdaParams)
18077 {
18078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18079 "%s: pWdaParams received NULL", __func__);
18080 VOS_ASSERT(0) ;
18081 return;
18082 }
18083
18084 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18085
18086 if (NULL == pWDA)
18087 {
18088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18089 "%s: pWDA received NULL", __func__);
18090 VOS_ASSERT(0);
18091 goto error;
18092 }
18093
18094 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18095 if (NULL == pMac)
18096 {
18097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18098 "%s:pMac is NULL", __func__);
18099 VOS_ASSERT(0);
18100 goto error;
18101 }
18102
18103 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18104
18105 if (pMac->sme.pEXTScanIndCb)
18106 {
18107 pMac->sme.pEXTScanIndCb(pCallbackContext,
18108 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18109 pEventData);
18110 }
18111 else
18112 {
18113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18114 "%s:HDD callback is null", __func__);
18115 VOS_ASSERT(0);
18116 }
18117
18118
18119error:
18120
18121 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18122 {
18123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18124 }
18125 if (pWdaParams->wdaMsgParam != NULL)
18126 {
18127 vos_mem_free(pWdaParams->wdaMsgParam);
18128 }
18129 vos_mem_free(pWdaParams) ;
18130
18131 return;
18132}
18133
18134/*==========================================================================
18135 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18136
18137 DESCRIPTION
18138 API to send EXTScan Set Significant RSSI Change RSP to HDD
18139
18140 PARAMETERS
18141 pEventData: Response from FW
18142 pUserData:
18143===========================================================================*/
18144void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18145 void* pUserData)
18146{
18147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18148 tWDA_CbContext *pWDA = NULL;
18149 void *pCallbackContext;
18150 tpAniSirGlobal pMac;
18151
18152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18153 "%s:", __func__);
18154 if (NULL == pWdaParams)
18155 {
18156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18157 "%s: pWdaParams received NULL", __func__);
18158 VOS_ASSERT(0) ;
18159 return;
18160 }
18161
18162 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18163
18164 if (NULL == pWDA)
18165 {
18166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18167 "%s: pWDA received NULL", __func__);
18168 VOS_ASSERT(0);
18169 goto error;
18170 }
18171
18172 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18173 if (NULL == pMac)
18174 {
18175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18176 "%s:pMac is NULL", __func__);
18177 VOS_ASSERT(0);
18178 goto error;
18179 }
18180
18181 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18182
18183 if (pMac->sme.pEXTScanIndCb)
18184 {
18185 pMac->sme.pEXTScanIndCb(pCallbackContext,
18186 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18187 pEventData);
18188 }
18189 else
18190 {
18191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18192 "%s:HDD callback is null", __func__);
18193 VOS_ASSERT(0);
18194 }
18195
18196
18197error:
18198
18199 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18200 {
18201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18202 }
18203 if (pWdaParams->wdaMsgParam != NULL)
18204 {
18205 vos_mem_free(pWdaParams->wdaMsgParam);
18206 }
18207 vos_mem_free(pWdaParams) ;
18208
18209 return;
18210}
18211
18212/*==========================================================================
18213 FUNCTION WDA_ProcessEXTScanStartReq
18214
18215 DESCRIPTION
18216 API to send EXTScan Start Request to WDI
18217
18218 PARAMETERS
18219 pWDA: Pointer to WDA context
18220 wdaRequest: Pointer to EXTScan req parameters
18221===========================================================================*/
18222VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18223 tSirEXTScanStartReqParams *wdaRequest)
18224{
18225 WDI_Status status = WDI_STATUS_SUCCESS;
18226 tWDA_ReqParams *pWdaParams;
18227
18228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18229 "%s: ", __func__);
18230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18231 if (NULL == pWdaParams)
18232 {
18233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18234 "%s: VOS MEM Alloc Failure", __func__);
18235 VOS_ASSERT(0);
18236 return VOS_STATUS_E_NOMEM;
18237 }
18238 pWdaParams->pWdaContext = pWDA;
18239 pWdaParams->wdaMsgParam = wdaRequest;
18240 pWdaParams->wdaWdiApiMsgParam = NULL;
18241
18242 status = WDI_EXTScanStartReq((void *)wdaRequest,
18243 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18244 (void *)pWdaParams);
18245 if (IS_WDI_STATUS_FAILURE(status))
18246 {
18247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18248 "Failure to request. Free all the memory " );
18249 vos_mem_free(pWdaParams->wdaMsgParam);
18250 vos_mem_free(pWdaParams);
18251 }
18252 return CONVERT_WDI2VOS_STATUS(status);
18253}
18254
18255/*==========================================================================
18256 FUNCTION WDA_ProcessEXTScanStopReq
18257
18258 DESCRIPTION
18259 API to send EXTScan Start Request to WDI
18260
18261 PARAMETERS
18262 pWDA: Pointer to WDA context
18263 wdaRequest: Pointer to EXTScan req parameters
18264===========================================================================*/
18265VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18266 tSirEXTScanStopReqParams *wdaRequest)
18267{
18268 WDI_Status status = WDI_STATUS_SUCCESS;
18269 tWDA_ReqParams *pWdaParams;
18270
18271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18272 "%s:", __func__);
18273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18274 if (NULL == pWdaParams)
18275 {
18276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18277 "%s: VOS MEM Alloc Failure", __func__);
18278 VOS_ASSERT(0);
18279 return VOS_STATUS_E_NOMEM;
18280 }
18281 pWdaParams->pWdaContext = pWDA;
18282 pWdaParams->wdaMsgParam = wdaRequest;
18283 pWdaParams->wdaWdiApiMsgParam = NULL;
18284
18285 status = WDI_EXTScanStopReq((void *)wdaRequest,
18286 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18287 (void *)pWdaParams);
18288 if (IS_WDI_STATUS_FAILURE(status))
18289 {
18290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18291 "Failure to request. Free all the memory " );
18292 vos_mem_free(pWdaParams->wdaMsgParam);
18293 vos_mem_free(pWdaParams);
18294 }
18295 return CONVERT_WDI2VOS_STATUS(status);
18296}
18297
18298/*==========================================================================
18299 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18300
18301 DESCRIPTION
18302 API to send EXTScan Get Cached Results Request to WDI
18303
18304 PARAMETERS
18305 pWDA: Pointer to WDA context
18306 wdaRequest: Pointer to EXTScan req parameters
18307===========================================================================*/
18308VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18309 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18310{
18311 WDI_Status status = WDI_STATUS_SUCCESS;
18312 tWDA_ReqParams *pWdaParams;
18313
18314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18315 "%s: ", __func__);
18316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18317 if (NULL == pWdaParams)
18318 {
18319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18320 "%s: VOS MEM Alloc Failure", __func__);
18321 VOS_ASSERT(0);
18322 return VOS_STATUS_E_NOMEM;
18323 }
18324 pWdaParams->pWdaContext = pWDA;
18325 pWdaParams->wdaMsgParam = wdaRequest;
18326 pWdaParams->wdaWdiApiMsgParam = NULL;
18327
18328 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18329 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18330 (void *)pWdaParams);
18331 if (IS_WDI_STATUS_FAILURE(status))
18332 {
18333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18334 "Failure to request. Free all the memory " );
18335 vos_mem_free(pWdaParams->wdaMsgParam);
18336 vos_mem_free(pWdaParams);
18337 }
18338 return CONVERT_WDI2VOS_STATUS(status);
18339}
18340
18341/*==========================================================================
18342 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18343
18344 DESCRIPTION
18345 API to send EXTScan Get Capabilities Request to WDI
18346
18347 PARAMETERS
18348 pWDA: Pointer to WDA context
18349 wdaRequest: Pointer to EXTScan req parameters
18350===========================================================================*/
18351VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18352 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18353{
18354 WDI_Status status = WDI_STATUS_SUCCESS;
18355 tWDA_ReqParams *pWdaParams;
18356
18357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18358 "%s:", __func__);
18359 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18360 if (NULL == pWdaParams)
18361 {
18362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18363 "%s: VOS MEM Alloc Failure", __func__);
18364 VOS_ASSERT(0);
18365 return VOS_STATUS_E_NOMEM;
18366 }
18367 pWdaParams->pWdaContext = pWDA;
18368 pWdaParams->wdaMsgParam = wdaRequest;
18369 pWdaParams->wdaWdiApiMsgParam = NULL;
18370
18371 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18372 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18373 (void *)pWdaParams);
18374 if (IS_WDI_STATUS_FAILURE(status))
18375 {
18376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18377 "Failure to request. Free all the memory " );
18378 vos_mem_free(pWdaParams->wdaMsgParam);
18379 vos_mem_free(pWdaParams);
18380 }
18381 return CONVERT_WDI2VOS_STATUS(status);
18382}
18383
18384/*==========================================================================
18385 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18386
18387 DESCRIPTION
18388 API to send Set BSSID Hotlist Request to WDI
18389
18390 PARAMETERS
18391 pWDA: Pointer to WDA context
18392 wdaRequest: Pointer to EXTScan req parameters
18393===========================================================================*/
18394VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18395 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18396{
18397 WDI_Status status = WDI_STATUS_SUCCESS;
18398 tWDA_ReqParams *pWdaParams;
18399
18400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18401 "%s: ", __func__);
18402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18403 if (NULL == pWdaParams)
18404 {
18405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18406 "%s: VOS MEM Alloc Failure", __func__);
18407 VOS_ASSERT(0);
18408 return VOS_STATUS_E_NOMEM;
18409 }
18410 pWdaParams->pWdaContext = pWDA;
18411 pWdaParams->wdaMsgParam = wdaRequest;
18412 pWdaParams->wdaWdiApiMsgParam = NULL;
18413
18414 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18415 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18416 (void *)pWdaParams);
18417 if (IS_WDI_STATUS_FAILURE(status))
18418 {
18419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18420 "Failure to request. Free all the memory " );
18421 vos_mem_free(pWdaParams->wdaMsgParam);
18422 vos_mem_free(pWdaParams);
18423 }
18424 return CONVERT_WDI2VOS_STATUS(status);
18425}
18426
18427/*==========================================================================
18428 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18429
18430 DESCRIPTION
18431 API to send Reset BSSID Hotlist Request to WDI
18432
18433 PARAMETERS
18434 pWDA: Pointer to WDA context
18435 wdaRequest: Pointer to EXTScan req parameters
18436===========================================================================*/
18437VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18438 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18439{
18440 WDI_Status status = WDI_STATUS_SUCCESS;
18441 tWDA_ReqParams *pWdaParams;
18442
18443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18444 "%s:", __func__);
18445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18446 if (NULL == pWdaParams)
18447 {
18448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18449 "%s: VOS MEM Alloc Failure", __func__);
18450 VOS_ASSERT(0);
18451 return VOS_STATUS_E_NOMEM;
18452 }
18453 pWdaParams->pWdaContext = pWDA;
18454 pWdaParams->wdaMsgParam = wdaRequest;
18455 pWdaParams->wdaWdiApiMsgParam = NULL;
18456
18457 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18458 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18459 (void *)pWdaParams);
18460 if (IS_WDI_STATUS_FAILURE(status))
18461 {
18462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18463 "Failure to request. Free all the memory " );
18464 vos_mem_free(pWdaParams->wdaMsgParam);
18465 vos_mem_free(pWdaParams);
18466 }
18467 return CONVERT_WDI2VOS_STATUS(status);
18468}
18469
18470/*==========================================================================
18471 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18472
18473 DESCRIPTION
18474 API to send Set Significant RSSI Change Request to WDI
18475
18476 PARAMETERS
18477 pWDA: Pointer to WDA context
18478 wdaRequest: Pointer to EXTScan req parameters
18479===========================================================================*/
18480VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18481 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18482{
18483 WDI_Status status = WDI_STATUS_SUCCESS;
18484 tWDA_ReqParams *pWdaParams;
18485
18486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18487 "%s: ", __func__);
18488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18489 if (NULL == pWdaParams)
18490 {
18491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18492 "%s: VOS MEM Alloc Failure", __func__);
18493 VOS_ASSERT(0);
18494 return VOS_STATUS_E_NOMEM;
18495 }
18496 pWdaParams->pWdaContext = pWDA;
18497 pWdaParams->wdaMsgParam = wdaRequest;
18498 pWdaParams->wdaWdiApiMsgParam = NULL;
18499
18500 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18501 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18502 (void *)pWdaParams);
18503 if (IS_WDI_STATUS_FAILURE(status))
18504 {
18505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18506 "Failure to request. Free all the memory " );
18507 vos_mem_free(pWdaParams->wdaMsgParam);
18508 vos_mem_free(pWdaParams);
18509 }
18510 return CONVERT_WDI2VOS_STATUS(status);
18511}
18512
18513/*==========================================================================
18514 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18515
18516 DESCRIPTION
18517 API to send Reset Significant RSSI Change Request to WDI
18518
18519 PARAMETERS
18520 pWDA: Pointer to WDA context
18521 wdaRequest: Pointer to EXTScan req parameters
18522===========================================================================*/
18523VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18524 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18525{
18526 WDI_Status status = WDI_STATUS_SUCCESS;
18527 tWDA_ReqParams *pWdaParams;
18528
18529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18530 "%s:", __func__);
18531 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18532 if (NULL == pWdaParams)
18533 {
18534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18535 "%s: VOS MEM Alloc Failure", __func__);
18536 VOS_ASSERT(0);
18537 return VOS_STATUS_E_NOMEM;
18538 }
18539 pWdaParams->pWdaContext = pWDA;
18540 pWdaParams->wdaMsgParam = wdaRequest;
18541 pWdaParams->wdaWdiApiMsgParam = NULL;
18542
18543 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18544 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18545 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18546 (void *)pWdaParams);
18547 if (IS_WDI_STATUS_FAILURE(status))
18548 {
18549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18550 "Failure to request. Free all the memory " );
18551 vos_mem_free(pWdaParams->wdaMsgParam);
18552 vos_mem_free(pWdaParams);
18553 }
18554 return CONVERT_WDI2VOS_STATUS(status);
18555}
18556#endif /* WLAN_FEATURE_EXTSCAN */
18557
Sunil Duttbd736ed2014-05-26 21:19:41 +053018558#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18559
18560/*==========================================================================
18561 FUNCTION WDA_LLStatsSetRspCallback
18562
18563 DESCRIPTION
18564 API to process set link layer statistics response from FW
18565
18566 PARAMETERS
18567 pRsp: Pointer to set link layer statistics response
18568 pUserData: Pointer to user data
18569
18570 RETURN VALUE
18571 NONE
18572
18573===========================================================================*/
18574void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18575{
18576 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18577
18578
18579 if (NULL == pWdaParams)
18580 {
18581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18582 "%s: pWdaParams received NULL", __func__);
18583 VOS_ASSERT(0) ;
18584 return ;
18585 }
18586
18587 /* Do not need to send notification to upper layer
18588 * Just free allocated resources */
18589 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18590 {
18591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18592 }
18593 if (pWdaParams->wdaMsgParam != NULL)
18594 {
18595 vos_mem_free(pWdaParams->wdaMsgParam);
18596 }
18597 vos_mem_free(pWdaParams) ;
18598
18599 return;
18600}
18601
18602/*==========================================================================
18603 FUNCTION WDA_ProcessLLStatsSetReq
18604
18605 DESCRIPTION
18606 API to send Set Link Layer Stats request to WDI
18607
18608 PARAMETERS
18609 pWDA: Pointer to WDA context
18610 wdaRequest: Pointer to set Link Layer Stats req parameters
18611===========================================================================*/
18612VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18613 tSirLLStatsSetReq *wdaRequest)
18614{
18615 WDI_Status status = WDI_STATUS_SUCCESS;
18616 tWDA_ReqParams *pWdaParams;
18617
18618 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18619 if (NULL == pWdaParams)
18620 {
18621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18622 "%s: VOS MEM Alloc Failure", __func__);
18623 VOS_ASSERT(0);
18624 return VOS_STATUS_E_NOMEM;
18625 }
18626 pWdaParams->pWdaContext = pWDA;
18627 pWdaParams->wdaMsgParam = wdaRequest;
18628 pWdaParams->wdaWdiApiMsgParam = NULL;
18629
18630 status = WDI_LLStatsSetReq((void *)wdaRequest,
18631 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18632 (void *)pWdaParams);
18633 if (IS_WDI_STATUS_FAILURE(status))
18634 {
18635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18636 "Failure to request. Free all the memory " );
18637 vos_mem_free(pWdaParams->wdaMsgParam);
18638 vos_mem_free(pWdaParams);
18639 }
18640 return CONVERT_WDI2VOS_STATUS(status);
18641}
18642
18643/*==========================================================================
18644 FUNCTION WDA_LLStatsGetRspCallback
18645
18646 DESCRIPTION
18647 API to process get link layer statistics response from FW
18648
18649 PARAMETERS
18650 pRsp: Pointer to get link layer statistics response
18651 pUserData: Pointer to user data
18652
18653 RETURN VALUE
18654 NONE
18655
18656===========================================================================*/
18657void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18658{
18659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18660
18661 if (NULL == pWdaParams)
18662 {
18663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18664 "%s: pWdaParams received NULL", __func__);
18665 VOS_ASSERT(0) ;
18666 return ;
18667 }
18668
18669 /* Do not need to send notification to upper layer
18670 * Just free allocated resources */
18671 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18672 {
18673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18674 }
18675 if (pWdaParams->wdaMsgParam != NULL)
18676 {
18677 vos_mem_free(pWdaParams->wdaMsgParam);
18678 }
18679 vos_mem_free(pWdaParams) ;
18680
18681 return;
18682}
18683
18684/*==========================================================================
18685 FUNCTION WDA_ProcessLLStatsGetReq
18686
18687 DESCRIPTION
18688 API to send Get Link Layer Stats request to WDI
18689
18690 PARAMETERS
18691 pWDA: Pointer to WDA context
18692 wdaRequest: Pointer to get Link Layer Stats req parameters
18693===========================================================================*/
18694VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18695 tSirLLStatsGetReq *wdaRequest)
18696{
18697 WDI_Status status = WDI_STATUS_SUCCESS;
18698 tWDA_ReqParams *pWdaParams;
18699
18700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18701 if (NULL == pWdaParams)
18702 {
18703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18704 "%s: VOS MEM Alloc Failure", __func__);
18705 VOS_ASSERT(0);
18706 return VOS_STATUS_E_NOMEM;
18707 }
18708 pWdaParams->pWdaContext = pWDA;
18709 pWdaParams->wdaMsgParam = wdaRequest;
18710 pWdaParams->wdaWdiApiMsgParam = NULL;
18711
18712 status = WDI_LLStatsGetReq((void *) wdaRequest,
18713 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18714 (void *)pWdaParams);
18715 if (IS_WDI_STATUS_FAILURE(status))
18716 {
18717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18718 "Failure to request. Free all the memory " );
18719 vos_mem_free(pWdaParams->wdaMsgParam);
18720 vos_mem_free(pWdaParams);
18721 }
18722 return CONVERT_WDI2VOS_STATUS(status);
18723}
18724
18725/*==========================================================================
18726 FUNCTION WDA_LLStatsClearRspCallback
18727
18728 DESCRIPTION
18729 API to process clear link layer statistics response from FW
18730
18731 PARAMETERS
18732 pRsp: Pointer to clear link layer statistics response
18733 pUserData: Pointer to user data
18734
18735 RETURN VALUE
18736 NONE
18737
18738===========================================================================*/
18739void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18740{
18741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18742
18743
18744 if (NULL == pWdaParams)
18745 {
18746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18747 "%s: pWdaParams received NULL", __func__);
18748 VOS_ASSERT(0) ;
18749 return ;
18750 }
18751 /* Do not need to send notification to upper layer
18752 * Just free allocated resources */
18753 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18754 {
18755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18756 }
18757 if (pWdaParams->wdaMsgParam != NULL)
18758 {
18759 vos_mem_free(pWdaParams->wdaMsgParam);
18760 }
18761 vos_mem_free(pWdaParams) ;
18762 return;
18763}
18764
18765/*==========================================================================
18766 FUNCTION WDA_ProcessLLStatsClearReq
18767
18768 DESCRIPTION
18769 API to send Clear Link Layer Stats request to WDI
18770
18771 PARAMETERS
18772 pWDA: Pointer to WDA context
18773 wdaRequest: Pointer to earLink Layer Stats req
18774===========================================================================*/
18775VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18776 tSirLLStatsClearReq *wdaRequest)
18777{
18778 WDI_Status status = WDI_STATUS_SUCCESS;
18779 tWDA_ReqParams *pWdaParams;
18780
18781 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18782 if (NULL == pWdaParams)
18783 {
18784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18785 "%s: VOS MEM Alloc Failure", __func__);
18786 VOS_ASSERT(0);
18787 return VOS_STATUS_E_NOMEM;
18788 }
18789 pWdaParams->pWdaContext = pWDA;
18790 pWdaParams->wdaMsgParam = wdaRequest;
18791 pWdaParams->wdaWdiApiMsgParam = NULL;
18792
18793 status = WDI_LLStatsClearReq((void *) wdaRequest,
18794 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18795 (void *)pWdaParams);
18796 if (IS_WDI_STATUS_FAILURE(status))
18797 {
18798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18799 "Failure to request. Free all the memory " );
18800 vos_mem_free(pWdaParams->wdaMsgParam);
18801 vos_mem_free(pWdaParams);
18802 }
18803 return CONVERT_WDI2VOS_STATUS(status);
18804}
18805
18806#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018807
Abhishek Singh85b74712014-10-08 11:38:19 +053018808void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18809{
18810 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18811
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18813 "<------ %s " ,__func__);
18814 if (NULL == fwStatsinfo)
18815 {
18816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18817 "%s: pWdaParams received NULL", __func__);
18818 VOS_ASSERT(0);
18819 return;
18820 }
18821
18822 if(fwStatsinfo->callback)
18823 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18824
18825 vos_mem_free(pUserData);
18826 return;
18827}
18828
18829
18830v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18831 tSirFWStatsGetReq *pData)
18832{
18833
18834 WDI_Status wdiStatus;
18835 tSirFWStatsInfo *fwStatsinfo;
18836
18837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18838 "------> %s" , __func__);
18839
18840 fwStatsinfo =
18841 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18842 if (NULL == fwStatsinfo)
18843 {
18844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18845 "%s: VOS MEM Alloc Failure", __func__);
18846 VOS_ASSERT(0);
18847 vos_mem_free(pData);
18848 return;
18849 }
18850
18851 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18852 fwStatsinfo->data = pData->data;
18853
18854 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18855 WDA_FWStatsGetRspCallback,
18856 pData->stats);
18857 if (WDI_STATUS_PENDING == wdiStatus)
18858 {
18859 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18860 "Pending received for %s:%d ", __func__, __LINE__);
18861 }
18862 else if (WDI_STATUS_SUCCESS != wdiStatus)
18863 {
18864 if (fwStatsinfo->callback)
18865 {
18866 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18867 }
18868 vos_mem_free(fwStatsinfo);
18869 }
18870 vos_mem_free(pData);
18871}
18872
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018873/*==========================================================================
18874 FUNCTION WDA_EncryptMsgRspCallback
18875
18876 DESCRIPTION
18877 API to send Encrypt message response to HDD
18878
18879 PARAMETERS
18880 pEventData: Response from FW
18881 pUserData: Data sent to firmware as part of request
18882===========================================================================*/
18883void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18884 void* pUserData)
18885{
18886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18887 tWDA_CbContext *pWDA = NULL;
18888 tpAniSirGlobal pMac;
18889 vos_msg_t vosMsg;
18890 tpSirEncryptedDataRspParams pEncRspParams;
18891 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18892
18893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18894 FL("%s:"), __func__);
18895 if (NULL == pWdaParams)
18896 {
18897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18898 FL("%s: pWdaParams received NULL"), __func__);
18899 VOS_ASSERT(0);
18900 return;
18901 }
18902
18903 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18904
18905 if (NULL == pWDA)
18906 {
18907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18908 FL("%s: pWDA received NULL"), __func__);
18909 VOS_ASSERT(0);
18910 goto error;
18911 }
18912
18913 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18914 if (NULL == pMac)
18915 {
18916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18917 FL("%s:pMac is NULL"), __func__);
18918 VOS_ASSERT(0);
18919 goto error;
18920 }
18921
18922 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18923
18924 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18925 if (NULL == pEncRspParams)
18926 {
18927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18928 FL("%s: VOS MEM Alloc Failure"), __func__);
18929 VOS_ASSERT(0);
18930 goto error;
18931 }
18932
18933 /* Message Header */
18934 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18935 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18936 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18937 pEncryptedDataRsp->encryptedPayload.length;
18938 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18939 pEncryptedDataRsp->encryptedPayload.data,
18940 pEncryptedDataRsp->encryptedPayload.length);
18941
18942 /* VOS message wrapper */
18943 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18944 vosMsg.bodyptr = (void *)pEncRspParams;
18945 vosMsg.bodyval = 0;
18946
18947 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18948 {
18949 /* free the mem */
18950 vos_mem_free((v_VOID_t *) pEncRspParams);
18951 }
18952
18953error:
18954
18955 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18956 {
18957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18958 }
18959 if (pWdaParams->wdaMsgParam != NULL)
18960 {
18961 vos_mem_free(pWdaParams->wdaMsgParam);
18962 }
18963 vos_mem_free(pWdaParams) ;
18964
18965 return;
18966}
18967/*==========================================================================
18968 FUNCTION WDA_ProcessEncryptMsgReq
18969
18970 DESCRIPTION
18971 API to send Encrypt message Request to WDI
18972
18973 PARAMETERS
18974 pWDA: Pointer to WDA context
18975 wdaRequest: Pointer to Encrypt_msg req parameters
18976===========================================================================*/
18977VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18978 u8 *wdaRequest)
18979{
18980 WDI_Status status = WDI_STATUS_SUCCESS;
18981 tWDA_ReqParams *pWdaParams;
18982
18983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18984 FL("%s: "), __func__);
18985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18986 if (NULL == pWdaParams)
18987 {
18988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18989 FL("%s: VOS MEM Alloc Failure"), __func__);
18990 VOS_ASSERT(0);
18991 return VOS_STATUS_E_NOMEM;
18992 }
18993 pWdaParams->pWdaContext = pWDA;
18994 pWdaParams->wdaMsgParam = wdaRequest;
18995 pWdaParams->wdaWdiApiMsgParam = NULL;
18996
18997 status = WDI_EncryptMsgReq((void *)wdaRequest,
18998 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18999 (void *)pWdaParams);
19000 if (IS_WDI_STATUS_FAILURE(status))
19001 {
19002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19003 FL("Failure to request. Free all the memory " ));
19004 vos_mem_free(pWdaParams->wdaMsgParam);
19005 vos_mem_free(pWdaParams);
19006 }
19007 return CONVERT_WDI2VOS_STATUS(status);
19008}