blob: e9dd171a899c463af2868b30fda8859b1cdfea97 [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);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530258VOS_STATUS
259WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
260 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530261
Srinivas Dasari32a79262015-02-19 13:04:49 +0530262
Katya Nigamf0511f62015-05-05 16:40:57 +0530263VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
264VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530265/*
266 * FUNCTION: WDA_ProcessNanRequest
267 * Process NAN request
268 */
269VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
270 tNanRequest *wdaRequest)
271{
272 WDI_Status status = WDI_STATUS_SUCCESS;
273 tWDA_ReqParams *pWdaParams;
274 WDI_NanRequestType *wdiRequest = NULL;
275 size_t wdiReqLength = sizeof(WDI_NanRequestType)
276 - sizeof(wdiRequest->request_data)
277 + wdaRequest->request_data_len;
278
279 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
280
281 if (NULL == wdiRequest)
282 {
283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
284 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
285 wdiReqLength);
286 vos_mem_free(wdaRequest);
287 return VOS_STATUS_E_NOMEM;
288 }
289
290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
291 "WDA: Process Nan Request length: %zu", wdiReqLength);
292
293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
294 if (NULL == pWdaParams)
295 {
296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
297 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
298 VOS_ASSERT(0);
299 vos_mem_free(wdaRequest);
300 vos_mem_free(wdiRequest);
301 return VOS_STATUS_E_NOMEM;
302 }
303
304 wdiRequest->request_data_len = wdaRequest->request_data_len;
305
306 vos_mem_copy( wdiRequest->request_data,
307 wdaRequest->request_data,
308 wdaRequest->request_data_len);
309
310 vos_mem_free(wdaRequest);
311
312 pWdaParams->pWdaContext = pWDA;
313 pWdaParams->wdaMsgParam = NULL;
314 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
315
316 status = WDI_NanRequest(wdiRequest, pWdaParams);
317
318 if (IS_WDI_STATUS_FAILURE(status))
319 {
320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
321 "Failure to request. Free all the memory " );
322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
323 vos_mem_free(pWdaParams);
324 }
325
326 return CONVERT_WDI2VOS_STATUS(status) ;
327}
328
329
330
Jeff Johnson295189b2012-06-20 16:38:30 -0700331/*
332 * FUNCTION: WDA_open
333 * Allocate the WDA context
334 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530335VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 tMacOpenParameters *pMacParams )
337{
338 tWDA_CbContext *wdaContext;
339 VOS_STATUS status;
340 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530342 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
344 if(!VOS_IS_STATUS_SUCCESS(status))
345 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
347 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return VOS_STATUS_E_NOMEM;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 /*__asm int 3;*/
351 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
352
353 /* Initialize data structures */
354 wdaContext->pVosContext = pVosContext;
355 wdaContext->wdaState = WDA_INIT_STATE;
356 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
357
358 /* Initialize WDA-WDI synchronization event */
359 status = vos_event_init(&wdaContext->wdaWdiEvent);
360 if(!VOS_IS_STATUS_SUCCESS(status))
361 {
362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800363 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800364 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700366 /* Init Frame transfer event */
367 status = vos_event_init(&wdaContext->txFrameEvent);
368 if(!VOS_IS_STATUS_SUCCESS(status))
369 {
370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800371 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800372 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700373 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 status = vos_event_init(&wdaContext->suspendDataTxEvent);
375 if(!VOS_IS_STATUS_SUCCESS(status))
376 {
377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800378 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800379 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
382 if(!VOS_IS_STATUS_SUCCESS(status))
383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800385 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800386 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530390 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 &wdiDevCapability, pMacParams->driverType))
392 {
393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
394 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800395 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 }
397 else
398 {
399 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
400 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
401 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 /* update max STA in WDA used for BA */
403 wdaContext->wdaMaxSta = pMacParams->maxStation;
404 /* store the frameTransRequired flag in wdaContext, to send this to HAL
405 * in WDA_Start
406 */
407 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
408 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800410
411error:
412 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
413 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700414}
415
Jeff Johnson295189b2012-06-20 16:38:30 -0700416/*
417 * FUNCTION: WDA_preStart
418 * Trigger DAL-AL to start CFG download
419 */
420VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
421{
422 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
423 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 /*
425 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
426 */
427 wdaMsg.type = WNI_CFG_DNLD_REQ ;
428 wdaMsg.bodyptr = NULL;
429 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* post the message.. */
431 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
432 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
433 {
434 vosStatus = VOS_STATUS_E_BADMSG;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return( vosStatus );
437}
Jeff Johnson295189b2012-06-20 16:38:30 -0700438/*
439 * FUNCTION: WDA_wdiStartCallback
440 * Once WDI_Start is finished, WDI start callback will be called by WDI
441 * to indicate completion of WDI_Start.
442 */
443void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
444 void *pVosContext)
445{
446 tWDA_CbContext *wdaContext;
447 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 if (NULL == pVosContext)
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700451 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 return;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
455 if (NULL == wdaContext)
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 return;
460 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 wdaContext->wdaState = WDA_START_STATE;
469 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* extract and save version information from the Start Response */
471 wdaContext->wcnssWlanCompiledVersion.major =
472 wdiRspParams->wlanCompiledVersion.major;
473 wdaContext->wcnssWlanCompiledVersion.minor =
474 wdiRspParams->wlanCompiledVersion.minor;
475 wdaContext->wcnssWlanCompiledVersion.version =
476 wdiRspParams->wlanCompiledVersion.version;
477 wdaContext->wcnssWlanCompiledVersion.revision =
478 wdiRspParams->wlanCompiledVersion.revision;
479 wdaContext->wcnssWlanReportedVersion.major =
480 wdiRspParams->wlanReportedVersion.major;
481 wdaContext->wcnssWlanReportedVersion.minor =
482 wdiRspParams->wlanReportedVersion.minor;
483 wdaContext->wcnssWlanReportedVersion.version =
484 wdiRspParams->wlanReportedVersion.version;
485 wdaContext->wcnssWlanReportedVersion.revision =
486 wdiRspParams->wlanReportedVersion.revision;
487 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
488 wdiRspParams->wcnssSoftwareVersion,
489 sizeof(wdaContext->wcnssSoftwareVersionString));
490 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
491 wdiRspParams->wcnssHardwareVersion,
492 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 /* Notify WDA_start that WDI_Start has completed */
494 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700495 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 {
497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700498 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_start
505 * Prepare TLV configuration and call WDI_Start.
506 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700507VOS_STATUS WDA_start(v_PVOID_t pVosContext)
508{
509 tWDA_CbContext *wdaContext;
510 VOS_STATUS status;
511 WDI_Status wdiStatus;
512 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 if (NULL == pVosContext)
514 {
515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700516 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 return VOS_STATUS_E_FAILURE;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
520 if (NULL == wdaContext)
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 return VOS_STATUS_E_FAILURE;
525 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* Non-FTM mode, WDA status for START must be INIT
527 * FTM mode, WDA Status for START can be INIT or STOP */
528 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
529 (WDA_STOP_STATE != wdaContext->wdaState) )
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
532 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700533 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 return VOS_STATUS_E_FAILURE;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 /* initialize the wdiStartParam. Note that we can create this on
537 the stack since we won't exit until WDI_Start() completes or
538 times out */
539 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 /* prepare the config TLV for the WDI */
542 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
543 if ( !VOS_IS_STATUS_SUCCESS(status) )
544 {
545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700546 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 return VOS_STATUS_E_FAILURE;
548 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* note from here onwards if an error occurs we must
550 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
552 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
553 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* initialize the WDA-WDI synchronization event */
555 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 /* call WDI start */
557 wdiStatus = WDI_Start(&wdiStartParam,
558 (WDI_StartRspCb)WDA_wdiStartCallback,
559 (v_VOID_t *)pVosContext);
560 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 vos_mem_free(wdiStartParam.pConfigBuffer);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 /* wait for WDI start to invoke our callback */
568 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
569 WDA_WDI_START_TIMEOUT );
570 if ( !VOS_IS_STATUS_SUCCESS(status) )
571 {
572 if ( VOS_STATUS_E_TIMEOUT == status )
573 {
574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700575 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 }
577 else
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
580 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700581 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 }
583 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530584 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* we no longer need the config TLV */
588 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* if we are not in the START state then WDI_Start() failed */
590 if (WDA_START_STATE != wdaContext->wdaState)
591 {
592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700593 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 return VOS_STATUS_E_FAILURE;
595 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 /* FTM mode does not need to monitor BA activity */
597 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
598 {
599 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800600 if(VOS_STATUS_SUCCESS == status)
601 {
602 wdaContext->wdaTimersCreated = VOS_TRUE;
603 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530604 else
605 {
606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
607 FL("wda create timers failed"));
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 }
Leo Chang9d76f622013-08-23 16:34:52 -0700610 else
611 {
612 vos_event_init(&wdaContext->ftmStopDoneEvent);
613 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700614 return status;
615}
616
Jeff Johnson295189b2012-06-20 16:38:30 -0700617/*
618 * FUNCTION: WDA_prepareConfigTLV
619 * Function to prepare CFG for DAL(WDA)
620 */
621VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
622 WDI_StartReqParamsType *wdiStartParams )
623{
624 /* get pMac to acess CFG data base */
625 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
626 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
627 tHalCfg *tlvStruct = NULL ;
628 tANI_U8 *tlvStructStart = NULL ;
629 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
630 v_PVOID_t *configParam;
631 tANI_U32 configParamSize;
632 tANI_U32 *configDataValue;
633 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700634 tANI_U8 i;
635
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 if ((NULL == pMac)||(NULL == wdaContext))
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700639 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 VOS_ASSERT(0);
641 return VOS_STATUS_E_FAILURE;
642 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
644 WNI_CFG_STA_ID_LEN +
645 WNI_CFG_EDCA_WME_ACBK_LEN +
646 WNI_CFG_EDCA_WME_ACBE_LEN +
647 WNI_CFG_EDCA_WME_ACVI_LEN +
648 WNI_CFG_EDCA_WME_ACVO_LEN +
649 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 /* malloc memory for all configs in one shot */
651 configParam = vos_mem_malloc(configParamSize);
652
653 if(NULL == configParam )
654 {
655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700656 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 VOS_ASSERT(0) ;
658 return VOS_STATUS_E_NOMEM;
659 }
660 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 tlvStruct = (tHalCfg *)configParam;
663 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 /* TODO: Remove Later */
665 /* QWLAN_HAL_CFG_STA_ID */
666 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
667 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
668 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
669 eSIR_SUCCESS)
670 {
671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
672 "Failed to get value for WNI_CFG_STA_ID");
673 goto handle_failure;
674 }
675 tlvStruct->length = strLength ;
676 /* calculate the pad bytes to have the CFG in aligned format */
677 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
678 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
682 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
686 != eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
695 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
699 eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
708 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
712 != eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length)) ;
720
721 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
722 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
723 tlvStruct->length = sizeof(tANI_U32);
724 configDataValue = (tANI_U32 *)(tlvStruct + 1);
725 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
726 configDataValue ) != eSIR_SUCCESS)
727 {
728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
729 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
730 goto handle_failure;
731 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
733 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* QWLAN_HAL_CFG_CAL_PERIOD */
735 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
736 tlvStruct->length = sizeof(tANI_U32);
737 configDataValue = (tANI_U32 *)(tlvStruct + 1);
738 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
739 != eSIR_SUCCESS)
740 {
741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
742 "Failed to get value for WNI_CFG_CAL_PERIOD");
743 goto handle_failure;
744 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
746 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 /* QWLAN_HAL_CFG_CAL_CONTROL */
748 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
749 tlvStruct->length = sizeof(tANI_U32);
750 configDataValue = (tANI_U32 *)(tlvStruct + 1);
751 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
752 != eSIR_SUCCESS)
753 {
754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
755 "Failed to get value for WNI_CFG_CAL_CONTROL");
756 goto handle_failure;
757 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700758 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
759 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 /* QWLAN_HAL_CFG_PROXIMITY */
761 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
762 tlvStruct->length = sizeof(tANI_U32);
763 configDataValue = (tANI_U32 *)(tlvStruct + 1);
764 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
765 != eSIR_SUCCESS)
766 {
767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
768 "Failed to get value for WNI_CFG_PROXIMITY");
769 goto handle_failure;
770 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700771 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
772 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
774 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
778 != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
787 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
791 eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
800 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
801 tlvStruct->length = sizeof(tANI_U32);
802 configDataValue = (tANI_U32 *)(tlvStruct + 1);
803 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
804 configDataValue ) != eSIR_SUCCESS)
805 {
806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
807 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
808 goto handle_failure;
809 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
811 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700812 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
813 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
817 eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
826 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
827 tlvStruct->length = sizeof(tANI_U32);
828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
829 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
830 eSIR_SUCCESS)
831 {
832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
833 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
834 goto handle_failure;
835 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700836 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
837 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
839 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
840 tlvStruct->length = sizeof(tANI_U32);
841 configDataValue = (tANI_U32 *)(tlvStruct + 1);
842 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
843 eSIR_SUCCESS)
844 {
845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
846 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
847 goto handle_failure;
848 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700849 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
850 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
852 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
853 tlvStruct->length = sizeof(tANI_U32);
854 configDataValue = (tANI_U32 *)(tlvStruct + 1);
855 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
856 configDataValue ) != eSIR_SUCCESS)
857 {
858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
859 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
860 goto handle_failure;
861 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
863 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
865 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
866 tlvStruct->length = sizeof(tANI_U32);
867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
868 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
869 configDataValue ) != eSIR_SUCCESS)
870 {
871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
872 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
873 goto handle_failure;
874 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
876 + sizeof(tHalCfg) + tlvStruct->length));
877
878 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
879 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
880 tlvStruct->length = sizeof(tANI_U32);
881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
882 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
883 configDataValue ) != eSIR_SUCCESS)
884 {
885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
886 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
887 goto handle_failure;
888 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
890 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
892 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
893 tlvStruct->length = sizeof(tANI_U32);
894 configDataValue = (tANI_U32 *)(tlvStruct + 1);
895 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
896 configDataValue ) != eSIR_SUCCESS)
897 {
898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
899 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
900 goto handle_failure;
901 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700902 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
903 + sizeof(tHalCfg) + tlvStruct->length));
904
905 /* QWLAN_HAL_CFG_FIXED_RATE */
906 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
907 tlvStruct->length = sizeof(tANI_U32);
908 configDataValue = (tANI_U32 *)(tlvStruct + 1);
909 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
910 != eSIR_SUCCESS)
911 {
912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
913 "Failed to get value for WNI_CFG_FIXED_RATE");
914 goto handle_failure;
915 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
917 + sizeof(tHalCfg) + tlvStruct->length));
918
919 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
920 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
921 tlvStruct->length = sizeof(tANI_U32);
922 configDataValue = (tANI_U32 *)(tlvStruct + 1);
923 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
924 != eSIR_SUCCESS)
925 {
926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
927 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
928 goto handle_failure;
929 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700930 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
931 + sizeof(tHalCfg) + tlvStruct->length));
932
933 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
934 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
947 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
951 configDataValue ) != eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
955 goto handle_failure;
956 }
957 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
960 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
961 tlvStruct->length = sizeof(tANI_U32);
962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
963 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
964 configDataValue ) != eSIR_SUCCESS)
965 {
966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
967 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
968 goto handle_failure;
969 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
971 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700972 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
973 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
974 tlvStruct->length = sizeof(tANI_U32);
975 configDataValue = (tANI_U32 *)(tlvStruct + 1);
976 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
977 configDataValue ) != eSIR_SUCCESS)
978 {
979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
980 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
981 goto handle_failure;
982 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
984 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700985 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
986 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
987 tlvStruct->length = sizeof(tANI_U32);
988 configDataValue = (tANI_U32 *)(tlvStruct + 1);
989 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
990 configDataValue ) != eSIR_SUCCESS)
991 {
992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
993 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
994 goto handle_failure;
995 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
997 + sizeof(tHalCfg) + tlvStruct->length);
998
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1000 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1001 tlvStruct->length = sizeof(tANI_U32);
1002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1003 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1004 configDataValue ) != eSIR_SUCCESS)
1005 {
1006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1007 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1008 goto handle_failure;
1009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1013 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1017 configDataValue ) != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1026 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1027 tlvStruct->length = sizeof(tANI_U32);
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1030 eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1034 goto handle_failure;
1035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1037 + sizeof(tHalCfg) + tlvStruct->length);
1038
1039 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1040 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1041 tlvStruct->length = sizeof(tANI_U32);
1042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1043 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1044 configDataValue ) != eSIR_SUCCESS)
1045 {
1046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1047 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1048 goto handle_failure;
1049 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1051 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1053 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1054 tlvStruct->length = sizeof(tANI_U32);
1055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1056 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1057 configDataValue ) != eSIR_SUCCESS)
1058 {
1059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1060 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1061 goto handle_failure;
1062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1064 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1066 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1067 tlvStruct->length = sizeof(tANI_U32);
1068 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1069 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1070 configDataValue ) != eSIR_SUCCESS)
1071 {
1072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1073 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1074 goto handle_failure;
1075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1077 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1079 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1080 tlvStruct->length = sizeof(tANI_U32);
1081 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1082 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1083 configDataValue ) != eSIR_SUCCESS)
1084 {
1085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1086 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1087 goto handle_failure;
1088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1090 + sizeof(tHalCfg) + tlvStruct->length);
1091
1092 /* QWLAN_HAL_CFG_STATS_PERIOD */
1093 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1094 tlvStruct->length = sizeof(tANI_U32);
1095 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1096 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1097 eSIR_SUCCESS)
1098 {
1099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1100 "Failed to get value for WNI_CFG_STATS_PERIOD");
1101 goto handle_failure;
1102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1104 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1106 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1107 tlvStruct->length = sizeof(tANI_U32);
1108 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1109 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1110 eSIR_SUCCESS)
1111 {
1112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1113 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1114 goto handle_failure;
1115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1117 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1119 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1120 tlvStruct->length = sizeof(tANI_U32);
1121 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1122 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1123 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1125 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1127 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1128 tlvStruct->length = sizeof(tANI_U32);
1129 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1130 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1131 != eSIR_SUCCESS)
1132 {
1133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1134 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1135 goto handle_failure;
1136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1138 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1140 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1141 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1142 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1143 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1144 &strLength) != eSIR_SUCCESS)
1145 {
1146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1147 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1148 goto handle_failure;
1149 }
1150 tlvStruct->length = strLength;
1151 /* calculate the pad bytes to have the CFG in aligned format */
1152 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1153 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1157 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1158 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1161 &strLength) != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1165 goto handle_failure;
1166 }
1167 tlvStruct->length = strLength;
1168 /* calculate the pad bytes to have the CFG in aligned format */
1169 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1170 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1172 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1174 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1175 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1176 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1177 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1178 &strLength) != eSIR_SUCCESS)
1179 {
1180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1181 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1182 goto handle_failure;
1183 }
1184 tlvStruct->length = strLength;
1185 /* calculate the pad bytes to have the CFG in aligned format */
1186 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1187 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1189 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001190 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1191 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1192 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1194 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1195 &strLength) != eSIR_SUCCESS)
1196 {
1197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1198 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1199 goto handle_failure;
1200 }
1201 tlvStruct->length = strLength;
1202 /* calculate the pad bytes to have the CFG in aligned format */
1203 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1204 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1206 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1208 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1209 tlvStruct->length = sizeof(tANI_U32);
1210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1211 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1212 != eSIR_SUCCESS)
1213 {
1214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1215 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1216 goto handle_failure;
1217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1219 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1221 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1222 tlvStruct->length = sizeof(tANI_U32);
1223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1224 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1225 != eSIR_SUCCESS)
1226 {
1227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1228 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1229 goto handle_failure;
1230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1232 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001233 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1234 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1235 tlvStruct->length = sizeof(tANI_U32);
1236 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1237 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1238 != eSIR_SUCCESS)
1239 {
1240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1241 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1242 goto handle_failure;
1243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1245 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1247 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1248 tlvStruct->length = sizeof(tANI_U32);
1249 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1250 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1251 != eSIR_SUCCESS)
1252 {
1253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1254 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1255 goto handle_failure;
1256 }
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1260 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1264 != eSIR_SUCCESS)
1265 {
1266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1267 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1268 goto handle_failure;
1269 }
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1273 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1277 != eSIR_SUCCESS)
1278 {
1279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1280 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1281 goto handle_failure;
1282 }
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1286 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1290 != eSIR_SUCCESS)
1291 {
1292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1293 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1294 goto handle_failure;
1295 }
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001298 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1299 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1300 tlvStruct->length = sizeof(tANI_U32);
1301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1302 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1303 != eSIR_SUCCESS)
1304 {
1305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1306 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1307 goto handle_failure;
1308 }
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001311 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1312 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1313 tlvStruct->length = sizeof(tANI_U32);
1314 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1315 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1316 != eSIR_SUCCESS)
1317 {
1318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1319 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1320 goto handle_failure;
1321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001324 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1325 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1326 tlvStruct->length = sizeof(tANI_U32);
1327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1328 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1329 != eSIR_SUCCESS)
1330 {
1331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1332 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1333 goto handle_failure;
1334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1336 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1338 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1339 tlvStruct->length = sizeof(tANI_U32);
1340 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1341 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1342 != eSIR_SUCCESS)
1343 {
1344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1345 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1346 goto handle_failure;
1347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001348 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1349 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001350 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1351 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1352 * into FW, so the parameters are added here.
1353 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001354 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1362 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1363 tlvStruct->length = sizeof(tANI_U32);
1364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1365 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001368 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001375 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1376 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1377 tlvStruct->length = sizeof(tANI_U32);
1378 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1379 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
1382
1383 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1384 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1385 tlvStruct->length = sizeof(tANI_U32);
1386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1387 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1388 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1389 + sizeof(tHalCfg) + tlvStruct->length) ;
1390
1391 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1392 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1396 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1397 + sizeof(tHalCfg) + tlvStruct->length) ;
1398
1399 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1400 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1401 tlvStruct->length = sizeof(tANI_U32);
1402 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1403 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1404 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1405 + sizeof(tHalCfg) + tlvStruct->length) ;
1406
1407 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1408 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1409 tlvStruct->length = sizeof(tANI_U32);
1410 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1411 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414
1415 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1416 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1420 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1421 + sizeof(tHalCfg) + tlvStruct->length) ;
1422
1423 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1424 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
1430
1431 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1432 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438
1439 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1440 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1441 tlvStruct->length = sizeof(tANI_U32);
1442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1443 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1444 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1445 + sizeof(tHalCfg) + tlvStruct->length) ;
1446
1447 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1448 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1449 tlvStruct->length = sizeof(tANI_U32);
1450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1451 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454
1455 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1456 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1457 tlvStruct->length = sizeof(tANI_U32);
1458 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1459 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1460 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1461 + sizeof(tHalCfg) + tlvStruct->length) ;
1462
1463 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1464 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1465 tlvStruct->length = sizeof(tANI_U32);
1466 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1467 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1468 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1469 + sizeof(tHalCfg) + tlvStruct->length) ;
1470
1471 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1472 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1473 tlvStruct->length = sizeof(tANI_U32);
1474 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1475 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
Wilson Tsaof8b37942013-09-06 10:49:00 -07001479 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1480 {
1481 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1482 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1486 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1487 + sizeof(tHalCfg) + tlvStruct->length) ;
1488
1489 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1490 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1491 tlvStruct->length = sizeof(tANI_U32);
1492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1493 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1494 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1495 + sizeof(tHalCfg) + tlvStruct->length) ;
1496
1497 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1498 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1499 tlvStruct->length = sizeof(tANI_U32);
1500 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1501 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1506 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512 }
1513
1514 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1515 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1519 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1520 + sizeof(tHalCfg) + tlvStruct->length) ;
1521
1522 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1523 {
1524 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1525 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1529 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1530 + sizeof(tHalCfg) + tlvStruct->length) ;
1531 }
1532
1533 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1534 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1535 tlvStruct->length = sizeof(tANI_U32);
1536 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1537 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540
Jeff Johnson32d95a32012-09-10 13:15:23 -07001541 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001542 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1543 tlvStruct->length = sizeof(tANI_U32);
1544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1545 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1546 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1547 wcnssCompiledApiVersion.minor,
1548 wcnssCompiledApiVersion.version,
1549 wcnssCompiledApiVersion.revision);
1550 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1551 + sizeof(tHalCfg) + tlvStruct->length) ;
1552
Jeff Johnsond13512a2012-07-17 11:42:19 -07001553 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1554 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1555 tlvStruct->length = sizeof(tANI_U32);
1556 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1557 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1558 configDataValue ) != eSIR_SUCCESS)
1559 {
1560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1561 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1562 goto handle_failure;
1563 }
1564
1565 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1566 + sizeof(tHalCfg) + tlvStruct->length) ;
1567 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1568 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1572 configDataValue ) != eSIR_SUCCESS)
1573 {
1574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1575 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1576 goto handle_failure;
1577 }
1578
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
1581
1582 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1583 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1587 != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1591 goto handle_failure;
1592 }
1593
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001597 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1598 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1599 tlvStruct->length = sizeof(tANI_U32);
1600 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1601 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1602 != eSIR_SUCCESS)
1603 {
1604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1605 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1606 goto handle_failure;
1607 }
1608
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001611#ifdef WLAN_SOFTAP_VSTA_FEATURE
1612 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1616 != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
1625#endif
1626
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001627 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1628 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1629 tlvStruct->length = sizeof(tANI_U32);
1630 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1631
1632 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1633 != eSIR_SUCCESS)
1634 {
1635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1636 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1637 goto handle_failure;
1638 }
1639
1640 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1641 + sizeof(tHalCfg) + tlvStruct->length) ;
1642
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301643/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1644 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1645 tlvStruct->length = sizeof(tANI_U32);
1646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1647 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1648 configDataValue ) != eSIR_SUCCESS)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1651 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1652 goto handle_failure;
1653 }
1654
1655 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1656 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301657#ifdef FEATURE_WLAN_TDLS
1658 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1659 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1660 tlvStruct->length = sizeof(tANI_U32);
1661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1662 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1663 configDataValue ) != eSIR_SUCCESS)
1664 {
1665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1666 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1667 goto handle_failure;
1668 }
1669 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1670 + sizeof(tHalCfg) + tlvStruct->length) ;
1671
1672 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1673 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1674 tlvStruct->length = sizeof(tANI_U32);
1675 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1676 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1677 configDataValue ) != eSIR_SUCCESS)
1678 {
1679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1680 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1681 goto handle_failure;
1682 }
1683 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1684 + sizeof(tHalCfg) + tlvStruct->length) ;
1685 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1686 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1687 tlvStruct->length = sizeof(tANI_U32);
1688 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1689 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1690 configDataValue ) != eSIR_SUCCESS)
1691 {
1692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1693 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1694 goto handle_failure;
1695 }
1696 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1697 + sizeof(tHalCfg) + tlvStruct->length) ;
1698 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1699 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1700 tlvStruct->length = sizeof(tANI_U32);
1701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1702 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1703 configDataValue ) != eSIR_SUCCESS)
1704 {
1705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1706 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1707 goto handle_failure;
1708 }
1709 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1710 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301711 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1712 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301725#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301726
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001727 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1728 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1729 tlvStruct->length = sizeof(tANI_U32);
1730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1731 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1732 configDataValue ) != eSIR_SUCCESS)
1733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1735 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1736 goto handle_failure;
1737 }
1738
1739 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1740 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001741
1742 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1743 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1747 != eSIR_SUCCESS)
1748 {
1749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1750 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1751 goto handle_failure;
1752 }
1753 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1754 + sizeof(tHalCfg) + tlvStruct->length));
1755
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301756 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1757 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1765 goto handle_failure;
1766 }
1767
1768 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1769 + sizeof(tHalCfg) + tlvStruct->length) ;
1770
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301771 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1772 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1773 tlvStruct->length = sizeof(tANI_U32);
1774 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1775 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1776 configDataValue ) != eSIR_SUCCESS)
1777 {
1778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1779 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1780 goto handle_failure;
1781 }
1782 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1783 + sizeof(tHalCfg) + tlvStruct->length) ;
1784
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301785 /* QWLAN_HAL_CFG_ATH_DISABLE */
1786 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1787 tlvStruct->length = sizeof(tANI_U32);
1788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1789 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1790 configDataValue ) != eSIR_SUCCESS)
1791 {
1792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1793 "Failed to get value for WNI_CFG_ATH_DISABLE");
1794 goto handle_failure;
1795 }
1796 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1797 + sizeof(tHalCfg) + tlvStruct->length) ;
1798
c_hpothu6d7dc922013-12-02 12:36:41 +05301799 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1800 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1801 tlvStruct->length = sizeof(tANI_U32);
1802 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1803 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1804 configDataValue ) != eSIR_SUCCESS)
1805 {
1806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1807 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1808 goto handle_failure;
1809 }
1810 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1811 + sizeof(tHalCfg) + tlvStruct->length) ;
1812
1813 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1814 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1818 configDataValue ) != eSIR_SUCCESS)
1819 {
1820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1821 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1822 goto handle_failure;
1823 }
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
1826
1827 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1828 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1832 configDataValue ) != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1836 goto handle_failure;
1837 }
1838 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1839 + sizeof(tHalCfg) + tlvStruct->length) ;
1840
1841 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1842 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1843 tlvStruct->length = sizeof(tANI_U32);
1844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1845 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1846 configDataValue ) != eSIR_SUCCESS)
1847 {
1848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1849 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1850 goto handle_failure;
1851 }
1852 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1853 + sizeof(tHalCfg) + tlvStruct->length) ;
1854
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301855 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1856 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1857 tlvStruct->length = sizeof(tANI_U32);
1858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1859 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1860 configDataValue ) != eSIR_SUCCESS)
1861 {
1862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1863 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1864 goto handle_failure;
1865 }
1866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1867 + sizeof(tHalCfg) + tlvStruct->length) ;
1868
1869 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1870 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1871 tlvStruct->length = sizeof(tANI_U32);
1872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1873 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1874 configDataValue ) != eSIR_SUCCESS)
1875 {
1876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1877 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1878 goto handle_failure;
1879 }
1880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1881 + sizeof(tHalCfg) + tlvStruct->length) ;
1882
1883 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1884 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1885 tlvStruct->length = sizeof(tANI_U32);
1886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1887 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1888 configDataValue ) != eSIR_SUCCESS)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1892 goto handle_failure;
1893 }
1894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1895 + sizeof(tHalCfg) + tlvStruct->length) ;
1896
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001897 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1898 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1899 tlvStruct->length = sizeof(tANI_U32);
1900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1901 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1902 configDataValue ) != eSIR_SUCCESS)
1903 {
1904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1905 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1906 goto handle_failure;
1907 }
1908 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1909 + sizeof(tHalCfg) + tlvStruct->length) ;
1910
c_hpothu5bd1ae42014-03-07 20:28:22 +05301911 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1912 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1913 tlvStruct->length = sizeof(tANI_U32);
1914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1915
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1921 goto handle_failure;
1922 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
1926 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1927 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930
1931 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1932 configDataValue ) != eSIR_SUCCESS)
1933 {
1934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1935 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1936 goto handle_failure;
1937 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301938 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1939 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301940
c_hpothu2d0f1c42014-04-01 18:38:51 +05301941 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1942 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1943 tlvStruct->length = sizeof(tANI_U32);
1944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1945
1946 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1947 configDataValue ) != eSIR_SUCCESS)
1948 {
1949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1950 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1951 goto handle_failure;
1952 }
1953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1954 + sizeof(tHalCfg) + tlvStruct->length) ;
1955
1956 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1957 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1958 tlvStruct->length = sizeof(tANI_U32);
1959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1960
1961 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1962 configDataValue ) != eSIR_SUCCESS)
1963 {
1964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1965 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1966 goto handle_failure;
1967 }
1968 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1969 + sizeof(tHalCfg) + tlvStruct->length) ;
1970
1971 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1972 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1973 tlvStruct->length = sizeof(tANI_U32);
1974 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1975
1976 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1977 configDataValue ) != eSIR_SUCCESS)
1978 {
1979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1980 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1981 goto handle_failure;
1982 }
1983 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1984 + sizeof(tHalCfg) + tlvStruct->length) ;
1985
1986 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1987 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1988 tlvStruct->length = sizeof(tANI_U32);
1989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1990
1991 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1992 configDataValue ) != eSIR_SUCCESS)
1993 {
1994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1995 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1996 goto handle_failure;
1997 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301998 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1999 + sizeof(tHalCfg) + tlvStruct->length) ;
2000
Mihir Shetec34258c2014-07-30 17:50:27 +05302001 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2002 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2003 tlvStruct->length = sizeof(tANI_U32);
2004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2005
2006 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2007 configDataValue ) != eSIR_SUCCESS)
2008 {
2009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2010 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2011 goto handle_failure;
2012 }
2013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2014 + sizeof(tHalCfg) + tlvStruct->length) ;
2015
2016 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2017 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2018 tlvStruct->length = sizeof(tANI_U32);
2019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2020
2021 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2022 configDataValue ) != eSIR_SUCCESS)
2023 {
2024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2025 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2026 goto handle_failure;
2027 }
2028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2029 + sizeof(tHalCfg) + tlvStruct->length) ;
2030
2031 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2032 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2033 tlvStruct->length = sizeof(tANI_U32);
2034 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2035
2036 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2037 configDataValue ) != eSIR_SUCCESS)
2038 {
2039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2040 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2041 goto handle_failure;
2042 }
2043 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2044 + sizeof(tHalCfg) + tlvStruct->length) ;
2045
2046 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2047 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2048 tlvStruct->length = sizeof(tANI_U32);
2049 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2050
2051 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2052 configDataValue ) != eSIR_SUCCESS)
2053 {
2054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2055 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2056 goto handle_failure;
2057 }
2058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2059 + sizeof(tHalCfg) + tlvStruct->length) ;
2060
2061 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2062 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2063 tlvStruct->length = sizeof(tANI_U32);
2064 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2065
2066 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2067 configDataValue ) != eSIR_SUCCESS)
2068 {
2069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2070 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2071 goto handle_failure;
2072 }
2073 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2074 + sizeof(tHalCfg) + tlvStruct->length) ;
2075
2076 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2077 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2078 tlvStruct->length = sizeof(tANI_U32);
2079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2080
2081 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2082 configDataValue ) != eSIR_SUCCESS)
2083 {
2084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2085 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2086 goto handle_failure;
2087 }
2088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2089 + sizeof(tHalCfg) + tlvStruct->length) ;
2090
2091 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2092 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2093 tlvStruct->length = sizeof(tANI_U32);
2094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2095
2096 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2097 configDataValue ) != eSIR_SUCCESS)
2098 {
2099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2100 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2101 goto handle_failure;
2102 }
2103 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2104 + sizeof(tHalCfg) + tlvStruct->length) ;
2105
2106 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2107 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2108 tlvStruct->length = sizeof(tANI_U32);
2109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2110
2111 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2112 configDataValue ) != eSIR_SUCCESS)
2113 {
2114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2115 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2116 goto handle_failure;
2117 }
2118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2119 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302120
2121 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2122 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2123 tlvStruct->length = sizeof(tANI_U32);
2124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2125
2126 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2127 configDataValue ) != eSIR_SUCCESS)
2128 {
2129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2130 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2131 goto handle_failure;
2132 }
2133 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2134 + sizeof(tHalCfg) + tlvStruct->length) ;
2135
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302136 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2137 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2138 tlvStruct->length = sizeof(tANI_U32);
2139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2140
2141 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2142 configDataValue ) != eSIR_SUCCESS)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2145 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2146 goto handle_failure;
2147 }
2148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2149 + sizeof(tHalCfg) + tlvStruct->length) ;
2150
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302151 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2152 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2153 tlvStruct->length = sizeof(tANI_U32);
2154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2155
2156 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2157 configDataValue ) != eSIR_SUCCESS)
2158 {
2159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2160 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2161 goto handle_failure;
2162 }
2163 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2164 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302165
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302166 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2167 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2168 tlvStruct->length = sizeof(tANI_U32);
2169 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2170
2171 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2172 configDataValue ) != eSIR_SUCCESS)
2173 {
2174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2175 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2176 goto handle_failure;
2177 }
2178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2179 + sizeof(tHalCfg) + tlvStruct->length) ;
2180
Sachin Ahuja41b61902015-06-18 18:32:15 +05302181
2182 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2183 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2184 tlvStruct->length = sizeof(tANI_U32);
2185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2186
2187 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2188 configDataValue ) != eSIR_SUCCESS)
2189 {
2190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2191 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2192 goto handle_failure;
2193 }
2194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2195 + sizeof(tHalCfg) + tlvStruct->length) ;
2196
2197 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2198 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2199 tlvStruct->length = sizeof(tANI_U32);
2200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2201
2202 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2203 configDataValue ) != eSIR_SUCCESS)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2206 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2207 goto handle_failure;
2208 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2210 + sizeof(tHalCfg) + tlvStruct->length) ;
2211
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302212 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2213 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2214 tlvStruct->length = sizeof(tANI_U32);
2215 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2216
2217 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2218 configDataValue ) != eSIR_SUCCESS)
2219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2221 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2222 goto handle_failure;
2223 }
2224 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2225 + sizeof(tHalCfg) + tlvStruct->length) ;
2226
2227 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2228 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2229 tlvStruct->length = sizeof(tANI_U32);
2230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2231
2232 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2233 configDataValue ) != eSIR_SUCCESS)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2236 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2237 goto handle_failure;
2238 }
2239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2240 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002243#ifdef WLAN_DEBUG
2244 {
2245 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2247 "****** Dumping CFG TLV ***** ");
2248 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2249 {
2250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2251 "%02x %02x %02x %02x %02x %02x %02x %02x",
2252 tlvStructStart[i],
2253 tlvStructStart[i+1],
2254 tlvStructStart[i+2],
2255 tlvStructStart[i+3],
2256 tlvStructStart[i+4],
2257 tlvStructStart[i+5],
2258 tlvStructStart[i+6],
2259 tlvStructStart[i+7]);
2260 }
2261 /* Dump the bytes in the last line*/
2262 for (; i < wdiStartParams->usConfigBufferLen; i++)
2263 {
2264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2265 "%02x ",tlvStructStart[i]);
2266 }
2267 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2268 "**************************** ");
2269 }
2270#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002272handle_failure:
2273 vos_mem_free(configParam);
2274 return VOS_STATUS_E_FAILURE;
2275}
Jeff Johnson295189b2012-06-20 16:38:30 -07002276/*
2277 * FUNCTION: WDA_wdiCompleteCB
2278 * call the voss call back function
2279 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002280void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002281{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2283 tWDA_CbContext *wdaContext;
2284
2285 if(NULL == pWdaParams)
2286 {
2287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002289 VOS_ASSERT(0) ;
2290 return ;
2291 }
2292
2293 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2294
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 if (NULL == wdaContext)
2296 {
2297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002298 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 return ;
2300 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002301
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002303 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002307 vos_mem_free(pWdaParams);
2308
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 if(WDI_STATUS_SUCCESS != status)
2310 {
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2312 "WDI stop callback returned failure" );
2313 VOS_ASSERT(0) ;
2314 }
2315 else
2316 {
2317 wdaContext->wdaState = WDA_STOP_STATE;
2318 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002319
Leo Chang9d76f622013-08-23 16:34:52 -07002320 /* FTM Driver stop procedure should be synced.
2321 * Stop and Close will happen on same context */
2322 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2323 {
2324 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2325 {
2326 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2327 "%s: FTM Stop Event Set Fail", __func__);
2328 VOS_ASSERT(0);
2329 }
2330 }
2331
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002333 vos_WDAComplete_cback(wdaContext->pVosContext);
2334
Jeff Johnson295189b2012-06-20 16:38:30 -07002335 return ;
2336}
Jeff Johnson295189b2012-06-20 16:38:30 -07002337/*
2338 * FUNCTION: WDA_stop
2339 * call WDI_stop
2340 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002341VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2342{
2343 WDI_Status wdiStatus;
2344 VOS_STATUS status = VOS_STATUS_SUCCESS;
2345 WDI_StopReqParamsType *wdiStopReq;
2346 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002347 tWDA_ReqParams *pWdaParams ;
2348
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 if (NULL == pWDA)
2350 {
2351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002352 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 VOS_ASSERT(0);
2354 return VOS_STATUS_E_FAILURE;
2355 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002356 if (pWDA->wdiFailed == true)
2357 {
2358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002359 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002360 return VOS_STATUS_E_ALREADY;
2361 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002362
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 /* FTM mode stay START_STATE */
2364 if( (WDA_READY_STATE != pWDA->wdaState) &&
2365 (WDA_INIT_STATE != pWDA->wdaState) &&
2366 (WDA_START_STATE != pWDA->wdaState) )
2367 {
2368 VOS_ASSERT(0);
2369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002370 wdiStopReq = (WDI_StopReqParamsType *)
2371 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2372 if(NULL == wdiStopReq)
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 VOS_ASSERT(0);
2377 return VOS_STATUS_E_NOMEM;
2378 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002379
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 wdiStopReq->wdiStopReason = reason;
2381 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302382
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2384 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 {
2386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 VOS_ASSERT(0);
2389 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002390 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002392
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002393 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2394 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 {
2396 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002397 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002399
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002400 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2401 pWdaParams->wdaMsgParam = NULL;
2402 pWdaParams->pWdaContext = pWDA;
2403
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 /* call WDI stop */
2405 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002406 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2407
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2409 {
2410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2411 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2413 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 status = VOS_STATUS_E_FAILURE;
2415 }
Leo Chang9d76f622013-08-23 16:34:52 -07002416
2417 /* FTM Driver stop procedure should be synced.
2418 * Stop and Close will happen on same context */
2419 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2420 {
2421 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2422 WDI_RESPONSE_TIMEOUT);
2423 if (status != VOS_STATUS_SUCCESS)
2424 {
2425 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2426 "%s: FTM Stop Timepoout", __func__);
2427 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002428 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302429 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 return status;
2432}
Jeff Johnson295189b2012-06-20 16:38:30 -07002433/*
2434 * FUNCTION: WDA_close
2435 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302436 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002437VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2438{
Jeff Johnson43971f52012-07-17 12:26:56 -07002439 VOS_STATUS status = VOS_STATUS_SUCCESS;
2440 WDI_Status wstatus;
2441 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 if (NULL == wdaContext)
2444 {
2445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002446 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 return VOS_STATUS_E_FAILURE;
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2450 (WDA_STOP_STATE != wdaContext->wdaState))
2451 {
2452 VOS_ASSERT(0);
2453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002455 wstatus = WDI_Close();
2456 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 {
2458 status = VOS_STATUS_E_FAILURE;
2459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002462 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2463 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 {
2465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002466 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 status = VOS_STATUS_E_FAILURE;
2468 }
2469
Jeff Johnson43971f52012-07-17 12:26:56 -07002470 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002471 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 {
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002474 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 status = VOS_STATUS_E_FAILURE;
2476 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002477 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002478 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 {
2480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002481 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 status = VOS_STATUS_E_FAILURE;
2483 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002484 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002485 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002488 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 status = VOS_STATUS_E_FAILURE;
2490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002492 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002493 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2496 "error in WDA close " );
2497 status = VOS_STATUS_E_FAILURE;
2498 }
2499 return status;
2500}
Jeff Johnson295189b2012-06-20 16:38:30 -07002501/*
2502 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2503 * returns 1 if the compiled version is greater than or equal to the input version
2504 */
2505
2506uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2507{
2508 VOS_STATUS status = VOS_STATUS_SUCCESS;
2509 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2510 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2513 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2514 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2515 (compiledVersion.revision >= revision)))
2516 return 1;
2517 else
2518 return 0;
2519}
Jeff Johnson295189b2012-06-20 16:38:30 -07002520/*
2521 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2522 * returns 1 if the compiled version is greater than or equal to the input version
2523 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002524uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2525{
2526 VOS_STATUS status = VOS_STATUS_SUCCESS;
2527 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2528 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2531 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2532 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2533 (reportedVersion.revision >= revision)))
2534 return 1;
2535 else
2536 return 0;
2537}
Jeff Johnson295189b2012-06-20 16:38:30 -07002538/*
2539 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2540 * Returns the version of the WCNSS WLAN API with which the HOST
2541 * device driver was compiled
2542 */
2543VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2544 tSirVersionType *pVersion)
2545{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302546 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 if ((NULL == pvosGCtx) || (NULL == pVersion))
2548 {
2549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002550 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 VOS_ASSERT(0);
2552 return VOS_STATUS_E_FAILURE;
2553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2555 if (NULL == pWDA )
2556 {
2557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002558 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 VOS_ASSERT(0);
2560 return VOS_STATUS_E_FAILURE;
2561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 *pVersion = pWDA->wcnssWlanCompiledVersion;
2563 return VOS_STATUS_SUCCESS;
2564}
Jeff Johnson295189b2012-06-20 16:38:30 -07002565/*
2566 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2567 * Returns the version of the WCNSS WLAN API with which the WCNSS
2568 * device driver was compiled
2569 */
2570VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2571 tSirVersionType *pVersion)
2572{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302573 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002574 if ((NULL == pvosGCtx) || (NULL == pVersion))
2575 {
2576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002577 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 VOS_ASSERT(0);
2579 return VOS_STATUS_E_FAILURE;
2580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2582 if (NULL == pWDA )
2583 {
2584 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 VOS_ASSERT(0);
2587 return VOS_STATUS_E_FAILURE;
2588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 *pVersion = pWDA->wcnssWlanReportedVersion;
2590 return VOS_STATUS_SUCCESS;
2591}
Jeff Johnson295189b2012-06-20 16:38:30 -07002592/*
2593 * FUNCTION: WDA_GetWcnssSoftwareVersion
2594 * Returns the WCNSS Software version string
2595 */
2596VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2597 tANI_U8 *pVersion,
2598 tANI_U32 versionBufferSize)
2599{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302600 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002602 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 if ((NULL == pvosGCtx) || (NULL == pVersion))
2604 {
2605 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002606 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 VOS_ASSERT(0);
2608 return VOS_STATUS_E_FAILURE;
2609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2611 if (NULL == pWDA )
2612 {
2613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002614 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 VOS_ASSERT(0);
2616 return VOS_STATUS_E_FAILURE;
2617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2619 return VOS_STATUS_SUCCESS;
2620}
Jeff Johnson295189b2012-06-20 16:38:30 -07002621/*
2622 * FUNCTION: WDA_GetWcnssHardwareVersion
2623 * Returns the WCNSS Hardware version string
2624 */
2625VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2626 tANI_U8 *pVersion,
2627 tANI_U32 versionBufferSize)
2628{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302629 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002631 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 if ((NULL == pvosGCtx) || (NULL == pVersion))
2633 {
2634 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 VOS_ASSERT(0);
2637 return VOS_STATUS_E_FAILURE;
2638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2640 if (NULL == pWDA )
2641 {
2642 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002643 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 VOS_ASSERT(0);
2645 return VOS_STATUS_E_FAILURE;
2646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2648 return VOS_STATUS_SUCCESS;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_WniCfgDnld
2652 * Trigger CFG Download
2653 */
2654VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2655{
2656 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302657 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002658
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 if (NULL == pMac )
2660 {
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002662 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 VOS_ASSERT(0);
2664 return VOS_STATUS_E_FAILURE;
2665 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302666 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 return vosStatus;
2668}
Jeff Johnson295189b2012-06-20 16:38:30 -07002669/* -----------------------------------------------------------------
2670 * WDI interface
2671 * -----------------------------------------------------------------
2672 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002673/*
2674 * FUNCTION: WDA_suspendDataTxCallback
2675 * call back function called from TL after suspend Transmission
2676 */
2677VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2678 v_U8_t* ucSTAId,
2679 VOS_STATUS vosStatus)
2680{
2681 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002683 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 if (NULL == pWDA )
2685 {
2686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002687 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 VOS_ASSERT(0);
2689 return VOS_STATUS_E_FAILURE;
2690 }
2691 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2692 {
2693 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2694 }
2695 else
2696 {
2697 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 /* Trigger the event to bring the WDA TL suspend function to come
2700 * out of wait*/
2701 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2702 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2703 {
2704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002705 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 /* If TL suspended had timedout before this callback was called, resume back
2708 * TL.*/
2709 if (pWDA->txSuspendTimedOut)
2710 {
2711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002712 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 WDA_ResumeDataTx(pWDA);
2714 pWDA->txSuspendTimedOut = FALSE;
2715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 return VOS_STATUS_SUCCESS;
2717}
Jeff Johnson295189b2012-06-20 16:38:30 -07002718/*
2719 * FUNCTION: WDA_suspendDataTx
2720 * Update TL to suspend the data Transmission
2721 */
2722VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2723{
2724 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2725 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002726
2727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002728 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 if (pWDA->txSuspendTimedOut)
2731 {
2732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002733 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 return status;
2735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 /* Reset the event to be not signalled */
2737 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2738 if(!VOS_IS_STATUS_SUCCESS(status))
2739 {
2740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002741 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 return VOS_STATUS_E_FAILURE;
2743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002745 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 WDA_SuspendDataTxCallback);
2747 if(status != VOS_STATUS_SUCCESS)
2748 {
2749 return status;
2750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 /* Wait for the event to be set by the TL, to get the response of
2752 * suspending the TX queues, this event should be set by the Callback
2753 * function called by TL*/
2754 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2755 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2756 if(!VOS_IS_STATUS_SUCCESS(status))
2757 {
2758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2759 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 /* Set this flag to true when TL suspend times out, so that when TL
2762 * suspend eventually happens and calls the callback, TL can be resumed
2763 * right away by looking at this flag when true.*/
2764 pWDA->txSuspendTimedOut = TRUE;
2765 }
2766 else
2767 {
2768 pWDA->txSuspendTimedOut = FALSE;
2769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2771 {
2772 status = VOS_STATUS_SUCCESS;
2773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 return status;
2775}
Jeff Johnson295189b2012-06-20 16:38:30 -07002776/*
2777 * FUNCTION: WDA_resumeDataTx
2778 * Update TL to resume the data Transmission
2779 */
2780VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2781{
2782 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002785 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002786
2787 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 return status;
2789}
Jeff Johnson295189b2012-06-20 16:38:30 -07002790/*
2791 * FUNCTION: WDA_InitScanReqCallback
2792 * Trigger Init SCAN callback
2793 */
2794void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2795{
2796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2797 tWDA_CbContext *pWDA;
2798 tInitScanParams *pWDA_ScanParam ;
2799 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 if(NULL == pWdaParams)
2803 {
2804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 VOS_ASSERT(0) ;
2807 return ;
2808 }
2809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2810 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 if(NULL == pWDA_ScanParam)
2812 {
2813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002814 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002815 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2817 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 return ;
2819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002820 if(WDI_STATUS_SUCCESS != wdiStatus)
2821 {
2822 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 if(VOS_STATUS_SUCCESS != status)
2824 {
2825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 }
2828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* free WDI command buffer */
2830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302832
2833
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002835 /* without converting the Status to Failure or Success Just
2836 pass the same status to lim */
2837 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 /* send SCAN RSP message back to PE */
2839 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 return ;
2841}
2842
2843/*
2844 * FUNCTION: WDA_ProcessInitScanReq
2845 * Trigger Init SCAN in DAL
2846 */
2847VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2848 tInitScanParams *initScanParams)
2849{
2850 WDI_Status status = WDI_STATUS_SUCCESS ;
2851 WDI_InitScanReqParamsType *wdiInitScanParam =
2852 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2853 sizeof(WDI_InitScanReqParamsType)) ;
2854 tWDA_ReqParams *pWdaParams;
2855 tANI_U8 i = 0;
2856
2857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002858 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 if(NULL == wdiInitScanParam)
2860 {
2861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002862 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 VOS_ASSERT(0);
2864 return VOS_STATUS_E_NOMEM;
2865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2867 if(NULL == pWdaParams)
2868 {
2869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002870 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 VOS_ASSERT(0);
2872 vos_mem_free(wdiInitScanParam);
2873 return VOS_STATUS_E_NOMEM;
2874 }
2875
2876 /* Copy init Scan params to WDI structure */
2877 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2878 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2879 sizeof(tSirMacAddr)) ;
2880 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2881 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2882 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2884 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2886 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2888 {
2889 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2890 initScanParams->scanEntry.bssIdx[i] ;
2891 }
2892
2893 /* if Frame length, copy macMgmtHdr or WDI structure */
2894 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2895 {
2896 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2897 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2898 }
2899 wdiInitScanParam->wdiReqStatusCB = NULL ;
2900
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 /* Store Init Req pointer, as this will be used for response */
2902 pWdaParams->pWdaContext = pWDA;
2903 pWdaParams->wdaMsgParam = initScanParams;
2904 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* first try to suspend TX */
2906 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if(WDI_STATUS_SUCCESS != status)
2908 {
2909 goto handleWdiFailure;
2910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 /* call DAL API to pass init scan request to DAL */
2912 status = WDI_InitScanReq(wdiInitScanParam,
2913 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 if(IS_WDI_STATUS_FAILURE(status))
2915 {
2916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2917 "error in WDA Init Scan, Resume Tx " );
2918 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 VOS_ASSERT(0) ;
2920
2921 goto handleWdiFailure;
2922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924handleWdiFailure:
2925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2926 "Failure in WDI Api, free all the memory " );
2927 /* free WDI command buffer */
2928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2929 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 /* send Failure to PE */
2931 initScanParams->status = eSIR_FAILURE ;
2932 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 return CONVERT_WDI2VOS_STATUS(status) ;
2934}
2935
Jeff Johnson295189b2012-06-20 16:38:30 -07002936/*
2937 * FUNCTION: WDA_StartScanReqCallback
2938 * send Start SCAN RSP back to PE
2939 */
2940void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2941 void* pUserData)
2942{
2943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2944 tWDA_CbContext *pWDA;
2945 tStartScanParams *pWDA_ScanParam;
2946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002947 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 if(NULL == pWdaParams)
2949 {
2950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002951 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 VOS_ASSERT(0) ;
2953 return ;
2954 }
2955 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2956 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 if(NULL == pWDA_ScanParam)
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 return ;
2964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2966 {
2967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002968 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002970 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 return ;
2972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2974 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002975
Jeff Johnson295189b2012-06-20 16:38:30 -07002976
2977 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002978 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 /* send SCAN RSP message back to PE */
2980 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 return ;
2982}
2983
Jeff Johnson295189b2012-06-20 16:38:30 -07002984/*
2985 * FUNCTION: WDA_ProcessStartScanReq
2986 * Trigger start SCAN in WDI
2987 */
2988VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2989 tStartScanParams *startScanParams)
2990{
2991 WDI_Status status = WDI_STATUS_SUCCESS;
2992 WDI_StartScanReqParamsType *wdiStartScanParams =
2993 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2994 sizeof(WDI_StartScanReqParamsType)) ;
2995 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 if(NULL == wdiStartScanParams)
2999 {
3000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 VOS_ASSERT(0);
3003 return VOS_STATUS_E_NOMEM;
3004 }
3005 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3006 if(NULL == pWdaParams)
3007 {
3008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_ASSERT(0);
3011 vos_mem_free(wdiStartScanParams);
3012 return VOS_STATUS_E_NOMEM;
3013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 /* Copy init Scan params to WDI structure */
3015 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3016 wdiStartScanParams->wdiReqStatusCB = NULL ;
3017
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 /* Store Init Req pointer, as this will be used for response */
3019 /* store Params pass it to WDI */
3020 pWdaParams->pWdaContext = pWDA;
3021 pWdaParams->wdaMsgParam = startScanParams;
3022 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 /* call DAL API to pass init scan request to DAL */
3024 status = WDI_StartScanReq(wdiStartScanParams,
3025 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* failure returned by WDI API */
3027 if(IS_WDI_STATUS_FAILURE(status))
3028 {
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3030 "Failure in Start Scan WDI API, free all the memory "
3031 "It should be due to previous abort scan." );
3032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3033 vos_mem_free(pWdaParams) ;
3034 startScanParams->status = eSIR_FAILURE ;
3035 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 return CONVERT_WDI2VOS_STATUS(status) ;
3038}
Jeff Johnson295189b2012-06-20 16:38:30 -07003039/*
3040 * FUNCTION: WDA_EndScanReqCallback
3041 * END SCAN callback
3042 */
3043void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3044{
3045 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3046 tWDA_CbContext *pWDA;
3047 tEndScanParams *endScanParam;
3048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003049 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 if(NULL == pWdaParams)
3051 {
3052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003053 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 VOS_ASSERT(0) ;
3055 return ;
3056 }
3057 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3058 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 if(NULL == endScanParam)
3060 {
3061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003062 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3065 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 return ;
3067 }
3068
3069 /* Free WDI command buffer */
3070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3071 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003073 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 /* send response back to PE */
3075 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3076 return ;
3077}
3078
Jeff Johnson295189b2012-06-20 16:38:30 -07003079/*
3080 * FUNCTION: WDA_ProcessEndScanReq
3081 * Trigger END SCAN in WDI
3082 */
3083VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3084 tEndScanParams *endScanParams)
3085{
3086 WDI_Status status = WDI_STATUS_SUCCESS;
3087 WDI_EndScanReqParamsType *wdiEndScanParams =
3088 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3089 sizeof(WDI_EndScanReqParamsType)) ;
3090 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 if(NULL == wdiEndScanParams)
3094 {
3095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 VOS_ASSERT(0);
3098 return VOS_STATUS_E_NOMEM;
3099 }
3100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3101 if(NULL == pWdaParams)
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0);
3106 vos_mem_free(wdiEndScanParams);
3107 return VOS_STATUS_E_NOMEM;
3108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 /* Copy init Scan params to WDI structure */
3110 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3111 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 /* Store Init Req pointer, as this will be used for response */
3113 /* store Params pass it to WDI */
3114 pWdaParams->pWdaContext = pWDA;
3115 pWdaParams->wdaMsgParam = endScanParams;
3116 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 /* call DAL API to pass init scan request to DAL */
3118 status = WDI_EndScanReq(wdiEndScanParams,
3119 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(IS_WDI_STATUS_FAILURE(status))
3121 {
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3123 "Failure in End Scan WDI API, free all the memory "
3124 "It should be due to previous abort scan." );
3125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3126 vos_mem_free(pWdaParams) ;
3127 endScanParams->status = eSIR_FAILURE ;
3128 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 return CONVERT_WDI2VOS_STATUS(status) ;
3131}
Jeff Johnson295189b2012-06-20 16:38:30 -07003132/*
3133 * FUNCTION: WDA_FinishScanReqCallback
3134 * Trigger Finish SCAN callback
3135 */
3136void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3137{
3138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3139 tWDA_CbContext *pWDA;
3140 tFinishScanParams *finishScanParam;
3141 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 if(NULL == pWdaParams)
3145 {
3146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 VOS_ASSERT(0) ;
3149 return ;
3150 }
3151
3152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3153 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(NULL == finishScanParam)
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3160 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 return ;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3164 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 /*
3166 * Now Resume TX, if we reached here means, TX is already suspended, we
3167 * have to resume it unconditionaly
3168 */
3169 status = WDA_ResumeDataTx(pWDA) ;
3170
3171 if(VOS_STATUS_SUCCESS != status)
3172 {
3173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003174 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003176 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3178 return ;
3179}
Jeff Johnson295189b2012-06-20 16:38:30 -07003180/*
3181 * FUNCTION: WDA_ProcessFinshScanReq
3182 * Trigger Finish SCAN in WDI
3183 */
3184VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3185 tFinishScanParams *finishScanParams)
3186{
3187 WDI_Status status = WDI_STATUS_SUCCESS;
3188 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3189 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3190 sizeof(WDI_FinishScanReqParamsType)) ;
3191 tWDA_ReqParams *pWdaParams ;
3192 tANI_U8 i = 0;
3193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003194 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 if(NULL == wdiFinishScanParams)
3196 {
3197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 VOS_ASSERT(0);
3200 return VOS_STATUS_E_NOMEM;
3201 }
3202 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3203 if(NULL == pWdaParams)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0);
3208 vos_mem_free(wdiFinishScanParams);
3209 return VOS_STATUS_E_NOMEM;
3210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 /* Copy init Scan params to WDI structure */
3212 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3213 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3214 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3216 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3217 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3218 finishScanParams->frameLength ;
3219 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3220 finishScanParams->currentOperChannel ;
3221 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3222 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3223 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3225 {
3226 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3227 finishScanParams->scanEntry.bssIdx[i] ;
3228 }
3229
3230
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 /* if Frame length, copy macMgmtHdr ro WDI structure */
3232 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3233 {
3234 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3235 &finishScanParams->macMgmtHdr,
3236 sizeof(WDI_MacMgmtHdr)) ;
3237 }
3238 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 /* Store Init Req pointer, as this will be used for response */
3240 /* store Params pass it to WDI */
3241 pWdaParams->pWdaContext = pWDA;
3242 pWdaParams->wdaMsgParam = finishScanParams;
3243 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* call DAL API to pass init scan request to DAL */
3245 status = WDI_FinishScanReq(wdiFinishScanParams,
3246 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003247
Jeff Johnson295189b2012-06-20 16:38:30 -07003248
3249 /*
3250 * WDI API returns failure..
3251 */
3252 if(IS_WDI_STATUS_FAILURE( status))
3253 {
3254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3255 "Failure in Finish Scan WDI API, free all the memory " );
3256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3257 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 finishScanParams->status = eSIR_FAILURE ;
3259 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 return CONVERT_WDI2VOS_STATUS(status) ;
3262}
Jeff Johnson295189b2012-06-20 16:38:30 -07003263/*---------------------------------------------------------------------
3264 * ASSOC API's
3265 *---------------------------------------------------------------------
3266 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003267/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303268 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 * Trigger Init SCAN callback
3270 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303271void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003272{
3273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3274 tWDA_CbContext *pWDA;
3275 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 if(NULL == pWdaParams)
3279 {
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003281 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 VOS_ASSERT(0) ;
3283 return ;
3284 }
3285 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3286 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 /* reset macBSSID */
3290 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 /* reset macSTASelf */
3292 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003293 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 return ;
3296}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303297
3298/*
3299 * FUNCTION: WDA_JoinReqCallback
3300 * Free memory and send SWITCH CHANNEL RSP back to PE.
3301 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3302 */
3303void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3304{
3305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3306 tWDA_CbContext *pWDA;
3307 tSwitchChannelParams *joinReqParam;
3308
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3310 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3311
3312 if(NULL == pWdaParams)
3313 {
3314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3315 "%s: pWdaParams received NULL", __func__);
3316 VOS_ASSERT(0);
3317 return;
3318 }
3319
3320 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3321 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3322 joinReqParam->status = wdiStatus;
3323
3324 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3325 {
3326 /* reset macBSSID */
3327 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3328 /* reset macSTASelf */
3329 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3330
3331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3332 vos_mem_free(pWdaParams);
3333 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3334 }
3335
3336 return;
3337}
3338
Jeff Johnson295189b2012-06-20 16:38:30 -07003339/*
3340 * FUNCTION: WDA_ProcessJoinReq
3341 * Trigger Join REQ in WDI
3342 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003343VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3344 tSwitchChannelParams* joinReqParam)
3345{
3346 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 WDI_JoinReqParamsType *wdiJoinReqParam =
3348 (WDI_JoinReqParamsType *)vos_mem_malloc(
3349 sizeof(WDI_JoinReqParamsType)) ;
3350 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 if(NULL == wdiJoinReqParam)
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003358 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return VOS_STATUS_E_NOMEM;
3360 }
3361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3362 if(NULL == pWdaParams)
3363 {
3364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 VOS_ASSERT(0);
3367 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003368 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 return VOS_STATUS_E_NOMEM;
3370 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003371
3372 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3373 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3374 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3377 "%s: received join request when BSSID or self-STA is NULL "
3378 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003379 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003380 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3381 VOS_ASSERT(0);
3382 vos_mem_free(wdiJoinReqParam);
3383 vos_mem_free(pWdaParams);
3384 joinReqParam->status = eSIR_FAILURE ;
3385 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3386 return VOS_STATUS_E_INVAL;
3387 }
3388
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 /* copy the BSSID for pWDA */
3390 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3391 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3393 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3395 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003396#ifdef WLAN_FEATURE_VOWIFI
3397 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3398 joinReqParam->maxTxPower ;
3399#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3401 joinReqParam->localPowerConstraint ;
3402#endif
3403 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3404 joinReqParam->secondaryChannelOffset ;
3405 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3406
Sachin Ahuja935eda782014-07-30 14:57:41 +05303407 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3408 wdiJoinReqParam->pUserData = pWdaParams;
3409
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 /* Store Init Req pointer, as this will be used for response */
3411 /* store Params pass it to WDI */
3412 pWdaParams->pWdaContext = pWDA;
3413 pWdaParams->wdaMsgParam = joinReqParam;
3414 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303416 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 if(IS_WDI_STATUS_FAILURE(status))
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3420 "Failure in Join WDI API, free all the memory " );
3421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3422 vos_mem_free(pWdaParams) ;
3423 joinReqParam->status = eSIR_FAILURE ;
3424 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 return CONVERT_WDI2VOS_STATUS(status) ;
3427}
Jeff Johnson295189b2012-06-20 16:38:30 -07003428/*
3429 * FUNCTION: WDA_SwitchChannelReqCallback
3430 * send Switch channel RSP back to PE
3431 */
3432void WDA_SwitchChannelReqCallback(
3433 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3434{
3435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3436 tWDA_CbContext *pWDA;
3437 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 if(NULL == pWdaParams)
3441 {
3442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003443 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 VOS_ASSERT(0) ;
3445 return ;
3446 }
3447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3448 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3449
3450#ifdef WLAN_FEATURE_VOWIFI
3451 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3452#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3454 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003456 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 return ;
3459}
Jeff Johnson295189b2012-06-20 16:38:30 -07003460/*
3461 * FUNCTION: WDA_ProcessChannelSwitchReq
3462 * Request to WDI to switch channel REQ params.
3463 */
3464VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3465 tSwitchChannelParams *pSwitchChanParams)
3466{
3467 WDI_Status status = WDI_STATUS_SUCCESS ;
3468 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3469 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3470 sizeof(WDI_SwitchChReqParamsType)) ;
3471 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 if(NULL == wdiSwitchChanParam)
3475 {
3476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 VOS_ASSERT(0);
3479 return VOS_STATUS_E_NOMEM;
3480 }
3481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3482 if(NULL == pWdaParams)
3483 {
3484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 VOS_ASSERT(0);
3487 vos_mem_free(wdiSwitchChanParam);
3488 return VOS_STATUS_E_NOMEM;
3489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3491#ifndef WLAN_FEATURE_VOWIFI
3492 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3493 pSwitchChanParams->localPowerConstraint;
3494#endif
3495 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3496 pSwitchChanParams->secondaryChannelOffset;
3497 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 /* Store req pointer, as this will be used for response */
3499 /* store Params pass it to WDI */
3500 pWdaParams->pWdaContext = pWDA;
3501 pWdaParams->wdaMsgParam = pSwitchChanParams;
3502 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503#ifdef WLAN_FEATURE_VOWIFI
3504 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3505 = pSwitchChanParams->maxTxPower;
3506 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3507 pSwitchChanParams ->selfStaMacAddr,
3508 sizeof(tSirMacAddr));
3509#endif
3510 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3511 pSwitchChanParams->bssId,
3512 sizeof(tSirMacAddr));
3513
3514 status = WDI_SwitchChReq(wdiSwitchChanParam,
3515 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 if(IS_WDI_STATUS_FAILURE(status))
3517 {
3518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3519 "Failure in process channel switch Req WDI API, free all the memory " );
3520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3521 vos_mem_free(pWdaParams) ;
3522 pSwitchChanParams->status = eSIR_FAILURE ;
3523 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 return CONVERT_WDI2VOS_STATUS(status) ;
3526}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003527
3528/*
3529 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3530 * send Switch channel RSP back to PE
3531 */
3532void WDA_SwitchChannelReqCallback_V1(
3533 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3534 void* pUserData)
3535{
3536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3537 tWDA_CbContext *pWDA;
3538 tSwitchChannelParams *pSwitchChanParams;
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3540 "<------ %s " ,__func__);
3541
3542 if (NULL == pWdaParams)
3543 {
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3545 "%s: pWdaParams received NULL", __func__);
3546 VOS_ASSERT(0);
3547 return ;
3548 }
3549 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3550 pSwitchChanParams =
3551 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3552 pSwitchChanParams->channelSwitchSrc =
3553 wdiSwitchChanRsp->channelSwitchSrc;
3554#ifdef WLAN_FEATURE_VOWIFI
3555 pSwitchChanParams->txMgmtPower =
3556 wdiSwitchChanRsp->ucTxMgmtPower;
3557#endif
3558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3559 vos_mem_free(pWdaParams);
3560 pSwitchChanParams->status =
3561 wdiSwitchChanRsp->wdiStatus ;
3562 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3563 (void *)pSwitchChanParams , 0);
3564 return;
3565}
3566
3567/*
3568 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3569 * Request to WDI to switch channel REQ params.
3570 */
3571VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3572 tSwitchChannelParams *pSwitchChanParams)
3573{
3574 WDI_Status status = WDI_STATUS_SUCCESS ;
3575 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3576 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3577 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3578 tWDA_ReqParams *pWdaParams ;
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3580 "------> %s " ,__func__);
3581 if (NULL == wdiSwitchChanParam)
3582 {
3583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3584 "%s: VOS MEM Alloc Failure", __func__);
3585 VOS_ASSERT(0);
3586 return VOS_STATUS_E_NOMEM;
3587 }
3588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3589 if (NULL == pWdaParams)
3590 {
3591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3592 "%s: VOS MEM Alloc Failure", __func__);
3593 VOS_ASSERT(0);
3594 vos_mem_free(wdiSwitchChanParam);
3595 return VOS_STATUS_E_NOMEM;
3596 }
3597 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3598 pSwitchChanParams->channelSwitchSrc;
3599
3600 wdiSwitchChanParam->wdiChInfo.ucChannel =
3601 pSwitchChanParams->channelNumber;
3602#ifndef WLAN_FEATURE_VOWIFI
3603 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3604 pSwitchChanParams->localPowerConstraint;
3605#endif
3606 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3607 pSwitchChanParams->secondaryChannelOffset;
3608 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3609 /* Store req pointer, as this will be used for response */
3610 /* store Params pass it to WDI */
3611 pWdaParams->pWdaContext = pWDA;
3612 pWdaParams->wdaMsgParam = pSwitchChanParams;
3613 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3614#ifdef WLAN_FEATURE_VOWIFI
3615 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3616 pSwitchChanParams->maxTxPower;
3617 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3618 pSwitchChanParams ->selfStaMacAddr,
3619 sizeof(tSirMacAddr));
3620#endif
3621 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3622 pSwitchChanParams->bssId,
3623 sizeof(tSirMacAddr));
3624
3625 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3626 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3627 pWdaParams);
3628 if (IS_WDI_STATUS_FAILURE(status))
3629 {
3630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3631 "Failure in process channel switch Req WDI "
3632 "API, free all the memory " );
3633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3634 vos_mem_free(pWdaParams) ;
3635 pSwitchChanParams->status = eSIR_FAILURE ;
3636 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3637 (void *)pSwitchChanParams, 0) ;
3638 }
3639 return CONVERT_WDI2VOS_STATUS(status) ;
3640}
3641
Jeff Johnson295189b2012-06-20 16:38:30 -07003642/*
3643 * FUNCTION: WDA_ConfigBssReqCallback
3644 * config BSS Req Callback, called by WDI
3645 */
3646void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3647 ,void* pUserData)
3648{
3649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3650 tWDA_CbContext *pWDA;
3651 tAddBssParams *configBssReqParam;
3652 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003654 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 if(NULL == pWdaParams)
3656 {
3657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 VOS_ASSERT(0) ;
3660 return ;
3661 }
3662 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3663 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3664 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003666 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3668 {
3669 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3670 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3672 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3673 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3674
3675 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3676 {
3677 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3678 {
3679 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3680 staConfigBssParam->staType = STA_ENTRY_BSSID;
3681 }
3682 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3683 (staConfigBssParam->staType == STA_ENTRY_SELF))
3684 {
3685 /* This is the 1st add BSS Req for the BTAMP STA */
3686 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3687 staConfigBssParam->staType = STA_ENTRY_BSSID;
3688 }
3689 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3690 (staConfigBssParam->staType == STA_ENTRY_PEER))
3691 {
3692 /* This is the 2nd ADD BSS Request that is sent
3693 * on the BTAMP STA side. The Sta type is
3694 * set to STA_ENTRY_PEER here.*/
3695 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3696 }
3697 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3698 (staConfigBssParam->staType == STA_ENTRY_SELF))
3699 {
3700 /* statype is already set by PE.
3701 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3702 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3703 staConfigBssParam->staType = STA_ENTRY_BSSID;
3704 }
3705 else
3706 {
3707 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3708 staConfigBssParam->staType = STA_ENTRY_PEER;
3709 }
3710 }
3711 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3712 {
3713 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3714 staConfigBssParam->staType = STA_ENTRY_SELF;
3715 }
3716 else
3717 {
3718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3719 "Invalid operation mode specified");
3720 VOS_ASSERT(0);
3721 }
3722
3723 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3728 sizeof(tSirMacAddr));
3729 staConfigBssParam->txChannelWidthSet =
3730 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3732 staConfigBssParam->htCapable)
3733 {
3734 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3735 wdiConfigBssRsp->ucBSSIdx;
3736 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3737 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303738 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3739 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3742 wdiConfigBssRsp->ucBSSIdx,
3743 wdiConfigBssRsp->ucSTAIdx))
3744 {
3745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003746 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 VOS_ASSERT(0) ;
3748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3750 {
3751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003752 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 VOS_ASSERT(0) ;
3754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003755#ifdef WLAN_FEATURE_VOWIFI
3756 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3757#endif
3758 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303759 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3760 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3762 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 return ;
3765}
Jeff Johnson295189b2012-06-20 16:38:30 -07003766/*
3767 * FUNCTION: WDA_UpdateEdcaParamsForAC
3768 * Update WDI EDCA params with PE edca params
3769 */
3770void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3771 WDI_EdcaParamRecord *wdiEdcaParam,
3772 tSirMacEdcaParamRecord *macEdcaParam)
3773{
3774 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3775 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3776 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3777 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3778 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3779 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3780}
Jeff Johnson295189b2012-06-20 16:38:30 -07003781/*
3782 * FUNCTION: WDA_ProcessConfigBssReq
3783 * Configure BSS before starting Assoc with AP
3784 */
3785VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3786 tAddBssParams* configBssReqParam)
3787{
3788 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303789 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003792 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303793 if (NULL == configBssReqParam)
3794 {
3795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3796 "%s: configBssReqParam is NULL", __func__);
3797 return VOS_STATUS_E_INVAL;
3798 }
3799
3800 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3801 sizeof(WDI_ConfigBSSReqParamsType)) ;
3802
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 if(NULL == wdiConfigBssReqParam)
3804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 VOS_ASSERT(0);
3808 return VOS_STATUS_E_NOMEM;
3809 }
3810 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3811 if(NULL == pWdaParams)
3812 {
3813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 VOS_ASSERT(0);
3816 vos_mem_free(wdiConfigBssReqParam);
3817 return VOS_STATUS_E_NOMEM;
3818 }
Kiran4a17ebe2013-01-31 10:43:43 -08003819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3820 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3823 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 /* Store Init Req pointer, as this will be used for response */
3825 /* store Params pass it to WDI */
3826 pWdaParams->pWdaContext = pWDA;
3827 pWdaParams->wdaMsgParam = configBssReqParam;
3828 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3830 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 if(IS_WDI_STATUS_FAILURE(status))
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3834 "Failure in Config BSS WDI API, free all the memory " );
3835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3836 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003840 return CONVERT_WDI2VOS_STATUS(status) ;
3841}
Jeff Johnson295189b2012-06-20 16:38:30 -07003842#ifdef ENABLE_HAL_COMBINED_MESSAGES
3843/*
3844 * FUNCTION: WDA_PostAssocReqCallback
3845 * Post ASSOC req callback, send RSP back to PE
3846 */
3847void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3848 void* pUserData)
3849{
3850 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3851 tPostAssocParams *postAssocReqParam =
3852 (tPostAssocParams *)pWDA->wdaMsgParam ;
3853 /*STA context within the BSS Params*/
3854 tAddStaParams *staPostAssocParam =
3855 &postAssocReqParam->addBssParams.staContext ;
3856 /*STA Params for self STA*/
3857 tAddStaParams *selfStaPostAssocParam =
3858 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003861 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003862 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3864 {
3865 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3866 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3867 sizeof(tSirMacAddr)) ;
3868 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3869 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3870 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3872 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303873 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3875 pWDA->wdaWdiApiMsgParam = NULL;
3876 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 return ;
3879}
Jeff Johnson295189b2012-06-20 16:38:30 -07003880/*
3881 * FUNCTION: WDA_ProcessPostAssocReq
3882 * Trigger POST ASSOC processing in WDI
3883 */
3884VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3885 tPostAssocParams *postAssocReqParam)
3886{
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 WDI_Status status = WDI_STATUS_SUCCESS ;
3888
3889 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3890 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3891 sizeof(WDI_PostAssocReqParamsType)) ;
3892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003894
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 if(NULL == wdiPostAssocReqParam)
3896 {
3897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 VOS_ASSERT(0);
3900 return VOS_STATUS_E_NOMEM;
3901 }
3902
3903 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3904 {
3905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003906 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_ASSERT(0);
3908 return VOS_STATUS_E_FAILURE;
3909 }
3910
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 /* update BSS params into WDI structure */
3912 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3913 &postAssocReqParam->addBssParams) ;
3914 /* update STA params into WDI structure */
3915 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3916 &postAssocReqParam->addStaParams) ;
3917
3918 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3919 postAssocReqParam->addBssParams.highPerformance;
3920 WDA_UpdateEdcaParamsForAC(pWDA,
3921 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3922 &postAssocReqParam->addBssParams.acbe);
3923 WDA_UpdateEdcaParamsForAC(pWDA,
3924 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3925 &postAssocReqParam->addBssParams.acbk);
3926 WDA_UpdateEdcaParamsForAC(pWDA,
3927 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3928 &postAssocReqParam->addBssParams.acvi);
3929 WDA_UpdateEdcaParamsForAC(pWDA,
3930 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3931 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 /* Store Init Req pointer, as this will be used for response */
3933 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 /* store Params pass it to WDI */
3935 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3937 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 if(IS_WDI_STATUS_FAILURE(status))
3939 {
3940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3941 "Failure in Post Assoc WDI API, free all the memory " );
3942 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3943 pWDA->wdaWdiApiMsgParam = NULL;
3944 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 return CONVERT_WDI2VOS_STATUS(status) ;
3949}
3950#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003951/*
3952 * FUNCTION: WDA_AddStaReqCallback
3953 * ADD STA req callback, send RSP back to PE
3954 */
3955void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3956 void* pUserData)
3957{
3958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3959 tWDA_CbContext *pWDA;
3960 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003962 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 if(NULL == pWdaParams)
3964 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 VOS_ASSERT(0) ;
3967 return ;
3968 }
3969 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3970 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003972 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3974 {
3975 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3976 /*TODO: UMAC structure doesn't have these fields*/
3977 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3978 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3979 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3980 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3981 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3982 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003983#ifdef FEATURE_WLAN_TDLS
3984 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3985 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3986#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003988#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 {
3990 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3991 wdiConfigStaRsp->ucBssIdx;
3992 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3993 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303994 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3995 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 }
3997 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3998 {
3999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004000 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 VOS_ASSERT(0) ;
4002 return ;
4003 }
4004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4006 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 return ;
4009}
Jeff Johnson295189b2012-06-20 16:38:30 -07004010/*
4011 * FUNCTION: WDA_ConfigStaReq
4012 * Trigger Config STA processing in WDI
4013 */
4014VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
4015 tAddStaParams *addStaReqParam)
4016{
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4019 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4020 sizeof(WDI_ConfigSTAReqParamsType)) ;
4021 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004023 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 if(NULL == wdiConfigStaReqParam)
4025 {
4026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 VOS_ASSERT(0);
4029 return VOS_STATUS_E_NOMEM;
4030 }
4031 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4032 if(NULL == pWdaParams)
4033 {
4034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004035 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 VOS_ASSERT(0);
4037 vos_mem_free(wdiConfigStaReqParam);
4038 return VOS_STATUS_E_NOMEM;
4039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 /* update STA params into WDI structure */
4042 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4043 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 /* Store Init Req pointer, as this will be used for response */
4045 /* store Params pass it to WDI */
4046 pWdaParams->pWdaContext = pWDA;
4047 pWdaParams->wdaMsgParam = addStaReqParam;
4048 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
4050 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 if(IS_WDI_STATUS_FAILURE(status))
4052 {
4053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4054 "Failure in Config STA WDI API, free all the memory " );
4055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4056 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 return CONVERT_WDI2VOS_STATUS(status) ;
4061}
Jeff Johnson295189b2012-06-20 16:38:30 -07004062/*
4063 * FUNCTION: WDA_DelBSSReqCallback
4064 * Dens DEL BSS RSP back to PE
4065 */
4066void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
4067 void* pUserData)
4068{
4069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4070 tWDA_CbContext *pWDA;
4071 tDeleteBssParams *delBssReqParam;
4072 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 if(NULL == pWdaParams)
4076 {
4077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004078 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 VOS_ASSERT(0) ;
4080 return ;
4081 }
4082 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4083 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004084 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4086 {
4087 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4088 sizeof(tSirMacAddr)) ;
4089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4091 {
4092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004093 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 VOS_ASSERT(0) ;
4095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4097 {
4098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004099 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 VOS_ASSERT(0) ;
4101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004105 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 VOS_ASSERT(0) ;
4107 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304108
4109 WLANTL_StartForwarding(staIdx,0,0);
4110
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4112 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 /* reset the the system role*/
4114 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4115
4116 /* Reset the BA related information */
4117 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4118 {
4119 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4120 {
4121 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4122 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304123 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 /* Reset framesTxed counters here */
4125 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4126 {
4127 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4128 }
4129 }
4130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 return ;
4133}
4134
Jeff Johnson295189b2012-06-20 16:38:30 -07004135/*
4136 * FUNCTION: WDA_ProcessDelBssReq
4137 * Init DEL BSS req with WDI
4138 */
4139VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4140 tDeleteBssParams *delBssParam)
4141{
4142 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4144 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4145 sizeof(WDI_DelBSSReqParamsType)) ;
4146 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 if(NULL == wdiDelBssReqParam)
4150 {
4151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 VOS_ASSERT(0);
4154 return VOS_STATUS_E_NOMEM;
4155 }
4156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4157 if(NULL == pWdaParams)
4158 {
4159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 VOS_ASSERT(0);
4162 vos_mem_free(wdiDelBssReqParam);
4163 return VOS_STATUS_E_NOMEM;
4164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4166 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4167
4168 /* Store Init Req pointer, as this will be used for response */
4169 /* store Params pass it to WDI */
4170 pWdaParams->pWdaContext = pWDA;
4171 pWdaParams->wdaMsgParam = delBssParam;
4172 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 status = WDI_DelBSSReq(wdiDelBssReqParam,
4174 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 if(IS_WDI_STATUS_FAILURE(status))
4176 {
4177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4178 "Failure in Del BSS WDI API, free all the memory " );
4179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4180 vos_mem_free(pWdaParams) ;
4181 delBssParam->status = eSIR_FAILURE ;
4182 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 return CONVERT_WDI2VOS_STATUS(status) ;
4185}
Jeff Johnson295189b2012-06-20 16:38:30 -07004186/*
4187 * FUNCTION: WDA_DelSTAReqCallback
4188 * Dens DEL STA RSP back to PE
4189 */
4190void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4191 void* pUserData)
4192{
4193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4194 tWDA_CbContext *pWDA;
4195 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 if(NULL == pWdaParams)
4199 {
4200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004201 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 VOS_ASSERT(0) ;
4203 return ;
4204 }
4205 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4206 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004207 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4209 {
4210 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4211 {
4212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004213 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 VOS_ASSERT(0) ;
4215 }
4216 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304217 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 }
4219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 /*Reset the BA information corresponding to this STAIdx */
4222 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4223 WDA_INVALID_STA_INDEX;
4224 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304225 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 return ;
4228}
Jeff Johnson295189b2012-06-20 16:38:30 -07004229/*
4230 * FUNCTION: WDA_ProcessDelStaReq
4231 * Init DEL STA req with WDI
4232 */
4233VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4234 tDeleteStaParams *delStaParam)
4235{
4236 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4238 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4239 sizeof(WDI_DelSTAReqParamsType)) ;
4240 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 if(NULL == wdiDelStaReqParam)
4244 {
4245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 VOS_ASSERT(0);
4248 return VOS_STATUS_E_NOMEM;
4249 }
4250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4251 if(NULL == pWdaParams)
4252 {
4253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 VOS_ASSERT(0);
4256 vos_mem_free(wdiDelStaReqParam);
4257 return VOS_STATUS_E_NOMEM;
4258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4260 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004261 /* Store Init Req pointer, as this will be used for response */
4262 /* store Params pass it to WDI */
4263 pWdaParams->pWdaContext = pWDA;
4264 pWdaParams->wdaMsgParam = delStaParam;
4265 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 status = WDI_DelSTAReq(wdiDelStaReqParam,
4267 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 if(IS_WDI_STATUS_FAILURE(status))
4269 {
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4271 "Failure in Del STA WDI API, free all the memory status = %d",
4272 status );
4273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4274 vos_mem_free(pWdaParams) ;
4275 delStaParam->status = eSIR_FAILURE ;
4276 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 return CONVERT_WDI2VOS_STATUS(status) ;
4279}
Jeff Johnson295189b2012-06-20 16:38:30 -07004280void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4281{
4282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4283 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304284 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004286 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 if(NULL == pWdaParams)
4288 {
4289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004290 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 VOS_ASSERT(0) ;
4292 return ;
4293 }
4294 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4295 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4297 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4299 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4300 pwdiAddSTASelfRsp->macSelfSta,
4301 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304302 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4303 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4304 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4305 {
4306 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4307 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 return ;
4311}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304312
Jeff Johnson295189b2012-06-20 16:38:30 -07004313/*
4314 * FUNCTION: WDA_ProcessAddStaSelfReq
4315 *
4316 */
4317VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4318{
4319 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4322 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4323 sizeof(WDI_AddSTASelfReqParamsType)) ;
4324 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004326 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304327 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 if( NULL == wdiAddStaSelfReq )
4329 {
4330 VOS_ASSERT( 0 );
4331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004332 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304333 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4334 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 return( VOS_STATUS_E_NOMEM );
4336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 if( NULL == pWdaParams )
4339 {
4340 VOS_ASSERT( 0 );
4341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004342 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304343 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4344 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 vos_mem_free(wdiAddStaSelfReq) ;
4346 return( VOS_STATUS_E_NOMEM );
4347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004350 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 /* Store Init Req pointer, as this will be used for response */
4352 /* store Params pass it to WDI */
4353 pWdaParams->pWdaContext = pWDA;
4354 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4355 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004356 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357
Jeff Johnson43971f52012-07-17 12:26:56 -07004358 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4361 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004362 wstatus );
4363 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4365 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304366 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4367 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 pAddStaSelfReq->status = eSIR_FAILURE ;
4369 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4370 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004371 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004372}
Jeff Johnson295189b2012-06-20 16:38:30 -07004373/*
4374 * FUNCTION: WDA_DelSTASelfRespCallback
4375 *
4376 */
4377void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4378 wdiDelStaSelfRspParams , void* pUserData)
4379{
4380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4381 tWDA_CbContext *pWDA;
4382 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 if (NULL == pWdaParams)
4386 {
4387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004388 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 VOS_ASSERT(0);
4390 return;
4391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4393 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004395 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396
4397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4398 vos_mem_free(pWdaParams) ;
4399
4400 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 return ;
4402}
Jeff Johnson295189b2012-06-20 16:38:30 -07004403/*
4404 * FUNCTION: WDA_DelSTASelfReqCallback
4405 *
4406 */
4407void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4408 void* pUserData)
4409{
4410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4411 tWDA_CbContext *pWDA;
4412 tDelStaSelfParams *delStaSelfParams;
4413
4414 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304415 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004416 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004417
4418 if (NULL == pWdaParams)
4419 {
4420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004421 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 VOS_ASSERT(0);
4423 return;
4424 }
4425
4426 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4427 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4428
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004429 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430
4431 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4432 {
4433 VOS_ASSERT(0);
4434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4435 vos_mem_free(pWdaParams) ;
4436 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4437 }
4438
4439 return ;
4440}
4441
4442/*
4443 * FUNCTION: WDA_DelSTASelfReq
4444 * Trigger Config STA processing in WDI
4445 */
4446VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4447 tDelStaSelfParams* pDelStaSelfReqParam)
4448{
4449 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004450 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 tWDA_ReqParams *pWdaParams = NULL;
4452 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4453 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4454 sizeof(WDI_DelSTASelfReqParamsType)) ;
4455
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 if( NULL == wdiDelStaSelfReq )
4459 {
4460 VOS_ASSERT( 0 );
4461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004462 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 return( VOS_STATUS_E_NOMEM );
4464 }
4465
4466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4467 if( NULL == pWdaParams )
4468 {
4469 VOS_ASSERT( 0 );
4470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004471 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 vos_mem_free(wdiDelStaSelfReq) ;
4473 return( VOS_STATUS_E_NOMEM );
4474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 pWdaParams->pWdaContext = pWDA;
4476 /* Store param pointer as passed in by caller */
4477 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4478 /* store Params pass it to WDI */
4479 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4481 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4482
4483 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4484 wdiDelStaSelfReq->pUserData = pWdaParams;
4485
Jeff Johnson43971f52012-07-17 12:26:56 -07004486 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4488
Jeff Johnson43971f52012-07-17 12:26:56 -07004489 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 {
4491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4492 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4493 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004494 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4496 vos_mem_free(pWdaParams) ;
4497 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4498 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4499 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004500 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501}
4502
Jeff Johnson295189b2012-06-20 16:38:30 -07004503/*
4504 * FUNCTION: WDA_SendMsg
4505 * Send Message back to PE
4506 */
4507void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4508 void *pBodyptr, tANI_U32 bodyVal)
4509{
4510 tSirMsgQ msg = {0} ;
4511 tANI_U32 status = VOS_STATUS_SUCCESS ;
4512 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 msg.type = msgType;
4514 msg.bodyval = bodyVal;
4515 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 if (VOS_STATUS_SUCCESS != status)
4518 {
4519 if(NULL != pBodyptr)
4520 {
4521 vos_mem_free(pBodyptr);
4522 }
4523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004524 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 VOS_ASSERT(0) ;
4526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 return ;
4528}
Jeff Johnson295189b2012-06-20 16:38:30 -07004529/*
4530 * FUNCTION: WDA_UpdateBSSParams
4531 * Translated WDA/PE BSS info into WDI BSS info..
4532 */
4533void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4534 WDI_ConfigBSSReqInfoType *wdiBssParams,
4535 tAddBssParams *wdaBssParams)
4536{
4537 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304538 v_U8_t i = 0;
4539
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 /* copy bssReq Params to WDI structure */
4541 vos_mem_copy(wdiBssParams->macBSSID,
4542 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4543 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4544 sizeof(tSirMacAddr)) ;
4545 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4546 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4547 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 wdiBssParams->ucShortSlotTimeSupported =
4549 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4551 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4552 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4553 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4554 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4555
4556 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4557 wdiBssParams->ucTXOPProtectionFullSupport =
4558 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4560 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4563 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4564 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4565 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4566
Chet Lanctot186b5732013-03-18 10:26:30 -07004567 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4568
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 /* copy SSID into WDI structure */
4570 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4571 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4572 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4574 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576#ifdef WLAN_FEATURE_VOWIFI
4577 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4578#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004581#ifdef WLAN_FEATURE_VOWIFI_11R
4582 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 if(wdiBssParams->bExtSetStaKeyParamValid)
4584 {
4585 /* copy set STA key params to WDI structure */
4586 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4587 wdaBssParams->extSetStaKeyParam.staIdx;
4588 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4589 wdaBssParams->extSetStaKeyParam.encType;
4590 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4591 wdaBssParams->extSetStaKeyParam.wepType;
4592 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4593 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4595 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004596 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4598 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4599 {
4600 WDA_GetWepKeysFromCfg( pWDA,
4601 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4602 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4603 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4604 }
4605 else
4606 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4608 keyIndex++)
4609 {
4610 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4611 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4612 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4613 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4614 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4615 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304616
4617 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4618 {
4619 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4620 {
4621 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4622 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4623 }
4624
4625 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4626 {
4627 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4628 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4629 }
4630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4631 FL("%s: Negated Keys"), __func__);
4632 }
4633 else
4634 {
4635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4636 FL("%s: No change in Keys "), __func__);
4637 vos_mem_copy(
4638 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4639 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4640 WLAN_MAX_KEY_RSC_LEN);
4641 vos_mem_copy(
4642 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4643 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4644 SIR_MAC_MAX_KEY_LENGTH);
4645 }
4646
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4648 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4649 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4650 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304652 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004653 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004654 }
4655 }
4656 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4657 }
4658 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4659 {
4660 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4661 sizeof(wdaBssParams->extSetStaKeyParam) );
4662 }
4663#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004664#ifdef WLAN_FEATURE_11AC
4665 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4666 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4667#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004668
4669 return ;
4670}
Jeff Johnson295189b2012-06-20 16:38:30 -07004671/*
4672 * FUNCTION: WDA_UpdateSTAParams
4673 * Translated WDA/PE BSS info into WDI BSS info..
4674 */
4675void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4676 WDI_ConfigStaReqInfoType *wdiStaParams,
4677 tAddStaParams *wdaStaParams)
4678{
4679 tANI_U8 i = 0;
4680 /* Update STA params */
4681 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4682 sizeof(tSirMacAddr)) ;
4683 wdiStaParams->usAssocId = wdaStaParams->assocId;
4684 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004685 wdiStaParams->staIdx = wdaStaParams->staIdx;
4686
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 wdiStaParams->ucShortPreambleSupported =
4688 wdaStaParams->shortPreambleSupported;
4689 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4690 sizeof(tSirMacAddr)) ;
4691 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4692
4693 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4694
4695 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4696 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4697 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4698 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4699 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4700 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4701 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4702
4703 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4704 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 wdiStaParams->wdiSupportedRates.opRateMode =
4706 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4708 {
4709 wdiStaParams->wdiSupportedRates.llbRates[i] =
4710 wdaStaParams->supportedRates.llbRates[i];
4711 }
4712 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4713 {
4714 wdiStaParams->wdiSupportedRates.llaRates[i] =
4715 wdaStaParams->supportedRates.llaRates[i];
4716 }
4717 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4718 {
4719 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4720 wdaStaParams->supportedRates.aniLegacyRates[i];
4721 }
4722 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4723 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004724#ifdef WLAN_FEATURE_11AC
4725 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4726 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4727 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4728 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4729#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4731 {
4732 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4733 wdaStaParams->supportedRates.supportedMCSSet[i];
4734 }
4735 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4736 wdaStaParams->supportedRates.rxHighestDataRate;
4737
4738 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4739
4740 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4741
4742 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4743 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4744 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4745
4746 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4747 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4748 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4749 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004751#ifdef WLAN_FEATURE_11AC
4752 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4753 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004754 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304755 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4756 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4757 * must be set by default */
4758 if ( wdiStaParams->vhtTxMUBformeeCapable )
4759 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004760#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004761 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4762 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 return ;
4764}
Jeff Johnson295189b2012-06-20 16:38:30 -07004765/*
4766 * -------------------------------------------------------------------------
4767 * CFG update to WDI
4768 * -------------------------------------------------------------------------
4769 */
4770
4771 /*
4772 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4773 * Convert the WNI CFG ID to HAL CFG ID
4774 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004775static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004776{
4777 switch(wniCfgId)
4778 {
4779 case WNI_CFG_STA_ID:
4780 return QWLAN_HAL_CFG_STA_ID;
4781 case WNI_CFG_CURRENT_TX_ANTENNA:
4782 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4783 case WNI_CFG_CURRENT_RX_ANTENNA:
4784 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4785 case WNI_CFG_LOW_GAIN_OVERRIDE:
4786 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4787 case WNI_CFG_POWER_STATE_PER_CHAIN:
4788 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4789 case WNI_CFG_CAL_PERIOD:
4790 return QWLAN_HAL_CFG_CAL_PERIOD;
4791 case WNI_CFG_CAL_CONTROL:
4792 return QWLAN_HAL_CFG_CAL_CONTROL;
4793 case WNI_CFG_PROXIMITY:
4794 return QWLAN_HAL_CFG_PROXIMITY;
4795 case WNI_CFG_NETWORK_DENSITY:
4796 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4797 case WNI_CFG_MAX_MEDIUM_TIME:
4798 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4799 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4800 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4801 case WNI_CFG_RTS_THRESHOLD:
4802 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4803 case WNI_CFG_SHORT_RETRY_LIMIT:
4804 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4805 case WNI_CFG_LONG_RETRY_LIMIT:
4806 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4807 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4808 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4809 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4810 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4811 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4812 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4813 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4814 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4815 case WNI_CFG_FIXED_RATE:
4816 return QWLAN_HAL_CFG_FIXED_RATE;
4817 case WNI_CFG_RETRYRATE_POLICY:
4818 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4819 case WNI_CFG_RETRYRATE_SECONDARY:
4820 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4821 case WNI_CFG_RETRYRATE_TERTIARY:
4822 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4823 case WNI_CFG_FORCE_POLICY_PROTECTION:
4824 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4825 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4826 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4827 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4828 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4829 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4830 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4831 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4832 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4833 case WNI_CFG_MAX_BA_SESSIONS:
4834 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4835 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4836 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4837 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4838 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4839 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4840 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4841 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4842 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4843 case WNI_CFG_STATS_PERIOD:
4844 return QWLAN_HAL_CFG_STATS_PERIOD;
4845 case WNI_CFG_CFP_MAX_DURATION:
4846 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4847#if 0 /*This is not part of CFG*/
4848 case WNI_CFG_FRAME_TRANS_ENABLED:
4849 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4850#endif
4851 case WNI_CFG_DTIM_PERIOD:
4852 return QWLAN_HAL_CFG_DTIM_PERIOD;
4853 case WNI_CFG_EDCA_WME_ACBK:
4854 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4855 case WNI_CFG_EDCA_WME_ACBE:
4856 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4857 case WNI_CFG_EDCA_WME_ACVI:
4858 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4859 case WNI_CFG_EDCA_WME_ACVO:
4860 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4861#if 0
4862 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4863 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4864 case WNI_CFG_TELE_BCN_TRANS_LI:
4865 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4866 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4867 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4868 case WNI_CFG_TELE_BCN_MAX_LI:
4869 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4870 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4871 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4872#endif
4873 case WNI_CFG_ENABLE_CLOSE_LOOP:
4874 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004875 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4876 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304877 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4878 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 default:
4880 {
4881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004882 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 wniCfgId);
4884 return VOS_STATUS_E_INVAL;
4885 }
4886 }
4887}
Jeff Johnson295189b2012-06-20 16:38:30 -07004888/*
4889 * FUNCTION: WDA_UpdateCfgCallback
4890 *
4891 */
4892void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4893{
4894 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4895 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4896 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 /*
4900 * currently there is no response message is expected between PE and
4901 * WDA, Failure return from WDI is a ASSERT condition
4902 */
4903 if(WDI_STATUS_SUCCESS != wdiStatus)
4904 {
4905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004906 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4908 }
4909
4910 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4911 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4912 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 return ;
4914}
Jeff Johnson295189b2012-06-20 16:38:30 -07004915/*
4916 * FUNCTION: WDA_UpdateCfg
4917 *
4918 */
4919VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4920{
4921
4922 WDI_Status status = WDI_STATUS_SUCCESS ;
4923 tANI_U32 val =0;
4924 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4925 tHalCfg *configData;
4926 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4927 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 if (NULL == pMac )
4931 {
4932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004933 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 return VOS_STATUS_E_FAILURE;
4935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 if(WDA_START_STATE != pWDA->wdaState)
4937 {
4938 return VOS_STATUS_E_FAILURE;
4939 }
4940
4941 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4942 {
4943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004944 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 VOS_ASSERT(0);
4946 return VOS_STATUS_E_FAILURE;
4947 }
4948
4949 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4950 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 if(NULL == wdiCfgReqParam)
4952 {
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 VOS_ASSERT(0);
4956 return VOS_STATUS_E_NOMEM;
4957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4959 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 if(NULL == wdiCfgReqParam->pConfigBuffer)
4961 {
4962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 vos_mem_free(wdiCfgReqParam);
4965 VOS_ASSERT(0);
4966 return VOS_STATUS_E_NOMEM;
4967 }
4968
4969 /*convert the WNI CFG Id to HAL CFG Id*/
4970 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4971 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4972
4973 /*TODO: revisit this for handling string parameters */
4974 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4975 &val) != eSIR_SUCCESS)
4976 {
4977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004978 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4980 vos_mem_free(wdiCfgReqParam);
4981 return eSIR_FAILURE;
4982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4984 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4985 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4986 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4987 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4988
4989 /* store Params pass it to WDI */
4990 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004991#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4992 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4993 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 if(IS_WDI_STATUS_FAILURE(status))
4995 {
4996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4997 "Failure in Update CFG WDI API, free all the memory " );
4998 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4999 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5000 pWDA->wdaWdiCfgApiMsgParam = NULL;
5001 /* Failure is not expected */
5002 VOS_ASSERT(0) ;
5003 }
5004#else
5005 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5006 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5007 pWDA->wdaWdiCfgApiMsgParam = NULL;
5008#endif
5009 return CONVERT_WDI2VOS_STATUS(status) ;
5010}
5011
Jeff Johnson295189b2012-06-20 16:38:30 -07005012VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5013 v_U8_t *pDefaultKeyId,
5014 v_U8_t *pNumKeys,
5015 WDI_KeysType *pWdiKeys )
5016{
5017 v_U32_t i, j, defKeyId = 0;
5018 v_U32_t val = SIR_MAC_KEY_LENGTH;
5019 VOS_STATUS status = WDI_STATUS_SUCCESS;
5020 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 if (NULL == pMac )
5022 {
5023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005024 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 return VOS_STATUS_E_FAILURE;
5026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5028 &defKeyId ))
5029 {
5030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5031 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5032 }
5033
5034 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 /* Need to extract ALL of the configured WEP Keys */
5036 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5037 {
5038 val = SIR_MAC_KEY_LENGTH;
5039 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5040 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5041 pWdiKeys[j].key,
5042 &val ))
5043 {
5044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005045 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 }
5047 else
5048 {
5049 pWdiKeys[j].keyId = (tANI_U8) i;
5050 /*
5051 * Actually, a DC (Don't Care) because
5052 * this is determined (and set) by PE/MLME
5053 */
5054 pWdiKeys[j].unicast = 0;
5055 /*
5056 * Another DC (Don't Care)
5057 */
5058 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5059 /* Another DC (Don't Care). Unused for WEP */
5060 pWdiKeys[j].paeRole = 0;
5061 /* Determined from wlan_cfgGetStr() above.*/
5062 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 j++;
5064 *pNumKeys = (tANI_U8) j;
5065 }
5066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 return status;
5068}
Jeff Johnson295189b2012-06-20 16:38:30 -07005069/*
5070 * FUNCTION: WDA_SetBssKeyReqCallback
5071 * send SET BSS key RSP back to PE
5072 */
5073void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5074{
5075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5076 tWDA_CbContext *pWDA;
5077 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 if(NULL == pWdaParams)
5081 {
5082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005083 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 VOS_ASSERT(0) ;
5085 return ;
5086 }
5087 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5088 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305089 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5090 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5092 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005093 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 return ;
5096}
Jeff Johnson295189b2012-06-20 16:38:30 -07005097/*
5098 * FUNCTION: WDA_ProcessSetBssKeyReq
5099 * Request to WDI for programming the BSS key( key for
5100 * broadcast/multicast frames Encryption)
5101 */
5102VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5103 tSetBssKeyParams *setBssKeyParams )
5104{
5105 WDI_Status status = WDI_STATUS_SUCCESS ;
5106 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5107 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5108 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5109 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 if(NULL == wdiSetBssKeyParam)
5114 {
5115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 VOS_ASSERT(0);
5118 return VOS_STATUS_E_NOMEM;
5119 }
5120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5121 if(NULL == pWdaParams)
5122 {
5123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 VOS_ASSERT(0);
5126 vos_mem_free(wdiSetBssKeyParam);
5127 return VOS_STATUS_E_NOMEM;
5128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 /* copy set BSS params to WDI structure */
5131 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5132 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5133 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005134 if(setBssKeyParams->encType != eSIR_ED_NONE)
5135 {
5136 if( setBssKeyParams->numKeys == 0 &&
5137 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5138 setBssKeyParams->encType == eSIR_ED_WEP104))
5139 {
5140 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5142 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5143 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5144 }
5145 else
5146 {
5147 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5148 {
5149 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5150 setBssKeyParams->key[keyIndex].keyId;
5151 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5152 setBssKeyParams->key[keyIndex].unicast;
5153 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5154 setBssKeyParams->key[keyIndex].keyDirection;
5155 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5156 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5157 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5158 setBssKeyParams->key[keyIndex].paeRole;
5159 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5160 setBssKeyParams->key[keyIndex].keyLength;
5161 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5162 setBssKeyParams->key[keyIndex].key,
5163 SIR_MAC_MAX_KEY_LENGTH);
5164 }
5165 }
5166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5168 setBssKeyParams->singleTidRc;
5169 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 /* Store set key pointer, as this will be used for response */
5171 /* store Params pass it to WDI */
5172 pWdaParams->pWdaContext = pWDA;
5173 pWdaParams->wdaMsgParam = setBssKeyParams;
5174 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5176 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5177
5178 if(IS_WDI_STATUS_FAILURE(status))
5179 {
5180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5181 "Failure in Set BSS Key Req WDI API, free all the memory " );
5182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5183 vos_mem_free(pWdaParams) ;
5184 setBssKeyParams->status = eSIR_FAILURE ;
5185 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 return CONVERT_WDI2VOS_STATUS(status) ;
5188}
Jeff Johnson295189b2012-06-20 16:38:30 -07005189/*
5190 * FUNCTION: WDA_RemoveBssKeyReqCallback
5191 * send SET BSS key RSP back to PE
5192 */
5193void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5194{
5195 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5196 tWDA_CbContext *pWDA;
5197 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005199 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 if(NULL == pWdaParams)
5201 {
5202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005203 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 VOS_ASSERT(0) ;
5205 return ;
5206 }
5207 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5208 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5210 vos_mem_free(pWdaParams) ;
5211
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005212 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 return ;
5215}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305216
5217/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305218 * FUNCTION: WDA_GetFrameLogRspCallback
5219 * recieves get frame log response from FW
5220 */
5221void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5222 void* pUserData)
5223{
5224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5225 tWDA_CbContext *pWDA = NULL;
5226 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5227
5228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5229 "<------ Entering: %s " ,__func__);
5230 if(NULL == pWdaParams)
5231 {
5232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5233 "%s: pWdaParams received NULL", __func__);
5234 VOS_ASSERT(0) ;
5235 return ;
5236 }
5237
5238 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5239 if (NULL == pWDA)
5240 {
5241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5242 "%s:pWDA is NULL", __func__);
5243 VOS_ASSERT(0);
5244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5245 vos_mem_free(pWdaParams);
5246 return ;
5247 }
5248
5249 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5250 if(NULL == pGetFrameLogReqParams)
5251 {
5252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5253 "%s: pGetFrameLogReqParams received NULL", __func__);
5254 VOS_ASSERT(0);
5255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5256 vos_mem_free(pWdaParams);
5257 return;
5258 }
5259
Siddharth Bhal64246172015-02-27 01:04:37 +05305260 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305262 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5263 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305264 }
5265
5266 /* free WDI command buffer only */
5267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5268 vos_mem_free(pWdaParams->wdaMsgParam);
5269 vos_mem_free(pWdaParams);
5270
5271 return ;
5272
5273}
5274/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305275 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305276 * recieves Mgmt Logging init response from FW
5277 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305278void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305279 void* pUserData)
5280{
5281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305282 tSirFWLoggingInitParam *pFWLoggingInitParams;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305283
5284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5285 "<------ %s " ,__func__);
5286
5287 if(NULL == pWdaParams)
5288 {
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5290 "%s: pWdaParams received NULL", __func__);
5291 VOS_ASSERT(0);
5292 return ;
5293 }
5294
5295 if(NULL == pWdaParams->wdaMsgParam)
5296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5298 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5299 VOS_ASSERT(0);
5300 vos_mem_free(pWdaParams);
5301 return ;
5302 }
5303
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305304 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305305
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305306 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305307 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305308 pFWLoggingInitParams->fwlogInitCallback(
5309 pFWLoggingInitParams->fwlogInitCbContext,
5310 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305311 }
5312 else
5313 {
5314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305315 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305316 }
5317
5318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5319 vos_mem_free(pWdaParams->wdaMsgParam);
5320 vos_mem_free(pWdaParams);
5321
5322 return;
5323}
5324
5325/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305326 * FUNCTION: WDA_SpoofMacAddrRspCallback
5327 * recieves spoof mac addr response from FW
5328 */
5329void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5330{
5331 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5332 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305333
Siddharth Bhal171788a2014-09-29 21:02:40 +05305334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5335 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305336
Siddharth Bhal171788a2014-09-29 21:02:40 +05305337 if(NULL == pWdaParams)
5338 {
5339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5340 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305341 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305342 return ;
5343 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305344 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305345
Siddharth Bhal029d6732014-10-09 21:31:23 +05305346 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305348 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305349 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305350 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5351 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305352
Siddharth Bhal171788a2014-09-29 21:02:40 +05305353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305354 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305355 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305356
5357 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305358}
5359
Jeff Johnson295189b2012-06-20 16:38:30 -07005360/*
5361 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5362 * Request to WDI to remove the BSS key( key for broadcast/multicast
5363 * frames Encryption)
5364 */
5365VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5366 tRemoveBssKeyParams *removeBssKeyParams )
5367{
5368 WDI_Status status = WDI_STATUS_SUCCESS ;
5369 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5370 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5371 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5372 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 if(NULL == wdiRemoveBssKeyParam)
5376 {
5377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 VOS_ASSERT(0);
5380 return VOS_STATUS_E_NOMEM;
5381 }
5382 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5383 if(NULL == pWdaParams)
5384 {
5385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 VOS_ASSERT(0);
5388 vos_mem_free(wdiRemoveBssKeyParam);
5389 return VOS_STATUS_E_NOMEM;
5390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 /* copy Remove BSS key params to WDI structure*/
5392 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5393 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5394 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5395 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5396 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /* Store remove key pointer, as this will be used for response */
5398 /* store Params pass it to WDI */
5399 pWdaParams->pWdaContext = pWDA;
5400 pWdaParams->wdaMsgParam = removeBssKeyParams;
5401 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5403 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 if(IS_WDI_STATUS_FAILURE(status))
5405 {
5406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5407 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5409 vos_mem_free(pWdaParams) ;
5410 removeBssKeyParams->status = eSIR_FAILURE ;
5411 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return CONVERT_WDI2VOS_STATUS(status) ;
5414}
Jeff Johnson295189b2012-06-20 16:38:30 -07005415/*
5416 * FUNCTION: WDA_SetBssKeyReqCallback
5417 * send SET BSS key RSP back to PE
5418 */
5419void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5420{
5421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5422 tWDA_CbContext *pWDA;
5423 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005425 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 if(NULL == pWdaParams)
5427 {
5428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005429 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 VOS_ASSERT(0) ;
5431 return ;
5432 }
5433 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5434 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305435 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5436 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5438 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005439 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 return ;
5442}
Jeff Johnson295189b2012-06-20 16:38:30 -07005443/*
5444 * FUNCTION: WDA_ProcessSetStaKeyReq
5445 * Request to WDI for programming the STA key( key for Unicast frames
5446 * Encryption)
5447 */
5448VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5449 tSetStaKeyParams *setStaKeyParams )
5450{
5451 WDI_Status status = WDI_STATUS_SUCCESS ;
5452 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5453 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5454 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 if(NULL == wdiSetStaKeyParam)
5460 {
5461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 VOS_ASSERT(0);
5464 return VOS_STATUS_E_NOMEM;
5465 }
5466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5467 if(NULL == pWdaParams)
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 VOS_ASSERT(0);
5472 vos_mem_free(wdiSetStaKeyParam);
5473 return VOS_STATUS_E_NOMEM;
5474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 /* copy set STA key params to WDI structure */
5478 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5479 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5480 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5481 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 if(setStaKeyParams->encType != eSIR_ED_NONE)
5483 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005484 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5486 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5487 {
5488 WDA_GetWepKeysFromCfg( pWDA,
5489 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5490 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5491 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5492 }
5493 else
5494 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5496 keyIndex++)
5497 {
5498 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5499 setStaKeyParams->key[keyIndex].keyId;
5500 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5501 setStaKeyParams->key[keyIndex].unicast;
5502 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5503 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5505 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5506 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5507 setStaKeyParams->key[keyIndex].paeRole;
5508 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5509 setStaKeyParams->key[keyIndex].keyLength;
5510 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5511 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5512 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5513 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5514 {
5515 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5516 }
5517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5519 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 }
5521 }
5522 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5523 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 /* Store set key pointer, as this will be used for response */
5525 /* store Params pass it to WDI */
5526 pWdaParams->pWdaContext = pWDA;
5527 pWdaParams->wdaMsgParam = setStaKeyParams;
5528 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5530 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 if(IS_WDI_STATUS_FAILURE(status))
5532 {
5533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5534 "Failure in set STA Key Req WDI API, free all the memory " );
5535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5536 vos_mem_free(pWdaParams) ;
5537 setStaKeyParams->status = eSIR_FAILURE ;
5538 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 return CONVERT_WDI2VOS_STATUS(status) ;
5541}
Jeff Johnson295189b2012-06-20 16:38:30 -07005542/*
5543 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5544 * send SET Bcast STA key RSP back to PE
5545 */
5546void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5547{
5548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5549 tWDA_CbContext *pWDA;
5550 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 if(NULL == pWdaParams)
5554 {
5555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 VOS_ASSERT(0) ;
5558 return ;
5559 }
5560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5561 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5563 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005564 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 return ;
5567}
5568
Jeff Johnson295189b2012-06-20 16:38:30 -07005569/*
5570 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5571 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5572 * Encryption)
5573 */
5574VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5575 tSetStaKeyParams *setStaKeyParams )
5576{
5577 WDI_Status status = WDI_STATUS_SUCCESS ;
5578 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5579 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5580 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5581 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 if(NULL == wdiSetStaKeyParam)
5586 {
5587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 VOS_ASSERT(0);
5590 return VOS_STATUS_E_NOMEM;
5591 }
5592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5593 if(NULL == pWdaParams)
5594 {
5595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 VOS_ASSERT(0);
5598 vos_mem_free(wdiSetStaKeyParam);
5599 return VOS_STATUS_E_NOMEM;
5600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 /* copy set STA key params to WDI structure */
5604 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5605 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5606 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5607 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 if(setStaKeyParams->encType != eSIR_ED_NONE)
5609 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5611 keyIndex++)
5612 {
5613 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5614 setStaKeyParams->key[keyIndex].keyId;
5615 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5616 setStaKeyParams->key[keyIndex].unicast;
5617 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5618 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5620 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5621 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5622 setStaKeyParams->key[keyIndex].paeRole;
5623 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5624 setStaKeyParams->key[keyIndex].keyLength;
5625 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5626 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5629 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 }
5631 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 /* Store set key pointer, as this will be used for response */
5633 /* store Params pass it to WDI */
5634 pWdaParams->pWdaContext = pWDA;
5635 pWdaParams->wdaMsgParam = setStaKeyParams;
5636 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5638 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 if(IS_WDI_STATUS_FAILURE(status))
5640 {
5641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5642 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5644 vos_mem_free(pWdaParams) ;
5645 setStaKeyParams->status = eSIR_FAILURE ;
5646 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 return CONVERT_WDI2VOS_STATUS(status) ;
5649}
Jeff Johnson295189b2012-06-20 16:38:30 -07005650/*
5651 * FUNCTION: WDA_RemoveStaKeyReqCallback
5652 * send SET BSS key RSP back to PE
5653 */
5654void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5655{
5656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5657 tWDA_CbContext *pWDA;
5658 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005660 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 if(NULL == pWdaParams)
5662 {
5663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005664 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 VOS_ASSERT(0) ;
5666 return ;
5667 }
5668 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5669 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5671 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005672 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 return ;
5675}
5676
Jeff Johnson295189b2012-06-20 16:38:30 -07005677/*
5678 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5679 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5680 */
5681VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5682 tRemoveStaKeyParams *removeStaKeyParams )
5683{
5684 WDI_Status status = WDI_STATUS_SUCCESS ;
5685 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5686 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5687 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 if(NULL == wdiRemoveStaKeyParam)
5692 {
5693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 VOS_ASSERT(0);
5696 return VOS_STATUS_E_NOMEM;
5697 }
5698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5699 if(NULL == pWdaParams)
5700 {
5701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 VOS_ASSERT(0);
5704 vos_mem_free(wdiRemoveStaKeyParam);
5705 return VOS_STATUS_E_NOMEM;
5706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 /* copy remove STA key params to WDI structure*/
5708 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5709 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5710 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5711 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5712 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 /* Store remove key pointer, as this will be used for response */
5714 /* store Params pass it to WDI */
5715 pWdaParams->pWdaContext = pWDA;
5716 pWdaParams->wdaMsgParam = removeStaKeyParams;
5717 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5719 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 if(IS_WDI_STATUS_FAILURE(status))
5721 {
5722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5723 "Failure in remove STA Key Req WDI API, free all the memory " );
5724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5725 vos_mem_free(pWdaParams) ;
5726 removeStaKeyParams->status = eSIR_FAILURE ;
5727 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 return CONVERT_WDI2VOS_STATUS(status) ;
5730}
Jeff Johnson295189b2012-06-20 16:38:30 -07005731/*
5732 * FUNCTION: WDA_IsHandleSetLinkStateReq
5733 * Update the WDA state and return the status to handle this message or not
5734 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005735WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5736 tWDA_CbContext *pWDA,
5737 tLinkStateParams *linkStateParams)
5738{
5739 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 switch(linkStateParams->state)
5741 {
5742 case eSIR_LINK_PREASSOC_STATE:
5743 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5744 /*
5745 * set the WDA state to PRE ASSOC
5746 * copy the BSSID into pWDA to use it in join request and return,
5747 * No need to handle these messages.
5748 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005749 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5750 {
5751 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005753 }
5754 else
5755 {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005758 VOS_ASSERT(0);
5759 }
5760
5761 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5762 {
5763 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005765 }
5766 else
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005769 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005770 VOS_ASSERT(0);
5771 }
5772
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5774 *channel and after ) so reset the WDA state to ready when the second
5775 * time UMAC issue the link state with PREASSOC
5776 */
5777 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5778 {
5779 /* RESET WDA state back to WDA_READY_STATE */
5780 pWDA->wdaState = WDA_READY_STATE;
5781 }
5782 else
5783 {
5784 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5785 }
5786 //populate linkState info in WDACbCtxt
5787 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 default:
5790 if(pWDA->wdaState != WDA_READY_STATE)
5791 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005792 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5793 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5794 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5795 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5796 *the ASSERT in WDA_Stop during module unload.*/
5797 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5798 {
5799 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005800 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005801 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005802 else
5803 {
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005805 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005806 status = WDA_IGNORE_SET_LINK_STATE;
5807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 }
5809 break;
5810 }
5811
5812 return status;
5813}
Jeff Johnson295189b2012-06-20 16:38:30 -07005814/*
5815 * FUNCTION: WDA_SetLinkStateCallback
5816 * call back function for set link state from WDI
5817 */
5818void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5819{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305820 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 tLinkStateParams *linkStateParams;
5822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005824 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305825 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 {
5827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005828 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 VOS_ASSERT(0) ;
5830 return ;
5831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305833 if (NULL == pWDA)
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5836 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5838 vos_mem_free(pWdaParams->wdaMsgParam);
5839 vos_mem_free(pWdaParams);
5840
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305841 VOS_ASSERT(0);
5842 return ;
5843 }
5844
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 /*
5847 * In STA mode start the BA activity check timer after association
5848 * and in AP mode start BA activity check timer after BSS start */
5849 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5850 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005851 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5852 ((status == WDI_STATUS_SUCCESS) &&
5853 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 {
5855 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 /*
5859 * No respone required for WDA_SET_LINK_STATE so free the request
5860 * param here
5861 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5863 vos_mem_free(pWdaParams);
5864
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 return ;
5866}
Jeff Johnson295189b2012-06-20 16:38:30 -07005867/*
5868 * FUNCTION: WDA_ProcessSetLinkState
5869 * Request to WDI to set the link status.
5870 */
5871VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5872 tLinkStateParams *linkStateParams)
5873{
5874 WDI_Status status = WDI_STATUS_SUCCESS ;
5875 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5876 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5877 sizeof(WDI_SetLinkReqParamsType)) ;
5878 tWDA_ReqParams *pWdaParams ;
5879 tpAniSirGlobal pMac;
5880 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5881
5882 if(NULL == pMac)
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005885 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005887 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 return VOS_STATUS_E_FAILURE;
5889 }
5890
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 if(NULL == wdiSetLinkStateParam)
5894 {
5895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 VOS_ASSERT(0);
5898 return VOS_STATUS_E_NOMEM;
5899 }
5900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5901 if(NULL == pWdaParams)
5902 {
5903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 VOS_ASSERT(0);
5906 vos_mem_free(wdiSetLinkStateParam);
5907 return VOS_STATUS_E_NOMEM;
5908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 if(WDA_IGNORE_SET_LINK_STATE ==
5910 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5911 {
5912 status = WDI_STATUS_E_FAILURE;
5913 }
5914 else
5915 {
5916 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5917 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5919 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5921 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 pWdaParams->pWdaContext = pWDA;
5923 /* Store remove key pointer, as this will be used for response */
5924 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 /* store Params pass it to WDI */
5926 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5927 /* Stop Timer only other than GO role and concurrent session */
5928 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005929 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5931 {
5932 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5935 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 if(IS_WDI_STATUS_FAILURE(status))
5937 {
5938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5939 "Failure in set link state Req WDI API, free all the memory " );
5940 }
5941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 if(IS_WDI_STATUS_FAILURE(status))
5943 {
5944 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005945 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 vos_mem_free(pWdaParams);
5947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 return CONVERT_WDI2VOS_STATUS(status) ;
5949}
Jeff Johnson295189b2012-06-20 16:38:30 -07005950/*
5951 * FUNCTION: WDA_GetStatsReqParamsCallback
5952 * send the response to PE with Stats received from WDI
5953 */
5954void WDA_GetStatsReqParamsCallback(
5955 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5956 void* pUserData)
5957{
5958 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5959 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5960
5961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005962 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 pGetPEStatsRspParams =
5964 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5965 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5966
5967 if(NULL == pGetPEStatsRspParams)
5968 {
5969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005970 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 VOS_ASSERT(0);
5972 return;
5973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5975 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5976 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5977 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005978
5979 //Fill the Session Id Properly in PE
5980 pGetPEStatsRspParams->sessionId = 0;
5981 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005982 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5984 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 vos_mem_copy( pGetPEStatsRspParams + 1,
5986 wdiGetStatsRsp + 1,
5987 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 /* send response to UMAC*/
5989 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5990
5991 return;
5992}
5993
Jeff Johnson295189b2012-06-20 16:38:30 -07005994/*
5995 * FUNCTION: WDA_ProcessGetStatsReq
5996 * Request to WDI to get the statistics
5997 */
5998VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5999 tAniGetPEStatsReq *pGetStatsParams)
6000{
6001 WDI_Status status = WDI_STATUS_SUCCESS ;
6002 WDI_GetStatsReqParamsType wdiGetStatsParam;
6003 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6007 pGetStatsParams->staId;
6008 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6009 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 status = WDI_GetStatsReq(&wdiGetStatsParam,
6012 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 if(IS_WDI_STATUS_FAILURE(status))
6014 {
6015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6016 "Failure in Get Stats Req WDI API, free all the memory " );
6017 pGetPEStatsRspParams =
6018 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6019 if(NULL == pGetPEStatsRspParams)
6020 {
6021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006024 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 return VOS_STATUS_E_NOMEM;
6026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
6028 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6029 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6030 pGetPEStatsRspParams->rc = eSIR_FAILURE;
6031 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
6032 (void *)pGetPEStatsRspParams, 0) ;
6033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 /* Free the request message */
6035 vos_mem_free(pGetStatsParams);
6036 return CONVERT_WDI2VOS_STATUS(status);
6037}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006038
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006039#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006040/*
6041 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6042 * send the response to PE with roam Rssi received from WDI
6043 */
6044void WDA_GetRoamRssiReqParamsCallback(
6045 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6046 void* pUserData)
6047{
6048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6049 tWDA_CbContext *pWDA = NULL;
6050 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6051 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6053 "<------ %s " ,__func__);
6054 if(NULL == pWdaParams)
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6057 "%s: pWdaParams received NULL", __func__);
6058 VOS_ASSERT(0) ;
6059 return ;
6060 }
6061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6062 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6063
6064 if(NULL == pGetRoamRssiReqParams)
6065 {
6066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6067 "%s: pGetRoamRssiReqParams received NULL", __func__);
6068 VOS_ASSERT(0);
6069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6070 vos_mem_free(pWdaParams);
6071 return ;
6072 }
6073 pGetRoamRssiRspParams =
6074 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6075
6076 if(NULL == pGetRoamRssiRspParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6079 "%s: VOS MEM Alloc Failure", __func__);
6080 VOS_ASSERT(0);
6081 return;
6082 }
6083 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6084 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006085 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006086 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6087 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6088
6089 /* Assign get roam rssi req (backup) in to the response */
6090 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6091
6092 /* free WDI command buffer */
6093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6094 vos_mem_free(pWdaParams) ;
6095
6096 /* send response to UMAC*/
6097 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6098
6099 return;
6100}
6101
6102
6103
6104/*
6105 * FUNCTION: WDA_ProcessGetRoamRssiReq
6106 * Request to WDI to get the statistics
6107 */
6108VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6109 tAniGetRssiReq *pGetRoamRssiParams)
6110{
6111 WDI_Status status = WDI_STATUS_SUCCESS ;
6112 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6113 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6114 tWDA_ReqParams *pWdaParams = NULL;
6115
6116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6117 "------> %s " ,__func__);
6118 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6119 pGetRoamRssiParams->staId;
6120 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6121
6122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6123 if(NULL == pWdaParams)
6124 {
6125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6126 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306127 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006128 VOS_ASSERT(0);
6129 return VOS_STATUS_E_NOMEM;
6130 }
6131
6132 /* Store Init Req pointer, as this will be used for response */
6133 pWdaParams->pWdaContext = pWDA;
6134
6135 /* Take Get roam Rssi req backup as it stores the callback to be called after
6136 receiving the response */
6137 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6138 pWdaParams->wdaWdiApiMsgParam = NULL;
6139
6140 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6141 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6142 if(IS_WDI_STATUS_FAILURE(status))
6143 {
6144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6145 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6146 pGetRoamRssiRspParams =
6147 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6148 if(NULL == pGetRoamRssiRspParams)
6149 {
6150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6151 "%s: VOS MEM Alloc Failure", __func__);
6152 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306153 vos_mem_free(pGetRoamRssiParams);
6154 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006155 return VOS_STATUS_E_NOMEM;
6156 }
6157 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6158 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6159 pGetRoamRssiRspParams->rssi = 0;
6160 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6161 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6162 (void *)pGetRoamRssiRspParams, 0) ;
6163 }
6164 return CONVERT_WDI2VOS_STATUS(status);
6165}
6166#endif
6167
6168
Jeff Johnson295189b2012-06-20 16:38:30 -07006169/*
6170 * FUNCTION: WDA_UpdateEDCAParamCallback
6171 * call back function for Update EDCA params from WDI
6172 */
6173void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6174{
6175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6176 tEdcaParams *pEdcaParams;
6177
6178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006179 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 if(NULL == pWdaParams)
6181 {
6182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006183 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006184 VOS_ASSERT(0) ;
6185 return ;
6186 }
6187 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6189 vos_mem_free(pWdaParams);
6190 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 return ;
6192}
Jeff Johnson295189b2012-06-20 16:38:30 -07006193/*
6194 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6195 * Request to WDI to Update the EDCA params.
6196 */
6197VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6198 tEdcaParams *pEdcaParams)
6199{
6200 WDI_Status status = WDI_STATUS_SUCCESS ;
6201 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6202 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6203 sizeof(WDI_UpdateEDCAParamsType)) ;
6204 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006206 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 if(NULL == wdiEdcaParam)
6208 {
6209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006212 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 return VOS_STATUS_E_NOMEM;
6214 }
6215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6216 if(NULL == pWdaParams)
6217 {
6218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 VOS_ASSERT(0);
6221 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006222 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 return VOS_STATUS_E_NOMEM;
6224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006226 /*
6227 Since firmware is not using highperformance flag, we have removed
6228 this flag from wdiEDCAInfo structure to match sizeof the structure
6229 between host and firmware.In future if we are planning to use
6230 highperformance flag then Please define this flag in wdiEDCAInfo
6231 structure, update it here and send it to firmware. i.e.
6232 Following is the original line which we removed as part of the fix
6233 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6234 pEdcaParams->highPerformance;
6235 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6237 &pEdcaParams->acbe);
6238 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6239 &pEdcaParams->acbk);
6240 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6241 &pEdcaParams->acvi);
6242 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6243 &pEdcaParams->acvo);
6244 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 pWdaParams->pWdaContext = pWDA;
6246 /* Store remove key pointer, as this will be used for response */
6247 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* store Params pass it to WDI */
6249 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6251 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 if(IS_WDI_STATUS_FAILURE(status))
6253 {
6254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6255 "Failure in Update EDCA Params WDI API, free all the memory " );
6256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6257 vos_mem_free(pWdaParams);
6258 vos_mem_free(pEdcaParams);
6259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 return CONVERT_WDI2VOS_STATUS(status) ;
6261}
Jeff Johnson295189b2012-06-20 16:38:30 -07006262/*
6263 * FUNCTION: WDA_AddBAReqCallback
6264 * send ADD BA RSP back to PE
6265 */
6266void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6267 void* pUserData)
6268{
6269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6270 tWDA_CbContext *pWDA;
6271 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006273 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306274 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 {
6276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 VOS_ASSERT(0) ;
6279 return ;
6280 }
6281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306282 if (NULL == pWDA)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6285 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6287 vos_mem_free(pWdaParams->wdaMsgParam);
6288 vos_mem_free(pWdaParams);
6289
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306290 VOS_ASSERT(0);
6291 return ;
6292 }
6293
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6296 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006297 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 return ;
6300}
6301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302/*
6303 * FUNCTION: WDA_ProcessAddBAReq
6304 * Request to WDI to Update the ADDBA REQ params.
6305 */
6306VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306307 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006308{
Jeff Johnson43971f52012-07-17 12:26:56 -07006309 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6311 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6312 sizeof(WDI_AddBAReqParamsType)) ;
6313 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006315 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 if(NULL == wdiAddBAReqParam)
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_ASSERT(0);
6321 return VOS_STATUS_E_NOMEM;
6322 }
6323 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6324 if(NULL == pWdaParams)
6325 {
6326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 VOS_ASSERT(0);
6329 vos_mem_free(wdiAddBAReqParam);
6330 return VOS_STATUS_E_NOMEM;
6331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 do
6333 {
6334 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 wdiAddBaInfo->ucSTAIdx = staIdx ;
6336 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306337 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 } while(0) ;
6339 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 pWdaParams->pWdaContext = pWDA;
6341 /* store Params pass it to WDI */
6342 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6343 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006344 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6345 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006346
Jeff Johnson43971f52012-07-17 12:26:56 -07006347 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 {
6349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006350 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6351 status = CONVERT_WDI2VOS_STATUS(wstatus);
6352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 vos_mem_free(pWdaParams);
6354 pAddBAReqParams->status = eSIR_FAILURE;
6355 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6356 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006357 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358}
Jeff Johnson295189b2012-06-20 16:38:30 -07006359/*
6360 * FUNCTION: WDA_AddBASessionReqCallback
6361 * send ADD BA SESSION RSP back to PE/(or TL)
6362 */
6363void WDA_AddBASessionReqCallback(
6364 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6365{
6366 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306368 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 if(NULL == pWdaParams)
6373 {
6374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 VOS_ASSERT(0) ;
6377 return ;
6378 }
6379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306380 if (NULL == pWDA)
6381 {
6382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6383 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6385 vos_mem_free(pWdaParams->wdaMsgParam);
6386 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306387 VOS_ASSERT(0);
6388 return ;
6389 }
6390
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 if( NULL == pAddBAReqParams )
6393 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006395 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6398 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 return ;
6400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6402 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306404 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 * another request to HAL(/WDI) (ADD_BA_REQ)
6406 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 if((VOS_STATUS_SUCCESS ==
6408 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306409 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 {
6411 /* Update TL with BA info received from HAL/WDI */
6412 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6413 wdiAddBaSession->usBaSessionID,
6414 wdiAddBaSession->ucSTAIdx,
6415 wdiAddBaSession->ucBaTID,
6416 wdiAddBaSession->ucBaBufferSize,
6417 wdiAddBaSession->ucWinSize,
6418 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306420 wdiAddBaSession->ucSTAIdx,
6421 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 }
6423 else
6424 {
6425 pAddBAReqParams->status =
6426 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6427
6428 /* Setting Flag to indicate that Set BA is success */
6429 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6430 {
6431 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6432 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6433 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 /*Reset the WDA state to READY */
6438 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 return ;
6440}
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442/*
6443 * FUNCTION: WDA_ProcessAddBASessionReq
6444 * Request to WDI to Update the ADDBA REQ params.
6445 */
6446VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6447 tAddBAParams *pAddBAReqParams)
6448{
6449 WDI_Status status = WDI_STATUS_SUCCESS ;
6450 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6451 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6452 sizeof(WDI_AddBASessionReqParamsType)) ;
6453 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006454 WLANTL_STAStateType tlSTAState = 0;
6455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 if(NULL == wdiAddBASessionReqParam)
6459 {
6460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_ASSERT(0);
6463 return VOS_STATUS_E_NOMEM;
6464 }
6465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6466 if(NULL == pWdaParams)
6467 {
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 VOS_ASSERT(0);
6471 vos_mem_free(wdiAddBASessionReqParam);
6472 return VOS_STATUS_E_NOMEM;
6473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 /*
6475 * Populate ADD BA parameters and pass these paarmeters to WDI.
6476 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6477 * the state to track if these is BA recipient case or BA initiator
6478 * case.
6479 */
6480 do
6481 {
6482 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6483 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6484 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6485 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6486 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6487 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6488 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6491 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6492 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6493 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6494 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306495
Jeff Johnson295189b2012-06-20 16:38:30 -07006496 }while(0) ;
6497 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 pWdaParams->pWdaContext = pWDA;
6499 /* Store ADD BA pointer, as this will be used for response */
6500 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6501 /* store Params pass it to WDI */
6502 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006503
6504 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6505 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6506 */
6507 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6508 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6509 {
6510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006511 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006512 status = WDI_STATUS_E_NOT_ALLOWED;
6513 pAddBAReqParams->status =
6514 CONVERT_WDI2SIR_STATUS(status) ;
6515 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6516 /*Reset the WDA state to READY */
6517 pWDA->wdaState = WDA_READY_STATE;
6518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6519 vos_mem_free(pWdaParams);
6520
6521 return CONVERT_WDI2VOS_STATUS(status) ;
6522 }
6523
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6525 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 if(IS_WDI_STATUS_FAILURE(status))
6527 {
6528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006529 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006531 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006532 pAddBAReqParams->status =
6533 CONVERT_WDI2SIR_STATUS(status) ;
6534 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006535 /*Reset the WDA state to READY */
6536 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 vos_mem_free(pWdaParams);
6539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006541}
Jeff Johnson295189b2012-06-20 16:38:30 -07006542/*
6543 * FUNCTION: WDA_DelBANotifyTL
6544 * send DEL BA IND to TL
6545 */
6546void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6547 tDelBAParams *pDelBAReqParams)
6548{
6549 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6550 //tSirMsgQ msg;
6551 vos_msg_t vosMsg;
6552 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 if(NULL == pDelBAInd)
6554 {
6555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 VOS_ASSERT(0) ;
6558 return;
6559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6561 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6562 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6563 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006564
Jeff Johnson295189b2012-06-20 16:38:30 -07006565
6566 vosMsg.type = WDA_DELETEBA_IND;
6567 vosMsg.bodyptr = pDelBAInd;
6568 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6569 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6570 {
6571 vosStatus = VOS_STATUS_E_BADMSG;
6572 }
6573}
Jeff Johnson295189b2012-06-20 16:38:30 -07006574/*
6575 * FUNCTION: WDA_DelBAReqCallback
6576 * send DEL BA RSP back to PE
6577 */
6578void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6581 tWDA_CbContext *pWDA;
6582 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0) ;
6590 return ;
6591 }
6592 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306593
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 /* Notify TL about DEL BA in case of recipinet */
6596 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6597 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6598 {
6599 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 /*
6602 * No respone required for WDA_DELBA_IND so just free the request
6603 * param here
6604 */
6605 vos_mem_free(pDelBAReqParams);
6606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6607 vos_mem_free(pWdaParams);
6608 return ;
6609}
6610
Jeff Johnson295189b2012-06-20 16:38:30 -07006611/*
6612 * FUNCTION: WDA_ProcessDelBAReq
6613 * Request to WDI to Update the DELBA REQ params.
6614 */
6615VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6616 tDelBAParams *pDelBAReqParams)
6617{
6618 WDI_Status status = WDI_STATUS_SUCCESS ;
6619 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6620 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6621 sizeof(WDI_DelBAReqParamsType)) ;
6622 tWDA_ReqParams *pWdaParams ;
6623 tANI_U16 staIdx = 0;
6624 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006626 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006627 if(NULL == wdiDelBAReqParam)
6628 {
6629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_ASSERT(0);
6632 return VOS_STATUS_E_NOMEM;
6633 }
6634 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6635 if(NULL == pWdaParams)
6636 {
6637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006638 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006639 VOS_ASSERT(0);
6640 vos_mem_free(wdiDelBAReqParam);
6641 return VOS_STATUS_E_NOMEM;
6642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6644 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6645 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6646 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 pWdaParams->pWdaContext = pWDA;
6648 /* Store DEL BA pointer, as this will be used for response */
6649 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 /* store Params pass it to WDI */
6651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006652 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6653 * maintained in WDA, so that WDA can retry for another BA session
6654 */
6655 staIdx = pDelBAReqParams->staIdx;
6656 tid = pDelBAReqParams->baTID;
6657 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 status = WDI_DelBAReq(wdiDelBAReqParam,
6659 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 if(IS_WDI_STATUS_FAILURE(status))
6661 {
6662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6663 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6665 vos_mem_free(pWdaParams->wdaMsgParam);
6666 vos_mem_free(pWdaParams);
6667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006669}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006670
6671/*
6672 * FUNCTION: WDA_UpdateChReqCallback
6673 *
6674 */
6675void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6676{
Siddharth Bhala006c122014-05-03 12:13:27 +05306677 tWDA_ReqParams *pWdaParams;
6678 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6679 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6680 WDI_UpdateChannelReqinfoType *pChanInfoType;
6681 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006682
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6684 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306685 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306688 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006689 VOS_ASSERT(0);
6690 return;
6691 }
6692
Siddharth Bhala006c122014-05-03 12:13:27 +05306693 pWdaParams = (tWDA_ReqParams *)pUserData;
6694 pwdiUpdateChReqParam =
6695 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6696 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6697 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6698 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006699 /*
6700 * currently there is no response message is expected between PE and
6701 * WDA, Failure return from WDI is a ASSERT condition
6702 */
6703 vos_mem_free(pChanInfoType);
6704 vos_mem_free(pChanList);
6705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6706 vos_mem_free(pWdaParams);
6707
6708 return;
6709}
6710
6711/*
6712 * FUNCTION: WDA_ProcessUpdateChannelList
6713 * Request to WDI to Update the ChannelList params.
6714 */
6715VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6716 tSirUpdateChanList *pChanList)
6717{
6718 WDI_Status status = WDI_STATUS_SUCCESS;
6719 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6720 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6721 WDI_UpdateChannelReqinfoType *pChanInfoType;
6722 tWDA_ReqParams *pWdaParams;
6723 wpt_uint8 i;
6724
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6726 "------> %s " ,__func__);
6727 if(NULL == pChanList)
6728 {
6729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6730 "%s: NULL pChanList", __func__);
6731 VOS_ASSERT(0);
6732 return VOS_STATUS_E_INVAL;
6733 }
6734
6735 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6736 {
6737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6738 "Update channel list capability Not Supported");
6739 vos_mem_free(pChanList);
6740 return VOS_STATUS_E_INVAL;
6741 }
6742
6743 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6744 sizeof(WDI_UpdateChReqParamsType));
6745 if(NULL == pwdiUpdateChReqParam)
6746 {
6747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6748 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6749 __func__);
6750 VOS_ASSERT(0);
6751 vos_mem_free(pChanList);
6752 return VOS_STATUS_E_NOMEM;
6753 }
6754 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6755 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6756 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6757 pChanList->numChan);
6758 if(NULL == pChanInfoType)
6759 {
6760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6761 "%s: VOS MEM Alloc Failure", __func__);
6762 VOS_ASSERT(0);
6763 vos_mem_free(pChanList);
6764 vos_mem_free(pwdiUpdateChReqParam);
6765 return VOS_STATUS_E_NOMEM;
6766 }
6767 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6768 * pChanList->numChan);
6769 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6770
6771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6772 if(NULL == pWdaParams)
6773 {
6774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6775 "%s: VOS MEM Alloc Failure", __func__);
6776 VOS_ASSERT(0);
6777 vos_mem_free(pChanList);
6778 vos_mem_free(pChanInfoType);
6779 vos_mem_free(pwdiUpdateChReqParam);
6780 return VOS_STATUS_E_NOMEM;
6781 }
6782 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6783
6784 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6785 {
6786 pChanInfoType->mhz =
6787 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6788
6789 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6790 pChanInfoType->band_center_freq2 = 0;
6791
6792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6793 "chan[%d] = %u", i, pChanInfoType->mhz);
6794 if (pChanList->chanParam[i].dfsSet)
6795 {
6796 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6798 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6799 pChanList->chanParam[i].dfsSet);
6800 }
6801
6802 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6803 {
6804 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6805 }
6806 else
6807 {
6808 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6809 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6810 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6811 }
6812
6813 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6814 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306815 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006816 pChanInfoType++;
6817 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006818 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6819 pWdaParams->pWdaContext = pWDA;
6820 pWdaParams->wdaMsgParam = (void *)pChanList;
6821 /* store Params pass it to WDI */
6822 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6823 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6824 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6825 if(IS_WDI_STATUS_FAILURE(status))
6826 {
6827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6828 "Failure in Update Channel REQ Params WDI API, free all the memory");
6829 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6830 vos_mem_free(pwdiUpdateChReqParam);
6831 vos_mem_free(pWdaParams->wdaMsgParam);
6832 vos_mem_free(pWdaParams);
6833 }
6834 return CONVERT_WDI2VOS_STATUS(status);
6835}
6836
Jeff Johnson295189b2012-06-20 16:38:30 -07006837/*
6838 * FUNCTION: WDA_AddTSReqCallback
6839 * send ADD TS RSP back to PE
6840 */
6841void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6842{
6843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306844 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 tAddTsParams *pAddTsReqParams;
6846
6847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006848 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 if(NULL == pWdaParams)
6850 {
6851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006852 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 VOS_ASSERT(0) ;
6854 return ;
6855 }
6856 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306857 if (NULL == pWDA)
6858 {
6859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6860 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6862 vos_mem_free(pWdaParams->wdaMsgParam);
6863 vos_mem_free(pWdaParams);
6864
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306865 VOS_ASSERT(0);
6866 return ;
6867 }
6868
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6871 vos_mem_free(pWdaParams);
6872
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006873 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 return ;
6876}
6877
Jeff Johnson295189b2012-06-20 16:38:30 -07006878/*
6879 * FUNCTION: WDA_ProcessAddTSReq
6880 * Request to WDI to Update the ADD TS REQ params.
6881 */
6882VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6883 tAddTsParams *pAddTsReqParams)
6884{
6885 WDI_Status status = WDI_STATUS_SUCCESS ;
6886 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6887 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6888 sizeof(WDI_AddTSReqParamsType)) ;
6889 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 if(NULL == wdiAddTSReqParam)
6893 {
6894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 VOS_ASSERT(0);
6897 return VOS_STATUS_E_NOMEM;
6898 }
6899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6900 if(NULL == pWdaParams)
6901 {
6902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 VOS_ASSERT(0);
6905 vos_mem_free(wdiAddTSReqParam);
6906 return VOS_STATUS_E_NOMEM;
6907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6909 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 //TS IE
6911 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6912 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6913 pAddTsReqParams->tspec.length;
6914
6915 //TS IE : TS INFO : TRAFFIC
6916 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6917 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6918 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6919 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6920 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6921 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6922 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6923 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6924 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6925 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6926 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6927 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6928 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6929 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6930 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6931 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6932
6933 //TS IE : TS INFO : SCHEDULE
6934 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6935 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6936 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6937 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 //TS IE
6939 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6940 pAddTsReqParams->tspec.nomMsduSz;
6941 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6942 pAddTsReqParams->tspec.maxMsduSz;
6943 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6944 pAddTsReqParams->tspec.minSvcInterval;
6945 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6946 pAddTsReqParams->tspec.maxSvcInterval;
6947 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6948 pAddTsReqParams->tspec.inactInterval;
6949 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6950 pAddTsReqParams->tspec.suspendInterval;
6951 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6952 pAddTsReqParams->tspec.svcStartTime;
6953 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6954 pAddTsReqParams->tspec.minDataRate;
6955 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6956 pAddTsReqParams->tspec.meanDataRate;
6957 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6958 pAddTsReqParams->tspec.peakDataRate;
6959 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6960 pAddTsReqParams->tspec.maxBurstSz;
6961 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6962 pAddTsReqParams->tspec.delayBound;
6963 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6964 pAddTsReqParams->tspec.minPhyRate;
6965 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6966 pAddTsReqParams->tspec.surplusBw;
6967 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6968 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 /* TODO: tAddTsParams doesn't have the following fields */
6970#if 0
6971 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6972 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6973 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6974 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6975#endif
6976 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6977
6978 pWdaParams->pWdaContext = pWDA;
6979 /* Store ADD TS pointer, as this will be used for response */
6980 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 /* store Params pass it to WDI */
6982 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 status = WDI_AddTSReq(wdiAddTSReqParam,
6984 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 if(IS_WDI_STATUS_FAILURE(status))
6986 {
6987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6988 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6990 vos_mem_free(pWdaParams);
6991 pAddTsReqParams->status = eSIR_FAILURE ;
6992 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006995}
6996
Jeff Johnson295189b2012-06-20 16:38:30 -07006997/*
6998 * FUNCTION: WDA_DelTSReqCallback
6999 * send DEL TS RSP back to PE
7000 */
7001void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7002{
7003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007005 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7007 vos_mem_free(pWdaParams->wdaMsgParam) ;
7008 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 /*
7010 * No respone required for WDA_DEL_TS_REQ so just free the request
7011 * param here
7012 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 return ;
7014}
7015
Jeff Johnson295189b2012-06-20 16:38:30 -07007016/*
7017 * FUNCTION: WDA_ProcessDelTSReq
7018 * Request to WDI to Update the DELTS REQ params.
7019 */
7020VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7021 tDelTsParams *pDelTSReqParams)
7022{
7023 WDI_Status status = WDI_STATUS_SUCCESS ;
7024 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7025 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7026 sizeof(WDI_DelTSReqParamsType)) ;
7027 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 if(NULL == wdiDelTSReqParam)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0);
7035 return VOS_STATUS_E_NOMEM;
7036 }
7037 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7038 if(NULL == pWdaParams)
7039 {
7040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 VOS_ASSERT(0);
7043 vos_mem_free(wdiDelTSReqParam);
7044 return VOS_STATUS_E_NOMEM;
7045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7047 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7048 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7049 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7050 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 pWdaParams->pWdaContext = pWDA;
7052 /* Store DEL TS pointer, as this will be used for response */
7053 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 /* store Params pass it to WDI */
7055 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 status = WDI_DelTSReq(wdiDelTSReqParam,
7057 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 if(IS_WDI_STATUS_FAILURE(status))
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7061 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7063 vos_mem_free(pWdaParams->wdaMsgParam);
7064 vos_mem_free(pWdaParams);
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007067}
Jeff Johnson295189b2012-06-20 16:38:30 -07007068/*
7069 * FUNCTION: WDA_UpdateBeaconParamsCallback
7070 * Free the memory. No need to send any response to PE in this case
7071 */
7072void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7073{
7074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007076 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 if(NULL == pWdaParams)
7078 {
7079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007080 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_ASSERT(0) ;
7082 return ;
7083 }
7084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7085 vos_mem_free(pWdaParams->wdaMsgParam) ;
7086 vos_mem_free(pWdaParams);
7087 /*
7088 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7089 * param here
7090 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 return ;
7092}
Jeff Johnson295189b2012-06-20 16:38:30 -07007093/*
7094 * FUNCTION: WDA_ProcessUpdateBeaconParams
7095 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7096 */
7097VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7098 tUpdateBeaconParams *pUpdateBeaconParams)
7099{
7100 WDI_Status status = WDI_STATUS_SUCCESS ;
7101 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7102 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7103 sizeof(WDI_UpdateBeaconParamsType)) ;
7104 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 if(NULL == wdiUpdateBeaconParams)
7108 {
7109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 VOS_ASSERT(0);
7112 return VOS_STATUS_E_NOMEM;
7113 }
7114 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7115 if(NULL == pWdaParams)
7116 {
7117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 VOS_ASSERT(0);
7120 vos_mem_free(wdiUpdateBeaconParams);
7121 return VOS_STATUS_E_NOMEM;
7122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7124 pUpdateBeaconParams->bssIdx;
7125 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7126 pUpdateBeaconParams->fShortPreamble;
7127 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7128 pUpdateBeaconParams->fShortSlotTime;
7129 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7130 pUpdateBeaconParams->beaconInterval;
7131 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7132 pUpdateBeaconParams->llaCoexist;
7133 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7134 pUpdateBeaconParams->llbCoexist;
7135 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7136 pUpdateBeaconParams->llgCoexist;
7137 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7138 pUpdateBeaconParams->ht20MhzCoexist;
7139 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7140 pUpdateBeaconParams->llnNonGFCoexist;
7141 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7142 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7143 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7144 pUpdateBeaconParams->fRIFSMode;
7145 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7146 pUpdateBeaconParams->paramChangeBitmap;
7147 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7148
7149 pWdaParams->pWdaContext = pWDA;
7150 /* Store UpdateBeacon Req pointer, as this will be used for response */
7151 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 /* store Params pass it to WDI */
7153 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7155 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7156 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 if(IS_WDI_STATUS_FAILURE(status))
7158 {
7159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7160 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7162 vos_mem_free(pWdaParams->wdaMsgParam);
7163 vos_mem_free(pWdaParams);
7164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007166}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007167#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007168/*
7169 * FUNCTION: WDA_TSMStatsReqCallback
7170 * send TSM Stats RSP back to PE
7171 */
7172void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7173{
7174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7175 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007176 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7177 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007178
7179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007180 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 if(NULL == pWdaParams)
7182 {
7183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007184 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 VOS_ASSERT(0) ;
7186 return ;
7187 }
7188 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307189 if (NULL == pWDA)
7190 {
7191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "%s:pWDA is NULL", __func__);
7193 VOS_ASSERT(0);
7194 return ;
7195 }
7196
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007197 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7198
7199 if(NULL == pGetTsmStatsReqParams)
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7202 "%s: pGetTsmStatsReqParams received NULL", __func__);
7203 VOS_ASSERT(0);
7204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7205 vos_mem_free(pWdaParams);
7206 return;
7207 }
7208
7209 pTsmRspParams =
7210 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 if( NULL == pTsmRspParams )
7212 {
7213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007214 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 VOS_ASSERT( 0 );
7216 return ;
7217 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007218 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7219 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7220 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7221
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7223 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7224 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7225 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7226 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7227 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7228 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7229 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7230 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7231 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007232
7233 /* Assign get tsm stats req req (backup) in to the response */
7234 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7235
7236 /* free WDI command buffer */
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7238 vos_mem_free(pWdaParams);
7239
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 return ;
7242}
7243
7244
Jeff Johnson295189b2012-06-20 16:38:30 -07007245/*
7246 * FUNCTION: WDA_ProcessTsmStatsReq
7247 * Request to WDI to get the TSM Stats params.
7248 */
7249VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007250 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007251{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007252 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007254 tWDA_ReqParams *pWdaParams = NULL;
7255 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7256
Jeff Johnson295189b2012-06-20 16:38:30 -07007257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007258 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7260 sizeof(WDI_TSMStatsReqParamsType));
7261 if(NULL == wdiTSMReqParam)
7262 {
7263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007264 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 VOS_ASSERT(0);
7266 return VOS_STATUS_E_NOMEM;
7267 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7269 if(NULL == pWdaParams)
7270 {
7271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 VOS_ASSERT(0);
7274 vos_mem_free(wdiTSMReqParam);
7275 return VOS_STATUS_E_NOMEM;
7276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7278 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7279 pTsmStats->bssId,
7280 sizeof(wpt_macAddr));
7281 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7282
7283 pWdaParams->pWdaContext = pWDA;
7284 /* Store TSM Stats pointer, as this will be used for response */
7285 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007286 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 status = WDI_TSMStatsReq(wdiTSMReqParam,
7288 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 if(IS_WDI_STATUS_FAILURE(status))
7290 {
7291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7292 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007293 vos_mem_free(pWdaParams);
7294
7295 pGetTsmStatsRspParams =
7296 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7297 if(NULL == pGetTsmStatsRspParams)
7298 {
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7300 "%s: VOS MEM Alloc Failure", __func__);
7301 VOS_ASSERT(0);
7302 vos_mem_free(pTsmStats);
7303 return VOS_STATUS_E_NOMEM;
7304 }
7305 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7306 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7307 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7308
7309 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 return CONVERT_WDI2VOS_STATUS(status) ;
7312}
7313#endif
7314/*
7315 * FUNCTION: WDA_SendBeaconParamsCallback
7316 * No need to send any response to PE in this case
7317 */
7318void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7319{
7320
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007322 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 return ;
7324}
Jeff Johnson295189b2012-06-20 16:38:30 -07007325/*
7326 * FUNCTION: WDA_ProcessSendBeacon
7327 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7328 * start beacon trasmission
7329 */
7330VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7331 tSendbeaconParams *pSendbeaconParams)
7332{
7333 WDI_Status status = WDI_STATUS_SUCCESS ;
7334 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7338 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7339 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7340 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7342 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307343 /* p2pIeOffset should be atleast greater than timIeOffset */
7344 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7345 (pSendbeaconParams->p2pIeOffset <
7346 pSendbeaconParams->timIeOffset))
7347 {
7348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7349 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307350 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307351 VOS_ASSERT( 0 );
7352 return WDI_STATUS_E_FAILURE;
7353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7355 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007356 /* Copy the beacon template to local buffer */
7357 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7358 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7359 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7360
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7362 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 if(IS_WDI_STATUS_FAILURE(status))
7364 {
7365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7366 "Failure in SEND BEACON REQ Params WDI API" );
7367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 vos_mem_free(pSendbeaconParams);
7369 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007370}
Jeff Johnson295189b2012-06-20 16:38:30 -07007371/*
7372 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7373 * No need to send any response to PE in this case
7374 */
7375void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7376{
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 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 return ;
7380}
7381
Jeff Johnson295189b2012-06-20 16:38:30 -07007382/*
7383 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7384 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7385 * send probe response
7386 */
7387VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7388 tSendProbeRespParams *pSendProbeRspParams)
7389{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007390 WDI_Status status = WDI_STATUS_SUCCESS;
7391 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7392 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007394 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007395
7396 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307397 {
7398 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007399 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307400 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007401
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007403 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007405 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 /* Copy the Probe Response template to local buffer */
7408 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007409 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 pSendProbeRspParams->pProbeRespTemplate,
7411 pSendProbeRspParams->probeRespTemplateLen);
7412 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007413 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7415 WDI_PROBE_REQ_BITMAP_IE_LEN);
7416
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007417 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007418
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007419 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007421 if(IS_WDI_STATUS_FAILURE(status))
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7424 "Failure in SEND Probe RSP Params WDI API" );
7425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007427 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007430#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007431/*
7432 * FUNCTION: WDA_SetMaxTxPowerCallBack
7433 * send the response to PE with power value received from WDI
7434 */
7435void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7436 void* pUserData)
7437{
7438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7439 tWDA_CbContext *pWDA = NULL;
7440 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7441
7442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007443 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 if(NULL == pWdaParams)
7445 {
7446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007447 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 VOS_ASSERT(0) ;
7449 return ;
7450 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307452 if (NULL == pWDA)
7453 {
7454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7455 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7457 vos_mem_free(pWdaParams->wdaMsgParam);
7458 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307459 VOS_ASSERT(0);
7460 return ;
7461 }
7462
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 if( NULL == pMaxTxPowerParams )
7465 {
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007468 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7470 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 return ;
7472 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007473
Jeff Johnson295189b2012-06-20 16:38:30 -07007474
7475 /*need to free memory for the pointers used in the
7476 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7478 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007480
Jeff Johnson295189b2012-06-20 16:38:30 -07007481
7482 /* send response to UMAC*/
7483 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7484
7485 return;
7486}
Jeff Johnson295189b2012-06-20 16:38:30 -07007487/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007488 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 * Request to WDI to send set Max Tx Power Request
7490 */
7491 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7492 tMaxTxPowerParams *MaxTxPowerParams)
7493{
7494 WDI_Status status = WDI_STATUS_SUCCESS;
7495 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7496 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007497
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007499 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007500
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7502 sizeof(WDI_SetMaxTxPowerParamsType));
7503 if(NULL == wdiSetMaxTxPowerParams)
7504 {
7505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 VOS_ASSERT(0);
7508 return VOS_STATUS_E_NOMEM;
7509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7511 if(NULL == pWdaParams)
7512 {
7513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 vos_mem_free(wdiSetMaxTxPowerParams);
7516 VOS_ASSERT(0);
7517 return VOS_STATUS_E_NOMEM;
7518 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 /* Copy.Max.Tx.Power Params to WDI structure */
7520 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7521 MaxTxPowerParams->bssId,
7522 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7524 MaxTxPowerParams->selfStaMacAddr,
7525 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7527 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 pWdaParams->pWdaContext = pWDA;
7530 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 /* store Params pass it to WDI */
7532 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7534 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 if(IS_WDI_STATUS_FAILURE(status))
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7538 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7540 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007541 /* send response to UMAC*/
7542 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 }
7544 return CONVERT_WDI2VOS_STATUS(status);
7545
7546}
Jeff Johnson295189b2012-06-20 16:38:30 -07007547#endif
schang86c22c42013-03-13 18:41:24 -07007548
7549/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007550 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7551 * send the response to PE with power value received from WDI
7552 */
7553void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7554 *pwdiSetMaxTxPowerPerBandRsp,
7555 void* pUserData)
7556{
7557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7558 tWDA_CbContext *pWDA = NULL;
7559 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7560
7561 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7562 "<------ %s ", __func__);
7563 if (NULL == pWdaParams)
7564 {
7565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7566 "%s: pWdaParams received NULL", __func__);
7567 VOS_ASSERT(0);
7568 return ;
7569 }
7570 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307571 if (NULL == pWDA)
7572 {
7573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7574 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7576 vos_mem_free(pWdaParams->wdaMsgParam);
7577 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307578 VOS_ASSERT(0);
7579 return ;
7580 }
7581
Arif Hussaina5ebce02013-08-09 15:09:58 -07007582 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7583 if ( NULL == pMxTxPwrPerBandParams )
7584 {
7585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7586 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7587 VOS_ASSERT(0);
7588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7589 vos_mem_free(pWdaParams);
7590 return;
7591 }
7592
7593 /*need to free memory for the pointers used in the
7594 WDA Process.Set Max Tx Power Req function*/
7595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7596 vos_mem_free(pWdaParams);
7597 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7598
7599 /* send response to UMAC*/
7600 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7601 pMxTxPwrPerBandParams, 0);
7602
7603 return;
7604}
7605
7606/*
7607 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7608 * Request to WDI to send set Max Tx Power Per band Request
7609 */
7610 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7611 tMaxTxPowerPerBandParams
7612 *MaxTxPowerPerBandParams)
7613{
7614 WDI_Status status = WDI_STATUS_SUCCESS;
7615 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7616 tWDA_ReqParams *pWdaParams = NULL;
7617
7618 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7619 "------> %s ", __func__);
7620
7621 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7622 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7623
7624 if (NULL == wdiSetMxTxPwrPerBandParams)
7625 {
7626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7627 "%s: VOS MEM Alloc Failure", __func__);
7628 VOS_ASSERT(0);
7629 return VOS_STATUS_E_NOMEM;
7630 }
7631 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7632 if (NULL == pWdaParams)
7633 {
7634 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7635 "%s: VOS MEM Alloc Failure", __func__);
7636 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7637 VOS_ASSERT(0);
7638 return VOS_STATUS_E_NOMEM;
7639 }
7640 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7641 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7642 MaxTxPowerPerBandParams->bandInfo;
7643 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7644 MaxTxPowerPerBandParams->power;
7645 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7646 pWdaParams->pWdaContext = pWDA;
7647 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7648 /* store Params pass it to WDI */
7649 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7650 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7651 WDA_SetMaxTxPowerPerBandCallBack,
7652 pWdaParams);
7653 if (IS_WDI_STATUS_FAILURE(status))
7654 {
7655 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7656 "Failure in SET MAX TX Power REQ Params WDI API,"
7657 " free all the memory");
7658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7659 vos_mem_free(pWdaParams);
7660 /* send response to UMAC*/
7661 WDA_SendMsg(pWDA,
7662 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7663 MaxTxPowerPerBandParams, 0);
7664 }
7665 return CONVERT_WDI2VOS_STATUS(status);
7666}
7667
7668/*
schang86c22c42013-03-13 18:41:24 -07007669 * FUNCTION: WDA_SetTxPowerCallBack
7670 * send the response to PE with power value received from WDI
7671 */
7672void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7673 void* pUserData)
7674{
7675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7676 tWDA_CbContext *pWDA = NULL;
7677 tSirSetTxPowerReq *pTxPowerParams = NULL;
7678
7679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7680 "<------ %s ", __func__);
7681 if(NULL == pWdaParams)
7682 {
7683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7684 "%s: pWdaParams received NULL", __func__);
7685 VOS_ASSERT(0) ;
7686 return ;
7687 }
7688 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307689 if (NULL == pWDA)
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7692 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7694 vos_mem_free(pWdaParams->wdaMsgParam);
7695 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307696 VOS_ASSERT(0);
7697 return ;
7698 }
7699
schang86c22c42013-03-13 18:41:24 -07007700 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7701 if(NULL == pTxPowerParams)
7702 {
7703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7704 "%s: pTxPowerParams received NULL " ,__func__);
7705 VOS_ASSERT(0);
7706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7707 vos_mem_free(pWdaParams);
7708 return ;
7709 }
7710
7711 /*need to free memory for the pointers used in the
7712 WDA Process.Set Max Tx Power Req function*/
7713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7714 vos_mem_free(pWdaParams);
7715
7716 /* send response to UMAC*/
7717 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7718 return;
7719}
7720
7721/*
7722 * FUNCTION: WDA_ProcessSetTxPowerReq
7723 * Request to WDI to send set Tx Power Request
7724 */
7725 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7726 tSirSetTxPowerReq *txPowerParams)
7727{
7728 WDI_Status status = WDI_STATUS_SUCCESS;
7729 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7730 tWDA_ReqParams *pWdaParams = NULL;
7731
7732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7733 "------> %s ", __func__);
7734
7735 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7736 sizeof(WDI_SetTxPowerParamsType));
7737 if(NULL == wdiSetTxPowerParams)
7738 {
7739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7740 "%s: VOS MEM Alloc Failure", __func__);
7741 VOS_ASSERT(0);
7742 return VOS_STATUS_E_NOMEM;
7743 }
7744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7745 if(NULL == pWdaParams)
7746 {
7747 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7748 "%s: VOS MEM Alloc Failure", __func__);
7749 vos_mem_free(wdiSetTxPowerParams);
7750 VOS_ASSERT(0);
7751 return VOS_STATUS_E_NOMEM;
7752 }
7753 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7754 txPowerParams->bssIdx;
7755 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7756 txPowerParams->mwPower;
7757 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7758 pWdaParams->pWdaContext = pWDA;
7759 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7760 /* store Params pass it to WDI */
7761 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7762 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7763 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7764 if(IS_WDI_STATUS_FAILURE(status))
7765 {
7766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7767 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7769 vos_mem_free(pWdaParams);
7770 /* send response to UMAC*/
7771 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7772 }
7773 return CONVERT_WDI2VOS_STATUS(status);
7774}
7775
Jeff Johnson295189b2012-06-20 16:38:30 -07007776/*
7777 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7778 * Free the memory. No need to send any response to PE in this case
7779 */
7780void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7781{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7783
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007785 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007786
7787 if(NULL == pWdaParams)
7788 {
7789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007791 VOS_ASSERT(0) ;
7792 return ;
7793 }
7794
7795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7796 vos_mem_free(pWdaParams->wdaMsgParam) ;
7797 vos_mem_free(pWdaParams);
7798
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 /*
7800 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7801 * so just free the request param here
7802 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 return ;
7804}
7805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806/*
7807 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7808 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7809 */
7810VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7811 tP2pPsParams *pP2pPsConfigParams)
7812{
7813 WDI_Status status = WDI_STATUS_SUCCESS ;
7814 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7815 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7816 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007817 tWDA_ReqParams *pWdaParams = NULL;
7818
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007820 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 if(NULL == wdiSetP2PGONOAReqParam)
7822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007824 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307825 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 VOS_ASSERT(0);
7827 return VOS_STATUS_E_NOMEM;
7828 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007829
7830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7831 if(NULL == pWdaParams)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007835 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007836 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007837 VOS_ASSERT(0);
7838 return VOS_STATUS_E_NOMEM;
7839 }
7840
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7842 pP2pPsConfigParams->opp_ps;
7843 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7844 pP2pPsConfigParams->ctWindow;
7845 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7846 pP2pPsConfigParams->count;
7847 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7848 pP2pPsConfigParams->duration;
7849 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7850 pP2pPsConfigParams->interval;
7851 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7852 pP2pPsConfigParams->single_noa_duration;
7853 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7854 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007855
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7857 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007858 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7859
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007861 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7862 pWdaParams->pWdaContext = pWDA;
7863
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007865 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7866
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 if(IS_WDI_STATUS_FAILURE(status))
7868 {
7869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7870 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7872 vos_mem_free(pWdaParams->wdaMsgParam);
7873 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 return CONVERT_WDI2VOS_STATUS(status);
7876
Jeff Johnson295189b2012-06-20 16:38:30 -07007877}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307878
7879#ifdef FEATURE_WLAN_TDLS
7880/*
7881 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7882 * Free the memory. No need to send any response to PE in this case
7883 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307884void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7885 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307886{
7887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7888 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307889 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307890
7891
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7893 "<------ %s " ,__func__);
7894 if(NULL == pWdaParams)
7895 {
7896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7897 "%s: pWdaParams received NULL", __func__);
7898 VOS_ASSERT(0) ;
7899 return ;
7900 }
7901 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7902
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307903 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307904 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7906 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7908 vos_mem_free(pWdaParams->wdaMsgParam);
7909 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307910 VOS_ASSERT(0);
7911 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307912 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307913
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307914 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7915 if( NULL == pTdlsLinkEstablishParams )
7916 {
7917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7918 "%s: pTdlsLinkEstablishParams "
7919 "received NULL " ,__func__);
7920 VOS_ASSERT(0);
7921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7922 vos_mem_free(pWdaParams);
7923 return ;
7924 }
7925 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7926 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307928 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307929 /* send response to UMAC*/
7930 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7931
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307932 return ;
7933}
7934
7935VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7936 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7937{
7938 WDI_Status status = WDI_STATUS_SUCCESS ;
7939 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7940 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7941 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7942 tWDA_ReqParams *pWdaParams = NULL;
7943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7944 "------> %s " ,__func__);
7945 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7946 {
7947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7948 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307949 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307950 VOS_ASSERT(0);
7951 return VOS_STATUS_E_NOMEM;
7952 }
7953 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7954 if(NULL == pWdaParams)
7955 {
7956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7957 "%s: VOS MEM Alloc Failure", __func__);
7958 vos_mem_free(pTdlsLinkEstablishParams);
7959 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7960 VOS_ASSERT(0);
7961 return VOS_STATUS_E_NOMEM;
7962 }
7963 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307964 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307965 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307966 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307967 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307968 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307969 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307970 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307971 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307972 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307973 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7974 pTdlsLinkEstablishParams->isOffChannelSupported;
7975
7976 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7977 pTdlsLinkEstablishParams->validChannels,
7978 pTdlsLinkEstablishParams->validChannelsLen);
7979
7980 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7981 pTdlsLinkEstablishParams->validChannelsLen;
7982
7983 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7984 pTdlsLinkEstablishParams->validOperClasses,
7985 pTdlsLinkEstablishParams->validOperClassesLen);
7986 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7987 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307988
7989 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7990 /* Store msg pointer from PE, as this will be used for response */
7991 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7992 /* store Params pass it to WDI */
7993 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7994 pWdaParams->pWdaContext = pWDA;
7995
7996 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7997 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7998 WDA_SetTDLSLinkEstablishReqParamsCallback,
7999 pWdaParams);
8000 if(IS_WDI_STATUS_FAILURE(status))
8001 {
8002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8003 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8005 vos_mem_free(pWdaParams->wdaMsgParam);
8006 vos_mem_free(pWdaParams);
8007 }
8008 return CONVERT_WDI2VOS_STATUS(status);
8009}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308010
8011// tdlsoffchan
8012void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8013 void* pUserData)
8014{
8015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8016 tWDA_CbContext *pWDA = NULL;
8017 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8018
8019
8020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8021 "<------ %s " ,__func__);
8022 if(NULL == pWdaParams)
8023 {
8024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8025 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308026 VOS_ASSERT(0) ;
8027 return ;
8028 }
8029 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8030
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308031 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308032 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8034 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8036 vos_mem_free(pWdaParams->wdaMsgParam);
8037 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308038 VOS_ASSERT(0);
8039 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308040 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308041
Atul Mittalc0f739f2014-07-31 13:47:47 +05308042 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308043 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308044 {
8045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8046 "%s: pTdlsChanSwitchParams "
8047 "received NULL " ,__func__);
8048 VOS_ASSERT(0);
8049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8050 vos_mem_free(pWdaParams);
8051 return ;
8052 }
8053 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8054 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8056 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308057 /* send response to UMAC*/
8058 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308059
8060 return ;
8061}
8062VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8063 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8064{
8065 WDI_Status status = WDI_STATUS_SUCCESS ;
8066 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8067 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8068 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8069 tWDA_ReqParams *pWdaParams = NULL;
8070
8071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8072 "Enter: %s ",__func__);
8073 if(NULL == wdiSetTDLSChanSwitchReqParam)
8074 {
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8076 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308077 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308078 VOS_ASSERT(0);
8079 return VOS_STATUS_E_NOMEM;
8080 }
8081
8082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8083 if(NULL == pWdaParams)
8084 {
8085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8086 "%s: VOS MEM Alloc Failure", __func__);
8087 vos_mem_free(pTdlsChanSwitchParams);
8088 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8089 VOS_ASSERT(0);
8090 return VOS_STATUS_E_NOMEM;
8091 }
8092 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8093 pTdlsChanSwitchParams->staIdx;
8094 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8095 pTdlsChanSwitchParams->tdlsSwMode;
8096 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8097 pTdlsChanSwitchParams->operClass;
8098 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8099 pTdlsChanSwitchParams->tdlsOffCh;
8100 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8101 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8102
8103
8104 /* Store msg pointer from PE, as this will be used for response */
8105 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8106 /* store Params pass it to WDI */
8107 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8108 pWdaParams->pWdaContext = pWDA;
8109 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8110 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8111 WDA_SetTDLSChanSwitchReqParamsCallback,
8112 pWdaParams);
8113 if(IS_WDI_STATUS_FAILURE(status))
8114 {
8115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8116 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8118 vos_mem_free(pWdaParams->wdaMsgParam);
8119 vos_mem_free(pWdaParams);
8120 }
8121 return CONVERT_WDI2VOS_STATUS(status);
8122}
8123#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308124
8125
Jeff Johnson295189b2012-06-20 16:38:30 -07008126#ifdef WLAN_FEATURE_VOWIFI_11R
8127/*
8128 * FUNCTION: WDA_AggrAddTSReqCallback
8129 * send ADD AGGREGATED TS RSP back to PE
8130 */
8131void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8132{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308134 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008135 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008138 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008139 if(NULL == pWdaParams)
8140 {
8141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008142 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008143 VOS_ASSERT(0) ;
8144 return ;
8145 }
8146
8147 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308148 if (NULL == pWDA)
8149 {
8150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8151 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8153 vos_mem_free(pWdaParams->wdaMsgParam);
8154 vos_mem_free(pWdaParams);
8155
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308156 VOS_ASSERT(0);
8157 return ;
8158 }
8159
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008160 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008161
8162 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8163 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008164 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008167
8168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8169 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 return ;
8171}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008172/*
8173 * FUNCTION: WDA_ProcessAddTSReq
8174 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8175 */
8176VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8177 tAggrAddTsParams *pAggrAddTsReqParams)
8178{
8179 WDI_Status status = WDI_STATUS_SUCCESS ;
8180 int i;
8181 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008182 tWDA_ReqParams *pWdaParams = NULL;
8183
8184
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008187 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8188 sizeof(WDI_AggrAddTSReqParamsType)) ;
8189 if(NULL == wdiAggrAddTSReqParam)
8190 {
8191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008192 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308193 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 VOS_ASSERT(0);
8195 return VOS_STATUS_E_NOMEM;
8196 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008197
8198
8199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8200 if(NULL == pWdaParams)
8201 {
8202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008203 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008204 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008205 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008206 VOS_ASSERT(0);
8207 return VOS_STATUS_E_NOMEM;
8208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8210 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8211 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8213 {
8214 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8215 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8216 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8218 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8219 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8220 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8221 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8222 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8223 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8224 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8225 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8226 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8227 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8228 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8229 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8230 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8231 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8232 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8234 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8236 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8237 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8238 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8239 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8240 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8241 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8242 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8243 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8244 pAggrAddTsReqParams->tspec[i].inactInterval;
8245 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8246 pAggrAddTsReqParams->tspec[i].suspendInterval;
8247 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8248 pAggrAddTsReqParams->tspec[i].svcStartTime;
8249 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8250 pAggrAddTsReqParams->tspec[i].minDataRate;
8251 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8252 pAggrAddTsReqParams->tspec[i].meanDataRate;
8253 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8254 pAggrAddTsReqParams->tspec[i].peakDataRate;
8255 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8256 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8257 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8258 pAggrAddTsReqParams->tspec[i].delayBound;
8259 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8260 pAggrAddTsReqParams->tspec[i].minPhyRate;
8261 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8262 pAggrAddTsReqParams->tspec[i].surplusBw;
8263 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8264 pAggrAddTsReqParams->tspec[i].mediumTime;
8265 }
8266
8267 /* TODO: tAggrAddTsParams doesn't have the following fields */
8268#if 0
8269 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8270 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8271 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8272 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8273#endif
8274 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8275
8276 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008277 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008278 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008279 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8280
8281 pWdaParams->pWdaContext = pWDA;
8282
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008284 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8285
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 if(IS_WDI_STATUS_FAILURE(status))
8287 {
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8289 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8291 vos_mem_free(pWdaParams);
8292
8293 /* send the failure response back to PE*/
8294 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8295 {
8296 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8297 }
8298
8299 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8300 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 return CONVERT_WDI2VOS_STATUS(status) ;
8303}
8304#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008305/*
Mihir Shetea4306052014-03-25 00:02:54 +05308306 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 * send Enter IMPS RSP back to PE
8308 */
Mihir Shetea4306052014-03-25 00:02:54 +05308309void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008310{
Mihir Shetea4306052014-03-25 00:02:54 +05308311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308312 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308313
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308315 "<------ %s status=%d" ,__func__,status);
8316 if(NULL == pWdaParams)
8317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8319 "%s: pWdaParams received NULL", __func__);
8320 VOS_ASSERT(0);
8321 return;
8322 }
8323
8324 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308325 if (NULL == pWDA)
8326 {
8327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8328 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8330 vos_mem_free(pWdaParams->wdaMsgParam);
8331 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308332 VOS_ASSERT(0);
8333 return ;
8334 }
Mihir Shetea4306052014-03-25 00:02:54 +05308335
8336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8337 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008338 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 return ;
8340}
Mihir Shetea4306052014-03-25 00:02:54 +05308341
8342
8343/*
8344 * FUNCTION: WDA_EnterImpsReqCallback
8345 * Free memory and send Enter IMPS RSP back to PE.
8346 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8347 */
8348void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8349{
8350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308351 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308352
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8354 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8355
8356 if(NULL == pWdaParams)
8357 {
8358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8359 "%s: pWdaParams received NULL", __func__);
8360 VOS_ASSERT(0);
8361 return;
8362 }
8363
8364 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308365 if (NULL == pWDA)
8366 {
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8368 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8370 vos_mem_free(pWdaParams->wdaMsgParam);
8371 vos_mem_free(pWdaParams);
8372
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308373 VOS_ASSERT(0);
8374 return ;
8375 }
8376
Mihir Shetea4306052014-03-25 00:02:54 +05308377
8378 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8379 {
8380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8381 vos_mem_free(pWdaParams);
8382 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8383 CONVERT_WDI2SIR_STATUS(wdiStatus));
8384 }
8385
8386 return;
8387}
Jeff Johnson295189b2012-06-20 16:38:30 -07008388/*
8389 * FUNCTION: WDA_ProcessEnterImpsReq
8390 * Request to WDI to Enter IMPS power state.
8391 */
8392VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8393{
8394 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308395 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8396 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308397 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008399 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308400
8401
8402 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8403 if (NULL == wdiEnterImpsReqParams)
8404 {
8405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8406 "%s: VOS MEM Alloc Failure", __func__);
8407 VOS_ASSERT(0);
8408 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8409 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8410 return VOS_STATUS_E_NOMEM;
8411 }
8412
8413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8414 if (NULL == pWdaParams)
8415 {
8416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8417 "%s: VOS MEM Alloc Failure", __func__);
8418 VOS_ASSERT(0);
8419 vos_mem_free(wdiEnterImpsReqParams);
8420 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8421 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8422 return VOS_STATUS_E_NOMEM;
8423 }
8424
8425 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8426 wdiEnterImpsReqParams->pUserData = pWdaParams;
8427
8428 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8429 pWdaParams->wdaMsgParam = NULL;
8430 pWdaParams->pWdaContext = pWDA;
8431
8432 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8433 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8434 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(IS_WDI_STATUS_FAILURE(status))
8436 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308437 if (! (failcnt & 0xF))
8438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8439 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8440 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308441 vos_mem_free(wdiEnterImpsReqParams);
8442 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008443 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 return CONVERT_WDI2VOS_STATUS(status) ;
8446}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308447
8448/*
8449 * FUNCTION: WDA_ExitImpsRespCallback
8450 * send Exit IMPS RSP back to PE
8451 */
8452void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8453{
8454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8455 tWDA_CbContext *pWDA;
8456
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8458 "<------ %s " ,__func__);
8459
8460 if (NULL == pWdaParams)
8461 {
8462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8463 "%s: pWdaParams received NULL", __func__);
8464 VOS_ASSERT(0);
8465 return;
8466 }
8467 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8468
8469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8470 vos_mem_free(pWdaParams);
8471
8472 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8473 return;
8474}
8475
Jeff Johnson295189b2012-06-20 16:38:30 -07008476/*
8477 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 */
8479void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8480{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008483 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308484 if(NULL == pWdaParams)
8485 {
8486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8487 "%s: pWdaParams received NULL", __func__);
8488 VOS_ASSERT(0);
8489 return;
8490 }
8491
8492 if (IS_WDI_STATUS_FAILURE(status))
8493 {
8494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8495 vos_mem_free(pWdaParams);
8496 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8497 {
8498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8499 FL("reload wlan driver"));
8500 wpalWlanReload();
8501 }
8502 }
8503 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008504}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308505
Jeff Johnson295189b2012-06-20 16:38:30 -07008506/*
8507 * FUNCTION: WDA_ProcessExitImpsReq
8508 * Request to WDI to Exit IMPS power state.
8509 */
8510VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8511{
8512 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308513 tWDA_ReqParams *pWdaParams;
8514 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8515
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008517 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308518 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8519 sizeof(WDI_ExitImpsReqParamsType));
8520 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8523 "%s: VOS MEM Alloc Failure", __func__);
8524 VOS_ASSERT(0);
8525 return VOS_STATUS_E_NOMEM;
8526 }
8527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8528 if(NULL == pWdaParams)
8529 {
8530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8531 "%s: VOS MEM Alloc Failure", __func__);
8532 VOS_ASSERT(0);
8533 vos_mem_free(wdiExitImpsReqParams);
8534 return VOS_STATUS_E_NOMEM;
8535 }
8536 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8537 wdiExitImpsReqParams->pUserData = pWdaParams;
8538
8539 /* Store param pointer as passed in by caller */
8540 /* store Params pass it to WDI */
8541 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8542 pWdaParams->pWdaContext = pWDA;
8543 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8544 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8545 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8546 pWdaParams);
8547 if (IS_WDI_STATUS_FAILURE(status))
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8550 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8552 vos_mem_free(pWdaParams);
8553 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 return CONVERT_WDI2VOS_STATUS(status) ;
8556}
Jeff Johnson295189b2012-06-20 16:38:30 -07008557/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008558 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 * send Enter BMPS RSP back to PE
8560 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008561void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008562{
8563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308564 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008565 tEnterBmpsParams *pEnterBmpsRspParams;
8566
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008568 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 if(NULL == pWdaParams)
8570 {
8571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008572 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 VOS_ASSERT(0) ;
8574 return ;
8575 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008576
8577 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308578 if (NULL == pWDA)
8579 {
8580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8581 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308582
8583 if(pWdaParams->wdaWdiApiMsgParam)
8584 {
8585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8586 }
8587 vos_mem_free(pWdaParams);
8588
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308589 VOS_ASSERT(0);
8590 return ;
8591 }
8592
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008593 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8594
8595 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008596 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008597
8598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008600 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8601
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 return ;
8603}
Jeff Johnson295189b2012-06-20 16:38:30 -07008604/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008605 * FUNCTION: WDA_EnterBmpsReqCallback
8606 * Free memory and send Enter BMPS RSP back to PE.
8607 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8608 */
8609void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8610{
8611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308612 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008613 tEnterBmpsParams *pEnterBmpsRspParams;
8614
8615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8616 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8617
8618 if(NULL == pWdaParams)
8619 {
8620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8621 "%s: pWdaParams received NULL", __func__);
8622 VOS_ASSERT(0);
8623 return;
8624 }
8625
8626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308627 if (NULL == pWDA)
8628 {
8629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8630 "%s:pWDA is NULL", __func__);
8631 VOS_ASSERT(0);
8632 return ;
8633 }
8634
Yue Ma7f44bbe2013-04-12 11:47:39 -07008635 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8636 pEnterBmpsRspParams->status = wdiStatus;
8637
8638 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8639 {
8640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8641 vos_mem_free(pWdaParams);
8642 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8643 }
8644
8645 return;
8646}
8647/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 * FUNCTION: WDA_ProcessEnterBmpsReq
8649 * Request to WDI to Enter BMPS power state.
8650 */
8651VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8652 tEnterBmpsParams *pEnterBmpsReqParams)
8653{
8654 WDI_Status status = WDI_STATUS_SUCCESS;
8655 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8656 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008658 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8660 {
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008662 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 VOS_ASSERT(0);
8664 return VOS_STATUS_E_FAILURE;
8665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8667 if (NULL == wdiEnterBmpsReqParams)
8668 {
8669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008672 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8673 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 return VOS_STATUS_E_NOMEM;
8675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8677 if (NULL == pWdaParams)
8678 {
8679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 VOS_ASSERT(0);
8682 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008683 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8684 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 return VOS_STATUS_E_NOMEM;
8686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8688 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8689 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8690 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008691 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8693 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8694 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008695 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8696 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008697
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 /* Store param pointer as passed in by caller */
8699 /* store Params pass it to WDI */
8700 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008701 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008704 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 if (IS_WDI_STATUS_FAILURE(status))
8706 {
8707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8708 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008710 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008712 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 return CONVERT_WDI2VOS_STATUS(status);
8715}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008716
8717
8718static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8719 WDI_Status wdiStatus,
8720 tExitBmpsParams *pExitBmpsReqParams)
8721{
8722 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8723
8724 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8725}
8726
8727
Jeff Johnson295189b2012-06-20 16:38:30 -07008728/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008729 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 * send Exit BMPS RSP back to PE
8731 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008732void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008733{
8734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308735 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008736 tExitBmpsParams *pExitBmpsRspParams;
8737
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008739 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 if(NULL == pWdaParams)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008743 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_ASSERT(0) ;
8745 return ;
8746 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008747
8748 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308749 if (NULL == pWDA)
8750 {
8751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8752 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308753
8754 if(pWdaParams->wdaWdiApiMsgParam)
8755 {
8756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8757 }
8758 vos_mem_free(pWdaParams);
8759
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308760 VOS_ASSERT(0);
8761 return ;
8762 }
8763
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008764 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8765
8766 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008767 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008768
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8770 vos_mem_free(pWdaParams) ;
8771
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008772 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 return ;
8774}
Jeff Johnson295189b2012-06-20 16:38:30 -07008775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008776 * FUNCTION: WDA_ExitBmpsReqCallback
8777 * Free memory and send Exit BMPS RSP back to PE.
8778 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8779 */
8780void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8781{
8782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308783 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008784 tExitBmpsParams *pExitBmpsRspParams;
8785
8786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8787 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8788
8789 if(NULL == pWdaParams)
8790 {
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8792 "%s: pWdaParams received NULL", __func__);
8793 VOS_ASSERT(0);
8794 return;
8795 }
8796
8797 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308798 if (NULL == pWDA)
8799 {
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8801 "%s:pWDA is NULL", __func__);
8802 VOS_ASSERT(0);
8803 return ;
8804 }
8805
Yue Ma7f44bbe2013-04-12 11:47:39 -07008806 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8807 pExitBmpsRspParams->status = wdiStatus;
8808
8809 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8810 {
8811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8812 vos_mem_free(pWdaParams);
8813 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8814 }
8815
8816 return;
8817}
8818/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 * FUNCTION: WDA_ProcessExitBmpsReq
8820 * Request to WDI to Exit BMPS power state.
8821 */
8822VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8823 tExitBmpsParams *pExitBmpsReqParams)
8824{
8825 WDI_Status status = WDI_STATUS_SUCCESS ;
8826 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8827 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8828 sizeof(WDI_ExitBmpsReqParamsType)) ;
8829 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 if(NULL == wdiExitBmpsReqParams)
8833 {
8834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008837 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 return VOS_STATUS_E_NOMEM;
8839 }
8840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8841 if(NULL == pWdaParams)
8842 {
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 VOS_ASSERT(0);
8846 vos_mem_free(wdiExitBmpsReqParams);
8847 return VOS_STATUS_E_NOMEM;
8848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008850
8851 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8852
Yue Ma7f44bbe2013-04-12 11:47:39 -07008853 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8854 wdiExitBmpsReqParams->pUserData = pWdaParams;
8855
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 /* Store param pointer as passed in by caller */
8857 /* store Params pass it to WDI */
8858 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8859 pWdaParams->pWdaContext = pWDA;
8860 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008862 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 if(IS_WDI_STATUS_FAILURE(status))
8864 {
8865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8866 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8868 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008869 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008871 return CONVERT_WDI2VOS_STATUS(status) ;
8872}
Jeff Johnson295189b2012-06-20 16:38:30 -07008873/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008874 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 * send Enter UAPSD RSP back to PE
8876 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008877void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008878{
8879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308880 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008881 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 if(NULL == pWdaParams)
8885 {
8886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 VOS_ASSERT(0) ;
8889 return ;
8890 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008891
8892 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308893 if (NULL == pWDA)
8894 {
8895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8896 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308897
8898 if(pWdaParams->wdaWdiApiMsgParam)
8899 {
8900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8901 }
8902 vos_mem_free(pWdaParams);
8903
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308904 VOS_ASSERT(0);
8905 return ;
8906 }
8907
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008908 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8909
8910 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008911 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008912
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8914 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008915 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 return ;
8917}
Jeff Johnson295189b2012-06-20 16:38:30 -07008918/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008919 * FUNCTION: WDA_EnterUapsdReqCallback
8920 * Free memory and send Enter UAPSD RSP back to PE.
8921 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8922 */
8923void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8924{
8925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8926 tWDA_CbContext *pWDA;
8927 tUapsdParams *pEnterUapsdRsqParams;
8928
8929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8931
8932 if(NULL == pWdaParams)
8933 {
8934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8935 "%s: pWdaParams received NULL", __func__);
8936 VOS_ASSERT(0);
8937 return;
8938 }
8939
8940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308941 if (NULL == pWDA)
8942 {
8943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8944 "%s:pWDA is NULL", __func__);
8945 VOS_ASSERT(0);
8946 return ;
8947 }
8948
Yue Ma7f44bbe2013-04-12 11:47:39 -07008949 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8950 pEnterUapsdRsqParams->status = wdiStatus;
8951
8952 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8953 {
8954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8955 vos_mem_free(pWdaParams);
8956 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8957 }
8958
8959 return;
8960}
8961/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 * FUNCTION: WDA_ProcessEnterUapsdReq
8963 * Request to WDI to Enter UAPSD power state.
8964 */
8965VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8966 tUapsdParams *pEnterUapsdReqParams)
8967{
8968 WDI_Status status = WDI_STATUS_SUCCESS ;
8969 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8970 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8971 sizeof(WDI_EnterUapsdReqParamsType)) ;
8972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 if(NULL == wdiEnterUapsdReqParams)
8976 {
8977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 VOS_ASSERT(0);
8980 return VOS_STATUS_E_NOMEM;
8981 }
8982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8983 if(NULL == pWdaParams)
8984 {
8985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008987 VOS_ASSERT(0);
8988 vos_mem_free(wdiEnterUapsdReqParams);
8989 return VOS_STATUS_E_NOMEM;
8990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8992 pEnterUapsdReqParams->beDeliveryEnabled;
8993 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8994 pEnterUapsdReqParams->beTriggerEnabled;
8995 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8996 pEnterUapsdReqParams->bkDeliveryEnabled;
8997 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8998 pEnterUapsdReqParams->bkTriggerEnabled;
8999 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9000 pEnterUapsdReqParams->viDeliveryEnabled;
9001 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9002 pEnterUapsdReqParams->viTriggerEnabled;
9003 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9004 pEnterUapsdReqParams->voDeliveryEnabled;
9005 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9006 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009007 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009008
Yue Ma7f44bbe2013-04-12 11:47:39 -07009009 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9010 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009011
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 /* Store param pointer as passed in by caller */
9013 /* store Params pass it to WDI */
9014 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9015 pWdaParams->pWdaContext = pWDA;
9016 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009018 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 if(IS_WDI_STATUS_FAILURE(status))
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9022 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9023 vos_mem_free(pWdaParams->wdaMsgParam) ;
9024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9025 vos_mem_free(pWdaParams) ;
9026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 return CONVERT_WDI2VOS_STATUS(status) ;
9028}
Jeff Johnson295189b2012-06-20 16:38:30 -07009029/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009030 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 * send Exit UAPSD RSP back to PE
9032 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009033void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009034{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009035
9036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9037 tWDA_CbContext *pWDA;
9038 tExitUapsdParams *pExitUapsdRspParams;
9039
Jeff Johnson295189b2012-06-20 16:38:30 -07009040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009041 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009042 if(NULL == pWdaParams)
9043 {
9044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009045 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009046 VOS_ASSERT(0);
9047 return;
9048 }
9049
9050 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9051 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9052
9053 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009054 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009055
9056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9057 vos_mem_free(pWdaParams) ;
9058
9059 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 return ;
9061}
Jeff Johnson295189b2012-06-20 16:38:30 -07009062/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009063 * FUNCTION: WDA_ExitUapsdReqCallback
9064 * Free memory and send Exit UAPSD RSP back to PE.
9065 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9066 */
9067void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9068{
9069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309070 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009071 tExitUapsdParams *pExitUapsdRspParams;
9072
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9074 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9075
9076 if(NULL == pWdaParams)
9077 {
9078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9079 "%s: pWdaParams received NULL", __func__);
9080 VOS_ASSERT(0);
9081 return;
9082 }
9083
9084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309085 if (NULL == pWDA)
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9088 "%s:pWDA is NULL", __func__);
9089 VOS_ASSERT(0);
9090 return ;
9091 }
9092
Yue Ma7f44bbe2013-04-12 11:47:39 -07009093 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9094 pExitUapsdRspParams->status = wdiStatus;
9095
9096 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9097 {
9098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9099 vos_mem_free(pWdaParams);
9100 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9101 }
9102
9103 return;
9104}
9105/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 * FUNCTION: WDA_ProcessExitUapsdReq
9107 * Request to WDI to Exit UAPSD power state.
9108 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009109VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9110 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009111{
9112 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009113 tWDA_ReqParams *pWdaParams ;
9114 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9115 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9116 sizeof(WDI_ExitUapsdReqParamsType)) ;
9117
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009120
9121 if(NULL == wdiExitUapsdReqParams)
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009124 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009125 VOS_ASSERT(0);
9126 return VOS_STATUS_E_NOMEM;
9127 }
9128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9129 if(NULL == pWdaParams)
9130 {
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009133 VOS_ASSERT(0);
9134 vos_mem_free(wdiExitUapsdReqParams);
9135 return VOS_STATUS_E_NOMEM;
9136 }
9137
9138 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009139 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9140 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009141
9142 /* Store param pointer as passed in by caller */
9143 /* store Params pass it to WDI */
9144 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9145 pWdaParams->pWdaContext = pWDA;
9146 pWdaParams->wdaMsgParam = pExitUapsdParams;
9147
Yue Ma7f44bbe2013-04-12 11:47:39 -07009148 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 if(IS_WDI_STATUS_FAILURE(status))
9150 {
9151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9152 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009153 vos_mem_free(pWdaParams->wdaMsgParam) ;
9154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9155 vos_mem_free(pWdaParams) ;
9156
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 return CONVERT_WDI2VOS_STATUS(status) ;
9159}
9160
Jeff Johnson295189b2012-06-20 16:38:30 -07009161/*
9162 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9163 *
9164 */
9165void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9166{
9167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 if(NULL == pWdaParams)
9171 {
9172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 VOS_ASSERT(0) ;
9175 return ;
9176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 if( pWdaParams != NULL )
9178 {
9179 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9180 {
9181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9182 }
9183 if( pWdaParams->wdaMsgParam != NULL )
9184 {
9185 vos_mem_free(pWdaParams->wdaMsgParam) ;
9186 }
9187 vos_mem_free(pWdaParams) ;
9188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 return ;
9190}
Jeff Johnson295189b2012-06-20 16:38:30 -07009191/*
9192 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9193 * Request to WDI to set the power save params at start.
9194 */
9195VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9196 tSirPowerSaveCfg *pPowerSaveCfg)
9197{
9198 WDI_Status status = WDI_STATUS_SUCCESS ;
9199 tHalCfg *tlvStruct = NULL ;
9200 tANI_U8 *tlvStructStart = NULL ;
9201 v_PVOID_t *configParam;
9202 tANI_U32 configParamSize;
9203 tANI_U32 *configDataValue;
9204 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9205 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009207 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009211 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009213 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 return VOS_STATUS_E_FAILURE;
9215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9217 if (NULL == wdiPowerSaveCfg)
9218 {
9219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009222 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 return VOS_STATUS_E_NOMEM;
9224 }
9225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9226 if(NULL == pWdaParams)
9227 {
9228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 VOS_ASSERT(0);
9231 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009232 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 return VOS_STATUS_E_NOMEM;
9234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9236 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009237 if(NULL == configParam)
9238 {
9239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009240 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009241 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 vos_mem_free(pWdaParams);
9243 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009244 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 return VOS_STATUS_E_NOMEM;
9246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 vos_mem_set(configParam, configParamSize, 0);
9248 wdiPowerSaveCfg->pConfigBuffer = configParam;
9249 tlvStruct = (tHalCfg *)configParam;
9250 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009251 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9252 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9253 tlvStruct->length = sizeof(tANI_U32);
9254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9255 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9257 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9259 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9260 tlvStruct->length = sizeof(tANI_U32);
9261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9262 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9264 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9266 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9267 tlvStruct->length = sizeof(tANI_U32);
9268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9269 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9271 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9273 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9274 tlvStruct->length = sizeof(tANI_U32);
9275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9276 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009277 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9278 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9280 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9281 tlvStruct->length = sizeof(tANI_U32);
9282 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9283 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9285 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9287 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9288 tlvStruct->length = sizeof(tANI_U32);
9289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9290 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9292 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9294 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9295 tlvStruct->length = sizeof(tANI_U32);
9296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9297 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9299 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9301 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9302 tlvStruct->length = sizeof(tANI_U32);
9303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9304 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9305 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9306 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9308 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9309 tlvStruct->length = sizeof(tANI_U32);
9310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9311 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9312 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9313 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009314 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9315 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9316 tlvStruct->length = sizeof(tANI_U32);
9317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9318 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9320 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9322 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9323 tlvStruct->length = sizeof(tANI_U32);
9324 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9325 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9327 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 /* store Params pass it to WDI */
9331 pWdaParams->wdaMsgParam = configParam;
9332 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9333 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9335 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 if(IS_WDI_STATUS_FAILURE(status))
9337 {
9338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9339 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9340 vos_mem_free(pWdaParams->wdaMsgParam);
9341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9342 vos_mem_free(pWdaParams);
9343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 return CONVERT_WDI2VOS_STATUS(status);
9346}
Jeff Johnson295189b2012-06-20 16:38:30 -07009347/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009348 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009349 *
9350 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009351void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009352{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9354
Jeff Johnson295189b2012-06-20 16:38:30 -07009355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009356 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009357
9358 if(NULL == pWdaParams)
9359 {
9360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9361 "%s: pWdaParams received NULL", __func__);
9362 VOS_ASSERT(0);
9363 return ;
9364 }
9365
9366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 vos_mem_free(pWdaParams);
9368
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 return ;
9370}
Jeff Johnson295189b2012-06-20 16:38:30 -07009371/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009372 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9373 * Free memory.
9374 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9375 */
9376void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9377{
9378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9379
9380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9381 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9382
9383 if(NULL == pWdaParams)
9384 {
9385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9386 "%s: pWdaParams received NULL", __func__);
9387 VOS_ASSERT(0);
9388 return;
9389 }
9390
9391 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9392 {
9393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9394 vos_mem_free(pWdaParams);
9395 }
9396
9397 return;
9398}
9399/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 * FUNCTION: WDA_SetUapsdAcParamsReq
9401 * Request to WDI to set the UAPSD params for an ac (sta mode).
9402 */
9403VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9404 tUapsdInfo *pUapsdInfo)
9405{
9406 WDI_Status status = WDI_STATUS_SUCCESS;
9407 tWDA_CbContext *pWDA = NULL ;
9408 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9409 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9410 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9411 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009413 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 if(NULL == wdiUapsdParams)
9415 {
9416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 VOS_ASSERT(0);
9419 return VOS_STATUS_E_NOMEM;
9420 }
9421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9422 if(NULL == pWdaParams)
9423 {
9424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 VOS_ASSERT(0);
9427 vos_mem_free(wdiUapsdParams);
9428 return VOS_STATUS_E_NOMEM;
9429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9431 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9432 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9433 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9434 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9435 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009436 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9437 wdiUapsdParams->pUserData = pWdaParams;
9438
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 pWdaParams->pWdaContext = pWDA;
9441 /* Store param pointer as passed in by caller */
9442 pWdaParams->wdaMsgParam = pUapsdInfo;
9443 /* store Params pass it to WDI */
9444 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009446 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009447 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 if(IS_WDI_STATUS_FAILURE(status))
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9451 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9453 vos_mem_free(pWdaParams);
9454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9456 return VOS_STATUS_SUCCESS;
9457 else
9458 return VOS_STATUS_E_FAILURE;
9459
Jeff Johnson295189b2012-06-20 16:38:30 -07009460}
9461/*
9462 * FUNCTION: WDA_ClearUapsdAcParamsReq
9463 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9464 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9465 * and again enter the UPASD with the modified params. Hence the disable
9466 * function was kept empty.
9467 *
9468 */
9469VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9470{
9471 /* do nothing */
9472 return VOS_STATUS_SUCCESS;
9473}
Jeff Johnson295189b2012-06-20 16:38:30 -07009474/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009475 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 *
9477 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009478void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009479{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9481
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009483 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009484
9485 if(NULL == pWdaParams)
9486 {
9487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009488 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009489 VOS_ASSERT(0) ;
9490 return ;
9491 }
9492
9493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9494 vos_mem_free(pWdaParams->wdaMsgParam);
9495 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496
Jeff Johnson295189b2012-06-20 16:38:30 -07009497 //print a msg, nothing else to do
9498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 return ;
9501}
Jeff Johnson295189b2012-06-20 16:38:30 -07009502/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009503 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9504 * Free memory.
9505 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9506 */
9507void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9508{
9509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9510
9511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9512 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9513
9514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9517 "%s: pWdaParams received NULL", __func__);
9518 VOS_ASSERT(0);
9519 return;
9520 }
9521
9522 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9523 {
9524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9525 vos_mem_free(pWdaParams->wdaMsgParam);
9526 vos_mem_free(pWdaParams);
9527 }
9528
9529 return;
9530}
9531/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 * FUNCTION: WDA_UpdateUapsdParamsReq
9533 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9534 */
9535VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9536 tUpdateUapsdParams* pUpdateUapsdInfo)
9537{
9538 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009539 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9541 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9542 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009543 tWDA_ReqParams *pWdaParams = NULL;
9544
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009546 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 if(NULL == wdiUpdateUapsdParams)
9548 {
9549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009551 VOS_ASSERT(0);
9552 return VOS_STATUS_E_NOMEM;
9553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9555 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9556 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009557 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9558 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009559
9560 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9561 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 {
9563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009566 vos_mem_free(pUpdateUapsdInfo);
9567 vos_mem_free(wdiUpdateUapsdParams);
9568 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009571 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009573 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9574 pWdaParams->pWdaContext = pWDA;
9575
Jeff Johnson43971f52012-07-17 12:26:56 -07009576 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009577 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009578 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009579
Jeff Johnson43971f52012-07-17 12:26:56 -07009580 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 {
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9583 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009584 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9586 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009587 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009589 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009590}
Jeff Johnson295189b2012-06-20 16:38:30 -07009591/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009592 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009593 *
9594 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009595void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009596{
9597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009599 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009600 if(WDI_STATUS_SUCCESS != wdiStatus)
9601 {
9602 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009603 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 if(NULL == pWdaParams)
9606 {
9607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009608 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 VOS_ASSERT(0) ;
9610 return ;
9611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9613 vos_mem_free(pWdaParams->wdaMsgParam);
9614 vos_mem_free(pWdaParams);
9615 return ;
9616}
Jeff Johnson295189b2012-06-20 16:38:30 -07009617/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009618 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9619 * Free memory.
9620 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9621 */
9622void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9623{
9624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9625
9626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9627 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9628
9629 if(NULL == pWdaParams)
9630 {
9631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9632 "%s: pWdaParams received NULL", __func__);
9633 VOS_ASSERT(0);
9634 return;
9635 }
9636
9637 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9638 {
9639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9640 vos_mem_free(pWdaParams->wdaMsgParam);
9641 vos_mem_free(pWdaParams);
9642 }
9643
9644 return;
9645}
9646/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009647 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9648 *
9649 */
9650VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9651 tSirWlanSetRxpFilters *pWlanSuspendParam)
9652{
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009654 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309655 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309657 /* Sanity Check
9658 * This is very unlikely and add assert to collect more info next time */
9659 if(NULL == pWlanSuspendParam)
9660 {
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9662 "%s: pWlanSuspendParam received NULL", __func__);
9663 VOS_ASSERT(0) ;
9664 return VOS_STATUS_E_FAULT;
9665 }
9666 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9667 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 if(NULL == wdiRxpFilterParams)
9671 {
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 VOS_ASSERT(0);
9675 vos_mem_free(pWlanSuspendParam);
9676 return VOS_STATUS_E_NOMEM;
9677 }
9678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9679 if(NULL == pWdaParams)
9680 {
9681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 VOS_ASSERT(0);
9684 vos_mem_free(wdiRxpFilterParams);
9685 vos_mem_free(pWlanSuspendParam);
9686 return VOS_STATUS_E_NOMEM;
9687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9689 pWlanSuspendParam->setMcstBcstFilter;
9690 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9691 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9692
Yue Ma7f44bbe2013-04-12 11:47:39 -07009693 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9694 wdiRxpFilterParams->pUserData = pWdaParams;
9695
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 pWdaParams->pWdaContext = pWDA;
9697 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009699 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009700 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009702 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 {
9704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9705 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009706 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9708 vos_mem_free(pWdaParams->wdaMsgParam);
9709 vos_mem_free(pWdaParams);
9710 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009711 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009712}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309713
9714/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309715 * FUNCTION: WDA_ProcessGetFrameLogReq
9716 * Request to WDI to get the Frame Log.
9717 */
9718VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9719 tAniGetFrameLogReq *pGetFrameLog)
9720{
9721 VOS_STATUS status = VOS_STATUS_SUCCESS;
9722 WDI_Status wstatus;
9723 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9724 tWDA_ReqParams *pWdaParams ;
9725
9726 /* Sanity Check*/
9727 if(NULL == pGetFrameLog)
9728 {
9729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309730 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +05309731 VOS_ASSERT(0) ;
9732 return VOS_STATUS_E_FAULT;
9733 }
9734
9735 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9736 sizeof(WDI_GetFrameLogReqInfoType));
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9738 "------> %s " ,__func__);
9739
9740 if(NULL == wdiGetFrameLogInfo)
9741 {
9742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9743 "%s: VOS MEM Alloc Failure", __func__);
9744 VOS_ASSERT(0);
9745 vos_mem_free(pGetFrameLog);
9746 return VOS_STATUS_E_NOMEM;
9747 }
9748
9749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9750 if(NULL == pWdaParams)
9751 {
9752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9753 "%s: VOS MEM Alloc Failure", __func__);
9754 VOS_ASSERT(0);
9755 vos_mem_free(wdiGetFrameLogInfo);
9756 vos_mem_free(pGetFrameLog);
9757 return VOS_STATUS_E_NOMEM;
9758 }
9759
9760 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9761
9762 pWdaParams->pWdaContext = pWDA;
9763 pWdaParams->wdaMsgParam = pGetFrameLog;
9764 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9765
9766 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9767 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9768 pWdaParams);
9769 if(IS_WDI_STATUS_FAILURE(wstatus))
9770 {
9771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9772 "Failure in get frame log REQ WDI API, free all the memory" );
9773 status = CONVERT_WDI2VOS_STATUS(wstatus);
9774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9775 vos_mem_free(pWdaParams->wdaMsgParam);
9776 vos_mem_free(pWdaParams);
9777 }
9778 return status;
9779}
9780
9781/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309782 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309783 *
9784 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309785VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
9786 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309787{
9788 VOS_STATUS status = VOS_STATUS_SUCCESS;
9789 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309790 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309791 tWDA_ReqParams *pWdaParams ;
9792
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9794 "------> %s " ,__func__);
9795
9796 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309797 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309798 {
9799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309800 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309801 VOS_ASSERT(0) ;
9802 return VOS_STATUS_E_FAULT;
9803 }
9804
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309805 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
9806 sizeof(WDI_FWLoggingInitReqInfoType));
9807 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309808 {
9809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9810 "%s: VOS MEM Alloc Failure", __func__);
9811 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309812 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309813 return VOS_STATUS_E_NOMEM;
9814 }
9815
9816 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9817 if(NULL == pWdaParams)
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "%s: VOS MEM Alloc Failure", __func__);
9821 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309822 vos_mem_free(wdiFWLoggingInitInfo);
9823 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309824 return VOS_STATUS_E_NOMEM;
9825 }
9826
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309827 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
9828 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
9829 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
9830 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
9831 wdiFWLoggingInitInfo->continuousFrameLogging =
9832 pFWLoggingInitParam->continuousFrameLogging;
9833 wdiFWLoggingInitInfo->minLogBufferSize=
9834 pFWLoggingInitParam->minLogBufferSize;
9835 wdiFWLoggingInitInfo->maxLogBufferSize=
9836 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309837
9838 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309839 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
9840 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309841
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309842 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
9843 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309844 pWdaParams);
9845 if(IS_WDI_STATUS_FAILURE(wstatus))
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9848 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9849 status = CONVERT_WDI2VOS_STATUS(wstatus);
9850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9851 vos_mem_free(pWdaParams->wdaMsgParam);
9852 vos_mem_free(pWdaParams);
9853 }
9854
9855 return status;
9856}
9857
Jeff Johnson295189b2012-06-20 16:38:30 -07009858/*
9859 * FUNCTION: WDA_WdiIndicationCallback
9860 *
9861 */
9862void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9863 void* pUserData)
9864{
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009866 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009867}
Jeff Johnson295189b2012-06-20 16:38:30 -07009868/*
9869 * FUNCTION: WDA_ProcessWlanSuspendInd
9870 *
9871 */
9872VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9873 tSirWlanSuspendParam *pWlanSuspendParam)
9874{
9875 WDI_Status wdiStatus;
9876 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009878 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9880 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9881 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9882 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9885 if(WDI_STATUS_PENDING == wdiStatus)
9886 {
9887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009888 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 }
9890 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9891 {
9892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009893 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 vos_mem_free(pWlanSuspendParam);
9896 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9897}
9898
Chet Lanctot186b5732013-03-18 10:26:30 -07009899#ifdef WLAN_FEATURE_11W
9900/*
9901 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9902 *
9903 */
9904VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9905 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9906{
9907 WDI_Status wdiStatus;
9908 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9910 "------> %s ", __func__);
9911
9912 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9913 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9914 sizeof(tSirMacAddr));
9915
9916 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9917 wdiExclUnencryptParams.pUserData = pWDA;
9918
9919 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9920 if(WDI_STATUS_PENDING == wdiStatus)
9921 {
9922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9923 "Pending received for %s:%d ", __func__, __LINE__ );
9924 }
9925 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9926 {
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9928 "Failure in %s:%d ", __func__, __LINE__ );
9929 }
9930 vos_mem_free(pExclUnencryptParam);
9931 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9932}
9933#endif
9934
Jeff Johnson295189b2012-06-20 16:38:30 -07009935/*
9936 * FUNCTION: WDA_ProcessWlanResumeCallback
9937 *
9938 */
9939void WDA_ProcessWlanResumeCallback(
9940 WDI_SuspendResumeRspParamsType *resumeRspParams,
9941 void* pUserData)
9942{
9943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009946 if(NULL == pWdaParams)
9947 {
9948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 VOS_ASSERT(0) ;
9951 return ;
9952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9954 {
9955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009956 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9959 vos_mem_free(pWdaParams->wdaMsgParam);
9960 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 return ;
9962}
Jeff Johnson295189b2012-06-20 16:38:30 -07009963/*
9964 * FUNCTION: WDA_ProcessWlanResumeReq
9965 *
9966 */
9967VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9968 tSirWlanResumeParam *pWlanResumeParam)
9969{
9970 WDI_Status wdiStatus;
9971 WDI_ResumeParamsType *wdiResumeParams =
9972 (WDI_ResumeParamsType *)vos_mem_malloc(
9973 sizeof(WDI_ResumeParamsType) ) ;
9974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009976 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 if(NULL == wdiResumeParams)
9978 {
9979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 VOS_ASSERT(0);
9982 return VOS_STATUS_E_NOMEM;
9983 }
9984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9985 if(NULL == pWdaParams)
9986 {
9987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 VOS_ASSERT(0);
9990 vos_mem_free(wdiResumeParams);
9991 return VOS_STATUS_E_NOMEM;
9992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9994 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 wdiResumeParams->wdiReqStatusCB = NULL;
9997 pWdaParams->wdaMsgParam = pWlanResumeParam;
9998 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9999 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10001 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10002 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10004 {
10005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10006 "Failure in Host Resume REQ WDI API, free all the memory " );
10007 VOS_ASSERT(0);
10008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10009 vos_mem_free(pWdaParams->wdaMsgParam);
10010 vos_mem_free(pWdaParams);
10011 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10013}
10014
Jeff Johnson295189b2012-06-20 16:38:30 -070010015/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010016 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 *
10018 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010019void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010020{
10021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 VOS_ASSERT(0) ;
10029 return ;
10030 }
10031
10032 vos_mem_free(pWdaParams->wdaMsgParam) ;
10033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10034 vos_mem_free(pWdaParams) ;
10035 /*
10036 * No respone required for SetBeaconFilter req so just free the request
10037 * param here
10038 */
10039
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 return ;
10041}
Jeff Johnson295189b2012-06-20 16:38:30 -070010042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010043 * FUNCTION: WDA_SetBeaconFilterReqCallback
10044 * Free memory.
10045 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10046 */
10047void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10048{
10049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10050
10051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10052 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10053
10054 if(NULL == pWdaParams)
10055 {
10056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10057 "%s: pWdaParams received NULL", __func__);
10058 VOS_ASSERT(0);
10059 return;
10060 }
10061
10062 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10063 {
10064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10065 vos_mem_free(pWdaParams->wdaMsgParam);
10066 vos_mem_free(pWdaParams);
10067 }
10068
10069 return;
10070}
10071/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 * FUNCTION: WDA_SetBeaconFilterReq
10073 * Request to WDI to send the beacon filtering related information.
10074 */
10075VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10076 tBeaconFilterMsg* pBeaconFilterInfo)
10077{
10078 WDI_Status status = WDI_STATUS_SUCCESS;
10079 tANI_U8 *dstPtr, *srcPtr;
10080 tANI_U8 filterLength;
10081 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10082 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10083 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10084 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010086 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 if(NULL == wdiBeaconFilterInfo)
10088 {
10089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 VOS_ASSERT(0);
10092 return VOS_STATUS_E_NOMEM;
10093 }
10094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10095 if(NULL == pWdaParams)
10096 {
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 VOS_ASSERT(0);
10100 vos_mem_free(wdiBeaconFilterInfo);
10101 return VOS_STATUS_E_NOMEM;
10102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10104 pBeaconFilterInfo->beaconInterval;
10105 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10106 pBeaconFilterInfo->capabilityInfo;
10107 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10108 pBeaconFilterInfo->capabilityMask;
10109 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010110
10111 //Fill the BssIdx
10112 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10113
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 //Fill structure with info contained in the beaconFilterTable
10115 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10116 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10117 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10118 if(WDI_BEACON_FILTER_LEN < filterLength)
10119 {
10120 filterLength = WDI_BEACON_FILTER_LEN;
10121 }
10122 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010123 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10124 wdiBeaconFilterInfo->pUserData = pWdaParams;
10125
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 /* Store param pointer as passed in by caller */
10127 /* store Params pass it to WDI */
10128 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10129 pWdaParams->pWdaContext = pWDA;
10130 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10131
Jeff Johnson295189b2012-06-20 16:38:30 -070010132 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010133 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010134 if(IS_WDI_STATUS_FAILURE(status))
10135 {
10136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10137 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10138 vos_mem_free(pWdaParams->wdaMsgParam) ;
10139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10140 vos_mem_free(pWdaParams) ;
10141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 return CONVERT_WDI2VOS_STATUS(status) ;
10143}
Jeff Johnson295189b2012-06-20 16:38:30 -070010144/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010145 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 *
10147 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010149{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10151
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010153 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010154
10155 if(NULL == pWdaParams)
10156 {
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010158 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010159 VOS_ASSERT(0) ;
10160 return ;
10161 }
10162
10163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10164 vos_mem_free(pWdaParams->wdaMsgParam);
10165 vos_mem_free(pWdaParams);
10166
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 //print a msg, nothing else to do
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010169 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 return ;
10171}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010172/*
10173 * FUNCTION: WDA_RemBeaconFilterReqCallback
10174 * Free memory.
10175 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10176 */
10177void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10178{
10179 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10180
10181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10182 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10183
10184 if(NULL == pWdaParams)
10185 {
10186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10187 "%s: pWdaParams received NULL", __func__);
10188 VOS_ASSERT(0);
10189 return;
10190 }
10191
10192 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10193 {
10194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10195 vos_mem_free(pWdaParams->wdaMsgParam);
10196 vos_mem_free(pWdaParams);
10197 }
10198
10199 return;
10200}
Jeff Johnson295189b2012-06-20 16:38:30 -070010201 // TODO: PE does not have this feature for now implemented,
10202 // but the support for removing beacon filter exists between
10203 // HAL and FW. This function can be called whenever PE defines
10204 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010205/*
10206 * FUNCTION: WDA_RemBeaconFilterReq
10207 * Request to WDI to send the removal of beacon filtering related information.
10208 */
10209VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10210 tRemBeaconFilterMsg* pBeaconFilterInfo)
10211{
10212 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010213 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10215 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10216 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010217 tWDA_ReqParams *pWdaParams ;
10218
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 if(NULL == wdiBeaconFilterInfo)
10222 {
10223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 VOS_ASSERT(0);
10226 return VOS_STATUS_E_NOMEM;
10227 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10229 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010234 vos_mem_free(wdiBeaconFilterInfo);
10235 vos_mem_free(pBeaconFilterInfo);
10236 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010238
10239 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10240 pBeaconFilterInfo->ucIeCount;
10241 //Fill structure with info contained in the ucRemIeId
10242 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10243 pBeaconFilterInfo->ucRemIeId,
10244 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10245 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10246 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247
10248 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010249 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010251 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10252
10253 pWdaParams->pWdaContext = pWDA;
10254
Jeff Johnson43971f52012-07-17 12:26:56 -070010255 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010256 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010257 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 {
10259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10260 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010261 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10263 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010264 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010266 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010267}
Jeff Johnson295189b2012-06-20 16:38:30 -070010268/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010269 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 *
10271 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010272void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010273{
10274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 if(NULL == pWdaParams)
10278 {
10279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_ASSERT(0) ;
10282 return ;
10283 }
10284
10285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10286 vos_mem_free(pWdaParams) ;
10287
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 return ;
10289}
Jeff Johnson295189b2012-06-20 16:38:30 -070010290/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010291 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10292 * Free memory.
10293 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10294 */
10295void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10296{
10297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10298
10299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10300 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10301
10302 if(NULL == pWdaParams)
10303 {
10304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10305 "%s: pWdaParams received NULL", __func__);
10306 VOS_ASSERT(0);
10307 return;
10308 }
10309
10310 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10311 {
10312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10313 vos_mem_free(pWdaParams);
10314 }
10315
10316 return;
10317}
10318/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 * FUNCTION: WDA_SetRSSIThresholdsReq
10320 * Request to WDI to set the RSSI thresholds (sta mode).
10321 */
10322VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10323{
10324 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010325 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 tWDA_CbContext *pWDA = NULL ;
10327 v_PVOID_t pVosContext = NULL;
10328 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10329 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10330 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10331 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010333 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 if(NULL == wdiRSSIThresholdsInfo)
10335 {
10336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010337 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 VOS_ASSERT(0);
10339 return VOS_STATUS_E_NOMEM;
10340 }
10341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10342 if(NULL == pWdaParams)
10343 {
10344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 VOS_ASSERT(0);
10347 vos_mem_free(wdiRSSIThresholdsInfo);
10348 return VOS_STATUS_E_NOMEM;
10349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10352 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10353 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10355 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10356 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10358 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10359 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010360 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10361 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010362 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10363 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10364
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 /* Store param pointer as passed in by caller */
10366 /* store Params pass it to WDI */
10367 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10368 pWdaParams->pWdaContext = pWDA;
10369 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010370 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010371 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010372 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10375 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010376 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10378 vos_mem_free(pWdaParams) ;
10379 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010380 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010381
10382}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010383/*
Yue Madb90ac12013-04-04 13:39:13 -070010384 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 *
10386 */
Yue Madb90ac12013-04-04 13:39:13 -070010387void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010388{
10389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10390
10391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 if(NULL == pWdaParams)
10394 {
10395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 VOS_ASSERT(0) ;
10398 return ;
10399 }
10400
10401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10402 vos_mem_free(pWdaParams->wdaMsgParam);
10403 vos_mem_free(pWdaParams) ;
10404
10405 //print a msg, nothing else to do
10406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010407 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 return ;
10409}
Jeff Johnson295189b2012-06-20 16:38:30 -070010410/*
Yue Madb90ac12013-04-04 13:39:13 -070010411 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010412 * Free memory.
10413 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010414 */
10415void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10416{
10417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10418
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10420 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10421
10422 if(NULL == pWdaParams)
10423 {
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10425 "%s: Invalid pWdaParams pointer", __func__);
10426 VOS_ASSERT(0);
10427 return;
10428 }
10429
10430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10431 {
10432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10433 vos_mem_free(pWdaParams->wdaMsgParam);
10434 vos_mem_free(pWdaParams);
10435 }
10436
10437 return;
10438}
10439/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010440 * FUNCTION: WDA_ProcessHostOffloadReq
10441 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10442 * to broadcast traffic (sta mode).
10443 */
10444VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10445 tSirHostOffloadReq *pHostOffloadParams)
10446{
10447 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010448 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10450 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10451 sizeof(WDI_HostOffloadReqParamsType)) ;
10452 tWDA_ReqParams *pWdaParams ;
10453
10454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010455 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010456
10457 if(NULL == wdiHostOffloadInfo)
10458 {
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 VOS_ASSERT(0);
10462 return VOS_STATUS_E_NOMEM;
10463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10465 if(NULL == pWdaParams)
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 VOS_ASSERT(0);
10470 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010471 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 return VOS_STATUS_E_NOMEM;
10473 }
10474
10475 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10476 pHostOffloadParams->offloadType;
10477 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10478 pHostOffloadParams->enableOrDisable;
10479
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010480 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10481 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10482
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10484 {
10485 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10486 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10487 pHostOffloadParams->params.hostIpv4Addr,
10488 4);
10489 break;
10490 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10491 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10492 pHostOffloadParams->params.hostIpv6Addr,
10493 16);
10494 break;
10495 case SIR_IPV6_NS_OFFLOAD:
10496 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10497 pHostOffloadParams->params.hostIpv6Addr,
10498 16);
10499
10500#ifdef WLAN_NS_OFFLOAD
10501 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10502 {
10503 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10504 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10505 16);
10506 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10507 }
10508 else
10509 {
10510 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10511 }
10512
10513 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10514 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10515 16);
10516 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10517 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10518 6);
10519
10520 //Only two are supported so let's go through them without a loop
10521 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10522 {
10523 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10524 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10525 16);
10526 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10527 }
10528 else
10529 {
10530 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10531 }
10532
10533 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10534 {
10535 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10536 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10537 16);
10538 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10539 }
10540 else
10541 {
10542 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10543 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010544 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10545 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 break;
10547#endif //WLAN_NS_OFFLOAD
10548 default:
10549 {
10550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10551 "No Handling for Offload Type %x in WDA "
10552 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10553 //WDA_VOS_ASSERT(0) ;
10554 }
10555 }
Yue Madb90ac12013-04-04 13:39:13 -070010556 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10557 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010558
Jeff Johnson295189b2012-06-20 16:38:30 -070010559 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010560 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 /* store Params pass it to WDI */
10562 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10563 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010564
Jeff Johnson295189b2012-06-20 16:38:30 -070010565
Jeff Johnson43971f52012-07-17 12:26:56 -070010566 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010567 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010568
Jeff Johnson43971f52012-07-17 12:26:56 -070010569 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010572 "Failure in host offload REQ WDI API, free all the memory %d",
10573 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010574 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10576 vos_mem_free(pWdaParams->wdaMsgParam);
10577 vos_mem_free(pWdaParams) ;
10578 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010579 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010580
10581}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010582/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010583 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 *
10585 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010586void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010587{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010588 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10589
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010591 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010592
10593 if(NULL == pWdaParams)
10594 {
10595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010596 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010597 VOS_ASSERT(0) ;
10598 return ;
10599 }
10600
10601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10602 vos_mem_free(pWdaParams->wdaMsgParam);
10603 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010604
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 //print a msg, nothing else to do
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010607 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 return ;
10609}
Jeff Johnson295189b2012-06-20 16:38:30 -070010610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010611 * FUNCTION: WDA_KeepAliveReqCallback
10612 * Free memory.
10613 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10614 */
10615void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10616{
10617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10618
10619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10620 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10621
10622 if(NULL == pWdaParams)
10623 {
10624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "%s: pWdaParams received NULL", __func__);
10626 VOS_ASSERT(0);
10627 return;
10628 }
10629
10630 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10631 {
10632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10633 vos_mem_free(pWdaParams->wdaMsgParam);
10634 vos_mem_free(pWdaParams);
10635 }
10636
10637 return;
10638}
10639/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010640 * FUNCTION: WDA_ProcessKeepAliveReq
10641 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10642 * wakeup due to broadcast traffic (sta mode).
10643 */
10644VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10645 tSirKeepAliveReq *pKeepAliveParams)
10646{
10647 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010648 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10650 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10651 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010652 tWDA_ReqParams *pWdaParams;
10653
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010655 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 if(NULL == wdiKeepAliveInfo)
10657 {
10658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010661 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 return VOS_STATUS_E_NOMEM;
10663 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010664
10665 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10666 if(NULL == pWdaParams)
10667 {
10668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010669 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010670 VOS_ASSERT(0);
10671 vos_mem_free(wdiKeepAliveInfo);
10672 vos_mem_free(pKeepAliveParams);
10673 return VOS_STATUS_E_NOMEM;
10674 }
10675
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10677 pKeepAliveParams->packetType;
10678 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10679 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010680
10681 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10682 pKeepAliveParams->bssId,
10683 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010684
10685 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10686 {
10687 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10688 pKeepAliveParams->hostIpv4Addr,
10689 SIR_IPV4_ADDR_LEN);
10690 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10691 pKeepAliveParams->destIpv4Addr,
10692 SIR_IPV4_ADDR_LEN);
10693 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10694 pKeepAliveParams->destMacAddr,
10695 SIR_MAC_ADDR_LEN);
10696 }
10697 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10698 {
10699 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10700 SIR_IPV4_ADDR_LEN,
10701 0);
10702 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10703 SIR_IPV4_ADDR_LEN,
10704 0);
10705 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10706 SIR_MAC_ADDR_LEN,
10707 0);
10708 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010709 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10710 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010711
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010713 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010715 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10716 pWdaParams->pWdaContext = pWDA;
10717
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10719 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10720 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10721 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10722 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10724 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10725 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10726 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10727 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10729 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10730 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10731 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10732 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10733 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10734 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10735 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10737 "TimePeriod %d PacketType %d",
10738 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10739 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010740 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010741 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010742
Jeff Johnson43971f52012-07-17 12:26:56 -070010743 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 {
10745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10746 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010747 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10749 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010750 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010752 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010753
10754}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010755/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010756 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 *
10758 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010759void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010760 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10761 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010762{
10763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010765 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 if(NULL == pWdaParams)
10767 {
10768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010769 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 VOS_ASSERT(0) ;
10771 return ;
10772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10774 vos_mem_free(pWdaParams->wdaMsgParam);
10775 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 return ;
10777}
Jeff Johnson295189b2012-06-20 16:38:30 -070010778/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010779 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10780 * Free memory.
10781 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10782 */
10783void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10784{
10785 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10786
10787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10788 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10789
10790 if(NULL == pWdaParams)
10791 {
10792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10793 "%s: pWdaParams received NULL", __func__);
10794 VOS_ASSERT(0);
10795 return;
10796 }
10797
10798 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10799 {
10800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10801 vos_mem_free(pWdaParams->wdaMsgParam);
10802 vos_mem_free(pWdaParams);
10803 }
10804
10805 return;
10806}
10807
10808/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10810 * Request to WDI to add WOWL Bcast pattern
10811 */
10812VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10813 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10814{
10815 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010816 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010817 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10818 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10819 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10820 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 if(NULL == wdiWowlAddBcPtrnInfo)
10824 {
10825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_ASSERT(0);
10828 return VOS_STATUS_E_NOMEM;
10829 }
10830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10831 if(NULL == pWdaParams)
10832 {
10833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 VOS_ASSERT(0);
10836 vos_mem_free(wdiWowlAddBcPtrnInfo);
10837 return VOS_STATUS_E_NOMEM;
10838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10840 pWowlAddBcPtrnParams->ucPatternId;
10841 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10842 pWowlAddBcPtrnParams->ucPatternByteOffset;
10843 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10844 pWowlAddBcPtrnParams->ucPatternMaskSize;
10845 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10846 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10848 {
10849 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10850 pWowlAddBcPtrnParams->ucPattern,
10851 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10852 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10853 pWowlAddBcPtrnParams->ucPatternMask,
10854 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10855 }
10856 else
10857 {
10858 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10859 pWowlAddBcPtrnParams->ucPattern,
10860 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10861 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10862 pWowlAddBcPtrnParams->ucPatternMask,
10863 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10864
10865 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10866 pWowlAddBcPtrnParams->ucPatternExt,
10867 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10868 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10869 pWowlAddBcPtrnParams->ucPatternMaskExt,
10870 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10871 }
10872
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010873 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10874 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10875
Yue Ma7f44bbe2013-04-12 11:47:39 -070010876 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10877 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 /* Store param pointer as passed in by caller */
10879 /* store Params pass it to WDI */
10880 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10881 pWdaParams->pWdaContext = pWDA;
10882 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010883 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010884 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010885 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 {
10887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10888 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010889 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010890 vos_mem_free(pWdaParams->wdaMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10892 vos_mem_free(pWdaParams) ;
10893 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010894 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010895
10896}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010898 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 *
10900 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010901void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010902 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10903 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010904{
10905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 if(NULL == pWdaParams)
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 VOS_ASSERT(0) ;
10913 return ;
10914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10916 vos_mem_free(pWdaParams->wdaMsgParam);
10917 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010918 return ;
10919}
Jeff Johnson295189b2012-06-20 16:38:30 -070010920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10922 * Free memory.
10923 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10924 */
10925void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10926{
10927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10928
10929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10931
10932 if(NULL == pWdaParams)
10933 {
10934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10935 "%s: pWdaParams received NULL", __func__);
10936 VOS_ASSERT(0);
10937 return;
10938 }
10939
10940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10941 {
10942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10943 vos_mem_free(pWdaParams->wdaMsgParam);
10944 vos_mem_free(pWdaParams);
10945 }
10946
10947 return;
10948}
10949/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010950 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10951 * Request to WDI to delete WOWL Bcast pattern
10952 */
10953VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10954 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10955{
10956 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010957 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10959 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10960 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10961 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010963 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 if(NULL == wdiWowlDelBcPtrnInfo)
10965 {
10966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 VOS_ASSERT(0);
10969 return VOS_STATUS_E_NOMEM;
10970 }
10971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10972 if(NULL == pWdaParams)
10973 {
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 VOS_ASSERT(0);
10977 vos_mem_free(wdiWowlDelBcPtrnInfo);
10978 return VOS_STATUS_E_NOMEM;
10979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010980 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10981 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010982
10983 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10984 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10985
Yue Ma7f44bbe2013-04-12 11:47:39 -070010986 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10987 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 /* Store param pointer as passed in by caller */
10989 /* store Params pass it to WDI */
10990 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10991 pWdaParams->pWdaContext = pWDA;
10992 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010993 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010994 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010995 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 {
10997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10998 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010999 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 vos_mem_free(pWdaParams->wdaMsgParam) ;
11001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11002 vos_mem_free(pWdaParams) ;
11003 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011004 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011005
11006}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011007/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011008 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 *
11010 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011011void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011012{
11013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011014 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011017 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 if(NULL == pWdaParams)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011021 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 VOS_ASSERT(0) ;
11023 return ;
11024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011025 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011026 if (NULL == pWDA)
11027 {
11028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11029 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011030
11031 if(pWdaParams->wdaWdiApiMsgParam)
11032 {
11033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11034 }
11035 vos_mem_free(pWdaParams);
11036
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011037 VOS_ASSERT(0);
11038 return ;
11039 }
11040
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11042
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011043 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11044
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11046 vos_mem_free(pWdaParams) ;
11047
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011048 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011049 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 return ;
11052}
Jeff Johnson295189b2012-06-20 16:38:30 -070011053/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011054 * FUNCTION: WDA_WowlEnterReqCallback
11055 * Free memory and send WOWL Enter RSP back to PE.
11056 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11057 */
11058void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11059{
11060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011061 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011062 tSirHalWowlEnterParams *pWowlEnterParams;
11063
11064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11065 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11066
11067 if(NULL == pWdaParams)
11068 {
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11070 "%s: pWdaParams received NULL", __func__);
11071 VOS_ASSERT(0);
11072 return;
11073 }
11074
11075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011076 if (NULL == pWDA)
11077 {
11078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11079 "%s:pWDA is NULL", __func__);
11080 VOS_ASSERT(0);
11081 return ;
11082 }
11083
Yue Ma7f44bbe2013-04-12 11:47:39 -070011084 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11085 pWowlEnterParams->status = wdiStatus;
11086
11087 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11088 {
11089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11090 vos_mem_free(pWdaParams);
11091 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11092 }
11093
11094 return;
11095}
11096/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 * FUNCTION: WDA_ProcessWowlEnterReq
11098 * Request to WDI to enter WOWL
11099 */
11100VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11101 tSirHalWowlEnterParams *pWowlEnterParams)
11102{
11103 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011104 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11106 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11107 sizeof(WDI_WowlEnterReqParamsType)) ;
11108 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011110 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 if(NULL == wdiWowlEnterInfo)
11112 {
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 VOS_ASSERT(0);
11116 return VOS_STATUS_E_NOMEM;
11117 }
11118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11119 if(NULL == pWdaParams)
11120 {
11121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011123 VOS_ASSERT(0);
11124 vos_mem_free(wdiWowlEnterInfo);
11125 return VOS_STATUS_E_NOMEM;
11126 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011127
11128 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11129
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11131 pWowlEnterParams->magicPtrn,
11132 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11134 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011135 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11136 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11138 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11140 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011141 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11142 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11144 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11146 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11148 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011149#ifdef WLAN_WAKEUP_EVENTS
11150 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11151 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11152
11153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11154 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11155
11156 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11157 pWowlEnterParams->ucWowNetScanOffloadMatch;
11158
11159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11160 pWowlEnterParams->ucWowGTKRekeyError;
11161
11162 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11163 pWowlEnterParams->ucWoWBSSConnLoss;
11164#endif // WLAN_WAKEUP_EVENTS
11165
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011166 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11167 pWowlEnterParams->bssIdx;
11168
Yue Ma7f44bbe2013-04-12 11:47:39 -070011169 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11170 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 /* Store param pointer as passed in by caller */
11172 /* store Params pass it to WDI */
11173 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11174 pWdaParams->pWdaContext = pWDA;
11175 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011176 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011177 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011178 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 {
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11181 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011182 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 vos_mem_free(pWdaParams->wdaMsgParam) ;
11184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11185 vos_mem_free(pWdaParams) ;
11186 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011187 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011188
11189}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011190/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011191 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 *
11193 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011194void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011195{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011197 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011198 tSirHalWowlExitParams *pWowlExitParams;
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011201 if(NULL == pWdaParams)
11202 {
11203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011204 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011205 VOS_ASSERT(0) ;
11206 return ;
11207 }
11208 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011209 if (NULL == pWDA)
11210 {
11211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11212 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011213
11214 if(pWdaParams->wdaWdiApiMsgParam)
11215 {
11216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11217 }
11218 vos_mem_free(pWdaParams);
11219
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011220 VOS_ASSERT(0);
11221 return ;
11222 }
11223
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011224 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11225
11226 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011227 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011228
11229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11230 vos_mem_free(pWdaParams) ;
11231
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011233 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011234 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 return ;
11236}
Jeff Johnson295189b2012-06-20 16:38:30 -070011237/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011238 * FUNCTION: WDA_WowlExitReqCallback
11239 * Free memory and send WOWL Exit RSP back to PE.
11240 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11241 */
11242void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11243{
11244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011245 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011246 tSirHalWowlExitParams *pWowlExitParams;
11247
11248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11249 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11250
11251 if(NULL == pWdaParams)
11252 {
11253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11254 "%s: pWdaParams received NULL", __func__);
11255 VOS_ASSERT(0);
11256 return;
11257 }
11258
11259 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011260 if (NULL == pWDA)
11261 {
11262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11263 "%s:pWDA is NULL", __func__);
11264 VOS_ASSERT(0);
11265 return ;
11266 }
11267
Yue Ma7f44bbe2013-04-12 11:47:39 -070011268 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11269 pWowlExitParams->status = wdiStatus;
11270
11271 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11272 {
11273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11274 vos_mem_free(pWdaParams);
11275 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11276 }
11277
11278 return;
11279}
11280/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011281 * FUNCTION: WDA_ProcessWowlExitReq
11282 * Request to WDI to add WOWL Bcast pattern
11283 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011284VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11285 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011286{
11287 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011288 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011289 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11290 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11291 sizeof(WDI_WowlExitReqParamsType)) ;
11292 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011295 if(NULL == wdiWowlExitInfo)
11296 {
11297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011298 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011299 VOS_ASSERT(0);
11300 return VOS_STATUS_E_NOMEM;
11301 }
11302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11303 if(NULL == pWdaParams)
11304 {
11305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011306 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011307 VOS_ASSERT(0);
11308 vos_mem_free(wdiWowlExitInfo);
11309 return VOS_STATUS_E_NOMEM;
11310 }
11311
11312 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11313 pWowlExitParams->bssIdx;
11314
Yue Ma7f44bbe2013-04-12 11:47:39 -070011315 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11316 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011317
11318 /* Store param pointer as passed in by caller */
11319 /* store Params pass it to WDI */
11320 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11321 pWdaParams->pWdaContext = pWDA;
11322 pWdaParams->wdaMsgParam = pWowlExitParams;
11323
11324 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011325 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011326
Jeff Johnson43971f52012-07-17 12:26:56 -070011327 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11330 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011331 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11333 vos_mem_free(pWdaParams->wdaMsgParam);
11334 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011336 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011337}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011338/*
11339 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11340 * Request to WDI to determine whether a given station is capable of
11341 * using HW-based frame translation
11342 */
11343v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11344 tANI_U8 staIdx)
11345{
11346 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11347}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011348
11349/*
11350 * FUNCTION: WDA_IsSelfSTA
11351 * Request to WDI to determine whether a given STAID is self station
11352 * index.
11353 */
11354v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11355{
11356
11357 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11358
Girish Gowli05cf44e2014-06-12 21:53:37 +053011359 if (NULL != pWDA)
11360 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11361 else
11362 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011363}
Jeff Johnson295189b2012-06-20 16:38:30 -070011364/*
11365 * FUNCTION: WDA_NvDownloadReqCallback
11366 * send NV Download RSP back to PE
11367 */
11368void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11369 void* pUserData)
11370{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011371
11372 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011373 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011374
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011376 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011377
11378 if(NULL == pWdaParams)
11379 {
11380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011381 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011382 VOS_ASSERT(0) ;
11383 return ;
11384 }
11385
11386 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011387 if (NULL == pWDA)
11388 {
11389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11390 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011391
11392 if(pWdaParams->wdaWdiApiMsgParam)
11393 {
11394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11395 }
11396 vos_mem_free(pWdaParams);
11397
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011398 VOS_ASSERT(0);
11399 return ;
11400 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011401
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11404 vos_mem_free(pWdaParams);
11405
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 return ;
11408}
Jeff Johnson295189b2012-06-20 16:38:30 -070011409/*
11410 * FUNCTION: WDA_ProcessNvDownloadReq
11411 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11412 */
11413VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11414{
11415 /* Initialize the local Variables*/
11416 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11417 v_VOID_t *pNvBuffer=NULL;
11418 v_SIZE_t bufferSize = 0;
11419 WDI_Status status = WDI_STATUS_E_FAILURE;
11420 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011421 tWDA_ReqParams *pWdaParams ;
11422
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011424 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011425 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 {
11427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011428 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011429 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 return VOS_STATUS_E_FAILURE;
11431 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011432
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011434 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11435
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11437 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 if(NULL == wdiNvDownloadReqParam)
11439 {
11440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 VOS_ASSERT(0);
11443 return VOS_STATUS_E_NOMEM;
11444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 /* Copy Params to wdiNvDownloadReqParam*/
11446 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11447 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011448
11449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11450 if(NULL == pWdaParams)
11451 {
11452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011453 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011454 VOS_ASSERT(0);
11455 vos_mem_free(wdiNvDownloadReqParam);
11456 return VOS_STATUS_E_NOMEM;
11457 }
11458
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011460 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11461 pWdaParams->wdaMsgParam = NULL;
11462 pWdaParams->pWdaContext = pWDA;
11463
11464
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011466
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011468 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11469
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 if(IS_WDI_STATUS_FAILURE(status))
11471 {
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11473 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11475 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011478}
11479/*
11480 * FUNCTION: WDA_FlushAcReqCallback
11481 * send Flush AC RSP back to TL
11482 */
11483void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11484{
11485 vos_msg_t wdaMsg = {0} ;
11486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11487 tFlushACReq *pFlushACReqParams;
11488 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011490 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 if(NULL == pWdaParams)
11492 {
11493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011494 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 VOS_ASSERT(0) ;
11496 return ;
11497 }
11498
11499 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11500 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11501 if(NULL == pFlushACRspParams)
11502 {
11503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011506 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 return ;
11508 }
11509 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11510 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11511 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11512 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11513 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011514 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 vos_mem_free(pWdaParams->wdaMsgParam) ;
11516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11517 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11519 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11520 // POST message to TL
11521 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11522
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 return ;
11524}
Jeff Johnson295189b2012-06-20 16:38:30 -070011525/*
11526 * FUNCTION: WDA_ProcessFlushAcReq
11527 * Request to WDI to Update the DELBA REQ params.
11528 */
11529VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11530 tFlushACReq *pFlushAcReqParams)
11531{
11532 WDI_Status status = WDI_STATUS_SUCCESS ;
11533 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11534 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11535 sizeof(WDI_FlushAcReqParamsType)) ;
11536 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 if(NULL == wdiFlushAcReqParam)
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 VOS_ASSERT(0);
11542 return VOS_STATUS_E_NOMEM;
11543 }
11544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11545 if(NULL == pWdaParams)
11546 {
11547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 VOS_ASSERT(0);
11550 vos_mem_free(wdiFlushAcReqParam);
11551 return VOS_STATUS_E_NOMEM;
11552 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011554 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11556 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11557 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11558 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 /* Store Flush AC pointer, as this will be used for response */
11560 /* store Params pass it to WDI */
11561 pWdaParams->pWdaContext = pWDA;
11562 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11563 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11565 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 if(IS_WDI_STATUS_FAILURE(status))
11567 {
11568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11569 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11570 vos_mem_free(pWdaParams->wdaMsgParam) ;
11571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11572 vos_mem_free(pWdaParams) ;
11573 //TODO: respond to TL with failure
11574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011575 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011576}
Jeff Johnson295189b2012-06-20 16:38:30 -070011577/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011578 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 *
11580 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011581void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011582{
11583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011584 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011585 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011586
11587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011588 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011589 if(NULL == pWdaParams)
11590 {
11591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011592 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011593 VOS_ASSERT(0) ;
11594 return ;
11595 }
11596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011597 if (NULL == pWDA)
11598 {
11599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11600 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011601 vos_mem_free(pWdaParams->wdaMsgParam) ;
11602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11603 vos_mem_free(pWdaParams) ;
11604
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011605 VOS_ASSERT(0);
11606 return ;
11607 }
11608
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11610 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11611 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11612 {
11613 pWDA->wdaAmpSessionOn = VOS_FALSE;
11614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 vos_mem_free(pWdaParams->wdaMsgParam) ;
11616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11617 vos_mem_free(pWdaParams) ;
11618 /*
11619 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11620 * param here
11621 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 return ;
11623}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011624/*
11625 * FUNCTION: WDA_BtAmpEventReqCallback
11626 * Free memory.
11627 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11628 */
11629void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11630{
11631 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011632 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011633 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011634
Yue Ma7f44bbe2013-04-12 11:47:39 -070011635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11636 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11637
11638 if(NULL == pWdaParams)
11639 {
11640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11641 "%s: pWdaParams received NULL", __func__);
11642 VOS_ASSERT(0);
11643 return;
11644 }
11645
11646 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011647 if (NULL == pWDA)
11648 {
11649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11650 "%s:pWDA is NULL", __func__);
11651 VOS_ASSERT(0);
11652 return ;
11653 }
11654
Yue Ma7f44bbe2013-04-12 11:47:39 -070011655 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11656
11657 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11658 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11659 {
11660 pWDA->wdaAmpSessionOn = VOS_FALSE;
11661 }
11662
11663 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11664 {
11665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11666 vos_mem_free(pWdaParams->wdaMsgParam);
11667 vos_mem_free(pWdaParams);
11668 }
11669
11670 return;
11671}
Jeff Johnson295189b2012-06-20 16:38:30 -070011672/*
11673 * FUNCTION: WDA_ProcessBtAmpEventReq
11674 * Request to WDI to Update with BT AMP events.
11675 */
11676VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11677 tSmeBtAmpEvent *pBtAmpEventParams)
11678{
11679 WDI_Status status = WDI_STATUS_SUCCESS ;
11680 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11681 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11682 sizeof(WDI_BtAmpEventParamsType)) ;
11683 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011686 if(NULL == wdiBtAmpEventParam)
11687 {
11688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 VOS_ASSERT(0);
11691 return VOS_STATUS_E_NOMEM;
11692 }
11693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11694 if(NULL == pWdaParams)
11695 {
11696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 VOS_ASSERT(0);
11699 vos_mem_free(wdiBtAmpEventParam);
11700 return VOS_STATUS_E_NOMEM;
11701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11703 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011704 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11705 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 /* Store BT AMP event pointer, as this will be used for response */
11707 /* store Params pass it to WDI */
11708 pWdaParams->pWdaContext = pWDA;
11709 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11710 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011712 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011713 if(IS_WDI_STATUS_FAILURE(status))
11714 {
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11716 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11717 vos_mem_free(pWdaParams->wdaMsgParam) ;
11718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11719 vos_mem_free(pWdaParams) ;
11720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11722 {
11723 pWDA->wdaAmpSessionOn = VOS_TRUE;
11724 }
11725 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011726}
11727
Jeff Johnson295189b2012-06-20 16:38:30 -070011728/*
11729 * FUNCTION: WDA_FTMCommandReqCallback
11730 * Handle FTM CMD response came from HAL
11731 * Route responce to HDD FTM
11732 */
11733void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11734 void *usrData)
11735{
11736 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11738 {
11739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011740 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 return;
11742 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 /* Release Current FTM Command Request */
11744 vos_mem_free(pWDA->wdaFTMCmdReq);
11745 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 /* Post FTM Responce to HDD FTM */
11747 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 return;
11749}
Jeff Johnson295189b2012-06-20 16:38:30 -070011750/*
11751 * FUNCTION: WDA_ProcessFTMCommand
11752 * Send FTM command to WDI
11753 */
11754VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11755 tPttMsgbuffer *pPTTFtmCmd)
11756{
11757 WDI_Status status = WDI_STATUS_SUCCESS;
11758 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 ftmCMDReq = (WDI_FTMCommandReqType *)
11760 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11761 if(NULL == ftmCMDReq)
11762 {
11763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11764 "WDA FTM Command buffer alloc fail");
11765 return VOS_STATUS_E_NOMEM;
11766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11768 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011769 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 /* Send command to WDI */
11771 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 return status;
11773}
Jeff Johnsone7245742012-09-05 17:12:55 -070011774#ifdef FEATURE_OEM_DATA_SUPPORT
11775/*
11776 * FUNCTION: WDA_StartOemDataReqCallback
11777 *
11778 */
11779void WDA_StartOemDataReqCallback(
11780 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11781 void* pUserData)
11782{
11783 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011785 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011786 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787
Jeff Johnsone7245742012-09-05 17:12:55 -070011788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011789 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011790
11791 if(NULL == pWdaParams)
11792 {
11793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011794 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011795 VOS_ASSERT(0) ;
11796 return ;
11797 }
11798 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11799
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011800 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011801 {
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011803 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011804 VOS_ASSERT(0);
11805 return ;
11806 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011807
Jeff Johnsone7245742012-09-05 17:12:55 -070011808 /*
11809 * Allocate memory for response params sent to PE
11810 */
11811 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11812
11813 // Check if memory is allocated for OemdataMeasRsp Params.
11814 if(NULL == pOemDataRspParams)
11815 {
11816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11817 "OEM DATA WDA callback alloc fail");
11818 VOS_ASSERT(0) ;
11819 return;
11820 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011821
Jeff Johnsone7245742012-09-05 17:12:55 -070011822 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11824 vos_mem_free(pWdaParams->wdaMsgParam);
11825 vos_mem_free(pWdaParams) ;
11826
Jeff Johnsone7245742012-09-05 17:12:55 -070011827 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011828 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011829 * Also, here success always means that we have atleast one BSSID.
11830 */
11831 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11832
11833 //enable Tx
11834 status = WDA_ResumeDataTx(pWDA);
11835 if(status != VOS_STATUS_SUCCESS)
11836 {
11837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11838 }
11839 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11840 return ;
11841}
11842/*
11843 * FUNCTION: WDA_ProcessStartOemDataReq
11844 * Send Start Oem Data Req to WDI
11845 */
11846VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11847 tStartOemDataReq *pOemDataReqParams)
11848{
11849 WDI_Status status = WDI_STATUS_SUCCESS;
11850 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011851 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011852
11853 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11854
11855 if(NULL == wdiOemDataReqParams)
11856 {
11857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011859 VOS_ASSERT(0);
11860 return VOS_STATUS_E_NOMEM;
11861 }
11862
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011863 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11864 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11865 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11866 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011867
11868 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11869
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011870 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11871 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011872 {
11873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011875 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011876 vos_mem_free(pOemDataReqParams);
11877 VOS_ASSERT(0);
11878 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011879 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011880
Bernald44a1ae2013-01-09 08:30:39 -080011881 pWdaParams->pWdaContext = (void*)pWDA;
11882 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11883 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011884
11885 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11886 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011887
11888 if(IS_WDI_STATUS_FAILURE(status))
11889 {
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11891 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11893 vos_mem_free(pWdaParams->wdaMsgParam);
11894 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011895 }
11896 return CONVERT_WDI2VOS_STATUS(status) ;
11897}
11898#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011899/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011900 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 *
11902 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011903void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011904{
11905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 if(NULL == pWdaParams)
11909 {
11910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 VOS_ASSERT(0) ;
11913 return ;
11914 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011915
11916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11917 vos_mem_free(pWdaParams->wdaMsgParam);
11918 vos_mem_free(pWdaParams);
11919
11920 return ;
11921}
11922/*
11923 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11924 * Free memory.
11925 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11926 */
11927void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11928{
11929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11930
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11932 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11933
11934 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011935 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11937 "%s: pWdaParams received NULL", __func__);
11938 VOS_ASSERT(0);
11939 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011941
11942 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011943 {
11944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011945 vos_mem_free(pWdaParams->wdaMsgParam);
11946 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011948
11949 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011950}
Jeff Johnson295189b2012-06-20 16:38:30 -070011951#ifdef WLAN_FEATURE_GTK_OFFLOAD
11952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011953 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 *
11955 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011956void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011957 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011958{
11959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11960
11961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011962 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011963 if(NULL == pWdaParams)
11964 {
11965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11966 "%s: pWdaParams received NULL", __func__);
11967 VOS_ASSERT(0);
11968 return;
11969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011970
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 vos_mem_free(pWdaParams->wdaMsgParam) ;
11972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11973 vos_mem_free(pWdaParams) ;
11974
11975 //print a msg, nothing else to do
11976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011977 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011978
11979 return ;
11980}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011981/*
11982 * FUNCTION: WDA_GTKOffloadReqCallback
11983 * Free memory.
11984 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11985 */
11986void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11987{
11988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011989
Yue Ma7f44bbe2013-04-12 11:47:39 -070011990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11991 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11992
11993 if(NULL == pWdaParams)
11994 {
11995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11996 "%s: pWdaParams received NULL", __func__);
11997 VOS_ASSERT(0);
11998 return;
11999 }
12000
12001 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12002 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012003 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12004 sizeof(WDI_GtkOffloadReqMsg));
12005 vos_mem_zero(pWdaParams->wdaMsgParam,
12006 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12008 vos_mem_free(pWdaParams->wdaMsgParam);
12009 vos_mem_free(pWdaParams);
12010 }
12011
12012 return;
12013}
Jeff Johnson295189b2012-06-20 16:38:30 -070012014/*
12015 * FUNCTION: WDA_ProcessGTKOffloadReq
12016 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12017 * to broadcast traffic (sta mode).
12018 */
12019VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12020 tpSirGtkOffloadParams pGtkOffloadParams)
12021{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012022 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012023 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12024 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12025 sizeof(WDI_GtkOffloadReqMsg)) ;
12026 tWDA_ReqParams *pWdaParams ;
12027
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012030
12031 if(NULL == wdiGtkOffloadReqMsg)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 VOS_ASSERT(0);
12036 return VOS_STATUS_E_NOMEM;
12037 }
12038
12039 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12040 if(NULL == pWdaParams)
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 VOS_ASSERT(0);
12045 vos_mem_free(wdiGtkOffloadReqMsg);
12046 return VOS_STATUS_E_NOMEM;
12047 }
12048
12049 //
12050 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12051 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012052
12053 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012054 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012055
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12057 // Copy KCK
12058 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12059 // Copy KEK
12060 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12061 // Copy KeyReplayCounter
12062 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12063 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12064
Yue Ma7f44bbe2013-04-12 11:47:39 -070012065 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12066 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012067
Jeff Johnson295189b2012-06-20 16:38:30 -070012068
12069 /* Store Params pass it to WDI */
12070 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12071 pWdaParams->pWdaContext = pWDA;
12072 /* Store param pointer as passed in by caller */
12073 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12074
Yue Ma7f44bbe2013-04-12 11:47:39 -070012075 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012076
12077 if(IS_WDI_STATUS_FAILURE(status))
12078 {
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12080 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012081 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12082 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12084 vos_mem_free(pWdaParams->wdaMsgParam);
12085 vos_mem_free(pWdaParams);
12086 }
12087
12088 return CONVERT_WDI2VOS_STATUS(status) ;
12089}
12090
12091/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012092 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 *
12094 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012095void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012096 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012097{
12098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12099 tWDA_CbContext *pWDA;
12100 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012101 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 vos_msg_t vosMsg;
12103
12104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012105 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012106
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012107 if(NULL == pWdaParams)
12108 {
12109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12110 "%s: pWdaParams received NULL", __func__);
12111 VOS_ASSERT(0);
12112 return;
12113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012114
Nirav Shah374de6e2014-02-13 16:40:01 +053012115 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12116 if(NULL == pGtkOffloadGetInfoRsp)
12117 {
12118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12119 "%s: vos_mem_malloc failed ", __func__);
12120 VOS_ASSERT(0);
12121 return;
12122 }
12123
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12125 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12126
12127 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12128 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12129
12130 /* Message Header */
12131 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012132 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012133
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012134 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12135 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12136 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12137 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12138 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012139
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012140 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12141 pwdiGtkOffloadGetInfoRsparams->bssId,
12142 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012143 /* VOS message wrapper */
12144 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12145 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12146 vosMsg.bodyval = 0;
12147
12148 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12149 {
12150 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012151 vos_mem_zero(pGtkOffloadGetInfoRsp,
12152 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12154 }
12155
12156 vos_mem_free(pWdaParams->wdaMsgParam) ;
12157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12158 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012159
12160 return;
12161}
12162/*
12163 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12164 * Free memory and send RSP back to SME.
12165 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12166 */
12167void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12168{
12169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12170 vos_msg_t vosMsg;
12171
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12173 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12174
12175 if(NULL == pWdaParams)
12176 {
12177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12178 "%s: pWdaParams received NULL", __func__);
12179 VOS_ASSERT(0);
12180 return;
12181 }
12182
12183 /* VOS message wrapper */
12184 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12185 vosMsg.bodyptr = NULL;
12186 vosMsg.bodyval = 0;
12187
12188 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12189 {
12190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12191 vos_mem_free(pWdaParams->wdaMsgParam);
12192 vos_mem_free(pWdaParams);
12193 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12194 }
12195
12196 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012197}
12198#endif
12199
12200/*
12201 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12202 * Request to WDI to set Tx Per Tracking configurations
12203 */
12204VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12205{
12206 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012207 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012208 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12209 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12210 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12211 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012214 if(NULL == pwdiSetTxPerTrackingReqParams)
12215 {
12216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 vos_mem_free(pTxPerTrackingParams);
12219 VOS_ASSERT(0);
12220 return VOS_STATUS_E_NOMEM;
12221 }
12222 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12223 if(NULL == pWdaParams)
12224 {
12225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012227 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12228 vos_mem_free(pTxPerTrackingParams);
12229 VOS_ASSERT(0);
12230 return VOS_STATUS_E_NOMEM;
12231 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012232 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12233 pTxPerTrackingParams->ucTxPerTrackingEnable;
12234 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12235 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12236 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12237 pTxPerTrackingParams->ucTxPerTrackingRatio;
12238 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12239 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012240 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12241 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 /* Store param pointer as passed in by caller */
12243 /* store Params pass it to WDI
12244 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12245 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12246 pWdaParams->pWdaContext = pWDA;
12247 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012248 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012249 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012250 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012251 {
12252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12253 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012254 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012255 vos_mem_free(pWdaParams->wdaMsgParam) ;
12256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12257 vos_mem_free(pWdaParams) ;
12258 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012259 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012260
12261}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012262/*
12263 * FUNCTION: WDA_HALDumpCmdCallback
12264 * Send the VOS complete .
12265 */
12266void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12267 void* pUserData)
12268{
12269 tANI_U8 *buffer = NULL;
12270 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012271 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012272 if(NULL == pWdaParams)
12273 {
12274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012276 VOS_ASSERT(0) ;
12277 return ;
12278 }
12279
12280 pWDA = pWdaParams->pWdaContext;
12281 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 if(wdiRspParams->usBufferLen > 0)
12283 {
12284 /*Copy the Resp data to UMAC supplied buffer*/
12285 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12286 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012287
12288 if (!pWdaParams->wdaHALDumpAsync)
12289 {/* Indicate VOSS about the start complete */
12290 vos_WDAComplete_cback(pWDA->pVosContext);
12291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12293 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 return ;
12295}
12296
Jeff Johnson295189b2012-06-20 16:38:30 -070012297/*
12298 * FUNCTION: WDA_ProcessHALDumpCmdReq
12299 * Send Dump command to WDI
12300 */
12301VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12302 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012303 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012304{
12305 WDI_Status status = WDI_STATUS_SUCCESS;
12306 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12307 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012308 tWDA_HalDumpReqParams *pWdaParams ;
12309
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 pVosContextType pVosContext = NULL;
12311 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012312 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12313 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012314 if(pVosContext)
12315 {
12316 if (pVosContext->isLogpInProgress)
12317 {
12318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12319 "%s:LOGP in Progress. Ignore!!!", __func__);
12320 return VOS_STATUS_E_BUSY;
12321 }
12322 }
12323 else
12324 {
12325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12326 "%s: VOS Context Null", __func__);
12327 return VOS_STATUS_E_RESOURCES;
12328 }
12329
Siddharth Bhal68115602015-01-18 20:44:55 +053012330 if (NULL == pVosContext->pWDAContext)
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12333 "%s: WDA Context Null", __func__);
12334 return VOS_STATUS_E_RESOURCES;
12335 }
12336 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 if(NULL == pWdaParams)
12338 {
12339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 return VOS_STATUS_E_NOMEM;
12342 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012343 /* Allocate memory WDI request structure*/
12344 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12345 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12346 if(NULL == wdiHALDumpCmdReqParam)
12347 {
12348 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12349 "WDA HAL DUMP Command buffer alloc fail");
12350 vos_mem_free(pWdaParams);
12351 return WDI_STATUS_E_FAILURE;
12352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 /* Extract the arguments */
12355 wdiHalDumpCmdInfo->command = cmd;
12356 wdiHalDumpCmdInfo->argument1 = arg1;
12357 wdiHalDumpCmdInfo->argument2 = arg2;
12358 wdiHalDumpCmdInfo->argument3 = arg3;
12359 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012362 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012363
12364 /* Response message will be passed through the buffer */
12365 pWdaParams->wdaMsgParam = (void *)pBuffer;
12366
12367 /* store Params pass it to WDI */
12368 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012370 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12371 pWdaParams);
12372 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12373 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012374 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012375 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12376 WDA_DUMPCMD_WAIT_TIMEOUT );
12377 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012378 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012379 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12380 {
12381 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12382 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12383 }
12384 else
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12387 "%s: WDA_HALDUMP reporting other error",__func__);
12388 }
12389 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 }
12392 return status;
12393}
Jeff Johnson295189b2012-06-20 16:38:30 -070012394#ifdef WLAN_FEATURE_GTK_OFFLOAD
12395/*
12396 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12397 * Request to WDI to get GTK Offload Information
12398 */
12399VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12400 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12401{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012402 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012403 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12404 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12405 tWDA_ReqParams *pWdaParams ;
12406
12407 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12408 {
12409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012411 VOS_ASSERT(0);
12412 return VOS_STATUS_E_NOMEM;
12413 }
12414
12415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12416 if(NULL == pWdaParams)
12417 {
12418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 VOS_ASSERT(0);
12421 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12422 return VOS_STATUS_E_NOMEM;
12423 }
12424
Yue Ma7f44bbe2013-04-12 11:47:39 -070012425 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12426 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012427
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 /* Store Params pass it to WDI */
12429 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12430 pWdaParams->pWdaContext = pWDA;
12431 /* Store param pointer as passed in by caller */
12432 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12433
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012434 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012435 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012436
Yue Ma7f44bbe2013-04-12 11:47:39 -070012437 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012438
12439 if(IS_WDI_STATUS_FAILURE(status))
12440 {
12441 /* failure returned by WDI API */
12442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12443 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12445 vos_mem_free(pWdaParams) ;
12446 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12447 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12448 }
12449
12450 return CONVERT_WDI2VOS_STATUS(status) ;
12451}
12452#endif // WLAN_FEATURE_GTK_OFFLOAD
12453
12454/*
Yue Mab9c86f42013-08-14 15:59:08 -070012455 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12456 *
12457 */
12458VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12459 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12460{
12461 WDI_Status wdiStatus;
12462 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12463
12464 addPeriodicTxPtrnParams =
12465 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12466
12467 if (NULL == addPeriodicTxPtrnParams)
12468 {
12469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12470 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12471 __func__);
12472
12473 return VOS_STATUS_E_NOMEM;
12474 }
12475
12476 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12477 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12478
12479 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12480 addPeriodicTxPtrnParams->pUserData = pWDA;
12481
12482 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12483
12484 if (WDI_STATUS_PENDING == wdiStatus)
12485 {
12486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12487 "Pending received for %s:%d", __func__, __LINE__ );
12488 }
12489 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12490 {
12491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12492 "Failure in %s:%d", __func__, __LINE__ );
12493 }
12494
12495 vos_mem_free(addPeriodicTxPtrnParams);
12496
12497 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12498}
12499
12500/*
12501 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12502 *
12503 */
12504VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12505 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12506{
12507 WDI_Status wdiStatus;
12508 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12509
12510 delPeriodicTxPtrnParams =
12511 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12512
12513 if (NULL == delPeriodicTxPtrnParams)
12514 {
12515 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12516 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12517 __func__);
12518
12519 return VOS_STATUS_E_NOMEM;
12520 }
12521
12522 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12523 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12524
12525 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12526 delPeriodicTxPtrnParams->pUserData = pWDA;
12527
12528 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12529
12530 if (WDI_STATUS_PENDING == wdiStatus)
12531 {
12532 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12533 "Pending received for %s:%d", __func__, __LINE__ );
12534 }
12535 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12536 {
12537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12538 "Failure in %s:%d", __func__, __LINE__ );
12539 }
12540
12541 vos_mem_free(delPeriodicTxPtrnParams);
12542
12543 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12544}
12545
Rajeev79dbe4c2013-10-05 11:03:42 +053012546#ifdef FEATURE_WLAN_BATCH_SCAN
12547/*
12548 * FUNCTION: WDA_ProcessStopBatchScanInd
12549 *
12550 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12551 *
12552 * PARAM:
12553 * pWDA: pointer to WDA context
12554 * pReq: pointer to stop batch scan request
12555 */
12556VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12557 tSirStopBatchScanInd *pReq)
12558{
12559 WDI_Status wdiStatus;
12560 WDI_StopBatchScanIndType wdiReq;
12561
12562 wdiReq.param = pReq->param;
12563
12564 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12565
12566 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12567 {
12568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12569 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12570 }
12571
12572 vos_mem_free(pReq);
12573
12574 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12575}
12576/*==========================================================================
12577 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12578
12579 DESCRIPTION
12580 API to pull batch scan result from FW
12581
12582 PARAMETERS
12583 pWDA: Pointer to WDA context
12584 pGetBatchScanReq: Pointer to get batch scan result indication
12585
12586 RETURN VALUE
12587 NONE
12588
12589===========================================================================*/
12590VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12591 tSirTriggerBatchScanResultInd *pReq)
12592{
12593 WDI_Status wdiStatus;
12594 WDI_TriggerBatchScanResultIndType wdiReq;
12595
12596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12597 "------> %s " ,__func__);
12598
12599 wdiReq.param = pReq->param;
12600
12601 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12602
12603 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12604 {
12605 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12606 "Trigger batch scan result ind failed %s:%d",
12607 __func__, wdiStatus);
12608 }
12609
12610 vos_mem_free(pReq);
12611
12612 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12613}
12614
12615/*==========================================================================
12616 FUNCTION WDA_SetBatchScanRespCallback
12617
12618 DESCRIPTION
12619 API to process set batch scan response from FW
12620
12621 PARAMETERS
12622 pRsp: Pointer to set batch scan response
12623 pUserData: Pointer to user data
12624
12625 RETURN VALUE
12626 NONE
12627
12628===========================================================================*/
12629void WDA_SetBatchScanRespCallback
12630(
12631 WDI_SetBatchScanRspType *pRsp,
12632 void* pUserData
12633)
12634{
12635 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12636 tpAniSirGlobal pMac;
12637 void *pCallbackContext;
12638 tWDA_CbContext *pWDA = NULL ;
12639 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12640
12641
12642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12643 "<------ %s " ,__func__);
12644 if (NULL == pWdaParams)
12645 {
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12647 "%s: pWdaParams received NULL", __func__);
12648 VOS_ASSERT(0) ;
12649 return ;
12650 }
12651
12652 /*extract WDA context*/
12653 pWDA = pWdaParams->pWdaContext;
12654 if (NULL == pWDA)
12655 {
12656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12657 "%s:pWDA is NULL can't invole HDD callback",
12658 __func__);
12659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12660 vos_mem_free(pWdaParams->wdaMsgParam);
12661 vos_mem_free(pWdaParams);
12662 VOS_ASSERT(0);
12663 return;
12664 }
12665
12666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12667 vos_mem_free(pWdaParams->wdaMsgParam);
12668 vos_mem_free(pWdaParams);
12669
12670 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12671 if (NULL == pMac)
12672 {
12673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12674 "%s:pMac is NULL", __func__);
12675 VOS_ASSERT(0);
12676 return;
12677 }
12678
12679 pHddSetBatchScanRsp =
12680 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12681 if (NULL == pHddSetBatchScanRsp)
12682 {
12683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12684 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12685 VOS_ASSERT(0);
12686 return;
12687 }
12688
12689 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12690
12691 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12692 /*call hdd callback with set batch scan response data*/
12693 if(pMac->pmc.setBatchScanReqCallback)
12694 {
12695 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12696 }
12697 else
12698 {
12699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12700 "%s:HDD callback is null", __func__);
12701 VOS_ASSERT(0);
12702 }
12703
12704 vos_mem_free(pHddSetBatchScanRsp);
12705 return ;
12706}
12707
12708/*==========================================================================
12709 FUNCTION WDA_ProcessSetBatchScanReq
12710
12711 DESCRIPTION
12712 API to send set batch scan request to WDI
12713
12714 PARAMETERS
12715 pWDA: Pointer to WDA context
12716 pSetBatchScanReq: Pointer to set batch scan req
12717
12718 RETURN VALUE
12719 NONE
12720
12721===========================================================================*/
12722VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12723 tSirSetBatchScanReq *pSetBatchScanReq)
12724{
12725 WDI_Status status;
12726 tWDA_ReqParams *pWdaParams ;
12727 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12728
12729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12730 "------> %s " ,__func__);
12731
12732 pWdiSetBatchScanReq =
12733 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12734 if (NULL == pWdiSetBatchScanReq)
12735 {
12736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12737 "%s: VOS MEM Alloc Failure", __func__);
12738 vos_mem_free(pSetBatchScanReq);
12739 VOS_ASSERT(0);
12740 return VOS_STATUS_E_NOMEM;
12741 }
12742
12743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12744 if (NULL == pWdaParams)
12745 {
12746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12747 "%s: VOS MEM Alloc Failure", __func__);
12748 VOS_ASSERT(0);
12749 vos_mem_free(pSetBatchScanReq);
12750 vos_mem_free(pWdiSetBatchScanReq);
12751 return VOS_STATUS_E_NOMEM;
12752 }
12753
12754 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12755 pWdiSetBatchScanReq->numberOfScansToBatch =
12756 pSetBatchScanReq->numberOfScansToBatch;
12757 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12758 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12759 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12760
12761 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12762 pWdaParams->pWdaContext = pWDA;
12763 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12764
12765 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12766 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12767 if (IS_WDI_STATUS_FAILURE(status))
12768 {
12769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12770 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12772 vos_mem_free(pWdaParams->wdaMsgParam);
12773 vos_mem_free(pWdaParams);
12774 }
12775 return CONVERT_WDI2VOS_STATUS(status);
12776}
12777
12778#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012779/*
12780 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12781 *
12782 * DESCRIPTION: This function sends start/update OBSS scan
12783 * inidcation message to WDI
12784 *
12785 * PARAM:
12786 * pWDA: pointer to WDA context
12787 * pReq: pointer to start OBSS scan request
12788 */
12789VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12790 tSirHT40OBSSScanInd *pReq)
12791{
12792 WDI_Status status;
12793 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12794 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012795
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12797 "------> %s " ,__func__);
12798 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12799 wdiOBSSScanParams.pUserData = pWDA;
12800
12801 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12802 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12803 pWdiOBSSScanInd->scanType = pReq->scanType;
12804 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12805 pReq->OBSSScanActiveDwellTime;
12806 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12807 pReq->OBSSScanPassiveDwellTime;
12808 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12809 pReq->BSSChannelWidthTriggerScanInterval;
12810 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12811 pReq->BSSWidthChannelTransitionDelayFactor;
12812 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12813 pReq->OBSSScanActiveTotalPerChannel;
12814 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12815 pReq->OBSSScanPassiveTotalPerChannel;
12816 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12817 pReq->OBSSScanActivityThreshold;
12818 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12819 vos_mem_copy(pWdiOBSSScanInd->channels,
12820 pReq->channels,
12821 pReq->channelCount);
12822 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12823 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12824 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12825 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12826 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12827
12828 vos_mem_copy(pWdiOBSSScanInd->ieField,
12829 pReq->ieField,
12830 pReq->ieFieldLen);
12831
12832 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12833 if (WDI_STATUS_PENDING == status)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12836 "Pending received for %s:%d ",__func__,__LINE__ );
12837 }
12838 else if (WDI_STATUS_SUCCESS_SYNC != status)
12839 {
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12841 "Failure in %s:%d ",__func__,__LINE__ );
12842 }
12843 return CONVERT_WDI2VOS_STATUS(status) ;
12844}
12845/*
12846 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12847 *
12848 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12849 *
12850 * PARAM:
12851 * pWDA: pointer to WDA context
12852 * pReq: pointer to stop batch scan request
12853 */
12854VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12855 tANI_U8 *bssIdx)
12856{
12857 WDI_Status status;
12858
12859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12860 "------> %s " ,__func__);
12861
12862 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12863 if (WDI_STATUS_PENDING == status)
12864 {
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12866 "Pending received for %s:%d ",__func__,__LINE__ );
12867 }
12868 else if (WDI_STATUS_SUCCESS_SYNC != status)
12869 {
12870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12871 "Failure in %s:%d ",__func__,__LINE__ );
12872 }
12873 return CONVERT_WDI2VOS_STATUS(status) ;
12874}
Yue Mab9c86f42013-08-14 15:59:08 -070012875/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012876 * FUNCTION: WDA_ProcessRateUpdateInd
12877 *
12878 */
12879VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12880 tSirRateUpdateInd *pRateUpdateParams)
12881{
12882 WDI_Status wdiStatus;
12883 WDI_RateUpdateIndParams rateUpdateParams;
12884
12885 vos_mem_copy(rateUpdateParams.bssid,
12886 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12887
12888 rateUpdateParams.ucastDataRateTxFlag =
12889 pRateUpdateParams->ucastDataRateTxFlag;
12890 rateUpdateParams.reliableMcastDataRateTxFlag =
12891 pRateUpdateParams->reliableMcastDataRateTxFlag;
12892 rateUpdateParams.mcastDataRate24GHzTxFlag =
12893 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12894 rateUpdateParams.mcastDataRate5GHzTxFlag =
12895 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12896
12897 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12898 rateUpdateParams.reliableMcastDataRate =
12899 pRateUpdateParams->reliableMcastDataRate;
12900 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12901 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12902
12903 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12904 rateUpdateParams.pUserData = pWDA;
12905
12906 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12907
12908 if (WDI_STATUS_PENDING == wdiStatus)
12909 {
12910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12911 "Pending received for %s:%d", __func__, __LINE__ );
12912 }
12913 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12914 {
12915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12916 "Failure in %s:%d", __func__, __LINE__ );
12917 }
12918
12919 vos_mem_free(pRateUpdateParams);
12920
12921 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12922}
12923
12924/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012925 * -------------------------------------------------------------------------
12926 * DATA interface with WDI for Mgmt Frames
12927 * -------------------------------------------------------------------------
12928 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012929/*
12930 * FUNCTION: WDA_TxComplete
12931 * Callback function for the WDA_TxPacket
12932 */
12933VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12934 VOS_STATUS status )
12935{
12936
12937 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12938 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012939 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012940
Mihir Shete63341222015-03-24 15:39:18 +053012941 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12942
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 if(NULL == wdaContext)
12944 {
12945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12946 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012947 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012948 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012949 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 return VOS_STATUS_E_FAILURE;
12951 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012952
12953 /*Check if frame was timed out or not*/
12954 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12955 (v_PVOID_t)&uUserData);
12956
12957 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12958 {
12959 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012960 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12961 "%s: MGMT Frame Tx timed out",
12962 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012963 vos_pkt_return_packet(pData);
12964 return VOS_STATUS_SUCCESS;
12965 }
12966
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12968 if( NULL!=wdaContext->pTxCbFunc)
12969 {
12970 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012971 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 {
12973 wdaContext->pTxCbFunc(pMac, pData);
12974 }
12975 else
12976 {
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012978 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012979 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012980 //Return from here since we reaching here because the packet already timeout
12981 return status;
12982 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 }
12984
12985 /*
12986 * Trigger the event to bring the HAL TL Tx complete function to come
12987 * out of wait
12988 * Let the coe above to complete the packet first. When this event is set,
12989 * the thread waiting for the event may run and set Vospacket_freed causing the original
12990 * packet not being freed.
12991 */
12992 status = vos_event_set(&wdaContext->txFrameEvent);
12993 if(!VOS_IS_STATUS_SUCCESS(status))
12994 {
12995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012996 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 return status;
12999}
Jeff Johnson295189b2012-06-20 16:38:30 -070013000/*
13001 * FUNCTION: WDA_TxPacket
13002 * Forward TX management frame to WDI
13003 */
13004VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13005 void *pFrmBuf,
13006 tANI_U16 frmLen,
13007 eFrameType frmType,
13008 eFrameTxDir txDir,
13009 tANI_U8 tid,
13010 pWDATxRxCompFunc pCompFunc,
13011 void *pData,
13012 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013013 tANI_U32 txFlag,
13014 tANI_U32 txBdToken
13015 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013016{
13017 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13018 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13019 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13020 tANI_U8 eventIdx = 0;
13021 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13022 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013023 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013024
Jeff Johnson295189b2012-06-20 16:38:30 -070013025 if((NULL == pWDA)||(NULL == pFrmBuf))
13026 {
13027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013028 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013029 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013030 VOS_ASSERT(0);
13031 return VOS_STATUS_E_FAILURE;
13032 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013033
Jeff Johnson295189b2012-06-20 16:38:30 -070013034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013035 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13036 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13038 if(NULL == pMac)
13039 {
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013041 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 VOS_ASSERT(0);
13043 return VOS_STATUS_E_FAILURE;
13044 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013045
Jeff Johnson295189b2012-06-20 16:38:30 -070013046 /* store the call back function in WDA context */
13047 pWDA->pTxCbFunc = pCompFunc;
13048 /* store the call back for the function of ackTxComplete */
13049 if( pAckTxComp )
13050 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013051 if( NULL != pWDA->pAckTxCbFunc )
13052 {
13053 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013055 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013056 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013057 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013058
Jeff Johnsone7245742012-09-05 17:12:55 -070013059 if( VOS_STATUS_SUCCESS !=
13060 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13061 {
13062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13063 "Tx Complete timeout Timer Stop Failed ");
13064 }
13065 else
13066 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013068 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013069 }
13070 }
13071
13072 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13073 pWDA->pAckTxCbFunc = pAckTxComp;
13074 if( VOS_STATUS_SUCCESS !=
13075 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13076 {
13077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13078 "Tx Complete Timer Start Failed ");
13079 pWDA->pAckTxCbFunc = NULL;
13080 return eHAL_STATUS_FAILURE;
13081 }
13082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013083 /* Reset the event to be not signalled */
13084 status = vos_event_reset(&pWDA->txFrameEvent);
13085 if(!VOS_IS_STATUS_SUCCESS(status))
13086 {
13087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013088 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13090 if( pAckTxComp )
13091 {
13092 pWDA->pAckTxCbFunc = NULL;
13093 if( VOS_STATUS_SUCCESS !=
13094 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13095 {
13096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13097 "Tx Complete timeout Timer Stop Failed ");
13098 }
13099 }
13100 return VOS_STATUS_E_FAILURE;
13101 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013102
13103 /* If Peer Sta mask is set don't overwrite to self sta */
13104 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013105 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013106 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013107 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013108 else
13109 {
Ganesh K08bce952012-12-13 15:04:41 -080013110 /* Get system role, use the self station if in unknown role or STA role */
13111 systemRole = wdaGetGlobalSystemRole(pMac);
13112 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13113 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013114#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013115 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013116#endif
Ganesh K08bce952012-12-13 15:04:41 -080013117 ))
13118 {
13119 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13120 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013122
Jeff Johnsone7245742012-09-05 17:12:55 -070013123 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13124 disassoc frame reaches the HW, HAL has already deleted the peer station */
13125 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013126 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013127 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013128 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013129 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 /*Send Probe request frames on self sta idx*/
13131 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013133 /* Since we donot want probe responses to be retried, send probe responses
13134 through the NO_ACK queues */
13135 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13136 {
13137 //probe response is sent out using self station and no retries options.
13138 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13139 }
13140 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13141 {
13142 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13143 }
13144 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053013145#ifdef FEATURE_WLAN_TDLS
13146 /* TDLS Management frames are sent using Peer Sta mask */
13147 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
13148 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
13149 {
13150 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
13151
13152 }
13153#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013154 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013155
13156 /*Set frame tag to 0
13157 We will use the WDA user data in order to tag a frame as expired*/
13158 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13159 (v_PVOID_t)0);
13160
13161
13162 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013163 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13164 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 {
13166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013167 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013169 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 -070013170 if( pAckTxComp )
13171 {
13172 pWDA->pAckTxCbFunc = NULL;
13173 if( VOS_STATUS_SUCCESS !=
13174 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13175 {
13176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13177 "Tx Complete timeout Timer Stop Failed ");
13178 }
13179 }
13180 return VOS_STATUS_E_FAILURE;
13181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 /*
13183 * Wait for the event to be set by the TL, to get the response of TX
13184 * complete, this event should be set by the Callback function called by TL
13185 */
13186 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13187 &eventIdx);
13188 if(!VOS_IS_STATUS_SUCCESS(status))
13189 {
13190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13191 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013192 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013193
Mukul Sharma5a7553f2015-06-11 19:54:43 +053013194 VOS_BUG(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013195 /*Tag Frame as timed out for later deletion*/
13196 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13197 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13199 after the packet gets completed(packet freed once)*/
13200
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013201 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013202 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013203
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 /* check whether the packet was freed already,so need not free again when
13205 * TL calls the WDA_Txcomplete routine
13206 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013207 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13208 /*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 -070013209 {
13210 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013211 } */
13212
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 if( pAckTxComp )
13214 {
13215 pWDA->pAckTxCbFunc = NULL;
13216 if( VOS_STATUS_SUCCESS !=
13217 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13218 {
13219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13220 "Tx Complete timeout Timer Stop Failed ");
13221 }
13222 }
13223 status = VOS_STATUS_E_FAILURE;
13224 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013225#ifdef WLAN_DUMP_MGMTFRAMES
13226 if (VOS_IS_STATUS_SUCCESS(status))
13227 {
13228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13229 "%s() TX packet : SubType %d", __func__,pFc->subType);
13230 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13231 pData, frmLen);
13232 }
13233#endif
13234
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013235 if (VOS_IS_STATUS_SUCCESS(status))
13236 {
13237 if (pMac->fEnableDebugLog & 0x1)
13238 {
13239 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13240 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13241 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13242 {
13243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13244 pFc->type, pFc->subType);
13245 }
13246 }
13247 }
13248
13249
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 return status;
13251}
Jeff Johnson295189b2012-06-20 16:38:30 -070013252/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013253 * FUNCTION: WDA_ProcessDHCPStartInd
13254 * Forward DHCP Start to WDI
13255 */
13256static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13257 tAniDHCPInd *dhcpStartInd)
13258{
13259 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013260 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013261
c_hpothu0b0cab72014-02-13 21:52:40 +053013262 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13263 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013264 sizeof(tSirMacAddr));
13265
c_hpothu0b0cab72014-02-13 21:52:40 +053013266 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013267
c_hpothu0b0cab72014-02-13 21:52:40 +053013268 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013269 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13271 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013272 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013273 else if (WDI_STATUS_SUCCESS_SYNC != status)
13274 {
13275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13276 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13277 }
13278
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013279 vos_mem_free(dhcpStartInd);
13280 return CONVERT_WDI2VOS_STATUS(status) ;
13281}
13282
13283 /*
13284 * FUNCTION: WDA_ProcessDHCPStopInd
13285 * Forward DHCP Stop to WDI
13286 */
13287 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13288 tAniDHCPInd *dhcpStopInd)
13289 {
13290 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013291 WDI_DHCPInd wdiDHCPInd;
13292
13293 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13294 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13295
13296 status = WDI_dhcpStopInd(&wdiDHCPInd);
13297
13298 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013299 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13301 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013302 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013303 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013304 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13306 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013307 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013308
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013309 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013310
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013311 return CONVERT_WDI2VOS_STATUS(status) ;
13312 }
13313
13314/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013315 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13316 *
13317 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13318 *
13319 * PARAM:
13320 * pWDA: pointer to WDA context
13321 * pReq: pointer to stop batch scan request
13322 */
13323VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13324 tpSpoofMacAddrReqParams pReq)
13325{
13326 WDI_Status wdiStatus;
13327 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13328 tWDA_ReqParams *pWdaParams;
13329
13330 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13331 sizeof(WDI_SpoofMacAddrInfoType));
13332 if(NULL == WDI_SpoofMacAddrInfoParams) {
13333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13334 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13335 VOS_ASSERT(0);
13336 return VOS_STATUS_E_NOMEM;
13337 }
13338 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13339 if(NULL == pWdaParams) {
13340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13341 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013342 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013343 VOS_ASSERT(0);
13344 return VOS_STATUS_E_NOMEM;
13345 }
13346
13347 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13348 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13349
13350 pWdaParams->pWdaContext = pWDA;
13351 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013352 pWdaParams->wdaMsgParam = (void *)pReq;
13353
13354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13355 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13356
Siddharth Bhal171788a2014-09-29 21:02:40 +053013357 /* store Params pass it to WDI */
13358 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13359
13360 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013361 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13362 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013363
13364 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13365 {
13366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13367 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13369 vos_mem_free(pWdaParams->wdaMsgParam);
13370 vos_mem_free(pWdaParams);
13371 }
13372
13373 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13374}
13375
13376/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 * FUNCTION: WDA_McProcessMsg
13378 * Trigger DAL-AL to start CFG download
13379 */
13380VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13381{
13382 VOS_STATUS status = VOS_STATUS_SUCCESS;
13383 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013384 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013385 {
13386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013387 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 VOS_ASSERT(0);
13389 return VOS_STATUS_E_FAILURE;
13390 }
13391
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013393 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013394
13395 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13396 if(NULL == pWDA )
13397 {
13398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013399 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013401 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013402 return VOS_STATUS_E_FAILURE;
13403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013404 /* Process all the WDA messages.. */
13405 switch( pMsg->type )
13406 {
13407 case WNI_CFG_DNLD_REQ:
13408 {
13409 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013410 /* call WDA complete event if config download success */
13411 if( VOS_IS_STATUS_SUCCESS(status) )
13412 {
13413 vos_WDAComplete_cback(pVosContext);
13414 }
13415 else
13416 {
13417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13418 "WDA Config Download failure" );
13419 }
13420 break ;
13421 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013422 /*
13423 * Init SCAN request from PE, convert it into DAL format
13424 * and send it to DAL
13425 */
13426 case WDA_INIT_SCAN_REQ:
13427 {
13428 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13429 break ;
13430 }
13431 /* start SCAN request from PE */
13432 case WDA_START_SCAN_REQ:
13433 {
13434 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13435 break ;
13436 }
13437 /* end SCAN request from PE */
13438 case WDA_END_SCAN_REQ:
13439 {
13440 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13441 break ;
13442 }
13443 /* end SCAN request from PE */
13444 case WDA_FINISH_SCAN_REQ:
13445 {
13446 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13447 break ;
13448 }
13449 /* join request from PE */
13450 case WDA_CHNL_SWITCH_REQ:
13451 {
13452 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13453 {
13454 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13455 }
13456 else
13457 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013458 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13459 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13460 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13461 {
13462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13463 "call ProcessChannelSwitchReq_V1" );
13464 WDA_ProcessChannelSwitchReq_V1(pWDA,
13465 (tSwitchChannelParams*)pMsg->bodyptr) ;
13466 }
13467 else
13468 {
13469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13470 "call ProcessChannelSwitchReq" );
13471 WDA_ProcessChannelSwitchReq(pWDA,
13472 (tSwitchChannelParams*)pMsg->bodyptr) ;
13473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 }
13475 break ;
13476 }
13477 /* ADD BSS request from PE */
13478 case WDA_ADD_BSS_REQ:
13479 {
13480 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13481 break ;
13482 }
13483 case WDA_ADD_STA_REQ:
13484 {
13485 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13486 break ;
13487 }
13488 case WDA_DELETE_BSS_REQ:
13489 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13491 break ;
13492 }
13493 case WDA_DELETE_STA_REQ:
13494 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13496 break ;
13497 }
13498 case WDA_CONFIG_PARAM_UPDATE_REQ:
13499 {
13500 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13501 break ;
13502 }
13503 case WDA_SET_BSSKEY_REQ:
13504 {
13505 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13506 break ;
13507 }
13508 case WDA_SET_STAKEY_REQ:
13509 {
13510 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13511 break ;
13512 }
13513 case WDA_SET_STA_BCASTKEY_REQ:
13514 {
13515 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13516 break ;
13517 }
13518 case WDA_REMOVE_BSSKEY_REQ:
13519 {
13520 WDA_ProcessRemoveBssKeyReq(pWDA,
13521 (tRemoveBssKeyParams *)pMsg->bodyptr);
13522 break ;
13523 }
13524 case WDA_REMOVE_STAKEY_REQ:
13525 {
13526 WDA_ProcessRemoveStaKeyReq(pWDA,
13527 (tRemoveStaKeyParams *)pMsg->bodyptr);
13528 break ;
13529 }
13530 case WDA_REMOVE_STA_BCASTKEY_REQ:
13531 {
13532 /* TODO: currently UMAC is not sending this request, Add the code for
13533 handling this request when UMAC supports */
13534 break;
13535 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013536#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 case WDA_TSM_STATS_REQ:
13538 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013539 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 break;
13541 }
13542#endif
13543 case WDA_UPDATE_EDCA_PROFILE_IND:
13544 {
13545 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13546 break;
13547 }
13548 case WDA_ADD_TS_REQ:
13549 {
13550 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13551 break;
13552 }
13553 case WDA_DEL_TS_REQ:
13554 {
13555 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13556 break;
13557 }
13558 case WDA_ADDBA_REQ:
13559 {
13560 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13561 break;
13562 }
13563 case WDA_DELBA_IND:
13564 {
13565 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13566 break;
13567 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013568 case WDA_UPDATE_CHAN_LIST_REQ:
13569 {
13570 WDA_ProcessUpdateChannelList(pWDA,
13571 (tSirUpdateChanList *)pMsg->bodyptr);
13572 break;
13573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013574 case WDA_SET_LINK_STATE:
13575 {
13576 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13577 break;
13578 }
13579 case WDA_GET_STATISTICS_REQ:
13580 {
13581 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13582 break;
13583 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013584#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013585 case WDA_GET_ROAM_RSSI_REQ:
13586 {
13587 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13588 break;
13589 }
13590#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 case WDA_PWR_SAVE_CFG:
13592 {
13593 if(pWDA->wdaState == WDA_READY_STATE)
13594 {
13595 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13596 }
13597 else
13598 {
13599 if(NULL != pMsg->bodyptr)
13600 {
13601 vos_mem_free(pMsg->bodyptr);
13602 }
13603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13604 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13605 }
13606 break;
13607 }
13608 case WDA_ENTER_IMPS_REQ:
13609 {
13610 if(pWDA->wdaState == WDA_READY_STATE)
13611 {
13612 WDA_ProcessEnterImpsReq(pWDA);
13613 }
13614 else
13615 {
13616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13617 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13618 }
13619 break;
13620 }
13621 case WDA_EXIT_IMPS_REQ:
13622 {
13623 if(pWDA->wdaState == WDA_READY_STATE)
13624 {
13625 WDA_ProcessExitImpsReq(pWDA);
13626 }
13627 else
13628 {
13629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13630 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13631 }
13632 break;
13633 }
13634 case WDA_ENTER_BMPS_REQ:
13635 {
13636 if(pWDA->wdaState == WDA_READY_STATE)
13637 {
13638 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13639 }
13640 else
13641 {
13642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13643 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13644 }
13645 break;
13646 }
13647 case WDA_EXIT_BMPS_REQ:
13648 {
13649 if(pWDA->wdaState == WDA_READY_STATE)
13650 {
13651 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13652 }
13653 else
13654 {
13655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13656 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13657 }
13658 break;
13659 }
13660 case WDA_ENTER_UAPSD_REQ:
13661 {
13662 if(pWDA->wdaState == WDA_READY_STATE)
13663 {
13664 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13665 }
13666 else
13667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13669 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13670 }
13671 break;
13672 }
13673 case WDA_EXIT_UAPSD_REQ:
13674 {
13675 if(pWDA->wdaState == WDA_READY_STATE)
13676 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013677 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 }
13679 else
13680 {
13681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13682 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13683 }
13684 break;
13685 }
13686 case WDA_UPDATE_UAPSD_IND:
13687 {
13688 if(pWDA->wdaState == WDA_READY_STATE)
13689 {
13690 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13691 }
13692 else
13693 {
13694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13695 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13696 }
13697 break;
13698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013699 case WDA_REGISTER_PE_CALLBACK :
13700 {
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13702 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13703 /*TODO: store the PE callback */
13704 /* Do Nothing? MSG Body should be freed at here */
13705 if(NULL != pMsg->bodyptr)
13706 {
13707 vos_mem_free(pMsg->bodyptr);
13708 }
13709 break;
13710 }
13711 case WDA_SYS_READY_IND :
13712 {
13713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13714 "Handling msg type WDA_SYS_READY_IND " );
13715 pWDA->wdaState = WDA_READY_STATE;
13716 if(NULL != pMsg->bodyptr)
13717 {
13718 vos_mem_free(pMsg->bodyptr);
13719 }
13720 break;
13721 }
13722 case WDA_BEACON_FILTER_IND :
13723 {
13724 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13725 break;
13726 }
13727 case WDA_BTC_SET_CFG:
13728 {
13729 /*TODO: handle this while dealing with BTC */
13730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13731 "Handling msg type WDA_BTC_SET_CFG " );
13732 /* Do Nothing? MSG Body should be freed at here */
13733 if(NULL != pMsg->bodyptr)
13734 {
13735 vos_mem_free(pMsg->bodyptr);
13736 }
13737 break;
13738 }
13739 case WDA_SIGNAL_BT_EVENT:
13740 {
13741 /*TODO: handle this while dealing with BTC */
13742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13743 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13744 /* Do Nothing? MSG Body should be freed at here */
13745 if(NULL != pMsg->bodyptr)
13746 {
13747 vos_mem_free(pMsg->bodyptr);
13748 }
13749 break;
13750 }
13751 case WDA_CFG_RXP_FILTER_REQ:
13752 {
13753 WDA_ProcessConfigureRxpFilterReq(pWDA,
13754 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13755 break;
13756 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013757 case WDA_MGMT_LOGGING_INIT_REQ:
13758 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053013759 WDA_ProcessFWLoggingInitReq(pWDA,
13760 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013761 break;
13762 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013763 case WDA_GET_FRAME_LOG_REQ:
13764 {
13765 WDA_ProcessGetFrameLogReq(pWDA,
13766 (tAniGetFrameLogReq *)pMsg->bodyptr);
13767 break;
13768 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013769 case WDA_SET_HOST_OFFLOAD:
13770 {
13771 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13772 break;
13773 }
13774 case WDA_SET_KEEP_ALIVE:
13775 {
13776 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13777 break;
13778 }
13779#ifdef WLAN_NS_OFFLOAD
13780 case WDA_SET_NS_OFFLOAD:
13781 {
13782 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13783 break;
13784 }
13785#endif //WLAN_NS_OFFLOAD
13786 case WDA_ADD_STA_SELF_REQ:
13787 {
13788 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13789 break;
13790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013791 case WDA_DEL_STA_SELF_REQ:
13792 {
13793 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13794 break;
13795 }
13796 case WDA_WOWL_ADD_BCAST_PTRN:
13797 {
13798 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13799 break;
13800 }
13801 case WDA_WOWL_DEL_BCAST_PTRN:
13802 {
13803 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13804 break;
13805 }
13806 case WDA_WOWL_ENTER_REQ:
13807 {
13808 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13809 break;
13810 }
13811 case WDA_WOWL_EXIT_REQ:
13812 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013813 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013814 break;
13815 }
13816 case WDA_TL_FLUSH_AC_REQ:
13817 {
13818 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13819 break;
13820 }
13821 case WDA_SIGNAL_BTAMP_EVENT:
13822 {
13823 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13824 break;
13825 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013826 case WDA_FW_STATS_GET_REQ:
13827 {
13828 WDA_ProcessFWStatsGetReq(pWDA,
13829 (tSirFWStatsGetReq *)pMsg->bodyptr);
13830 break;
13831 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013832#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13833 case WDA_LINK_LAYER_STATS_SET_REQ:
13834 {
13835 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13836 break;
13837 }
13838 case WDA_LINK_LAYER_STATS_GET_REQ:
13839 {
13840 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13841 break;
13842 }
13843 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13844 {
13845 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13846 break;
13847 }
13848#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013849#ifdef WLAN_FEATURE_EXTSCAN
13850 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13851 {
13852 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13853 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13854 break;
13855 }
13856 case WDA_EXTSCAN_START_REQ:
13857 {
13858 WDA_ProcessEXTScanStartReq(pWDA,
13859 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13860 break;
13861 }
13862 case WDA_EXTSCAN_STOP_REQ:
13863 {
13864 WDA_ProcessEXTScanStopReq(pWDA,
13865 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13866 break;
13867 }
13868 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13869 {
13870 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13871 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13872 break;
13873 }
13874 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13875 {
13876 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13877 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13878 break;
13879 }
13880 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13881 {
13882 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13883 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13884 break;
13885 }
13886 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13887 {
13888 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13889 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13890 break;
13891 }
13892 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13893 {
13894 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13895 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13896 break;
13897 }
13898#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013899#ifdef WDA_UT
13900 case WDA_WDI_EVENT_MSG:
13901 {
13902 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13903 break ;
13904 }
13905#endif
13906 case WDA_UPDATE_BEACON_IND:
13907 {
13908 WDA_ProcessUpdateBeaconParams(pWDA,
13909 (tUpdateBeaconParams *)pMsg->bodyptr);
13910 break;
13911 }
13912 case WDA_SEND_BEACON_REQ:
13913 {
13914 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13915 break;
13916 }
13917 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13918 {
13919 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13920 (tSendProbeRespParams *)pMsg->bodyptr);
13921 break;
13922 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013923#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013924 case WDA_SET_MAX_TX_POWER_REQ:
13925 {
13926 WDA_ProcessSetMaxTxPowerReq(pWDA,
13927 (tMaxTxPowerParams *)pMsg->bodyptr);
13928 break;
13929 }
13930#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013931 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13932 {
13933 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13934 pMsg->bodyptr);
13935 break;
13936 }
schang86c22c42013-03-13 18:41:24 -070013937 case WDA_SET_TX_POWER_REQ:
13938 {
13939 WDA_ProcessSetTxPowerReq(pWDA,
13940 (tSirSetTxPowerReq *)pMsg->bodyptr);
13941 break;
13942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 case WDA_SET_P2P_GO_NOA_REQ:
13944 {
13945 WDA_ProcessSetP2PGONOAReq(pWDA,
13946 (tP2pPsParams *)pMsg->bodyptr);
13947 break;
13948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013949 /* timer related messages */
13950 case WDA_TIMER_BA_ACTIVITY_REQ:
13951 {
13952 WDA_BaCheckActivity(pWDA) ;
13953 break ;
13954 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013955
13956 /* timer related messages */
13957 case WDA_TIMER_TRAFFIC_STATS_IND:
13958 {
13959 WDA_TimerTrafficStatsInd(pWDA);
13960 break;
13961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013962#ifdef WLAN_FEATURE_VOWIFI_11R
13963 case WDA_AGGR_QOS_REQ:
13964 {
13965 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13966 break;
13967 }
13968#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013969 case WDA_FTM_CMD_REQ:
13970 {
13971 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13972 break ;
13973 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013974#ifdef FEATURE_OEM_DATA_SUPPORT
13975 case WDA_START_OEM_DATA_REQ:
13976 {
13977 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13978 break;
13979 }
13980#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 /* Tx Complete Time out Indication */
13982 case WDA_TX_COMPLETE_TIMEOUT_IND:
13983 {
13984 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13985 break;
13986 }
13987 case WDA_WLAN_SUSPEND_IND:
13988 {
13989 WDA_ProcessWlanSuspendInd(pWDA,
13990 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13991 break;
13992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 case WDA_WLAN_RESUME_REQ:
13994 {
13995 WDA_ProcessWlanResumeReq(pWDA,
13996 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13997 break;
13998 }
13999
14000 case WDA_UPDATE_CF_IND:
14001 {
14002 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
14003 pMsg->bodyptr = NULL;
14004 break;
14005 }
14006#ifdef FEATURE_WLAN_SCAN_PNO
14007 case WDA_SET_PNO_REQ:
14008 {
14009 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
14010 break;
14011 }
14012 case WDA_UPDATE_SCAN_PARAMS_REQ:
14013 {
14014 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
14015 break;
14016 }
14017 case WDA_SET_RSSI_FILTER_REQ:
14018 {
14019 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
14020 break;
14021 }
14022#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014023#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014024 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014025 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014026 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014027 break;
14028 }
14029#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 case WDA_SET_TX_PER_TRACKING_REQ:
14031 {
14032 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
14033 break;
14034 }
14035
14036#ifdef WLAN_FEATURE_PACKET_FILTERING
14037 case WDA_8023_MULTICAST_LIST_REQ:
14038 {
14039 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
14040 break;
14041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014042 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
14043 {
14044 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
14045 break;
14046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
14048 {
14049 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
14050 break;
14051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014052 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
14053 {
14054 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
14055 break;
14056 }
14057#endif // WLAN_FEATURE_PACKET_FILTERING
14058
14059
14060 case WDA_TRANSMISSION_CONTROL_IND:
14061 {
14062 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
14063 break;
14064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014065 case WDA_SET_POWER_PARAMS_REQ:
14066 {
14067 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
14068 break;
14069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014070#ifdef WLAN_FEATURE_GTK_OFFLOAD
14071 case WDA_GTK_OFFLOAD_REQ:
14072 {
14073 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
14074 break;
14075 }
14076
14077 case WDA_GTK_OFFLOAD_GETINFO_REQ:
14078 {
14079 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14080 break;
14081 }
14082#endif //WLAN_FEATURE_GTK_OFFLOAD
14083
14084 case WDA_SET_TM_LEVEL_REQ:
14085 {
14086 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14087 break;
14088 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014089
Mohit Khanna4a70d262012-09-11 16:30:12 -070014090 case WDA_UPDATE_OP_MODE:
14091 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014092 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14093 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14094 {
14095 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14096 }
14097 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014098 {
14099 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14100 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14101 else
14102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014103 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014104 }
14105 else
14106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014107 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014108 break;
14109 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014110#ifdef WLAN_FEATURE_11W
14111 case WDA_EXCLUDE_UNENCRYPTED_IND:
14112 {
14113 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14114 break;
14115 }
14116#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014117#ifdef FEATURE_WLAN_TDLS
14118 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14119 {
14120 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14121 break;
14122 }
14123#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014124 case WDA_DHCP_START_IND:
14125 {
14126 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14127 break;
14128 }
14129 case WDA_DHCP_STOP_IND:
14130 {
14131 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14132 break;
14133 }
Leo Chang9056f462013-08-01 19:21:11 -070014134#ifdef FEATURE_WLAN_LPHB
14135 case WDA_LPHB_CONF_REQ:
14136 {
14137 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14138 break;
14139 }
14140#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014141 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14142 {
14143 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14144 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14145 break;
14146 }
14147 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14148 {
14149 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14150 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14151 break;
14152 }
14153
Rajeev79dbe4c2013-10-05 11:03:42 +053014154#ifdef FEATURE_WLAN_BATCH_SCAN
14155 case WDA_SET_BATCH_SCAN_REQ:
14156 {
14157 WDA_ProcessSetBatchScanReq(pWDA,
14158 (tSirSetBatchScanReq *)pMsg->bodyptr);
14159 break;
14160 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014161 case WDA_RATE_UPDATE_IND:
14162 {
14163 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14164 break;
14165 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014166 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14167 {
14168 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14169 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14170 break;
14171 }
14172 case WDA_STOP_BATCH_SCAN_IND:
14173 {
14174 WDA_ProcessStopBatchScanInd(pWDA,
14175 (tSirStopBatchScanInd *)pMsg->bodyptr);
14176 break;
14177 }
c_hpothu92367912014-05-01 15:18:17 +053014178 case WDA_GET_BCN_MISS_RATE_REQ:
14179 WDA_ProcessGetBcnMissRateReq(pWDA,
14180 (tSirBcnMissRateReq *)pMsg->bodyptr);
14181 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014182#endif
14183
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014184 case WDA_HT40_OBSS_SCAN_IND:
14185 {
14186 WDA_ProcessHT40OBSSScanInd(pWDA,
14187 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14188 break;
14189 }
14190 case WDA_HT40_OBSS_STOP_SCAN_IND:
14191 {
14192 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14193 (tANI_U8*)pMsg->bodyptr);
14194 break;
14195 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014196// tdlsoffchan
14197#ifdef FEATURE_WLAN_TDLS
14198 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14199 {
14200 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14201 break;
14202 }
14203#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014204 case WDA_SPOOF_MAC_ADDR_REQ:
14205 {
14206 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14207 break;
14208 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014209 case WDA_ENCRYPT_MSG_REQ:
14210 {
14211 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14212 break;
14213 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014214
14215 case WDA_NAN_REQUEST:
14216 {
14217 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14218 break;
14219 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014220 case WDA_SET_RTS_CTS_HTVHT:
14221 {
14222 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14223 break;
14224 }
Katya Nigamf0511f62015-05-05 16:40:57 +053014225
14226 case WDA_MON_START_REQ:
14227 {
14228 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
14229 break;
14230 }
14231 case WDA_MON_STOP_REQ:
14232 {
14233 WDA_ProcessMonStopReq(pWDA,NULL);
14234 break;
14235 }
14236
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 default:
14238 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014240 "No Handling for msg type %x in WDA "
14241 ,pMsg->type);
14242 /* Do Nothing? MSG Body should be freed at here */
14243 if(NULL != pMsg->bodyptr)
14244 {
14245 vos_mem_free(pMsg->bodyptr);
14246 }
14247 //WDA_VOS_ASSERT(0) ;
14248 }
14249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014250 return status ;
14251}
14252
Jeff Johnson295189b2012-06-20 16:38:30 -070014253/*
14254 * FUNCTION: WDA_LowLevelIndCallback
14255 * IND API callback from WDI, send Ind to PE
14256 */
14257void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14258 void* pUserData )
14259{
14260 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14261#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14262 tSirRSSINotification rssiNotification;
14263#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014264 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014265 {
14266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014267 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014268 VOS_ASSERT(0);
14269 return ;
14270 }
14271
14272 switch(wdiLowLevelInd->wdiIndicationType)
14273 {
14274 case WDI_RSSI_NOTIFICATION_IND:
14275 {
14276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14277 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014278#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14279 rssiNotification.bReserved =
14280 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14281 rssiNotification.bRssiThres1NegCross =
14282 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14283 rssiNotification.bRssiThres1PosCross =
14284 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14285 rssiNotification.bRssiThres2NegCross =
14286 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14287 rssiNotification.bRssiThres2PosCross =
14288 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14289 rssiNotification.bRssiThres3NegCross =
14290 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14291 rssiNotification.bRssiThres3PosCross =
14292 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014293 rssiNotification.avgRssi = (v_S7_t)
14294 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014295 WLANTL_BMPSRSSIRegionChangedNotification(
14296 pWDA->pVosContext,
14297 &rssiNotification);
14298#endif
14299 break ;
14300 }
14301 case WDI_MISSED_BEACON_IND:
14302 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014303 tpSirSmeMissedBeaconInd pMissBeacInd =
14304 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14306 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014307 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014308 if(NULL == pMissBeacInd)
14309 {
14310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "%s: VOS MEM Alloc Failure", __func__);
14312 break;
14313 }
14314 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14315 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14316 pMissBeacInd->bssIdx =
14317 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14318 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014319 break ;
14320 }
14321 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14322 {
14323 /* TODO: Decode Ind and send Ind to PE */
14324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14325 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14326 break ;
14327 }
14328
14329 case WDI_MIC_FAILURE_IND:
14330 {
14331 tpSirSmeMicFailureInd pMicInd =
14332 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14333
14334 if(NULL == pMicInd)
14335 {
14336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014337 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014338 break;
14339 }
14340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14341 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014342 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14343 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14344 vos_mem_copy(pMicInd->bssId,
14345 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14346 sizeof(tSirMacAddr));
14347 vos_mem_copy(pMicInd->info.srcMacAddr,
14348 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14349 sizeof(tSirMacAddr));
14350 vos_mem_copy(pMicInd->info.taMacAddr,
14351 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14352 sizeof(tSirMacAddr));
14353 vos_mem_copy(pMicInd->info.dstMacAddr,
14354 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14355 sizeof(tSirMacAddr));
14356 vos_mem_copy(pMicInd->info.rxMacAddr,
14357 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14358 sizeof(tSirMacAddr));
14359 pMicInd->info.multicast =
14360 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14361 pMicInd->info.keyId=
14362 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14363 pMicInd->info.IV1=
14364 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14365 vos_mem_copy(pMicInd->info.TSC,
14366 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14368 (void *)pMicInd , 0) ;
14369 break ;
14370 }
14371 case WDI_FATAL_ERROR_IND:
14372 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014373 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014374 /* TODO: Decode Ind and send Ind to PE */
14375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14376 "Received WDI_FATAL_ERROR_IND from WDI ");
14377 break ;
14378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014379 case WDI_DEL_STA_IND:
14380 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014381 tpDeleteStaContext pDelSTACtx =
14382 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14383
14384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14385 "Received WDI_DEL_STA_IND from WDI ");
14386 if(NULL == pDelSTACtx)
14387 {
14388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014390 break;
14391 }
14392 vos_mem_copy(pDelSTACtx->addr2,
14393 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14394 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014395 vos_mem_copy(pDelSTACtx->bssId,
14396 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14397 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014398 pDelSTACtx->assocId =
14399 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14400 pDelSTACtx->reasonCode =
14401 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14402 pDelSTACtx->staId =
14403 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014404 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14405 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014406 break ;
14407 }
14408 case WDI_COEX_IND:
14409 {
14410 tANI_U32 index;
14411 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014412 tSirSmeCoexInd *pSmeCoexInd;
14413
14414 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14415 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14416 {
14417 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14418 {
14419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14420 FL("Coex state: 0x%x coex feature: 0x%x"),
14421 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14422 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14423
14424 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14425 {
14426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14427 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14428 }
14429 }
14430 break;
14431 }
14432
14433 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014434 if(NULL == pSmeCoexInd)
14435 {
14436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014437 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 break;
14439 }
14440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14441 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014442 /* Message Header */
14443 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14444 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014445 /* Info from WDI Indication */
14446 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14447 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14448 {
14449 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 /* VOS message wrapper */
14452 vosMsg.type = eWNI_SME_COEX_IND;
14453 vosMsg.bodyptr = (void *)pSmeCoexInd;
14454 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014455 /* Send message to SME */
14456 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14457 {
14458 /* free the mem and return */
14459 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14460 }
14461 else
14462 {
14463 /* DEBUG */
14464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14465 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14466 pSmeCoexInd->coexIndType,
14467 pSmeCoexInd->coexIndData[0],
14468 pSmeCoexInd->coexIndData[1],
14469 pSmeCoexInd->coexIndData[2],
14470 pSmeCoexInd->coexIndData[3]);
14471 }
14472 break;
14473 }
14474 case WDI_TX_COMPLETE_IND:
14475 {
14476 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14477 /* Calling TxCompleteAck Indication from wda context*/
14478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14479 "Complete Indication received from HAL");
14480 if( pWDA->pAckTxCbFunc )
14481 {
14482 if( VOS_STATUS_SUCCESS !=
14483 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14484 {
14485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14486 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014487 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053014488 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014489 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14490 else
14491 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 pWDA->pAckTxCbFunc = NULL;
14493 }
14494 else
14495 {
14496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14497 "Tx Complete Indication is received after timeout ");
14498 }
14499 break;
14500 }
Viral Modid86bde22012-12-10 13:09:21 -080014501 case WDI_P2P_NOA_START_IND :
14502 {
14503 tSirP2PNoaStart *pP2pNoaStart =
14504 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14505
14506 if (NULL == pP2pNoaStart)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14509 "Memory allocation failure, "
14510 "WDI_P2P_NOA_START_IND not forwarded");
14511 break;
14512 }
14513 pP2pNoaStart->status =
14514 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14515 pP2pNoaStart->bssIdx =
14516 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14517 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14518 (void *)pP2pNoaStart , 0) ;
14519 break;
14520 }
14521
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014522#ifdef FEATURE_WLAN_TDLS
14523 case WDI_TDLS_IND :
14524 {
14525 tSirTdlsInd *pTdlsInd =
14526 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14527
14528 if (NULL == pTdlsInd)
14529 {
14530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14531 "Memory allocation failure, "
14532 "WDI_TDLS_IND not forwarded");
14533 break;
14534 }
14535 pTdlsInd->status =
14536 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14537 pTdlsInd->assocId =
14538 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14539 pTdlsInd->staIdx =
14540 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14541 pTdlsInd->reasonCode =
14542 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14543 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14544 (void *)pTdlsInd , 0) ;
14545 break;
14546 }
14547#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 case WDI_P2P_NOA_ATTR_IND :
14549 {
14550 tSirP2PNoaAttr *pP2pNoaAttr =
14551 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14553 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 if (NULL == pP2pNoaAttr)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14557 "Memory allocation failure, "
14558 "WDI_P2P_NOA_ATTR_IND not forwarded");
14559 break;
14560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014561 pP2pNoaAttr->index =
14562 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14563 pP2pNoaAttr->oppPsFlag =
14564 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14565 pP2pNoaAttr->ctWin =
14566 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14567
14568 pP2pNoaAttr->uNoa1IntervalCnt =
14569 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14570 pP2pNoaAttr->uNoa1Duration =
14571 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14572 pP2pNoaAttr->uNoa1Interval =
14573 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14574 pP2pNoaAttr->uNoa1StartTime =
14575 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 pP2pNoaAttr->uNoa2IntervalCnt =
14577 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14578 pP2pNoaAttr->uNoa2Duration =
14579 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14580 pP2pNoaAttr->uNoa2Interval =
14581 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14582 pP2pNoaAttr->uNoa2StartTime =
14583 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014584 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14585 (void *)pP2pNoaAttr , 0) ;
14586 break;
14587 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014588#ifdef FEATURE_WLAN_SCAN_PNO
14589 case WDI_PREF_NETWORK_FOUND_IND:
14590 {
14591 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014592 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14593 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14594 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14595 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14596
Jeff Johnson295189b2012-06-20 16:38:30 -070014597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14598 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 if (NULL == pPrefNetworkFoundInd)
14600 {
14601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14602 "Memory allocation failure, "
14603 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014604 if (NULL !=
14605 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14606 {
14607 wpalMemoryFree(
14608 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14609 );
14610 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 break;
14613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 /* Message Header */
14615 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014616 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014617
14618 /* Info from WDI Indication */
14619 pPrefNetworkFoundInd->ssId.length =
14620 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014621 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014622 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14623 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14624 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014625 if (NULL !=
14626 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14627 {
14628 pPrefNetworkFoundInd->frameLength =
14629 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14630 vos_mem_copy( pPrefNetworkFoundInd->data,
14631 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14632 pPrefNetworkFoundInd->frameLength);
14633 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14634 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14635 }
14636 else
14637 {
14638 pPrefNetworkFoundInd->frameLength = 0;
14639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014640 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014641 /* VOS message wrapper */
14642 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14643 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14644 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014645 /* Send message to SME */
14646 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14647 {
14648 /* free the mem and return */
14649 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14650 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 break;
14652 }
14653#endif // FEATURE_WLAN_SCAN_PNO
14654
14655#ifdef WLAN_WAKEUP_EVENTS
14656 case WDI_WAKE_REASON_IND:
14657 {
14658 vos_msg_t vosMsg;
14659 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14660 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14661 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14662
14663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014664 "[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 -070014665 wdiLowLevelInd->wdiIndicationType,
14666 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14667 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14668 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14669
14670 if (NULL == pWakeReasonInd)
14671 {
14672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14673 "Memory allocation failure, "
14674 "WDI_WAKE_REASON_IND not forwarded");
14675 break;
14676 }
14677
14678 vos_mem_zero(pWakeReasonInd, allocSize);
14679
14680 /* Message Header */
14681 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14682 pWakeReasonInd->mesgLen = allocSize;
14683
14684 /* Info from WDI Indication */
14685 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14686 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14687 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14688 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14689 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14690 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14691 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14692 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14693
14694 /* VOS message wrapper */
14695 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14696 vosMsg.bodyptr = (void *) pWakeReasonInd;
14697 vosMsg.bodyval = 0;
14698
14699 /* Send message to SME */
14700 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14701 {
14702 /* free the mem and return */
14703 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14704 }
14705
14706 break;
14707 }
14708#endif // WLAN_WAKEUP_EVENTS
14709
14710 case WDI_TX_PER_HIT_IND:
14711 {
14712 vos_msg_t vosMsg;
14713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14714 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14715 /* VOS message wrapper */
14716 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14717 vosMsg.bodyptr = NULL;
14718 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 /* Send message to SME */
14720 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14721 {
14722 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14723 }
14724 break;
14725 }
14726
Leo Chang9056f462013-08-01 19:21:11 -070014727#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014728 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014729 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014730 vos_msg_t vosMsg;
14731 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014732
Leo Changd9df8aa2013-09-26 13:32:26 -070014733 lphbInd =
14734 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14735 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014736 {
14737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "%s: LPHB IND buffer alloc Fail", __func__);
14739 return ;
14740 }
14741
Leo Changd9df8aa2013-09-26 13:32:26 -070014742 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014743 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014744 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014745 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014746 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014747 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14748
14749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014750 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014751 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14752
Leo Changd9df8aa2013-09-26 13:32:26 -070014753 vosMsg.type = eWNI_SME_LPHB_IND;
14754 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014755 vosMsg.bodyval = 0;
14756 /* Send message to SME */
14757 if (VOS_STATUS_SUCCESS !=
14758 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14759 {
14760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14761 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014762 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014763 }
14764 break;
14765 }
14766#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014767 case WDI_PERIODIC_TX_PTRN_FW_IND:
14768 {
14769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14770 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14771 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14772 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14773 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14774 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14775 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14776
14777 break;
14778 }
Leo Chang9056f462013-08-01 19:21:11 -070014779
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014780 case WDI_IBSS_PEER_INACTIVITY_IND:
14781 {
14782 tSirIbssPeerInactivityInd *pIbssInd =
14783 (tSirIbssPeerInactivityInd *)
14784 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14785
14786 if (NULL == pIbssInd)
14787 {
14788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14789 "Memory allocation failure, "
14790 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14791 break;
14792 }
14793
14794 pIbssInd->bssIdx =
14795 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14796 pIbssInd->staIdx =
14797 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14798 vos_mem_copy(pIbssInd->peerAddr,
14799 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14800 sizeof(tSirMacAddr));
14801 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14802 break;
14803 }
14804
Rajeev79dbe4c2013-10-05 11:03:42 +053014805#ifdef FEATURE_WLAN_BATCH_SCAN
14806 case WDI_BATCH_SCAN_RESULT_IND:
14807 {
14808 void *pBatchScanResult;
14809 void *pCallbackContext;
14810 tpAniSirGlobal pMac;
14811
14812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14813 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14814
14815 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014816 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014817 {
14818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14819 "%s:pWDA is NULL", __func__);
14820 VOS_ASSERT(0);
14821 return;
14822 }
14823
14824 pBatchScanResult =
14825 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14826 if (NULL == pBatchScanResult)
14827 {
14828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14829 "%s:Batch scan result from FW is null can't invoke HDD callback",
14830 __func__);
14831 VOS_ASSERT(0);
14832 return;
14833 }
14834
14835 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14836 if (NULL == pMac)
14837 {
14838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14839 "%s:pMac is NULL", __func__);
14840 VOS_ASSERT(0);
14841 return;
14842 }
14843
14844 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14845 /*call hdd callback with set batch scan response data*/
14846 if(pMac->pmc.batchScanResultCallback)
14847 {
14848 pMac->pmc.batchScanResultCallback(pCallbackContext,
14849 pBatchScanResult);
14850 }
14851 else
14852 {
14853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14854 "%s:HDD callback is null", __func__);
14855 VOS_ASSERT(0);
14856 }
14857 break;
14858 }
14859#endif
14860
Leo Chang0b0e45a2013-12-15 15:18:55 -080014861#ifdef FEATURE_WLAN_CH_AVOID
14862 case WDI_CH_AVOID_IND:
14863 {
14864 vos_msg_t vosMsg;
14865 tSirChAvoidIndType *chAvoidInd;
14866
14867 chAvoidInd =
14868 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14869 if (NULL == chAvoidInd)
14870 {
14871 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14872 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14873 return ;
14874 }
14875
14876 chAvoidInd->avoidRangeCount =
14877 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14878 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14879 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14880 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14881
14882 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14883 "%s : WDA CH avoid notification", __func__);
14884
14885 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14886 vosMsg.bodyptr = chAvoidInd;
14887 vosMsg.bodyval = 0;
14888 /* Send message to SME */
14889 if (VOS_STATUS_SUCCESS !=
14890 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14891 {
14892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14893 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14894 vos_mem_free(chAvoidInd);
14895 }
14896 break;
14897 }
14898#endif /* FEATURE_WLAN_CH_AVOID */
14899
Sunil Duttbd736ed2014-05-26 21:19:41 +053014900#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14901 case WDI_LL_STATS_RESULTS_IND:
14902 {
14903 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014904 tpAniSirGlobal pMac;
14905
14906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14907 "Received WDI_LL_STATS_RESULTS_IND from FW");
14908
14909 /*sanity check*/
14910 if (NULL == pWDA)
14911 {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14913 "%s:pWDA is NULL", __func__);
14914 VOS_ASSERT(0);
14915 return;
14916 }
14917
14918 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014919 (void *)wdiLowLevelInd->
14920 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014921 if (NULL == pLinkLayerStatsInd)
14922 {
14923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14924 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14925 __func__);
14926 VOS_ASSERT(0);
14927 return;
14928 }
14929
14930 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14931 if (NULL == pMac)
14932 {
14933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14934 "%s:pMac is NULL", __func__);
14935 VOS_ASSERT(0);
14936 return;
14937 }
14938
Dino Mycled3d50022014-07-07 12:58:25 +053014939 /* call hdd callback with Link Layer Statistics.
14940 * vdev_id/ifacId in link_stats_results will be
14941 * used to retrieve the correct HDD context
14942 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014943 if (pMac->sme.pLinkLayerStatsIndCallback)
14944 {
Dino Mycled3d50022014-07-07 12:58:25 +053014945 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014946 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014947 pLinkLayerStatsInd,
14948 wdiLowLevelInd->
14949 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014950 }
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_LINK_LAYER_STATS */
14959
Dino Mycle41bdc942014-06-10 11:30:24 +053014960#ifdef WLAN_FEATURE_EXTSCAN
14961 case WDI_EXTSCAN_PROGRESS_IND:
14962 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14963 case WDI_EXTSCAN_SCAN_RESULT_IND:
14964 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14965 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14966 {
14967 void *pEXTScanData;
14968 void *pCallbackContext;
14969 tpAniSirGlobal pMac;
14970 tANI_U16 indType;
14971
14972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14973 "Received WDI_EXTSCAN Indications from FW");
14974 /*sanity check*/
14975 if (NULL == pWDA)
14976 {
14977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14978 "%s:pWDA is NULL", __func__);
14979 VOS_ASSERT(0);
14980 return;
14981 }
14982 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14983 {
14984 indType = WDA_EXTSCAN_PROGRESS_IND;
14985
14986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14987 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14988 }
14989 if (wdiLowLevelInd->wdiIndicationType ==
14990 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14991 {
14992 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14993
14994 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14995 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14996 }
14997 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14998 {
14999 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
15000
15001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15002 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
15003 }
15004 if (wdiLowLevelInd->wdiIndicationType ==
15005 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
15006 {
15007 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
15008
15009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15010 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
15011 }
15012 if (wdiLowLevelInd->wdiIndicationType ==
15013 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
15014 {
15015 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
15016
15017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15018 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
15019 }
15020
15021 pEXTScanData =
15022 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
15023 if (NULL == pEXTScanData)
15024 {
15025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15026 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
15027 __func__);
15028 VOS_ASSERT(0);
15029 return;
15030 }
15031
15032 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15033 if (NULL == pMac)
15034 {
15035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15036 "%s:pMac is NULL", __func__);
15037 VOS_ASSERT(0);
15038 return;
15039 }
15040
15041 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
15042
15043 if(pMac->sme.pEXTScanIndCb)
15044 {
15045 pMac->sme.pEXTScanIndCb(pCallbackContext,
15046 indType,
15047 pEXTScanData);
15048 }
15049 else
15050 {
15051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15052 "%s:HDD callback is null", __func__);
15053 }
15054 break;
15055 }
15056#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053015057 case WDI_DEL_BA_IND:
15058 {
15059 tpBADeleteParams pDelBAInd =
15060 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
15061
15062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15063 "Received WDI_DEL_BA_IND from WDI ");
15064 if(NULL == pDelBAInd)
15065 {
15066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15067 "%s: VOS MEM Alloc Failure", __func__);
15068 break;
15069 }
15070 vos_mem_copy(pDelBAInd->peerMacAddr,
15071 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
15072 sizeof(tSirMacAddr));
15073 vos_mem_copy(pDelBAInd->bssId,
15074 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
15075 sizeof(tSirMacAddr));
15076 pDelBAInd->staIdx =
15077 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
15078 pDelBAInd->baTID =
15079 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
15080 pDelBAInd->baDirection =
15081 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
15082 pDelBAInd->reasonCode =
15083 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
15084
15085 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
15086 (void *)pDelBAInd , 0) ;
15087 break;
15088 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015089 case WDI_NAN_EVENT_IND:
15090 {
15091 vos_msg_t vosMsg;
15092 tpSirNanEvent pSirNanEvent = NULL;
15093
15094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15095 "Received WDI_NAN_EVENT");
15096
15097 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15098 - sizeof( pSirNanEvent->event_data)
15099 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15100
15101 if (NULL == pSirNanEvent)
15102 {
15103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15104 "%s: VOS MEM Alloc Failure", __func__);
15105 VOS_ASSERT(0) ;
15106 break;
15107 }
15108
15109 pSirNanEvent->event_data_len =
15110 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15111
15112 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15113 {
15114 vos_mem_copy( pSirNanEvent->event_data,
15115 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15116 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15117 }
15118
15119 /* VOS message wrapper */
15120 vosMsg.type = eWNI_SME_NAN_EVENT;
15121 vosMsg.bodyptr = pSirNanEvent;
15122 vosMsg.bodyval = 0;
15123
15124 /* Send message to SME */
15125 if (VOS_STATUS_SUCCESS
15126 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15127 {
15128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15129 "post eWNI_SME_NAN_EVENT to SME Failed");
15130 vos_mem_free(pSirNanEvent);
15131 }
15132 break;
15133 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015134
Jeff Johnson295189b2012-06-20 16:38:30 -070015135 default:
15136 {
15137 /* TODO error */
15138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15139 "Received UNKNOWN Indication from WDI ");
15140 }
15141 }
15142 return ;
15143}
15144
Jeff Johnson295189b2012-06-20 16:38:30 -070015145/*
15146 * BA related processing in WDA.
15147 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015148void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15149 void* pUserData)
15150{
15151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15152 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015153 if(NULL == pWdaParams)
15154 {
15155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015156 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015157 VOS_ASSERT(0) ;
15158 return ;
15159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015160 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015161 vos_mem_free(pWdaParams->wdaMsgParam) ;
15162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15163 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015166 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15167 {
15168 tANI_U8 i = 0 ;
15169 tBaActivityInd *baActivityInd = NULL ;
15170 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15171 tANI_U8 allocSize = sizeof(tBaActivityInd)
15172 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15173 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15174 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015175 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015176 if(NULL == baActivityInd)
15177 {
15178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015180 VOS_ASSERT(0) ;
15181 return;
15182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15184 sizeof(tSirMacAddr)) ;
15185 baActivityInd->baCandidateCnt = baCandidateCount ;
15186
15187 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15188 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15189
15190 for(i = 0 ; i < baCandidateCount ; i++)
15191 {
15192 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015193 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15194 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015195 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15196 {
15197 baCandidate->baInfo[tid].fBaEnable =
15198 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15199 baCandidate->baInfo[tid].startingSeqNum =
15200 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15201 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015202 wdiBaCandidate++ ;
15203 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015205 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15206 }
15207 else
15208 {
15209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15210 "BA Trigger RSP with Failure received ");
15211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015212 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015213}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015214
15215
15216/*
15217 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15218 * during MCC
15219 */
15220void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15221{
15222 wpt_uint32 enabled;
15223 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15224 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15225 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15226
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015227 if (NULL == pMac )
15228 {
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15230 "%s: Invoked with invalid MAC context ", __func__ );
15231 VOS_ASSERT(0);
15232 return;
15233 }
15234
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015235 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15236 != eSIR_SUCCESS)
15237 {
15238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15239 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15240 return;
15241 }
15242
15243 if(!enabled)
15244 {
15245 return;
15246 }
15247
15248 if(NULL == pWDA)
15249 {
15250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15251 "%s:WDA context is NULL", __func__);
15252 VOS_ASSERT(0);
15253 return;
15254 }
15255
15256 if(activate)
15257 {
15258 if( VOS_STATUS_SUCCESS !=
15259 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15260 {
15261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15262 "Traffic Stats Timer Start Failed ");
15263 return;
15264 }
15265 WDI_DS_ActivateTrafficStats();
15266 }
15267 else
15268 {
15269 WDI_DS_DeactivateTrafficStats();
15270 WDI_DS_ClearTrafficStats();
15271
15272 if( VOS_STATUS_SUCCESS !=
15273 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15274 {
15275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15276 "Traffic Stats Timer Stop Failed ");
15277 return;
15278 }
15279 }
15280}
15281
15282/*
15283 * Traffic Stats Timer handler
15284 */
15285void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15286{
15287 WDI_Status wdiStatus;
15288 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15289 WDI_TrafficStatsIndType trafficStatsIndParams;
15290 wpt_uint32 length, enabled;
15291 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15292
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015293 if (NULL == pMac )
15294 {
15295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15296 "%s: Invoked with invalid MAC context ", __func__ );
15297 VOS_ASSERT(0);
15298 return;
15299 }
15300
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015301 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15302 != eSIR_SUCCESS)
15303 {
15304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15305 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15306 return;
15307 }
15308
15309 if(!enabled)
15310 {
15311 WDI_DS_DeactivateTrafficStats();
15312 return;
15313 }
15314
15315 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15316
15317 if(pWdiTrafficStats != NULL)
15318 {
15319 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15320 trafficStatsIndParams.length = length;
15321 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015322 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015323 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15324 trafficStatsIndParams.pUserData = pWDA;
15325
15326 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15327
15328 if(WDI_STATUS_PENDING == wdiStatus)
15329 {
15330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15331 "Pending received for %s:%d ",__func__,__LINE__ );
15332 }
15333 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15334 {
15335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15336 "Failure in %s:%d ",__func__,__LINE__ );
15337 }
15338
15339 WDI_DS_ClearTrafficStats();
15340 }
15341 else
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15344 "pWdiTrafficStats is Null");
15345 }
15346
15347 if( VOS_STATUS_SUCCESS !=
15348 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15349 {
15350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15351 "Traffic Stats Timer Start Failed ");
15352 return;
15353 }
15354}
15355
Jeff Johnson295189b2012-06-20 16:38:30 -070015356/*
15357 * BA Activity check timer handler
15358 */
15359void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15360{
15361 tANI_U8 curSta = 0 ;
15362 tANI_U8 tid = 0 ;
15363 tANI_U8 size = 0 ;
15364 tANI_U8 baCandidateCount = 0 ;
15365 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015366 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015367 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015368 tpAniSirGlobal pMac;
15369
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015370 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015371 {
15372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015373 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015374 VOS_ASSERT(0);
15375 return ;
15376 }
15377 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15378 {
15379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15380 "Inconsistent STA entries in WDA");
15381 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015382 }
15383 if(NULL == pWDA->pVosContext)
15384 {
15385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15386 "%s: pVosContext is NULL",__func__);
15387 VOS_ASSERT(0);
15388 return ;
15389 }
15390 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015391 if(NULL == pMac)
15392 {
15393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15394 "%s: pMac is NULL",__func__);
15395 VOS_ASSERT(0);
15396 return ;
15397 }
15398
Abhishek Singh0644e482014-10-06 18:38:23 +053015399 if (wlan_cfgGetInt(pMac,
15400 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15401 eSIR_SUCCESS)
15402 {
15403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15404 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15405 val = 0;
15406 }
15407
Jeff Johnson295189b2012-06-20 16:38:30 -070015408 /* walk through all STA entries and find out TX packet count */
15409 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15410 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015411 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015412#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015413 // We can only do BA on "hard" STAs.
15414 if (!(IS_HWSTA_IDX(curSta)))
15415 {
15416 continue;
15417 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015418#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015419 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15420 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015421 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015422 tANI_U32 txPktCount = 0 ;
15423 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015424 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015425 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15426 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015427 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15428 curSta, tid, &txPktCount)))
15429 {
15430#if 0
15431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15432 "************* %d:%d, %d ",curSta, txPktCount,
15433 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15434#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015435 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15436 (currentOperChan <= SIR_11B_CHANNEL_END)))
15437 {
15438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15439 "%s: BTC disabled aggregation - dont start "
15440 "TX ADDBA req",__func__);
15441 }
15442 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015443 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015444 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15445 pWDA->wdaGlobalSystemRole) && txPktCount )
15446 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15447 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015448 {
15449 /* get prepare for sending message to HAL */
15450 //baCandidate[baCandidateCount].staIdx = curSta ;
15451 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15452 newBaCandidate = WDA_ENABLE_BA ;
15453 }
15454 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15455 }
15456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 /* fill the entry for all the sta with given TID's */
15458 if(WDA_ENABLE_BA == newBaCandidate)
15459 {
15460 /* move to next BA candidate */
15461 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15462 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15463 baCandidateCount++ ;
15464 newBaCandidate = WDA_DISABLE_BA ;
15465 }
15466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015467 /* prepare and send message to hal */
15468 if( 0 < baCandidateCount)
15469 {
15470 WDI_Status status = WDI_STATUS_SUCCESS ;
15471 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15472 tWDA_ReqParams *pWdaParams =
15473 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 if(NULL == pWdaParams)
15475 {
15476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015478 VOS_ASSERT(0) ;
15479 return;
15480 }
15481 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15482 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15483 if(NULL == wdiTriggerBaReq)
15484 {
15485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015487 VOS_ASSERT(0) ;
15488 vos_mem_free(pWdaParams);
15489 return;
15490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015491 do
15492 {
15493 WDI_TriggerBAReqinfoType *triggerBaInfo =
15494 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15495 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15496 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15497 * for each request */
15498 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15499 triggerBaInfo->ucBASessionID = 0;
15500 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15501 } while(0) ;
15502 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015505 pWdaParams->pWdaContext = pWDA;
15506 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15507 pWdaParams->wdaMsgParam = NULL;
15508 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15509 WDA_TriggerBaReqCallback, pWdaParams) ;
15510 if(IS_WDI_STATUS_FAILURE(status))
15511 {
15512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15513 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15514 vos_mem_free(pWdaParams->wdaMsgParam) ;
15515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15516 vos_mem_free(pWdaParams) ;
15517 }
15518 }
15519 else
15520 {
15521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15522 "There is no TID for initiating BA");
15523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015524 if( VOS_STATUS_SUCCESS !=
15525 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15526 {
15527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15528 "BA Activity Timer Stop Failed ");
15529 return ;
15530 }
15531 if( VOS_STATUS_SUCCESS !=
15532 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15535 "BA Activity Timer Start Failed ");
15536 return;
15537 }
15538 return ;
15539}
Jeff Johnson295189b2012-06-20 16:38:30 -070015540/*
15541 * WDA common routine to create timer used by WDA.
15542 */
15543static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15544{
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15546 tANI_U32 val = 0 ;
15547 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15548
15549 if(NULL == pMac)
15550 {
15551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015552 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015553 VOS_ASSERT(0);
15554 return VOS_STATUS_E_FAILURE;
15555 }
15556 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15557 != eSIR_SUCCESS)
15558 {
15559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15560 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15561 return VOS_STATUS_E_FAILURE;
15562 }
15563 val = SYS_MS_TO_TICKS(val) ;
15564
15565 /* BA activity check timer */
15566 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15567 "BA Activity Check timer", WDA_TimerHandler,
15568 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15569 if(status != TX_SUCCESS)
15570 {
15571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15572 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015573 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015576 /* Tx Complete Timeout timer */
15577 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15578 "Tx Complete Check timer", WDA_TimerHandler,
15579 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015580 if(status != TX_SUCCESS)
15581 {
15582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15583 "Unable to create Tx Complete Timeout timer");
15584 /* Destroy timer of BA activity check timer */
15585 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15586 if(status != TX_SUCCESS)
15587 {
15588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15589 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015590 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015592 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015593 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015594
15595 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15596
15597 /* Traffic Stats timer */
15598 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15599 "Traffic Stats timer", WDA_TimerHandler,
15600 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15601 if(status != TX_SUCCESS)
15602 {
15603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15604 "Unable to create traffic stats timer");
15605 /* Destroy timer of BA activity check timer */
15606 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15607 if(status != TX_SUCCESS)
15608 {
15609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15610 "Unable to Destroy BA activity timer");
15611 }
15612 /* Destroy timer of tx complete timer */
15613 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15614 if(status != TX_SUCCESS)
15615 {
15616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15617 "Unable to Tx complete timer");
15618 }
15619 return VOS_STATUS_E_FAILURE ;
15620 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015621 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015622}
Jeff Johnson295189b2012-06-20 16:38:30 -070015623/*
15624 * WDA common routine to destroy timer used by WDA.
15625 */
15626static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15627{
15628 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015629 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15630 if(status != TX_SUCCESS)
15631 {
15632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15633 "Unable to Destroy Tx Complete Timeout timer");
15634 return eSIR_FAILURE ;
15635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15637 if(status != TX_SUCCESS)
15638 {
15639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15640 "Unable to Destroy BA activity timer");
15641 return eSIR_FAILURE ;
15642 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015643 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15644 if(status != TX_SUCCESS)
15645 {
15646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15647 "Unable to Destroy traffic stats timer");
15648 return eSIR_FAILURE ;
15649 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015650 return eSIR_SUCCESS ;
15651}
Jeff Johnson295189b2012-06-20 16:38:30 -070015652/*
15653 * WDA timer handler.
15654 */
15655void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15656{
15657 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15658 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015659 /*
15660 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15661 */
15662 wdaMsg.type = timerInfo ;
15663 wdaMsg.bodyptr = NULL;
15664 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 /* post the message.. */
15666 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15667 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15668 {
15669 vosStatus = VOS_STATUS_E_BADMSG;
15670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015671}
Jeff Johnson295189b2012-06-20 16:38:30 -070015672/*
15673 * WDA Tx Complete timeout Indication.
15674 */
15675void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15676{
15677 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015678 tpSirTxBdStatus txBdStatus = {0};
15679
Jeff Johnson295189b2012-06-20 16:38:30 -070015680 if( pWDA->pAckTxCbFunc )
15681 {
15682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015683 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015684 /*Indicate failure*/
15685 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015686 pWDA->pAckTxCbFunc = NULL;
15687 }
15688 else
15689 {
15690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015691 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015693}
Jeff Johnson295189b2012-06-20 16:38:30 -070015694/*
15695 * WDA Set REG Domain to VOS NV
15696 */
Abhishek Singha306a442013-11-07 18:39:01 +053015697eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15698 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015699{
Abhishek Singha306a442013-11-07 18:39:01 +053015700 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015701 {
15702 return eHAL_STATUS_INVALID_PARAMETER;
15703 }
15704 return eHAL_STATUS_SUCCESS;
15705}
Jeff Johnson295189b2012-06-20 16:38:30 -070015706
Jeff Johnson295189b2012-06-20 16:38:30 -070015707#ifdef FEATURE_WLAN_SCAN_PNO
15708/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015709 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015710 *
15711 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015712void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015713{
15714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015715 tSirPNOScanReq *pPNOScanReqParams;
15716
Jeff Johnson295189b2012-06-20 16:38:30 -070015717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015718 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015719 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015720 {
15721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015722 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 VOS_ASSERT(0) ;
15724 return ;
15725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015726
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015727 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15728 if(pPNOScanReqParams->statusCallback)
15729 {
15730 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15731 (status == WDI_STATUS_SUCCESS) ?
15732 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15733 }
15734
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015735 if (pPNOScanReqParams->enable == 1)
15736 {
15737 if (pPNOScanReqParams->aNetworks)
15738 vos_mem_free(pPNOScanReqParams->aNetworks);
15739 if (pPNOScanReqParams->p24GProbeTemplate)
15740 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15741 if (pPNOScanReqParams->p5GProbeTemplate)
15742 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15743 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15745 vos_mem_free(pWdaParams->wdaMsgParam);
15746 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015747
15748 return ;
15749}
Jeff Johnson295189b2012-06-20 16:38:30 -070015750/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015751 * FUNCTION: WDA_PNOScanReqCallback
15752 * Free memory.
15753 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15754 */
15755void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015756{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015758 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015759
15760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15761 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15762
15763 if(NULL == pWdaParams)
15764 {
15765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15766 "%s: pWdaParams received NULL", __func__);
15767 VOS_ASSERT(0);
15768 return;
15769 }
15770
15771 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15772 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015773 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15774 if(pPNOScanReqParams->statusCallback)
15775 {
15776 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15777 VOS_STATUS_E_FAILURE);
15778 }
15779
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015780 if (pPNOScanReqParams->enable == 1)
15781 {
15782 if (pPNOScanReqParams->aNetworks)
15783 vos_mem_free(pPNOScanReqParams->aNetworks);
15784 if (pPNOScanReqParams->p24GProbeTemplate)
15785 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15786 if (pPNOScanReqParams->p5GProbeTemplate)
15787 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15788 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15790 vos_mem_free(pWdaParams->wdaMsgParam);
15791 vos_mem_free(pWdaParams);
15792 }
15793
15794 return;
15795}
15796/*
15797 * FUNCTION: WDA_UpdateScanParamsRespCallback
15798 *
15799 */
15800void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15801{
15802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015804 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015805 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015806 {
15807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015808 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 VOS_ASSERT(0) ;
15810 return ;
15811 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015812
15813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15814 vos_mem_free(pWdaParams->wdaMsgParam);
15815 vos_mem_free(pWdaParams);
15816
Jeff Johnson295189b2012-06-20 16:38:30 -070015817 return ;
15818}
Jeff Johnson295189b2012-06-20 16:38:30 -070015819/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015820 * FUNCTION: WDA_UpdateScanParamsReqCallback
15821 * Free memory.
15822 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15823 */
15824void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15825{
15826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15827
15828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15830
15831 if(NULL == pWdaParams)
15832 {
15833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15834 "%s: pWdaParams received NULL", __func__);
15835 VOS_ASSERT(0);
15836 return;
15837 }
15838
15839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15840 {
15841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15842 vos_mem_free(pWdaParams->wdaMsgParam);
15843 vos_mem_free(pWdaParams);
15844 }
15845
15846 return;
15847}
15848/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015849 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15850 * Request to WDI to set Preferred Network List.Offload
15851 */
15852VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15853 tSirPNOScanReq *pPNOScanReqParams)
15854{
Jeff Johnson43971f52012-07-17 12:26:56 -070015855 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015856 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15857 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15858 tWDA_ReqParams *pWdaParams ;
15859 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015862 if(NULL == pwdiPNOScanReqInfo)
15863 {
15864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 VOS_ASSERT(0);
15867 return VOS_STATUS_E_NOMEM;
15868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15870 if(NULL == pWdaParams)
15871 {
15872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015874 VOS_ASSERT(0);
15875 vos_mem_free(pwdiPNOScanReqInfo);
15876 return VOS_STATUS_E_NOMEM;
15877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015878 //
15879 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15880 //
15881 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15882 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015883 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15884 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15885 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015886 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15887 {
15888 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15889 &pPNOScanReqParams->aNetworks[i],
15890 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015892 /*Scan timer intervals*/
15893 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15894 &pPNOScanReqParams->scanTimers,
15895 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015896 /*Probe template for 2.4GHz band*/
15897 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15898 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15899 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015900 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15901 pPNOScanReqParams->p24GProbeTemplate,
15902 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015903 /*Probe template for 5GHz band*/
15904 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15905 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15906 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015907 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15908 pPNOScanReqParams->p5GProbeTemplate,
15909 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015910 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15911 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015912
Jeff Johnson295189b2012-06-20 16:38:30 -070015913 /* Store Params pass it to WDI */
15914 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15915 pWdaParams->pWdaContext = pWDA;
15916 /* Store param pointer as passed in by caller */
15917 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015918 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015919 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015920 if(IS_WDI_STATUS_FAILURE(status))
15921 {
15922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15923 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015924 if(pPNOScanReqParams->statusCallback)
15925 {
15926 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15927 VOS_STATUS_E_FAILURE);
15928 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015929 if (pPNOScanReqParams->enable == 1)
15930 {
15931 if (pPNOScanReqParams->aNetworks)
15932 vos_mem_free(pPNOScanReqParams->aNetworks);
15933 if (pPNOScanReqParams->p24GProbeTemplate)
15934 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15935 if (pPNOScanReqParams->p5GProbeTemplate)
15936 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15939 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015940
Jeff Johnson295189b2012-06-20 16:38:30 -070015941 pWdaParams->wdaWdiApiMsgParam = NULL;
15942 pWdaParams->wdaMsgParam = NULL;
15943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015944 return CONVERT_WDI2VOS_STATUS(status) ;
15945}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015946
15947#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15948
15949void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15950{
15951 /*Convert the CSR Auth types to WDI Auth types */
15952 switch (csrAuthType)
15953 {
15954 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15955 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15956 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015957#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015958 case eCSR_AUTH_TYPE_CCKM_WPA:
15959 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15960 break;
15961#endif
15962 case eCSR_AUTH_TYPE_WPA:
15963 *AuthType = eWDA_AUTH_TYPE_WPA;
15964 break;
15965 case eCSR_AUTH_TYPE_WPA_PSK:
15966 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15967 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015968#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015969 case eCSR_AUTH_TYPE_CCKM_RSN:
15970 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15971 break;
15972#endif
15973 case eCSR_AUTH_TYPE_RSN:
15974 *AuthType = eWDA_AUTH_TYPE_RSN;
15975 break;
15976 case eCSR_AUTH_TYPE_RSN_PSK:
15977 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15978 break;
15979#if defined WLAN_FEATURE_VOWIFI_11R
15980 case eCSR_AUTH_TYPE_FT_RSN:
15981 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15982 break;
15983 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15984 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15985 break;
15986#endif
15987#ifdef FEATURE_WLAN_WAPI
15988 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15989 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15990 break;
15991 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15992 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15993 break;
15994#endif /* FEATURE_WLAN_WAPI */
15995 case eCSR_AUTH_TYPE_SHARED_KEY:
15996 case eCSR_AUTH_TYPE_AUTOSWITCH:
15997 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15998 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053015999#ifdef WLAN_FEATURE_11W
16000 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
16001 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016002 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053016003 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
16004 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
16005 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016006#endif
16007 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053016008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016009 "%s: Unknown Auth Type", __func__);
16010 break;
16011 }
16012}
16013void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
16014{
16015 switch (csrEncrType)
16016 {
16017 case eCSR_ENCRYPT_TYPE_NONE:
16018 *EncrType = WDI_ED_NONE;
16019 break;
16020 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
16021 case eCSR_ENCRYPT_TYPE_WEP40:
16022 *EncrType = WDI_ED_WEP40;
16023 break;
16024 case eCSR_ENCRYPT_TYPE_WEP104:
16025 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
16026 *EncrType = WDI_ED_WEP104;
16027 break;
16028 case eCSR_ENCRYPT_TYPE_TKIP:
16029 *EncrType = WDI_ED_TKIP;
16030 break;
16031 case eCSR_ENCRYPT_TYPE_AES:
16032 *EncrType = WDI_ED_CCMP;
16033 break;
16034#ifdef WLAN_FEATURE_11W
16035 case eCSR_ENCRYPT_TYPE_AES_CMAC:
16036 *EncrType = WDI_ED_AES_128_CMAC;
16037 break;
16038#endif
16039#ifdef FEATURE_WLAN_WAPI
16040 case eCSR_ENCRYPT_TYPE_WPI:
16041 *EncrType = WDI_ED_WPI;
16042 break;
16043#endif
16044 case eCSR_ENCRYPT_TYPE_ANY:
16045 *EncrType = WDI_ED_ANY;
16046 break;
16047
16048 default:
16049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16050 "%s: Unknown Encryption Type", __func__);
16051 break;
16052 }
16053}
16054
16055/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016056 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016057 * Request to WDI to set Roam Offload Scan
16058 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016059VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016060 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
16061{
16062 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016063 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
16064 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016065 tWDA_ReqParams *pWdaParams ;
16066 v_U8_t csrAuthType;
16067 WDI_RoamNetworkType *pwdiRoamNetworkType;
16068 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
16069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16070 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016071 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016072 {
16073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16074 "%s: VOS MEM Alloc Failure", __func__);
16075 VOS_ASSERT(0);
16076 return VOS_STATUS_E_NOMEM;
16077 }
16078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16079 if (NULL == pWdaParams)
16080 {
16081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16082 "%s: VOS MEM Alloc Failure", __func__);
16083 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016084 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016085 return VOS_STATUS_E_NOMEM;
16086 }
16087
16088 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016089 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016090 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016091 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
16092 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016093 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
16094 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16095 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16096 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16097 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16098 sizeof(pwdiRoamNetworkType->currAPbssid));
16099 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16100 csrAuthType);
16101 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16102 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16103 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16104 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16105 pwdiRoamOffloadScanInfo->LookupThreshold =
16106 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016107 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16108 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016109 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16110 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016111 pwdiRoamOffloadScanInfo->MAWCEnabled =
16112 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016113 pwdiRoamOffloadScanInfo->Command =
16114 pRoamOffloadScanReqParams->Command ;
16115 pwdiRoamOffloadScanInfo->StartScanReason =
16116 pRoamOffloadScanReqParams->StartScanReason ;
16117 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16118 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16119 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16120 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16121 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16122 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16123 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16124 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16125 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16126 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016127 pwdiRoamOffloadScanInfo->IsESEEnabled =
16128 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016129 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16130 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16131 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16132 pwdiRoamNetworkType->ssId.ucLength =
16133 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16134 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16135 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16136 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16137 pwdiRoamNetworkType->ChannelCount =
16138 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16139 pwdiRoamOffloadScanInfo->ChannelCacheType =
16140 pRoamOffloadScanReqParams->ChannelCacheType;
16141 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16142 pRoamOffloadScanReqParams->ValidChannelList,
16143 pRoamOffloadScanReqParams->ValidChannelCount);
16144 pwdiRoamOffloadScanInfo->ValidChannelCount =
16145 pRoamOffloadScanReqParams->ValidChannelCount;
16146 pwdiRoamOffloadScanInfo->us24GProbeSize =
16147 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16148 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16149 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16150 pRoamOffloadScanReqParams->p24GProbeTemplate,
16151 pwdiRoamOffloadScanInfo->us24GProbeSize);
16152 pwdiRoamOffloadScanInfo->us5GProbeSize =
16153 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16154 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16155 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16156 pRoamOffloadScanReqParams->p5GProbeTemplate,
16157 pwdiRoamOffloadScanInfo->us5GProbeSize);
16158 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16159 pRoamOffloadScanReqParams->MDID.mdiePresent;
16160 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16161 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016162 pwdiRoamOffloadScanInfo->nProbes =
16163 pRoamOffloadScanReqParams->nProbes;
16164 pwdiRoamOffloadScanInfo->HomeAwayTime =
16165 pRoamOffloadScanReqParams->HomeAwayTime;
16166 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016167 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016168 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016169 pWdaParams->pWdaContext = pWDA;
16170 /* Store param pointer as passed in by caller */
16171 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016172 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016173 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16174 if(IS_WDI_STATUS_FAILURE(status))
16175 {
16176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16177 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16179 vos_mem_free(pWdaParams->wdaMsgParam);
16180 pWdaParams->wdaWdiApiMsgParam = NULL;
16181 pWdaParams->wdaMsgParam = NULL;
16182 }
16183 return CONVERT_WDI2VOS_STATUS(status) ;
16184}
16185#endif
16186
Jeff Johnson295189b2012-06-20 16:38:30 -070016187/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016188 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016189 *
16190 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016191void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016192{
16193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16194
16195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016197
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016198 if(NULL == pWdaParams)
16199 {
16200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016201 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016202 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016203 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016204 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016205
Jeff Johnson295189b2012-06-20 16:38:30 -070016206 vos_mem_free(pWdaParams->wdaMsgParam) ;
16207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16208 vos_mem_free(pWdaParams) ;
16209
16210 return ;
16211}
16212/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016213 * FUNCTION: WDA_RssiFilterReqCallback
16214 * Free memory.
16215 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16216 */
16217void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16218{
16219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16220
16221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16222 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16223
16224 if(NULL == pWdaParams)
16225 {
16226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16227 "%s: pWdaParams received NULL", __func__);
16228 VOS_ASSERT(0);
16229 return;
16230 }
16231
16232 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16233 {
16234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16235 vos_mem_free(pWdaParams->wdaMsgParam);
16236 vos_mem_free(pWdaParams);
16237 }
16238
16239 return;
16240}
16241/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016242 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016243 * Request to WDI to set Preferred Network List.Offload
16244 */
16245VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16246 tSirSetRSSIFilterReq* pRssiFilterParams)
16247{
Jeff Johnson43971f52012-07-17 12:26:56 -070016248 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016249 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16250 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 if(NULL == pwdiSetRssiFilterReqInfo)
16255 {
16256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 VOS_ASSERT(0);
16259 return VOS_STATUS_E_NOMEM;
16260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016261 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16262 if(NULL == pWdaParams)
16263 {
16264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016266 VOS_ASSERT(0);
16267 vos_mem_free(pwdiSetRssiFilterReqInfo);
16268 return VOS_STATUS_E_NOMEM;
16269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016270 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016271 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16272 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016273
Jeff Johnson295189b2012-06-20 16:38:30 -070016274 /* Store Params pass it to WDI */
16275 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16276 pWdaParams->pWdaContext = pWDA;
16277 /* Store param pointer as passed in by caller */
16278 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016279 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016280 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 if(IS_WDI_STATUS_FAILURE(status))
16283 {
16284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16285 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16287 vos_mem_free(pWdaParams->wdaMsgParam);
16288 pWdaParams->wdaWdiApiMsgParam = NULL;
16289 pWdaParams->wdaMsgParam = NULL;
16290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016291 return CONVERT_WDI2VOS_STATUS(status) ;
16292}
16293
Jeff Johnson295189b2012-06-20 16:38:30 -070016294/*
16295 * FUNCTION: WDA_ProcessUpdateScanParams
16296 * Request to WDI to update Scan Parameters
16297 */
16298VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16299 tSirUpdateScanParams *pUpdateScanParams)
16300{
Jeff Johnson43971f52012-07-17 12:26:56 -070016301 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16303 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16304 sizeof(WDI_UpdateScanParamsInfoType)) ;
16305 tWDA_ReqParams *pWdaParams ;
16306 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016309 if(NULL == wdiUpdateScanParamsInfoType)
16310 {
16311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016313 VOS_ASSERT(0);
16314 return VOS_STATUS_E_NOMEM;
16315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16317 if ( NULL == pWdaParams )
16318 {
16319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016321 VOS_ASSERT(0);
16322 vos_mem_free(wdiUpdateScanParamsInfoType);
16323 return VOS_STATUS_E_NOMEM;
16324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 //
16326 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16327 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16329 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16330 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16331 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016332 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016333 pUpdateScanParams->b11dEnabled,
16334 pUpdateScanParams->b11dResolved,
16335 pUpdateScanParams->ucChannelCount,
16336 pUpdateScanParams->usPassiveMinChTime,
16337 pUpdateScanParams->usPassiveMaxChTime,
16338 pUpdateScanParams->usActiveMinChTime,
16339 pUpdateScanParams->usActiveMaxChTime,
16340 sizeof(tSirUpdateScanParams),
16341 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16342
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16344 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016345 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16346 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016347 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16348 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016349 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16350 pUpdateScanParams->usActiveMaxChTime;
16351 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16352 pUpdateScanParams->usActiveMinChTime;
16353 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16354 pUpdateScanParams->usPassiveMaxChTime;
16355 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16356 pUpdateScanParams->usPassiveMinChTime;
16357
Jeff Johnson295189b2012-06-20 16:38:30 -070016358 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016359 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16360 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016361
Jeff Johnson295189b2012-06-20 16:38:30 -070016362 for ( i = 0; i <
16363 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16364 i++)
16365 {
16366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16367 "Update Scan Parameters channel: %d",
16368 pUpdateScanParams->aChannels[i]);
16369
16370 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16371 pUpdateScanParams->aChannels[i];
16372 }
16373
Yue Ma7f44bbe2013-04-12 11:47:39 -070016374 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16375 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016376
Jeff Johnson295189b2012-06-20 16:38:30 -070016377 /* Store Params pass it to WDI */
16378 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16379 pWdaParams->pWdaContext = pWDA;
16380 /* Store param pointer as passed in by caller */
16381 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016382
Jeff Johnson295189b2012-06-20 16:38:30 -070016383
16384
16385 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016386 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016387 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 if(IS_WDI_STATUS_FAILURE(status))
16389 {
16390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16391 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16393 vos_mem_free(pWdaParams->wdaMsgParam);
16394 vos_mem_free(pWdaParams);
16395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016396 return CONVERT_WDI2VOS_STATUS(status) ;
16397}
16398#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016399
16400#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16401/*
16402 * FUNCTION: WDA_RoamOffloadScanReqCallback
16403 *
16404 */
16405void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16406{
16407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016408 vos_msg_t vosMsg;
16409 wpt_uint8 reason = 0;
16410
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016412 "<------ %s " ,__func__);
16413 if (NULL == pWdaParams)
16414 {
16415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16416 "%s: pWdaParams received NULL", __func__);
16417 VOS_ASSERT(0) ;
16418 return ;
16419 }
16420 if ( pWdaParams != NULL )
16421 {
16422 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16423 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016424 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16426 }
16427 if ( pWdaParams->wdaMsgParam != NULL)
16428 {
16429 vos_mem_free(pWdaParams->wdaMsgParam);
16430 }
16431
16432 vos_mem_free(pWdaParams) ;
16433 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016434 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16435 vosMsg.bodyptr = NULL;
16436 if (WDI_STATUS_SUCCESS != status)
16437 {
16438 reason = 0;
16439 }
16440 vosMsg.bodyval = reason;
16441 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16442 {
16443 /* free the mem and return */
16444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016445 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016446 }
16447
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016448 return ;
16449}
16450#endif
16451
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016452/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016453 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016454 *
16455 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016456void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016457{
16458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16459
16460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16461 "<------ %s " ,__func__);
16462
16463 if(NULL == pWdaParams)
16464 {
16465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16466 "%s: pWdaParams received NULL", __func__);
16467 VOS_ASSERT(0);
16468 return;
16469 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016470
16471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16472 vos_mem_free(pWdaParams->wdaMsgParam);
16473 vos_mem_free(pWdaParams);
16474
16475 return;
16476}
16477/*
16478 * FUNCTION: WDA_SetPowerParamsReqCallback
16479 * Free memory.
16480 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16481 */
16482void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16483{
16484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16485
16486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16487 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16488
16489 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016490 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16492 "%s: pWdaParams received NULL", __func__);
16493 VOS_ASSERT(0);
16494 return;
16495 }
16496
16497 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16498 {
16499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16500 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016501 vos_mem_free(pWdaParams);
16502 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016503
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016504 return;
16505}
16506
Jeff Johnson295189b2012-06-20 16:38:30 -070016507#ifdef WLAN_FEATURE_PACKET_FILTERING
16508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016509 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016510 *
16511 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016512void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016513 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16514 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016515{
16516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016518 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016519 if(NULL == pWdaParams)
16520 {
16521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016522 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016523 VOS_ASSERT(0) ;
16524 return ;
16525 }
16526
16527 vos_mem_free(pWdaParams->wdaMsgParam) ;
16528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16529 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016530 //print a msg, nothing else to do
16531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016532 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016533 return ;
16534}
Jeff Johnson295189b2012-06-20 16:38:30 -070016535/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016536 * FUNCTION: WDA_8023MulticastListReqCallback
16537 * Free memory.
16538 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16539 */
16540void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16541{
16542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16543
16544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16545 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16546
16547 if(NULL == pWdaParams)
16548 {
16549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16550 "%s: pWdaParams received NULL", __func__);
16551 VOS_ASSERT(0);
16552 return;
16553 }
16554
16555 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16556 {
16557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16558 vos_mem_free(pWdaParams->wdaMsgParam);
16559 vos_mem_free(pWdaParams);
16560 }
16561
16562 return;
16563}
16564/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016565 * FUNCTION: WDA_Process8023MulticastListReq
16566 * Request to WDI to add 8023 Multicast List
16567 */
16568VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16569 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16570{
Jeff Johnson43971f52012-07-17 12:26:56 -070016571 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016572 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16573 tWDA_ReqParams *pWdaParams ;
16574 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016577 pwdiFltPktSetMcListReqParamsType =
16578 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16579 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16580 ) ;
16581 if(NULL == pwdiFltPktSetMcListReqParamsType)
16582 {
16583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016584 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016585 return VOS_STATUS_E_NOMEM;
16586 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16588 if(NULL == pWdaParams)
16589 {
16590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016592 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16593 return VOS_STATUS_E_NOMEM;
16594 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016595
Jeff Johnson295189b2012-06-20 16:38:30 -070016596 //
16597 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16598 //
16599 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016600 pRcvFltMcAddrList->ulMulticastAddrCnt;
16601
16602 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16603 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16604 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16605 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16606
Jeff Johnson295189b2012-06-20 16:38:30 -070016607 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16608 {
16609 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16610 &(pRcvFltMcAddrList->multicastAddr[i]),
16611 sizeof(tSirMacAddr));
16612 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016613 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16614 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016615
Jeff Johnson295189b2012-06-20 16:38:30 -070016616 /* Store Params pass it to WDI */
16617 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16618 pWdaParams->pWdaContext = pWDA;
16619 /* Store param pointer as passed in by caller */
16620 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016621 status = WDI_8023MulticastListReq(
16622 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016623 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016624 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016625 if(IS_WDI_STATUS_FAILURE(status))
16626 {
16627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16628 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16630 vos_mem_free(pWdaParams->wdaMsgParam);
16631 vos_mem_free(pWdaParams);
16632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 return CONVERT_WDI2VOS_STATUS(status) ;
16634}
Jeff Johnson295189b2012-06-20 16:38:30 -070016635/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016636 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016637 *
16638 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016639void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016640 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16641 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016642{
16643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016645 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016646 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016647 if(NULL == pWdaParams)
16648 {
16649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016650 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016651 VOS_ASSERT(0) ;
16652 return ;
16653 }
16654
16655 vos_mem_free(pWdaParams->wdaMsgParam) ;
16656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16657 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016658 //print a msg, nothing else to do
16659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016660 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016661 return ;
16662}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016663
16664/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016665 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16666 * Free memory.
16667 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016668 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016669void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016670 void* pUserData)
16671{
16672 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16673
16674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16675 "<------ %s, wdiStatus: %d",
16676 __func__, wdiStatus);
16677
16678 if (NULL == pWdaParams)
16679 {
16680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16681 "%s: Invalid pWdaParams pointer", __func__);
16682 VOS_ASSERT(0);
16683 return;
16684 }
16685
16686 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16687 {
16688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16689 vos_mem_free(pWdaParams->wdaMsgParam);
16690 vos_mem_free(pWdaParams);
16691 }
16692
16693 return;
16694}
16695
Jeff Johnson295189b2012-06-20 16:38:30 -070016696/*
16697 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16698 * Request to WDI to set Receive Filters
16699 */
16700VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16701 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16702{
Jeff Johnson43971f52012-07-17 12:26:56 -070016703 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016704 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16705 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16706 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16707 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16708 tWDA_ReqParams *pWdaParams ;
16709 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016712 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16713 {
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016716 VOS_ASSERT(0);
16717 return VOS_STATUS_E_NOMEM;
16718 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016719 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16720 if(NULL == pWdaParams)
16721 {
16722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016724 VOS_ASSERT(0);
16725 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16726 return VOS_STATUS_E_NOMEM;
16727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016728 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16729 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16730 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16731 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016732 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16733 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16734
16735 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16736 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016737
16738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16739 "FID %d FT %d NParams %d CT %d",
16740 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16741 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16742 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16743 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016744 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16745 {
16746 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16747 &pRcvPktFilterCfg->paramsData[i],
16748 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016750 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016751 pwdiSetRcvPktFilterReqParamsType->
16752 wdiPktFilterCfg.paramsData[i].protocolLayer,
16753 pwdiSetRcvPktFilterReqParamsType->
16754 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016756 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016757 pwdiSetRcvPktFilterReqParamsType->
16758 wdiPktFilterCfg.paramsData[i].dataOffset,
16759 pwdiSetRcvPktFilterReqParamsType->
16760 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016762 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016763 pwdiSetRcvPktFilterReqParamsType->
16764 wdiPktFilterCfg.paramsData[i].compareData[0],
16765 pwdiSetRcvPktFilterReqParamsType->
16766 wdiPktFilterCfg.paramsData[i].compareData[1],
16767 pwdiSetRcvPktFilterReqParamsType->
16768 wdiPktFilterCfg.paramsData[i].compareData[2],
16769 pwdiSetRcvPktFilterReqParamsType->
16770 wdiPktFilterCfg.paramsData[i].compareData[3],
16771 pwdiSetRcvPktFilterReqParamsType->
16772 wdiPktFilterCfg.paramsData[i].compareData[4],
16773 pwdiSetRcvPktFilterReqParamsType->
16774 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016776 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016777 pwdiSetRcvPktFilterReqParamsType->
16778 wdiPktFilterCfg.paramsData[i].dataMask[0],
16779 pwdiSetRcvPktFilterReqParamsType->
16780 wdiPktFilterCfg.paramsData[i].dataMask[1],
16781 pwdiSetRcvPktFilterReqParamsType->
16782 wdiPktFilterCfg.paramsData[i].dataMask[2],
16783 pwdiSetRcvPktFilterReqParamsType->
16784 wdiPktFilterCfg.paramsData[i].dataMask[3],
16785 pwdiSetRcvPktFilterReqParamsType->
16786 wdiPktFilterCfg.paramsData[i].dataMask[4],
16787 pwdiSetRcvPktFilterReqParamsType->
16788 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016789 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016790 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016791 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016792 /* Store Params pass it to WDI */
16793 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16794 pWdaParams->pWdaContext = pWDA;
16795 /* Store param pointer as passed in by caller */
16796 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016797 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016798 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016799 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016800 if(IS_WDI_STATUS_FAILURE(status))
16801 {
16802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16803 "Failure in SetFilter(),free all the memory,status %d ",status);
16804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16805 vos_mem_free(pWdaParams->wdaMsgParam);
16806 vos_mem_free(pWdaParams);
16807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016808 return CONVERT_WDI2VOS_STATUS(status) ;
16809}
Jeff Johnson295189b2012-06-20 16:38:30 -070016810/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016811 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016812 *
16813 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016814void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016815 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16816 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016817{
16818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16819 tWDA_CbContext *pWDA;
16820 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16821 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16822 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16823 tANI_U8 i;
16824 vos_msg_t vosMsg;
16825
16826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016828 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16829
Jeff Johnsone7245742012-09-05 17:12:55 -070016830 if(NULL == pRcvFltPktMatchCntRsp)
16831 {
16832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016833 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016834 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016835 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016836 return ;
16837 }
16838
Jeff Johnson295189b2012-06-20 16:38:30 -070016839 if(NULL == pWdaParams)
16840 {
16841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016843 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016844 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016845 return ;
16846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016847 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16848 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016849 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16850 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16851
16852 /* Message Header */
16853 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16854 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16855
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016856 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016857
16858 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16859 {
16860 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16861 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016863 /* VOS message wrapper */
16864 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16865 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16866 vosMsg.bodyval = 0;
16867 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16868 {
16869 /* free the mem and return */
16870 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16871 }
16872
16873 vos_mem_free(pWdaParams->wdaMsgParam) ;
16874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16875 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016876
16877 return;
16878}
16879/*
16880 * FUNCTION: WDA_FilterMatchCountReqCallback
16881 * Free memory and send RSP back to SME.
16882 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16883 */
16884void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16885{
16886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16887 vos_msg_t vosMsg;
16888
16889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16890 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16891
16892 if(NULL == pWdaParams)
16893 {
16894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16895 "%s: pWdaParams received NULL", __func__);
16896 VOS_ASSERT(0);
16897 return;
16898 }
16899
16900 /* VOS message wrapper */
16901 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16902 vosMsg.bodyptr = NULL;
16903 vosMsg.bodyval = 0;
16904
16905 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16906 {
16907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16908 vos_mem_free(pWdaParams->wdaMsgParam);
16909 vos_mem_free(pWdaParams);
16910 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16911 }
16912
16913 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016914}
Jeff Johnson295189b2012-06-20 16:38:30 -070016915/*
16916 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16917 * Request to WDI to get PC Filter Match Count
16918 */
16919VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16920{
Jeff Johnson43971f52012-07-17 12:26:56 -070016921 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016922 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16923 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016927 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16928 {
16929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016931 VOS_ASSERT(0);
16932 return VOS_STATUS_E_NOMEM;
16933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16935 if(NULL == pWdaParams)
16936 {
16937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016939 VOS_ASSERT(0);
16940 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16941 return VOS_STATUS_E_NOMEM;
16942 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016943
Yue Ma7f44bbe2013-04-12 11:47:39 -070016944 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16945 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016946
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016947 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16948 pRcvFltPktMatchRsp->bssId,
16949 sizeof(wpt_macAddr));
16950
Jeff Johnson295189b2012-06-20 16:38:30 -070016951 /* Store Params pass it to WDI */
16952 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16953 pWdaParams->pWdaContext = pWDA;
16954 /* Store param pointer as passed in by caller */
16955 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016956 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016957 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016958 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016959 if(IS_WDI_STATUS_FAILURE(status))
16960 {
16961 /* failure returned by WDI API */
16962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16963 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16965 vos_mem_free(pWdaParams) ;
16966 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16967 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016969 return CONVERT_WDI2VOS_STATUS(status) ;
16970}
Jeff Johnson295189b2012-06-20 16:38:30 -070016971/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016972 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016973 *
16974 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016975void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016976 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16977 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016978{
16979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016982/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16983 if(NULL == pWdaParams)
16984 {
16985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016987 VOS_ASSERT(0) ;
16988 return ;
16989 }
16990
16991 vos_mem_free(pWdaParams->wdaMsgParam) ;
16992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 //print a msg, nothing else to do
16995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016996 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016997 return ;
16998}
Jeff Johnson295189b2012-06-20 16:38:30 -070016999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017000 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
17001 * Free memory.
17002 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
17003 */
17004void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17005{
17006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17007
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17010
17011 if(NULL == pWdaParams)
17012 {
17013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17014 "%s: Invalid pWdaParams pointer", __func__);
17015 VOS_ASSERT(0);
17016 return;
17017 }
17018
17019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17020 {
17021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17022 vos_mem_free(pWdaParams->wdaMsgParam);
17023 vos_mem_free(pWdaParams);
17024 }
17025
17026 return;
17027}
17028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017029 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
17030 * Request to WDI to clear Receive Filters
17031 */
17032VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
17033 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
17034{
Jeff Johnson43971f52012-07-17 12:26:56 -070017035 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017036 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
17037 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
17038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017041 if(NULL == pwdiRcvFltPktClearReqParamsType)
17042 {
17043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017045 VOS_ASSERT(0);
17046 return VOS_STATUS_E_NOMEM;
17047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17049 if(NULL == pWdaParams)
17050 {
17051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017053 VOS_ASSERT(0);
17054 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
17055 return VOS_STATUS_E_NOMEM;
17056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017057 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
17058 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070017059 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
17060 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
17061 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
17062 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017063
Yue Ma7f44bbe2013-04-12 11:47:39 -070017064 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017065 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017066 /* Store Params pass it to WDI */
17067 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
17068 pWdaParams->pWdaContext = pWDA;
17069 /* Store param pointer as passed in by caller */
17070 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070017071 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017072 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017073 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017074 if(IS_WDI_STATUS_FAILURE(status))
17075 {
17076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17077 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
17078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080017079 vos_mem_free(pWdaParams->wdaMsgParam);
17080 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017082 return CONVERT_WDI2VOS_STATUS(status) ;
17083}
17084#endif // WLAN_FEATURE_PACKET_FILTERING
17085
Jeff Johnson295189b2012-06-20 16:38:30 -070017086/*
17087 * FUNCTION: WDA_ProcessSetPowerParamsReq
17088 * Request to WDI to set power params
17089 */
17090VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
17091 tSirSetPowerParamsReq *pPowerParams)
17092{
Jeff Johnson43971f52012-07-17 12:26:56 -070017093 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017094 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17095 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017099 if(NULL == pwdiSetPowerParamsReqInfo)
17100 {
17101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017103 VOS_ASSERT(0);
17104 return VOS_STATUS_E_NOMEM;
17105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17107 if(NULL == pWdaParams)
17108 {
17109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017111 VOS_ASSERT(0);
17112 vos_mem_free(pwdiSetPowerParamsReqInfo);
17113 return VOS_STATUS_E_NOMEM;
17114 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017115
Jeff Johnson295189b2012-06-20 16:38:30 -070017116
17117 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17118 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017119 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17120 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017121 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17122 pPowerParams->uListenInterval;
17123 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17124 pPowerParams->uBcastMcastFilter;
17125 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17126 pPowerParams->uEnableBET;
17127 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17128 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017129 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17130 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017131 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17132 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017133
Jeff Johnson295189b2012-06-20 16:38:30 -070017134 /* Store Params pass it to WDI */
17135 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17136 pWdaParams->pWdaContext = pWDA;
17137 /* Store param pointer as passed in by caller */
17138 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017139 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017140 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017141 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017142 if(IS_WDI_STATUS_FAILURE(status))
17143 {
17144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17145 "Failure in Set power params REQ WDI API, free all the memory " );
17146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17147 vos_mem_free(pWdaParams->wdaMsgParam);
17148 pWdaParams->wdaWdiApiMsgParam = NULL;
17149 pWdaParams->wdaMsgParam = NULL;
17150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017151 return CONVERT_WDI2VOS_STATUS(status) ;
17152}
17153
17154/*
17155 * FUNCTION: WDA_SetTmLevelRspCallback
17156 * Set TM Level response
17157 */
17158void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17159{
17160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17161
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017163 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017164
17165 if(NULL == pWdaParams)
17166 {
17167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017168 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017169 VOS_ASSERT(0) ;
17170 return ;
17171 }
17172
17173 /* Dose not need to send notification to upper layer
17174 * Just free allocated resources */
17175 if( pWdaParams != NULL )
17176 {
17177 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17178 {
17179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17180 }
17181 vos_mem_free(pWdaParams->wdaMsgParam) ;
17182 vos_mem_free(pWdaParams) ;
17183 }
17184}
17185
17186/*
17187 * FUNCTION: WDA_ProcessSetTmLevelReq
17188 * Set TM Level request
17189 */
17190VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17191 tAniSetTmLevelReq *setTmLevelReq)
17192{
17193 WDI_Status status = WDI_STATUS_SUCCESS ;
17194 tWDA_ReqParams *pWdaParams ;
17195 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17196 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17197 sizeof(WDI_SetTmLevelReqType)) ;
17198 if(NULL == wdiSetTmLevelReq)
17199 {
17200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017202 VOS_ASSERT(0);
17203 return VOS_STATUS_E_NOMEM;
17204 }
17205
17206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17207 if(NULL == pWdaParams)
17208 {
17209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017211 VOS_ASSERT(0);
17212 vos_mem_free(wdiSetTmLevelReq);
17213 return VOS_STATUS_E_NOMEM;
17214 }
17215
17216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017217 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017218
17219 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17220 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17221
17222 pWdaParams->pWdaContext = pWDA;
17223 pWdaParams->wdaMsgParam = setTmLevelReq;
17224 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17225
17226 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17227 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17228
17229 if(IS_WDI_STATUS_FAILURE(status))
17230 {
17231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017232 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017233 vos_mem_free(pWdaParams->wdaMsgParam) ;
17234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17235 vos_mem_free(pWdaParams) ;
17236 }
17237
17238 return CONVERT_WDI2VOS_STATUS(status) ;
17239}
17240
17241VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17242 tpTxControlParams pTxCtrlParam)
17243{
17244 VOS_STATUS wdaStatus;
17245
17246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017248 if( pTxCtrlParam == NULL )
17249 {
17250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017251 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017252 return VOS_STATUS_E_FAILURE;
17253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017254 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17255 {
17256 wdaStatus = WDA_SuspendDataTx(pWDA);
17257 }
17258 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17259 {
17260 wdaStatus = WDA_ResumeDataTx(pWDA);
17261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017262 return wdaStatus;
17263}
17264
Mihir Shete5affadc2015-05-29 20:54:57 +053017265void WDA_FWLoggingDXEdoneInd(void)
17266{
17267 WDI_FWLoggingDXEdoneInd(NULL);
17268}
17269
Jeff Johnson295189b2012-06-20 16:38:30 -070017270 /* FUNCTION WDA_featureCapsExchange
17271 * WDA API to invoke capability exchange between host and FW.
17272 */
17273void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17274{
17275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017276 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017277 WDI_featureCapsExchangeReq( NULL, pVosContext);
17278}
17279
Yathish9f22e662012-12-10 14:21:35 -080017280/* FUNCTION WDA_disableCapablityFeature
17281 * WDA API to diable Active mode offload in host.
17282 */
17283void WDA_disableCapablityFeature(tANI_U8 feature_index)
17284{
17285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17286 "%s:enter", __func__ );
17287 WDI_disableCapablityFeature(feature_index);
17288}
17289
Jeff Johnson295189b2012-06-20 16:38:30 -070017290 /* FUNCTION WDA_getHostWlanFeatCaps
17291 * Wrapper for WDI API, that will return if the feature (enum value).passed
17292 * to this API is supported or not in Host
17293 * return value
17294 * 0 - implies feature is NOT Supported
17295 * any non zero value - implies feature is SUPPORTED
17296 */
17297tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17298{
17299 return WDI_getHostWlanFeatCaps(featEnumValue);
17300}
17301
17302 /* FUNCTION WDA_getFwWlanFeatCaps
17303 * Wrapper for WDI API, that will return if the feature (enum value).passed
17304 * to this API is supported or not in FW
17305 * return value
17306 * 0 - implies feature is NOT Supported
17307 * any non zero value - implies feature is SUPPORTED
17308 */
17309tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17310{
17311 return WDI_getFwWlanFeatCaps(featEnumValue);
17312}
17313
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017314
Jeff Johnson295189b2012-06-20 16:38:30 -070017315/*
17316 * FUNCTION: WDA_shutdown
17317 * Shutdown WDA/WDI without handshaking with Riva.
17318 * Synchronous function.
17319 */
17320VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17321{
17322 WDI_Status wdiStatus;
17323 //tANI_U8 eventIdx = 0;
17324 VOS_STATUS status = VOS_STATUS_SUCCESS;
17325 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017326 if (NULL == pWDA)
17327 {
17328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017329 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017330 VOS_ASSERT(0);
17331 return VOS_STATUS_E_FAILURE;
17332 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017333 /* FTM mode stay START_STATE */
17334 if( (WDA_READY_STATE != pWDA->wdaState) &&
17335 (WDA_INIT_STATE != pWDA->wdaState) &&
17336 (WDA_START_STATE != pWDA->wdaState) )
17337 {
17338 VOS_ASSERT(0);
17339 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017340
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017341 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070017342 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017343 if(VOS_TRUE == pWDA->wdaTimersCreated)
17344 {
17345 wdaDestroyTimers(pWDA);
17346 pWDA->wdaTimersCreated = VOS_FALSE;
17347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017348 }
Leo Chang9d76f622013-08-23 16:34:52 -070017349 else
17350 {
17351 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017352 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017353
Jeff Johnson295189b2012-06-20 16:38:30 -070017354 /* call WDI shutdown */
17355 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017356 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17357 {
17358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17359 "error in WDA Stop" );
17360 status = VOS_STATUS_E_FAILURE;
17361 }
17362 /* WDI stop is synchrnous, shutdown is complete when it returns */
17363 pWDA->wdaState = WDA_STOP_STATE;
17364
Jeff Johnson295189b2012-06-20 16:38:30 -070017365 /* shutdown should perform the stop & close actions. */
17366 /* Destroy the event */
17367 status = vos_event_destroy(&pWDA->txFrameEvent);
17368 if(!VOS_IS_STATUS_SUCCESS(status))
17369 {
17370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017371 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017372 status = VOS_STATUS_E_FAILURE;
17373 }
17374 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17375 if(!VOS_IS_STATUS_SUCCESS(status))
17376 {
17377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017378 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017379 status = VOS_STATUS_E_FAILURE;
17380 }
17381 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17382 if(!VOS_IS_STATUS_SUCCESS(status))
17383 {
17384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017385 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017386 status = VOS_STATUS_E_FAILURE;
17387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017388 /* free WDA context */
17389 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17390 if ( !VOS_IS_STATUS_SUCCESS(status) )
17391 {
17392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17393 "error in WDA close " );
17394 status = VOS_STATUS_E_FAILURE;
17395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017396 return status;
17397}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017398
Jeff Johnsone7245742012-09-05 17:12:55 -070017399/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017400 * FUNCTION: WDA_setNeedShutdown
17401 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017402 */
17403
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017404void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017405{
17406 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017407 if(pWDA == NULL)
17408 {
17409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17410 "Could not get the WDA Context pointer" );
17411 return;
17412 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017413 pWDA->needShutdown = TRUE;
17414}
17415/*
17416 * FUNCTION: WDA_needShutdown
17417 * WDA needs a shutdown
17418 */
17419
17420v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17421{
17422 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017423 if(pWDA == NULL)
17424 {
17425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17426 "Could not get the WDA Context pointer" );
17427 return 0;
17428 }
17429 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017430}
17431
Mohit Khanna4a70d262012-09-11 16:30:12 -070017432#ifdef WLAN_FEATURE_11AC
17433/*
17434 * FUNCTION: WDA_SetBeaconFilterReqCallback
17435 *
17436 */
17437void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17438{
17439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017441 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017442 if(NULL == pWdaParams)
17443 {
17444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017445 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017446 VOS_ASSERT(0) ;
17447 return ;
17448 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017449
Mohit Khanna4a70d262012-09-11 16:30:12 -070017450 vos_mem_free(pWdaParams->wdaMsgParam) ;
17451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17452 vos_mem_free(pWdaParams) ;
17453 /*
17454 * No respone required for SetBeaconFilter req so just free the request
17455 * param here
17456 */
17457
17458 return ;
17459}
17460
17461VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17462 tUpdateVHTOpMode *pData)
17463{
17464 WDI_Status status = WDI_STATUS_SUCCESS ;
17465 tWDA_ReqParams *pWdaParams ;
17466 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17467 sizeof(WDI_UpdateVHTOpMode)) ;
17468 if(NULL == wdiTemp)
17469 {
17470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017471 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017472 VOS_ASSERT(0);
17473 return VOS_STATUS_E_NOMEM;
17474 }
17475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17476 if(NULL == pWdaParams)
17477 {
17478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017479 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017480 VOS_ASSERT(0);
17481 vos_mem_free(wdiTemp);
17482 return VOS_STATUS_E_NOMEM;
17483 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17485 "------> %s Opmode = %d and staid = %d" ,
17486 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017487 wdiTemp->opMode = pData->opMode;
17488 wdiTemp->staId = pData->staId;
17489
17490 pWdaParams->pWdaContext = pWDA;
17491 /* Store Req pointer, as this will be used for response */
17492 pWdaParams->wdaMsgParam = (void *)pData;
17493 /* store Params pass it to WDI */
17494 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17495
17496 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17497
17498 if(IS_WDI_STATUS_FAILURE(status))
17499 {
17500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17501 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17503 vos_mem_free(pWdaParams->wdaMsgParam);
17504 vos_mem_free(pWdaParams);
17505 }
17506 return CONVERT_WDI2VOS_STATUS(status) ;
17507}
17508#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017509
17510/*==========================================================================
17511 FUNCTION WDA_TransportChannelDebug
17512
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017513 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017514 Display Transport Channel debugging information
17515 User may request to display DXE channel snapshot
17516 Or if host driver detects any abnormal stcuk may display
17517
17518 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017519 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017520 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017521 debugFlags : Enable stall detect features
17522 defined by WPAL_DeviceDebugFlags
17523 These features may effect
17524 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017525
17526 RETURN VALUE
17527 NONE
17528
17529===========================================================================*/
17530void WDA_TransportChannelDebug
17531(
schang6295e542013-03-12 15:31:23 -070017532 tpAniSirGlobal pMac,
17533 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017534 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017535)
17536{
Mihir Shete40a55652014-03-02 14:14:47 +053017537 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017538 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017539}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017540
17541/*==========================================================================
17542 FUNCTION WDA_SetEnableSSR
17543
17544 DESCRIPTION
17545 API to enable/disable SSR on WDI timeout
17546
17547 PARAMETERS
17548 enableSSR : enable/disable SSR
17549
17550 RETURN VALUE
17551 NONE
17552
17553===========================================================================*/
17554void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17555{
17556 WDI_SetEnableSSR(enableSSR);
17557}
Leo Chang9056f462013-08-01 19:21:11 -070017558
17559#ifdef FEATURE_WLAN_LPHB
17560/*
17561 * FUNCTION: WDA_LPHBconfRspCallback
17562 *
17563 */
17564void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17565{
17566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17567
17568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17569 "<------ %s " ,__func__);
17570 if (NULL == pWdaParams)
17571 {
17572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17573 "%s: pWdaParams received NULL", __func__);
17574 VOS_ASSERT(0) ;
17575 return ;
17576 }
17577
17578 /* Do not need to send notification to upper layer
17579 * Just free allocated resources */
17580 if (pWdaParams != NULL)
17581 {
17582 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17583 {
17584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17585 }
17586 vos_mem_free(pWdaParams->wdaMsgParam) ;
17587 vos_mem_free(pWdaParams) ;
17588 }
17589
17590 return;
17591}
17592
17593/*
17594 * FUNCTION: WDA_ProcessLPHBConfReq
17595 *
17596 */
17597VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17598 tSirLPHBReq *pData)
17599{
17600 WDI_Status wdiStatus;
17601 tWDA_ReqParams *pWdaParams ;
17602
17603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17604 "------> %s " , __func__);
17605
17606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17607 if (NULL == pWdaParams)
17608 {
17609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17610 "%s: VOS MEM Alloc Failure", __func__);
17611 VOS_ASSERT(0);
17612 vos_mem_free(pData);
17613 return VOS_STATUS_E_NOMEM;
17614 }
17615
17616 pWdaParams->pWdaContext = pWDA;
17617 pWdaParams->wdaMsgParam = (void *)pData;
17618 pWdaParams->wdaWdiApiMsgParam = NULL;
17619
17620 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17621 if (WDI_STATUS_PENDING == wdiStatus)
17622 {
17623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17624 "Pending received for %s:%d ", __func__, __LINE__);
17625 }
17626 else if (WDI_STATUS_SUCCESS != wdiStatus)
17627 {
17628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17629 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17630 vos_mem_free(pWdaParams->wdaMsgParam);
17631 vos_mem_free(pWdaParams);
17632 }
17633
17634 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17635}
17636#endif /* FEATURE_WLAN_LPHB */
17637
c_hpothu92367912014-05-01 15:18:17 +053017638void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17639 void* pUserData)
17640{
17641 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17642
17643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17644 "<------ %s " ,__func__);
17645 if (NULL == pBcnMissRateInfo)
17646 {
17647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17648 "%s: pWdaParams received NULL", __func__);
17649 VOS_ASSERT(0) ;
17650 return ;
17651 }
17652 if (pBcnMissRateInfo->callback)
17653 {
17654 pBcnMissRateInfo->callback(status, bcnMissRate,
17655 pBcnMissRateInfo->data);
17656 }
17657 vos_mem_free(pUserData);
17658
17659 return;
17660}
17661
17662v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17663 tSirBcnMissRateReq *pData)
17664{
17665 WDI_Status wdiStatus;
17666 tSirBcnMissRateInfo *pBcnMissRateInfo;
17667
17668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17669 "------> %s " , __func__);
17670
17671 pBcnMissRateInfo =
17672 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17673 if (NULL == pBcnMissRateInfo)
17674 {
17675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17676 "%s: VOS MEM Alloc Failure", __func__);
17677 VOS_ASSERT(0);
17678 vos_mem_free(pData);
17679 return;
17680 }
17681
17682 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17683 pBcnMissRateInfo->data = pData->data;
17684
17685 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17686 WDA_GetBcnMissRateCallback,
17687 pData->bssid);
17688 if (WDI_STATUS_PENDING == wdiStatus)
17689 {
17690 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17691 "Pending received for %s:%d ", __func__, __LINE__);
17692 }
17693 else if (WDI_STATUS_SUCCESS != wdiStatus)
17694 {
17695 if (pBcnMissRateInfo->callback)
17696 {
17697 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17698 -1, pBcnMissRateInfo->data);
17699 }
17700 }
17701 vos_mem_free(pData);
17702}
Dino Mycle41bdc942014-06-10 11:30:24 +053017703
17704#ifdef WLAN_FEATURE_EXTSCAN
17705
17706/*==========================================================================
17707 FUNCTION WDA_EXTScanStartRspCallback
17708
17709 DESCRIPTION
17710 API to send EXTScan Start Response to HDD
17711
17712 PARAMETERS
17713 pEventData: Response from FW
17714 pUserData:
17715===========================================================================*/
17716void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17717{
17718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17719 tWDA_CbContext *pWDA = NULL;
17720 void *pCallbackContext;
17721 tpAniSirGlobal pMac;
17722
17723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17724 "%s:", __func__);
17725 if (NULL == pWdaParams)
17726 {
17727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17728 "%s: pWdaParams received NULL", __func__);
17729 VOS_ASSERT(0);
17730 return;
17731 }
17732
17733 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17734
17735 if (NULL == pWDA)
17736 {
17737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17738 "%s: pWDA received NULL", __func__);
17739 VOS_ASSERT(0);
17740 goto error;
17741 }
17742
17743 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17744 if (NULL == pMac)
17745 {
17746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17747 "%s:pMac is NULL", __func__);
17748 VOS_ASSERT(0);
17749 goto error;
17750 }
17751
17752 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17753
17754 if (pMac->sme.pEXTScanIndCb)
17755 {
17756 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17757 pEventData);
17758 }
17759 else
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17762 "%s:HDD callback is null", __func__);
17763 VOS_ASSERT(0);
17764 }
17765
17766error:
17767
17768 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17769 {
17770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17771 }
17772 if (pWdaParams->wdaMsgParam != NULL)
17773 {
17774 vos_mem_free(pWdaParams->wdaMsgParam);
17775 }
17776 vos_mem_free(pWdaParams) ;
17777
17778 return;
17779}
17780
17781/*==========================================================================
17782 FUNCTION WDA_EXTScanStopRspCallback
17783
17784 DESCRIPTION
17785 API to send EXTScan Stop Response to HDD
17786
17787 PARAMETERS
17788 pEventData: Response from FW
17789 pUserData:
17790===========================================================================*/
17791void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17792{
17793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17794 tWDA_CbContext *pWDA = NULL;
17795 void *pCallbackContext;
17796 tpAniSirGlobal pMac;
17797
17798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17799 "%s:", __func__);
17800 if (NULL == pWdaParams)
17801 {
17802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17803 "%s: pWdaParams received NULL", __func__);
17804 VOS_ASSERT(0);
17805 return;
17806 }
17807
17808 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17809
17810 if (NULL == pWDA)
17811 {
17812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17813 "%s: pWDA received NULL", __func__);
17814 VOS_ASSERT(0);
17815 goto error;
17816 }
17817
17818 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17819 if (NULL == pMac)
17820 {
17821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17822 "%s:pMac is NULL", __func__);
17823 VOS_ASSERT(0);
17824 goto error;
17825 }
17826 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17827
17828 if (pMac->sme.pEXTScanIndCb)
17829 {
17830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17831 "%s:HDD call back function called", __func__);
17832 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17833 pEventData);
17834 }
17835 else
17836 {
17837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17838 "%s:HDD callback is null", __func__);
17839 VOS_ASSERT(0);
17840 }
17841
17842error:
17843
17844 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17845 {
17846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17847 }
17848 if (pWdaParams->wdaMsgParam != NULL)
17849 {
17850 vos_mem_free(pWdaParams->wdaMsgParam);
17851 }
17852 vos_mem_free(pWdaParams) ;
17853
17854
17855 return;
17856}
17857
17858/*==========================================================================
17859 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17860
17861 DESCRIPTION
17862 API to send EXTScan Get Cached Results Response to HDD
17863
17864 PARAMETERS
17865 pEventData: Response from FW
17866 pUserData:
17867===========================================================================*/
17868void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17869{
17870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17871 tWDA_CbContext *pWDA = NULL;
17872 void *pCallbackContext;
17873 tpAniSirGlobal pMac;
17874
17875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17876 "%s: ", __func__);
17877 if (NULL == pWdaParams)
17878 {
17879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17880 "%s: pWdaParams received NULL", __func__);
17881 VOS_ASSERT(0);
17882 return;
17883 }
17884
17885 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17886
17887 if (NULL == pWDA)
17888 {
17889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17890 "%s: pWDA received NULL", __func__);
17891 VOS_ASSERT(0);
17892 goto error;
17893 }
17894
17895 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17896 if (NULL == pMac)
17897 {
17898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17899 "%s:pMac is NULL", __func__);
17900 VOS_ASSERT(0);
17901 goto error;
17902 }
17903
17904 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17905
17906 if (pMac->sme.pEXTScanIndCb)
17907 {
17908 pMac->sme.pEXTScanIndCb(pCallbackContext,
17909 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17910 pEventData);
17911 }
17912 else
17913 {
17914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17915 "%s:HDD callback is null", __func__);
17916 VOS_ASSERT(0);
17917 }
17918
17919
17920error:
17921
17922 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17923 {
17924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17925 }
17926 if (pWdaParams->wdaMsgParam != NULL)
17927 {
17928 vos_mem_free(pWdaParams->wdaMsgParam);
17929 }
17930 vos_mem_free(pWdaParams) ;
17931
17932 return;
17933}
17934
17935/*==========================================================================
17936 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17937
17938 DESCRIPTION
17939 API to send EXTScan Get Capabilities Response to HDD
17940
17941 PARAMETERS
17942 pEventData: Response from FW
17943 pUserData:
17944===========================================================================*/
17945void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17946{
17947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17948 tWDA_CbContext *pWDA = NULL;
17949 void *pCallbackContext;
17950 tpAniSirGlobal pMac;
17951
17952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17953 "%s:", __func__);
17954 if (NULL == pWdaParams)
17955 {
17956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17957 "%s: pWdaParams received NULL", __func__);
17958 VOS_ASSERT(0);
17959 return;
17960 }
17961
17962 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17963
17964 if (NULL == pWDA)
17965 {
17966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17967 "%s: pWDA received NULL", __func__);
17968 VOS_ASSERT(0);
17969 goto error;
17970 }
17971
17972 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17973 if (NULL == pMac)
17974 {
17975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17976 "%s:pMac is NULL", __func__);
17977 VOS_ASSERT(0);
17978 goto error;
17979 }
17980
17981 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17982
17983 if (pMac->sme.pEXTScanIndCb)
17984 {
17985 pMac->sme.pEXTScanIndCb(pCallbackContext,
17986 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17987 pEventData);
17988 }
17989 else
17990 {
17991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17992 "%s:HDD callback is null", __func__);
17993 VOS_ASSERT(0);
17994 }
17995
17996
17997error:
17998
17999 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18000 {
18001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18002 }
18003 if (pWdaParams->wdaMsgParam != NULL)
18004 {
18005 vos_mem_free(pWdaParams->wdaMsgParam);
18006 }
18007 vos_mem_free(pWdaParams) ;
18008
18009 return;
18010}
18011
18012/*==========================================================================
18013 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
18014
18015 DESCRIPTION
18016 API to send EXTScan Set BSSID Hotlist Response to HDD
18017
18018 PARAMETERS
18019 pEventData: Response from FW
18020 pUserData:
18021===========================================================================*/
18022void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18023{
18024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18025 tWDA_CbContext *pWDA = NULL;
18026 void *pCallbackContext;
18027 tpAniSirGlobal pMac;
18028
18029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18030 "%s: ", __func__);
18031 if (NULL == pWdaParams)
18032 {
18033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18034 "%s: pWdaParams received NULL", __func__);
18035 VOS_ASSERT(0) ;
18036 return;
18037 }
18038
18039 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18040
18041 if (NULL == pWDA)
18042 {
18043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18044 "%s: pWDA received NULL", __func__);
18045 VOS_ASSERT(0);
18046 goto error;
18047 }
18048
18049 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18050 if (NULL == pMac)
18051 {
18052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18053 "%s:pMac is NULL", __func__);
18054 VOS_ASSERT(0);
18055 goto error;
18056 }
18057
18058 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18059
18060 if (pMac->sme.pEXTScanIndCb)
18061 {
18062 pMac->sme.pEXTScanIndCb(pCallbackContext,
18063 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
18064 pEventData);
18065 }
18066 else
18067 {
18068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18069 "%s:HDD callback is null", __func__);
18070 VOS_ASSERT(0);
18071 }
18072
18073
18074error:
18075
18076 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18077 {
18078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18079 }
18080 if (pWdaParams->wdaMsgParam != NULL)
18081 {
18082 vos_mem_free(pWdaParams->wdaMsgParam);
18083 }
18084 vos_mem_free(pWdaParams) ;
18085
18086 return;
18087}
18088
18089/*==========================================================================
18090 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
18091
18092 DESCRIPTION
18093 API to send EXTScan ReSet BSSID Hotlist Response to HDD
18094
18095 PARAMETERS
18096 pEventData: Response from FW
18097 pUserData:
18098===========================================================================*/
18099void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18100{
18101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18102 tWDA_CbContext *pWDA = NULL;
18103 void *pCallbackContext;
18104 tpAniSirGlobal pMac;
18105
18106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18107 "%s:", __func__);
18108 if (NULL == pWdaParams)
18109 {
18110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18111 "%s: pWdaParams received NULL", __func__);
18112 VOS_ASSERT(0) ;
18113 return;
18114 }
18115
18116 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18117
18118 if (NULL == pWDA)
18119 {
18120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18121 "%s: pWDA received NULL", __func__);
18122 VOS_ASSERT(0);
18123 goto error;
18124 }
18125
18126 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18127 if (NULL == pMac)
18128 {
18129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18130 "%s:pMac is NULL", __func__);
18131 VOS_ASSERT(0);
18132 goto error;
18133 }
18134
18135 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18136
18137 if (pMac->sme.pEXTScanIndCb)
18138 {
18139 pMac->sme.pEXTScanIndCb(pCallbackContext,
18140 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18141 pEventData);
18142 }
18143 else
18144 {
18145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18146 "%s:HDD callback is null", __func__);
18147 VOS_ASSERT(0);
18148 }
18149
18150
18151error:
18152
18153 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18154 {
18155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18156 }
18157 if (pWdaParams->wdaMsgParam != NULL)
18158 {
18159 vos_mem_free(pWdaParams->wdaMsgParam);
18160 }
18161 vos_mem_free(pWdaParams) ;
18162
18163 return;
18164}
18165
18166/*==========================================================================
18167 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18168
18169 DESCRIPTION
18170 API to send EXTScan Set Significant RSSI Change RSP to HDD
18171
18172 PARAMETERS
18173 pEventData: Response from FW
18174 pUserData:
18175===========================================================================*/
18176void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18177{
18178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18179 tWDA_CbContext *pWDA = NULL;
18180 void *pCallbackContext;
18181 tpAniSirGlobal pMac;
18182
18183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18184 "%s:", __func__);
18185 if (NULL == pWdaParams)
18186 {
18187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18188 "%s: pWdaParams received NULL", __func__);
18189 VOS_ASSERT(0) ;
18190 return;
18191 }
18192
18193 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18194
18195 if (NULL == pWDA)
18196 {
18197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18198 "%s: pWDA received NULL", __func__);
18199 VOS_ASSERT(0);
18200 goto error;
18201 }
18202
18203 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18204 if (NULL == pMac)
18205 {
18206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18207 "%s:pMac is NULL", __func__);
18208 VOS_ASSERT(0);
18209 goto error;
18210 }
18211
18212 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18213
18214 if (pMac->sme.pEXTScanIndCb)
18215 {
18216 pMac->sme.pEXTScanIndCb(pCallbackContext,
18217 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18218 pEventData);
18219 }
18220 else
18221 {
18222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18223 "%s:HDD callback is null", __func__);
18224 VOS_ASSERT(0);
18225 }
18226
18227
18228error:
18229
18230 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18231 {
18232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18233 }
18234 if (pWdaParams->wdaMsgParam != NULL)
18235 {
18236 vos_mem_free(pWdaParams->wdaMsgParam);
18237 }
18238 vos_mem_free(pWdaParams) ;
18239
18240 return;
18241}
18242
18243/*==========================================================================
18244 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18245
18246 DESCRIPTION
18247 API to send EXTScan Set Significant RSSI Change RSP to HDD
18248
18249 PARAMETERS
18250 pEventData: Response from FW
18251 pUserData:
18252===========================================================================*/
18253void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18254 void* pUserData)
18255{
18256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18257 tWDA_CbContext *pWDA = NULL;
18258 void *pCallbackContext;
18259 tpAniSirGlobal pMac;
18260
18261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18262 "%s:", __func__);
18263 if (NULL == pWdaParams)
18264 {
18265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18266 "%s: pWdaParams received NULL", __func__);
18267 VOS_ASSERT(0) ;
18268 return;
18269 }
18270
18271 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18272
18273 if (NULL == pWDA)
18274 {
18275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18276 "%s: pWDA received NULL", __func__);
18277 VOS_ASSERT(0);
18278 goto error;
18279 }
18280
18281 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18282 if (NULL == pMac)
18283 {
18284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18285 "%s:pMac is NULL", __func__);
18286 VOS_ASSERT(0);
18287 goto error;
18288 }
18289
18290 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18291
18292 if (pMac->sme.pEXTScanIndCb)
18293 {
18294 pMac->sme.pEXTScanIndCb(pCallbackContext,
18295 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18296 pEventData);
18297 }
18298 else
18299 {
18300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18301 "%s:HDD callback is null", __func__);
18302 VOS_ASSERT(0);
18303 }
18304
18305
18306error:
18307
18308 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18309 {
18310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18311 }
18312 if (pWdaParams->wdaMsgParam != NULL)
18313 {
18314 vos_mem_free(pWdaParams->wdaMsgParam);
18315 }
18316 vos_mem_free(pWdaParams) ;
18317
18318 return;
18319}
18320
18321/*==========================================================================
18322 FUNCTION WDA_ProcessEXTScanStartReq
18323
18324 DESCRIPTION
18325 API to send EXTScan Start Request to WDI
18326
18327 PARAMETERS
18328 pWDA: Pointer to WDA context
18329 wdaRequest: Pointer to EXTScan req parameters
18330===========================================================================*/
18331VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18332 tSirEXTScanStartReqParams *wdaRequest)
18333{
18334 WDI_Status status = WDI_STATUS_SUCCESS;
18335 tWDA_ReqParams *pWdaParams;
18336
18337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18338 "%s: ", __func__);
18339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18340 if (NULL == pWdaParams)
18341 {
18342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18343 "%s: VOS MEM Alloc Failure", __func__);
18344 VOS_ASSERT(0);
18345 return VOS_STATUS_E_NOMEM;
18346 }
18347 pWdaParams->pWdaContext = pWDA;
18348 pWdaParams->wdaMsgParam = wdaRequest;
18349 pWdaParams->wdaWdiApiMsgParam = NULL;
18350
18351 status = WDI_EXTScanStartReq((void *)wdaRequest,
18352 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18353 (void *)pWdaParams);
18354 if (IS_WDI_STATUS_FAILURE(status))
18355 {
18356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18357 "Failure to request. Free all the memory " );
18358 vos_mem_free(pWdaParams->wdaMsgParam);
18359 vos_mem_free(pWdaParams);
18360 }
18361 return CONVERT_WDI2VOS_STATUS(status);
18362}
18363
18364/*==========================================================================
18365 FUNCTION WDA_ProcessEXTScanStopReq
18366
18367 DESCRIPTION
18368 API to send EXTScan Start Request to WDI
18369
18370 PARAMETERS
18371 pWDA: Pointer to WDA context
18372 wdaRequest: Pointer to EXTScan req parameters
18373===========================================================================*/
18374VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18375 tSirEXTScanStopReqParams *wdaRequest)
18376{
18377 WDI_Status status = WDI_STATUS_SUCCESS;
18378 tWDA_ReqParams *pWdaParams;
18379
18380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18381 "%s:", __func__);
18382 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18383 if (NULL == pWdaParams)
18384 {
18385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18386 "%s: VOS MEM Alloc Failure", __func__);
18387 VOS_ASSERT(0);
18388 return VOS_STATUS_E_NOMEM;
18389 }
18390 pWdaParams->pWdaContext = pWDA;
18391 pWdaParams->wdaMsgParam = wdaRequest;
18392 pWdaParams->wdaWdiApiMsgParam = NULL;
18393
18394 status = WDI_EXTScanStopReq((void *)wdaRequest,
18395 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18396 (void *)pWdaParams);
18397 if (IS_WDI_STATUS_FAILURE(status))
18398 {
18399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18400 "Failure to request. Free all the memory " );
18401 vos_mem_free(pWdaParams->wdaMsgParam);
18402 vos_mem_free(pWdaParams);
18403 }
18404 return CONVERT_WDI2VOS_STATUS(status);
18405}
18406
18407/*==========================================================================
18408 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18409
18410 DESCRIPTION
18411 API to send EXTScan Get Cached Results Request to WDI
18412
18413 PARAMETERS
18414 pWDA: Pointer to WDA context
18415 wdaRequest: Pointer to EXTScan req parameters
18416===========================================================================*/
18417VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18418 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18419{
18420 WDI_Status status = WDI_STATUS_SUCCESS;
18421 tWDA_ReqParams *pWdaParams;
18422
18423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18424 "%s: ", __func__);
18425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18426 if (NULL == pWdaParams)
18427 {
18428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18429 "%s: VOS MEM Alloc Failure", __func__);
18430 VOS_ASSERT(0);
18431 return VOS_STATUS_E_NOMEM;
18432 }
18433 pWdaParams->pWdaContext = pWDA;
18434 pWdaParams->wdaMsgParam = wdaRequest;
18435 pWdaParams->wdaWdiApiMsgParam = NULL;
18436
18437 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18438 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18439 (void *)pWdaParams);
18440 if (IS_WDI_STATUS_FAILURE(status))
18441 {
18442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18443 "Failure to request. Free all the memory " );
18444 vos_mem_free(pWdaParams->wdaMsgParam);
18445 vos_mem_free(pWdaParams);
18446 }
18447 return CONVERT_WDI2VOS_STATUS(status);
18448}
18449
18450/*==========================================================================
18451 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18452
18453 DESCRIPTION
18454 API to send EXTScan Get Capabilities Request to WDI
18455
18456 PARAMETERS
18457 pWDA: Pointer to WDA context
18458 wdaRequest: Pointer to EXTScan req parameters
18459===========================================================================*/
18460VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18461 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18462{
18463 WDI_Status status = WDI_STATUS_SUCCESS;
18464 tWDA_ReqParams *pWdaParams;
18465
18466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18467 "%s:", __func__);
18468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18469 if (NULL == pWdaParams)
18470 {
18471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18472 "%s: VOS MEM Alloc Failure", __func__);
18473 VOS_ASSERT(0);
18474 return VOS_STATUS_E_NOMEM;
18475 }
18476 pWdaParams->pWdaContext = pWDA;
18477 pWdaParams->wdaMsgParam = wdaRequest;
18478 pWdaParams->wdaWdiApiMsgParam = NULL;
18479
18480 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18481 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18482 (void *)pWdaParams);
18483 if (IS_WDI_STATUS_FAILURE(status))
18484 {
18485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18486 "Failure to request. Free all the memory " );
18487 vos_mem_free(pWdaParams->wdaMsgParam);
18488 vos_mem_free(pWdaParams);
18489 }
18490 return CONVERT_WDI2VOS_STATUS(status);
18491}
18492
18493/*==========================================================================
18494 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18495
18496 DESCRIPTION
18497 API to send Set BSSID Hotlist Request to WDI
18498
18499 PARAMETERS
18500 pWDA: Pointer to WDA context
18501 wdaRequest: Pointer to EXTScan req parameters
18502===========================================================================*/
18503VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18504 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18505{
18506 WDI_Status status = WDI_STATUS_SUCCESS;
18507 tWDA_ReqParams *pWdaParams;
18508
18509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18510 "%s: ", __func__);
18511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18512 if (NULL == pWdaParams)
18513 {
18514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18515 "%s: VOS MEM Alloc Failure", __func__);
18516 VOS_ASSERT(0);
18517 return VOS_STATUS_E_NOMEM;
18518 }
18519 pWdaParams->pWdaContext = pWDA;
18520 pWdaParams->wdaMsgParam = wdaRequest;
18521 pWdaParams->wdaWdiApiMsgParam = NULL;
18522
18523 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18524 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18525 (void *)pWdaParams);
18526 if (IS_WDI_STATUS_FAILURE(status))
18527 {
18528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18529 "Failure to request. Free all the memory " );
18530 vos_mem_free(pWdaParams->wdaMsgParam);
18531 vos_mem_free(pWdaParams);
18532 }
18533 return CONVERT_WDI2VOS_STATUS(status);
18534}
18535
18536/*==========================================================================
18537 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18538
18539 DESCRIPTION
18540 API to send Reset BSSID Hotlist Request to WDI
18541
18542 PARAMETERS
18543 pWDA: Pointer to WDA context
18544 wdaRequest: Pointer to EXTScan req parameters
18545===========================================================================*/
18546VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18547 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18548{
18549 WDI_Status status = WDI_STATUS_SUCCESS;
18550 tWDA_ReqParams *pWdaParams;
18551
18552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18553 "%s:", __func__);
18554 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18555 if (NULL == pWdaParams)
18556 {
18557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18558 "%s: VOS MEM Alloc Failure", __func__);
18559 VOS_ASSERT(0);
18560 return VOS_STATUS_E_NOMEM;
18561 }
18562 pWdaParams->pWdaContext = pWDA;
18563 pWdaParams->wdaMsgParam = wdaRequest;
18564 pWdaParams->wdaWdiApiMsgParam = NULL;
18565
18566 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18567 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18568 (void *)pWdaParams);
18569 if (IS_WDI_STATUS_FAILURE(status))
18570 {
18571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18572 "Failure to request. Free all the memory " );
18573 vos_mem_free(pWdaParams->wdaMsgParam);
18574 vos_mem_free(pWdaParams);
18575 }
18576 return CONVERT_WDI2VOS_STATUS(status);
18577}
18578
18579/*==========================================================================
18580 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18581
18582 DESCRIPTION
18583 API to send Set Significant RSSI Change Request to WDI
18584
18585 PARAMETERS
18586 pWDA: Pointer to WDA context
18587 wdaRequest: Pointer to EXTScan req parameters
18588===========================================================================*/
18589VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18590 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18591{
18592 WDI_Status status = WDI_STATUS_SUCCESS;
18593 tWDA_ReqParams *pWdaParams;
18594
18595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18596 "%s: ", __func__);
18597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18598 if (NULL == pWdaParams)
18599 {
18600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18601 "%s: VOS MEM Alloc Failure", __func__);
18602 VOS_ASSERT(0);
18603 return VOS_STATUS_E_NOMEM;
18604 }
18605 pWdaParams->pWdaContext = pWDA;
18606 pWdaParams->wdaMsgParam = wdaRequest;
18607 pWdaParams->wdaWdiApiMsgParam = NULL;
18608
18609 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18610 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18611 (void *)pWdaParams);
18612 if (IS_WDI_STATUS_FAILURE(status))
18613 {
18614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18615 "Failure to request. Free all the memory " );
18616 vos_mem_free(pWdaParams->wdaMsgParam);
18617 vos_mem_free(pWdaParams);
18618 }
18619 return CONVERT_WDI2VOS_STATUS(status);
18620}
18621
18622/*==========================================================================
18623 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18624
18625 DESCRIPTION
18626 API to send Reset Significant RSSI Change Request to WDI
18627
18628 PARAMETERS
18629 pWDA: Pointer to WDA context
18630 wdaRequest: Pointer to EXTScan req parameters
18631===========================================================================*/
18632VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18633 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18634{
18635 WDI_Status status = WDI_STATUS_SUCCESS;
18636 tWDA_ReqParams *pWdaParams;
18637
18638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18639 "%s:", __func__);
18640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18641 if (NULL == pWdaParams)
18642 {
18643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18644 "%s: VOS MEM Alloc Failure", __func__);
18645 VOS_ASSERT(0);
18646 return VOS_STATUS_E_NOMEM;
18647 }
18648 pWdaParams->pWdaContext = pWDA;
18649 pWdaParams->wdaMsgParam = wdaRequest;
18650 pWdaParams->wdaWdiApiMsgParam = NULL;
18651
18652 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18653 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18654 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18655 (void *)pWdaParams);
18656 if (IS_WDI_STATUS_FAILURE(status))
18657 {
18658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18659 "Failure to request. Free all the memory " );
18660 vos_mem_free(pWdaParams->wdaMsgParam);
18661 vos_mem_free(pWdaParams);
18662 }
18663 return CONVERT_WDI2VOS_STATUS(status);
18664}
18665#endif /* WLAN_FEATURE_EXTSCAN */
18666
Sunil Duttbd736ed2014-05-26 21:19:41 +053018667#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18668
18669/*==========================================================================
18670 FUNCTION WDA_LLStatsSetRspCallback
18671
18672 DESCRIPTION
18673 API to process set link layer statistics response from FW
18674
18675 PARAMETERS
18676 pRsp: Pointer to set link layer statistics response
18677 pUserData: Pointer to user data
18678
18679 RETURN VALUE
18680 NONE
18681
18682===========================================================================*/
18683void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18684{
18685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18686
18687
18688 if (NULL == pWdaParams)
18689 {
18690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18691 "%s: pWdaParams received NULL", __func__);
18692 VOS_ASSERT(0) ;
18693 return ;
18694 }
18695
18696 /* Do not need to send notification to upper layer
18697 * Just free allocated resources */
18698 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18699 {
18700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18701 }
18702 if (pWdaParams->wdaMsgParam != NULL)
18703 {
18704 vos_mem_free(pWdaParams->wdaMsgParam);
18705 }
18706 vos_mem_free(pWdaParams) ;
18707
18708 return;
18709}
18710
18711/*==========================================================================
18712 FUNCTION WDA_ProcessLLStatsSetReq
18713
18714 DESCRIPTION
18715 API to send Set Link Layer Stats request to WDI
18716
18717 PARAMETERS
18718 pWDA: Pointer to WDA context
18719 wdaRequest: Pointer to set Link Layer Stats req parameters
18720===========================================================================*/
18721VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18722 tSirLLStatsSetReq *wdaRequest)
18723{
18724 WDI_Status status = WDI_STATUS_SUCCESS;
18725 tWDA_ReqParams *pWdaParams;
18726
18727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18728 if (NULL == pWdaParams)
18729 {
18730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18731 "%s: VOS MEM Alloc Failure", __func__);
18732 VOS_ASSERT(0);
18733 return VOS_STATUS_E_NOMEM;
18734 }
18735 pWdaParams->pWdaContext = pWDA;
18736 pWdaParams->wdaMsgParam = wdaRequest;
18737 pWdaParams->wdaWdiApiMsgParam = NULL;
18738
18739 status = WDI_LLStatsSetReq((void *)wdaRequest,
18740 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18741 (void *)pWdaParams);
18742 if (IS_WDI_STATUS_FAILURE(status))
18743 {
18744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18745 "Failure to request. Free all the memory " );
18746 vos_mem_free(pWdaParams->wdaMsgParam);
18747 vos_mem_free(pWdaParams);
18748 }
18749 return CONVERT_WDI2VOS_STATUS(status);
18750}
18751
18752/*==========================================================================
18753 FUNCTION WDA_LLStatsGetRspCallback
18754
18755 DESCRIPTION
18756 API to process get link layer statistics response from FW
18757
18758 PARAMETERS
18759 pRsp: Pointer to get link layer statistics response
18760 pUserData: Pointer to user data
18761
18762 RETURN VALUE
18763 NONE
18764
18765===========================================================================*/
18766void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18767{
18768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18769
18770 if (NULL == pWdaParams)
18771 {
18772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18773 "%s: pWdaParams received NULL", __func__);
18774 VOS_ASSERT(0) ;
18775 return ;
18776 }
18777
18778 /* Do not need to send notification to upper layer
18779 * Just free allocated resources */
18780 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18781 {
18782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18783 }
18784 if (pWdaParams->wdaMsgParam != NULL)
18785 {
18786 vos_mem_free(pWdaParams->wdaMsgParam);
18787 }
18788 vos_mem_free(pWdaParams) ;
18789
18790 return;
18791}
18792
18793/*==========================================================================
18794 FUNCTION WDA_ProcessLLStatsGetReq
18795
18796 DESCRIPTION
18797 API to send Get Link Layer Stats request to WDI
18798
18799 PARAMETERS
18800 pWDA: Pointer to WDA context
18801 wdaRequest: Pointer to get Link Layer Stats req parameters
18802===========================================================================*/
18803VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18804 tSirLLStatsGetReq *wdaRequest)
18805{
18806 WDI_Status status = WDI_STATUS_SUCCESS;
18807 tWDA_ReqParams *pWdaParams;
18808
18809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18810 if (NULL == pWdaParams)
18811 {
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18813 "%s: VOS MEM Alloc Failure", __func__);
18814 VOS_ASSERT(0);
18815 return VOS_STATUS_E_NOMEM;
18816 }
18817 pWdaParams->pWdaContext = pWDA;
18818 pWdaParams->wdaMsgParam = wdaRequest;
18819 pWdaParams->wdaWdiApiMsgParam = NULL;
18820
18821 status = WDI_LLStatsGetReq((void *) wdaRequest,
18822 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18823 (void *)pWdaParams);
18824 if (IS_WDI_STATUS_FAILURE(status))
18825 {
18826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18827 "Failure to request. Free all the memory " );
18828 vos_mem_free(pWdaParams->wdaMsgParam);
18829 vos_mem_free(pWdaParams);
18830 }
18831 return CONVERT_WDI2VOS_STATUS(status);
18832}
18833
18834/*==========================================================================
18835 FUNCTION WDA_LLStatsClearRspCallback
18836
18837 DESCRIPTION
18838 API to process clear link layer statistics response from FW
18839
18840 PARAMETERS
18841 pRsp: Pointer to clear link layer statistics response
18842 pUserData: Pointer to user data
18843
18844 RETURN VALUE
18845 NONE
18846
18847===========================================================================*/
18848void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18849{
18850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18851
18852
18853 if (NULL == pWdaParams)
18854 {
18855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18856 "%s: pWdaParams received NULL", __func__);
18857 VOS_ASSERT(0) ;
18858 return ;
18859 }
18860 /* Do not need to send notification to upper layer
18861 * Just free allocated resources */
18862 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18863 {
18864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18865 }
18866 if (pWdaParams->wdaMsgParam != NULL)
18867 {
18868 vos_mem_free(pWdaParams->wdaMsgParam);
18869 }
18870 vos_mem_free(pWdaParams) ;
18871 return;
18872}
18873
18874/*==========================================================================
18875 FUNCTION WDA_ProcessLLStatsClearReq
18876
18877 DESCRIPTION
18878 API to send Clear Link Layer Stats request to WDI
18879
18880 PARAMETERS
18881 pWDA: Pointer to WDA context
18882 wdaRequest: Pointer to earLink Layer Stats req
18883===========================================================================*/
18884VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18885 tSirLLStatsClearReq *wdaRequest)
18886{
18887 WDI_Status status = WDI_STATUS_SUCCESS;
18888 tWDA_ReqParams *pWdaParams;
18889
18890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18891 if (NULL == pWdaParams)
18892 {
18893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18894 "%s: VOS MEM Alloc Failure", __func__);
18895 VOS_ASSERT(0);
18896 return VOS_STATUS_E_NOMEM;
18897 }
18898 pWdaParams->pWdaContext = pWDA;
18899 pWdaParams->wdaMsgParam = wdaRequest;
18900 pWdaParams->wdaWdiApiMsgParam = NULL;
18901
18902 status = WDI_LLStatsClearReq((void *) wdaRequest,
18903 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18904 (void *)pWdaParams);
18905 if (IS_WDI_STATUS_FAILURE(status))
18906 {
18907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18908 "Failure to request. Free all the memory " );
18909 vos_mem_free(pWdaParams->wdaMsgParam);
18910 vos_mem_free(pWdaParams);
18911 }
18912 return CONVERT_WDI2VOS_STATUS(status);
18913}
18914
18915#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018916
Abhishek Singh85b74712014-10-08 11:38:19 +053018917void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18918{
18919 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18920
18921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18922 "<------ %s " ,__func__);
18923 if (NULL == fwStatsinfo)
18924 {
18925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18926 "%s: pWdaParams received NULL", __func__);
18927 VOS_ASSERT(0);
18928 return;
18929 }
18930
18931 if(fwStatsinfo->callback)
18932 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18933
18934 vos_mem_free(pUserData);
18935 return;
18936}
18937
18938
18939v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18940 tSirFWStatsGetReq *pData)
18941{
18942
18943 WDI_Status wdiStatus;
18944 tSirFWStatsInfo *fwStatsinfo;
18945
18946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18947 "------> %s" , __func__);
18948
18949 fwStatsinfo =
18950 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18951 if (NULL == fwStatsinfo)
18952 {
18953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18954 "%s: VOS MEM Alloc Failure", __func__);
18955 VOS_ASSERT(0);
18956 vos_mem_free(pData);
18957 return;
18958 }
18959
18960 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18961 fwStatsinfo->data = pData->data;
18962
18963 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18964 WDA_FWStatsGetRspCallback,
18965 pData->stats);
18966 if (WDI_STATUS_PENDING == wdiStatus)
18967 {
18968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18969 "Pending received for %s:%d ", __func__, __LINE__);
18970 }
18971 else if (WDI_STATUS_SUCCESS != wdiStatus)
18972 {
18973 if (fwStatsinfo->callback)
18974 {
18975 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18976 }
18977 vos_mem_free(fwStatsinfo);
18978 }
18979 vos_mem_free(pData);
18980}
18981
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018982/*==========================================================================
18983 FUNCTION WDA_EncryptMsgRspCallback
18984
18985 DESCRIPTION
18986 API to send Encrypt message response to HDD
18987
18988 PARAMETERS
18989 pEventData: Response from FW
18990 pUserData: Data sent to firmware as part of request
18991===========================================================================*/
18992void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18993 void* pUserData)
18994{
18995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18996 tWDA_CbContext *pWDA = NULL;
18997 tpAniSirGlobal pMac;
18998 vos_msg_t vosMsg;
18999 tpSirEncryptedDataRspParams pEncRspParams;
19000 tpSetEncryptedDataRspParams pEncryptedDataRsp;
19001
19002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19003 FL("%s:"), __func__);
19004 if (NULL == pWdaParams)
19005 {
19006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19007 FL("%s: pWdaParams received NULL"), __func__);
19008 VOS_ASSERT(0);
19009 return;
19010 }
19011
19012 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19013
19014 if (NULL == pWDA)
19015 {
19016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19017 FL("%s: pWDA received NULL"), __func__);
19018 VOS_ASSERT(0);
19019 goto error;
19020 }
19021
19022 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19023 if (NULL == pMac)
19024 {
19025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19026 FL("%s:pMac is NULL"), __func__);
19027 VOS_ASSERT(0);
19028 goto error;
19029 }
19030
19031 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
19032
19033 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
19034 if (NULL == pEncRspParams)
19035 {
19036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19037 FL("%s: VOS MEM Alloc Failure"), __func__);
19038 VOS_ASSERT(0);
19039 goto error;
19040 }
19041
19042 /* Message Header */
19043 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
19044 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
19045 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
19046 pEncryptedDataRsp->encryptedPayload.length;
19047 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
19048 pEncryptedDataRsp->encryptedPayload.data,
19049 pEncryptedDataRsp->encryptedPayload.length);
19050
19051 /* VOS message wrapper */
19052 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
19053 vosMsg.bodyptr = (void *)pEncRspParams;
19054 vosMsg.bodyval = 0;
19055
19056 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19057 {
19058 /* free the mem */
19059 vos_mem_free((v_VOID_t *) pEncRspParams);
19060 }
19061
19062error:
19063
19064 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19065 {
19066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19067 }
19068 if (pWdaParams->wdaMsgParam != NULL)
19069 {
19070 vos_mem_free(pWdaParams->wdaMsgParam);
19071 }
19072 vos_mem_free(pWdaParams) ;
19073
19074 return;
19075}
19076/*==========================================================================
19077 FUNCTION WDA_ProcessEncryptMsgReq
19078
19079 DESCRIPTION
19080 API to send Encrypt message Request to WDI
19081
19082 PARAMETERS
19083 pWDA: Pointer to WDA context
19084 wdaRequest: Pointer to Encrypt_msg req parameters
19085===========================================================================*/
19086VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
19087 u8 *wdaRequest)
19088{
19089 WDI_Status status = WDI_STATUS_SUCCESS;
19090 tWDA_ReqParams *pWdaParams;
19091
19092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19093 FL("%s: "), __func__);
19094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19095 if (NULL == pWdaParams)
19096 {
19097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19098 FL("%s: VOS MEM Alloc Failure"), __func__);
19099 VOS_ASSERT(0);
19100 return VOS_STATUS_E_NOMEM;
19101 }
19102 pWdaParams->pWdaContext = pWDA;
19103 pWdaParams->wdaMsgParam = wdaRequest;
19104 pWdaParams->wdaWdiApiMsgParam = NULL;
19105
19106 status = WDI_EncryptMsgReq((void *)wdaRequest,
19107 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19108 (void *)pWdaParams);
19109 if (IS_WDI_STATUS_FAILURE(status))
19110 {
19111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19112 FL("Failure to request. Free all the memory " ));
19113 vos_mem_free(pWdaParams->wdaMsgParam);
19114 vos_mem_free(pWdaParams);
19115 }
19116 return CONVERT_WDI2VOS_STATUS(status);
19117}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019118/*==========================================================================
19119 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19120
19121 DESCRIPTION
19122 API to enable/disable RTS/CTS for different modes.
19123
19124 PARAMETERS
19125 pWDA: Pointer to WDA context
19126 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19127===========================================================================*/
19128
19129VOS_STATUS
19130WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19131 tANI_U32 rtsCtsVal)
19132{
19133 WDI_Status status;
19134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19135 FL("---> %s"), __func__);
19136 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19137 if (WDI_STATUS_PENDING == status)
19138 {
19139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19140 FL("pending status received "));
19141 }
19142 else if (WDI_STATUS_SUCCESS_SYNC != status)
19143 {
19144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19145 FL("Failure status %d"), status);
19146 }
19147 return CONVERT_WDI2VOS_STATUS(status) ;
19148}
Katya Nigamf0511f62015-05-05 16:40:57 +053019149void WDA_MonStartRspCallback(void *pEventData, void* pUserData)
19150{
19151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19152
19153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19154 "<------ %s " ,__func__);
19155 if (NULL == pWdaParams)
19156 {
19157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19158 "%s: pWdaParams received NULL", __func__);
19159 VOS_ASSERT(0) ;
19160 return ;
19161 }
19162
19163 vos_mem_free(pWdaParams) ;
19164
19165 return;
19166}
19167
19168
19169VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest)
19170{
19171
19172 WDI_Status status = WDI_STATUS_SUCCESS;
19173 tWDA_ReqParams *pWdaParams;
19174
19175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19176 FL("%s: "), __func__);
19177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19178 if (NULL == pWdaParams)
19179 {
19180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19181 FL("%s: VOS MEM Alloc Failure"), __func__);
19182 VOS_ASSERT(0);
19183 return VOS_STATUS_E_NOMEM;
19184 }
19185 pWdaParams->pWdaContext = pWDA;
19186 pWdaParams->wdaMsgParam = wdaRequest;
19187 pWdaParams->wdaWdiApiMsgParam = NULL;
19188
19189 status = WDI_MonStartReq((void *)wdaRequest,
19190 (WDI_MonStartRspCb)WDA_MonStartRspCallback,
19191 (void *)pWdaParams);
19192 if (IS_WDI_STATUS_FAILURE(status))
19193 {
19194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19195 "Failure to request. Free all the memory " );
19196 vos_mem_free(pWdaParams->wdaMsgParam);
19197 vos_mem_free(pWdaParams);
19198 }
19199 return CONVERT_WDI2VOS_STATUS(status);
19200}
19201
19202void WDA_MonStopRspCallback(void* pUserData)
19203{
19204 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19205
19206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19207 "<------ %s " ,__func__);
19208 if (NULL == pWdaParams)
19209 {
19210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19211 "%s: pWdaParams received NULL", __func__);
19212 VOS_ASSERT(0) ;
19213 return ;
19214 }
19215
19216 vos_mem_free(pWdaParams) ;
19217
19218 return;
19219}
19220
19221VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
19222{
19223
19224 WDI_Status status = WDI_STATUS_SUCCESS;
19225 tWDA_ReqParams *pWdaParams;
19226
19227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19228 FL("%s: "), __func__);
19229 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19230 if (NULL == pWdaParams)
19231 {
19232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19233 FL("%s: VOS MEM Alloc Failure"), __func__);
19234 VOS_ASSERT(0);
19235 return VOS_STATUS_E_NOMEM;
19236 }
19237 pWdaParams->pWdaContext = pWDA;
19238 pWdaParams->wdaMsgParam = wdaRequest;
19239 pWdaParams->wdaWdiApiMsgParam = NULL;
19240
19241 status = WDI_MonStopReq((WDI_MonStopRspCb)WDA_MonStopRspCallback,
19242 (void *)pWdaParams);
19243
19244 if (IS_WDI_STATUS_FAILURE(status))
19245 {
19246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19247 "Failure to request. Free all the memory " );
19248 vos_mem_free(pWdaParams->wdaMsgParam);
19249 vos_mem_free(pWdaParams);
19250 }
19251 return CONVERT_WDI2VOS_STATUS(status);
19252}