blob: 06207dbd9c466fca46b64114842bf0a3f3820235 [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 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700604 }
Leo Chang9d76f622013-08-23 16:34:52 -0700605 else
606 {
607 vos_event_init(&wdaContext->ftmStopDoneEvent);
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 return status;
610}
611
Jeff Johnson295189b2012-06-20 16:38:30 -0700612/*
613 * FUNCTION: WDA_prepareConfigTLV
614 * Function to prepare CFG for DAL(WDA)
615 */
616VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
617 WDI_StartReqParamsType *wdiStartParams )
618{
619 /* get pMac to acess CFG data base */
620 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
621 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
622 tHalCfg *tlvStruct = NULL ;
623 tANI_U8 *tlvStructStart = NULL ;
624 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
625 v_PVOID_t *configParam;
626 tANI_U32 configParamSize;
627 tANI_U32 *configDataValue;
628 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700629 tANI_U8 i;
630
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 if ((NULL == pMac)||(NULL == wdaContext))
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700634 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 VOS_ASSERT(0);
636 return VOS_STATUS_E_FAILURE;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
639 WNI_CFG_STA_ID_LEN +
640 WNI_CFG_EDCA_WME_ACBK_LEN +
641 WNI_CFG_EDCA_WME_ACBE_LEN +
642 WNI_CFG_EDCA_WME_ACVI_LEN +
643 WNI_CFG_EDCA_WME_ACVO_LEN +
644 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 /* malloc memory for all configs in one shot */
646 configParam = vos_mem_malloc(configParamSize);
647
648 if(NULL == configParam )
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700651 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 VOS_ASSERT(0) ;
653 return VOS_STATUS_E_NOMEM;
654 }
655 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 tlvStruct = (tHalCfg *)configParam;
658 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700659 /* TODO: Remove Later */
660 /* QWLAN_HAL_CFG_STA_ID */
661 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
662 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
663 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
664 eSIR_SUCCESS)
665 {
666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
667 "Failed to get value for WNI_CFG_STA_ID");
668 goto handle_failure;
669 }
670 tlvStruct->length = strLength ;
671 /* calculate the pad bytes to have the CFG in aligned format */
672 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
673 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
675 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
677 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
678 tlvStruct->length = sizeof(tANI_U32);
679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
680 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
681 != eSIR_SUCCESS)
682 {
683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
684 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
685 goto handle_failure;
686 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700687 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
688 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700689 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
690 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
691 tlvStruct->length = sizeof(tANI_U32);
692 configDataValue = (tANI_U32 *)(tlvStruct + 1);
693 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
694 eSIR_SUCCESS)
695 {
696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
697 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
698 goto handle_failure;
699 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
701 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
703 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
704 tlvStruct->length = sizeof(tANI_U32);
705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
706 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
707 != eSIR_SUCCESS)
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
710 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
711 goto handle_failure;
712 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700713 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
714 + sizeof(tHalCfg) + tlvStruct->length)) ;
715
716 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
717 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
718 tlvStruct->length = sizeof(tANI_U32);
719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
720 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
721 configDataValue ) != eSIR_SUCCESS)
722 {
723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
724 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
725 goto handle_failure;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
728 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 /* QWLAN_HAL_CFG_CAL_PERIOD */
730 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
731 tlvStruct->length = sizeof(tANI_U32);
732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
733 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
734 != eSIR_SUCCESS)
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
737 "Failed to get value for WNI_CFG_CAL_PERIOD");
738 goto handle_failure;
739 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
741 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 /* QWLAN_HAL_CFG_CAL_CONTROL */
743 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
744 tlvStruct->length = sizeof(tANI_U32);
745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
746 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
747 != eSIR_SUCCESS)
748 {
749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
750 "Failed to get value for WNI_CFG_CAL_CONTROL");
751 goto handle_failure;
752 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
754 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 /* QWLAN_HAL_CFG_PROXIMITY */
756 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
757 tlvStruct->length = sizeof(tANI_U32);
758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
759 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
760 != eSIR_SUCCESS)
761 {
762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
763 "Failed to get value for WNI_CFG_PROXIMITY");
764 goto handle_failure;
765 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
767 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
769 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
770 tlvStruct->length = sizeof(tANI_U32);
771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
772 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
773 != eSIR_SUCCESS)
774 {
775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
776 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
777 goto handle_failure;
778 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
780 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
782 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
786 eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700794 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
795 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
796 tlvStruct->length = sizeof(tANI_U32);
797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
798 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
799 configDataValue ) != eSIR_SUCCESS)
800 {
801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
802 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
803 goto handle_failure;
804 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700807 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
808 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
809 tlvStruct->length = sizeof(tANI_U32);
810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
811 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
812 eSIR_SUCCESS)
813 {
814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
815 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
816 goto handle_failure;
817 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
819 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
821 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
825 eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
834 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
838 eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
842 goto handle_failure;
843 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
847 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
851 configDataValue ) != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
860 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length));
872
873 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
874 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
875 tlvStruct->length = sizeof(tANI_U32);
876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
877 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
878 configDataValue ) != eSIR_SUCCESS)
879 {
880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
881 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
882 goto handle_failure;
883 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700884 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
885 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
887 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
888 tlvStruct->length = sizeof(tANI_U32);
889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
890 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
891 configDataValue ) != eSIR_SUCCESS)
892 {
893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
894 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
895 goto handle_failure;
896 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
898 + sizeof(tHalCfg) + tlvStruct->length));
899
900 /* QWLAN_HAL_CFG_FIXED_RATE */
901 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
902 tlvStruct->length = sizeof(tANI_U32);
903 configDataValue = (tANI_U32 *)(tlvStruct + 1);
904 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
905 != eSIR_SUCCESS)
906 {
907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
908 "Failed to get value for WNI_CFG_FIXED_RATE");
909 goto handle_failure;
910 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
912 + sizeof(tHalCfg) + tlvStruct->length));
913
914 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
915 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
916 tlvStruct->length = sizeof(tANI_U32);
917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
918 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
919 != eSIR_SUCCESS)
920 {
921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
922 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
923 goto handle_failure;
924 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
926 + sizeof(tHalCfg) + tlvStruct->length));
927
928 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
929 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
930 tlvStruct->length = sizeof(tANI_U32);
931 configDataValue = (tANI_U32 *)(tlvStruct + 1);
932 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
933 configDataValue ) != eSIR_SUCCESS)
934 {
935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
936 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
937 goto handle_failure;
938 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
940 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
942 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
943 tlvStruct->length = sizeof(tANI_U32);
944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
945 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
946 configDataValue ) != eSIR_SUCCESS)
947 {
948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
949 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
950 goto handle_failure;
951 }
952 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
953 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
955 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
956 tlvStruct->length = sizeof(tANI_U32);
957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
958 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
959 configDataValue ) != eSIR_SUCCESS)
960 {
961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
962 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
963 goto handle_failure;
964 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
966 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
968 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
969 tlvStruct->length = sizeof(tANI_U32);
970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
971 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
972 configDataValue ) != eSIR_SUCCESS)
973 {
974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
975 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
976 goto handle_failure;
977 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
979 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
981 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
982 tlvStruct->length = sizeof(tANI_U32);
983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
984 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
985 configDataValue ) != eSIR_SUCCESS)
986 {
987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
988 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
989 goto handle_failure;
990 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
992 + sizeof(tHalCfg) + tlvStruct->length);
993
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
995 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
996 tlvStruct->length = sizeof(tANI_U32);
997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
998 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
999 configDataValue ) != eSIR_SUCCESS)
1000 {
1001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1002 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1003 goto handle_failure;
1004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1006 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1008 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1009 tlvStruct->length = sizeof(tANI_U32);
1010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1011 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1012 configDataValue ) != eSIR_SUCCESS)
1013 {
1014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1015 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1016 goto handle_failure;
1017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1019 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1021 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1022 tlvStruct->length = sizeof(tANI_U32);
1023 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1024 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1025 eSIR_SUCCESS)
1026 {
1027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1028 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1029 goto handle_failure;
1030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001031 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1032 + sizeof(tHalCfg) + tlvStruct->length);
1033
1034 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1035 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1036 tlvStruct->length = sizeof(tANI_U32);
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1039 configDataValue ) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1043 goto handle_failure;
1044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1048 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1049 tlvStruct->length = sizeof(tANI_U32);
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1052 configDataValue ) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1056 goto handle_failure;
1057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1061 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1062 tlvStruct->length = sizeof(tANI_U32);
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1065 configDataValue ) != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1069 goto handle_failure;
1070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1074 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1075 tlvStruct->length = sizeof(tANI_U32);
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1078 configDataValue ) != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1082 goto handle_failure;
1083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001084 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1085 + sizeof(tHalCfg) + tlvStruct->length);
1086
1087 /* QWLAN_HAL_CFG_STATS_PERIOD */
1088 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1089 tlvStruct->length = sizeof(tANI_U32);
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1092 eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_STATS_PERIOD");
1096 goto handle_failure;
1097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1099 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001100 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1101 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1102 tlvStruct->length = sizeof(tANI_U32);
1103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1104 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1105 eSIR_SUCCESS)
1106 {
1107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1108 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1109 goto handle_failure;
1110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1112 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001113 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1114 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1115 tlvStruct->length = sizeof(tANI_U32);
1116 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1117 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1118 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1120 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1122 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1126 != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1130 goto handle_failure;
1131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1135 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1136 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1139 &strLength) != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1143 goto handle_failure;
1144 }
1145 tlvStruct->length = strLength;
1146 /* calculate the pad bytes to have the CFG in aligned format */
1147 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1148 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1150 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1152 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1153 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1155 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1156 &strLength) != eSIR_SUCCESS)
1157 {
1158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1159 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1160 goto handle_failure;
1161 }
1162 tlvStruct->length = strLength;
1163 /* calculate the pad bytes to have the CFG in aligned format */
1164 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1165 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1167 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1169 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1170 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1173 &strLength) != eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1177 goto handle_failure;
1178 }
1179 tlvStruct->length = strLength;
1180 /* calculate the pad bytes to have the CFG in aligned format */
1181 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1182 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1186 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1187 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1190 &strLength) != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1194 goto handle_failure;
1195 }
1196 tlvStruct->length = strLength;
1197 /* calculate the pad bytes to have the CFG in aligned format */
1198 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1199 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1203 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1216 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1229 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1242 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1246 != eSIR_SUCCESS)
1247 {
1248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1249 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1250 goto handle_failure;
1251 }
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1255 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1259 != eSIR_SUCCESS)
1260 {
1261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1262 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1263 goto handle_failure;
1264 }
1265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1266 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001267 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1268 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1272 != eSIR_SUCCESS)
1273 {
1274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1275 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1276 goto handle_failure;
1277 }
1278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1279 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001280 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1281 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1285 != eSIR_SUCCESS)
1286 {
1287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1288 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1289 goto handle_failure;
1290 }
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001293 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1294 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1298 != eSIR_SUCCESS)
1299 {
1300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1301 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1302 goto handle_failure;
1303 }
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001306 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1307 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1311 != eSIR_SUCCESS)
1312 {
1313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1314 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1315 goto handle_failure;
1316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001319 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1320 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1321 tlvStruct->length = sizeof(tANI_U32);
1322 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1323 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1324 != eSIR_SUCCESS)
1325 {
1326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1327 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1328 goto handle_failure;
1329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001332 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1333 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1337 != eSIR_SUCCESS)
1338 {
1339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1340 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1341 goto handle_failure;
1342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001345 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1346 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1347 * into FW, so the parameters are added here.
1348 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001349 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1357 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1361 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1362 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001363 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001370 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1371 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1375 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1376 + sizeof(tHalCfg) + tlvStruct->length) ;
1377
1378 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1379 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1387 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1395 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1403 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409
1410 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1411 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1415 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1416 + sizeof(tHalCfg) + tlvStruct->length) ;
1417
1418 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1419 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1420 tlvStruct->length = sizeof(tANI_U32);
1421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1422 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1423 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1424 + sizeof(tHalCfg) + tlvStruct->length) ;
1425
1426 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1427 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1431 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1432 + sizeof(tHalCfg) + tlvStruct->length) ;
1433
1434 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1435 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1436 tlvStruct->length = sizeof(tANI_U32);
1437 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1438 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1440 + sizeof(tHalCfg) + tlvStruct->length) ;
1441
1442 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1443 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1444 tlvStruct->length = sizeof(tANI_U32);
1445 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1446 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
1450 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1451 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457
1458 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1459 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1460 tlvStruct->length = sizeof(tANI_U32);
1461 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1462 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1467 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Wilson Tsaof8b37942013-09-06 10:49:00 -07001474 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1475 {
1476 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1477 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1481 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1482 + sizeof(tHalCfg) + tlvStruct->length) ;
1483
1484 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1485 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491
1492 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1493 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1494 tlvStruct->length = sizeof(tANI_U32);
1495 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1496 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1497 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1498 + sizeof(tHalCfg) + tlvStruct->length) ;
1499
1500 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1501 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1502 tlvStruct->length = sizeof(tANI_U32);
1503 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1504 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1505 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1506 + sizeof(tHalCfg) + tlvStruct->length) ;
1507 }
1508
1509 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1510 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1514 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1515 + sizeof(tHalCfg) + tlvStruct->length) ;
1516
1517 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1518 {
1519 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1520 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1521 tlvStruct->length = sizeof(tANI_U32);
1522 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1523 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526 }
1527
1528 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1529 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1530 tlvStruct->length = sizeof(tANI_U32);
1531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1532 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535
Jeff Johnson32d95a32012-09-10 13:15:23 -07001536 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1538 tlvStruct->length = sizeof(tANI_U32);
1539 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1540 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1541 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1542 wcnssCompiledApiVersion.minor,
1543 wcnssCompiledApiVersion.version,
1544 wcnssCompiledApiVersion.revision);
1545 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1546 + sizeof(tHalCfg) + tlvStruct->length) ;
1547
Jeff Johnsond13512a2012-07-17 11:42:19 -07001548 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1549 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1550 tlvStruct->length = sizeof(tANI_U32);
1551 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1552 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1553 configDataValue ) != eSIR_SUCCESS)
1554 {
1555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1556 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1557 goto handle_failure;
1558 }
1559
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1563 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1564 tlvStruct->length = sizeof(tANI_U32);
1565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1566 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1567 configDataValue ) != eSIR_SUCCESS)
1568 {
1569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1570 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1571 goto handle_failure;
1572 }
1573
1574 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1575 + sizeof(tHalCfg) + tlvStruct->length) ;
1576
1577 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1578 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1579 tlvStruct->length = sizeof(tANI_U32);
1580 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1581 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1582 != eSIR_SUCCESS)
1583 {
1584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1585 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1586 goto handle_failure;
1587 }
1588
1589 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1590 + sizeof(tHalCfg) + tlvStruct->length) ;
1591
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001592 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1593 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1594 tlvStruct->length = sizeof(tANI_U32);
1595 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1596 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1597 != eSIR_SUCCESS)
1598 {
1599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1600 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1601 goto handle_failure;
1602 }
1603
1604 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1605 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001606#ifdef WLAN_SOFTAP_VSTA_FEATURE
1607 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1608 tlvStruct->length = sizeof(tANI_U32);
1609 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1610 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1611 != eSIR_SUCCESS)
1612 {
1613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1614 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1615 goto handle_failure;
1616 }
1617
1618 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1619 + sizeof(tHalCfg) + tlvStruct->length) ;
1620#endif
1621
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001622 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1623 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626
1627 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1628 != eSIR_SUCCESS)
1629 {
1630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1631 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1632 goto handle_failure;
1633 }
1634
1635 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1636 + sizeof(tHalCfg) + tlvStruct->length) ;
1637
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301638/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1639 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1640 tlvStruct->length = sizeof(tANI_U32);
1641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1642 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1643 configDataValue ) != eSIR_SUCCESS)
1644 {
1645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1646 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1647 goto handle_failure;
1648 }
1649
1650 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1651 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301652#ifdef FEATURE_WLAN_TDLS
1653 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1654 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1662 goto handle_failure;
1663 }
1664 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1665 + sizeof(tHalCfg) + tlvStruct->length) ;
1666
1667 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1668 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1669 tlvStruct->length = sizeof(tANI_U32);
1670 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1671 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1672 configDataValue ) != eSIR_SUCCESS)
1673 {
1674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1675 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1676 goto handle_failure;
1677 }
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1681 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1689 goto handle_failure;
1690 }
1691 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1692 + sizeof(tHalCfg) + tlvStruct->length) ;
1693 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1694 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1695 tlvStruct->length = sizeof(tANI_U32);
1696 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1697 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1698 configDataValue ) != eSIR_SUCCESS)
1699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1702 goto handle_failure;
1703 }
1704 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1705 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301706 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1707 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1708 tlvStruct->length = sizeof(tANI_U32);
1709 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1710 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1711 configDataValue ) != eSIR_SUCCESS)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1714 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1715 goto handle_failure;
1716 }
1717 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1718 + sizeof(tHalCfg) + tlvStruct->length) ;
1719
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301720#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301721
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001722 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1723 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1724 tlvStruct->length = sizeof(tANI_U32);
1725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1726 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1727 configDataValue ) != eSIR_SUCCESS)
1728 {
1729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1730 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1731 goto handle_failure;
1732 }
1733
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001736
1737 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1738 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1742 != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length));
1750
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301751 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1752 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1760 goto handle_failure;
1761 }
1762
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301766 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1767 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301780 /* QWLAN_HAL_CFG_ATH_DISABLE */
1781 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_ATH_DISABLE");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
c_hpothu6d7dc922013-12-02 12:36:41 +05301794 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1795 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1796 tlvStruct->length = sizeof(tANI_U32);
1797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1798 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1799 configDataValue ) != eSIR_SUCCESS)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1802 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1803 goto handle_failure;
1804 }
1805 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1806 + sizeof(tHalCfg) + tlvStruct->length) ;
1807
1808 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1809 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1810 tlvStruct->length = sizeof(tANI_U32);
1811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1812 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1813 configDataValue ) != eSIR_SUCCESS)
1814 {
1815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1816 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1817 goto handle_failure;
1818 }
1819 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1820 + sizeof(tHalCfg) + tlvStruct->length) ;
1821
1822 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1823 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1824 tlvStruct->length = sizeof(tANI_U32);
1825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1826 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1827 configDataValue ) != eSIR_SUCCESS)
1828 {
1829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1830 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1831 goto handle_failure;
1832 }
1833 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1834 + sizeof(tHalCfg) + tlvStruct->length) ;
1835
1836 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1837 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1838 tlvStruct->length = sizeof(tANI_U32);
1839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1845 goto handle_failure;
1846 }
1847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301850 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1855 configDataValue ) != eSIR_SUCCESS)
1856 {
1857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1858 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1859 goto handle_failure;
1860 }
1861 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1862 + sizeof(tHalCfg) + tlvStruct->length) ;
1863
1864 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1865 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1866 tlvStruct->length = sizeof(tANI_U32);
1867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1868 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1869 configDataValue ) != eSIR_SUCCESS)
1870 {
1871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1872 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1873 goto handle_failure;
1874 }
1875 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1876 + sizeof(tHalCfg) + tlvStruct->length) ;
1877
1878 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1879 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1880 tlvStruct->length = sizeof(tANI_U32);
1881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1882 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1883 configDataValue ) != eSIR_SUCCESS)
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1886 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1887 goto handle_failure;
1888 }
1889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1890 + sizeof(tHalCfg) + tlvStruct->length) ;
1891
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001892 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1893 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1894 tlvStruct->length = sizeof(tANI_U32);
1895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1896 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1897 configDataValue ) != eSIR_SUCCESS)
1898 {
1899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1900 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1901 goto handle_failure;
1902 }
1903 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1904 + sizeof(tHalCfg) + tlvStruct->length) ;
1905
c_hpothu5bd1ae42014-03-07 20:28:22 +05301906 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1907 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1908 tlvStruct->length = sizeof(tANI_U32);
1909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1910
1911 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1912 configDataValue ) != eSIR_SUCCESS)
1913 {
1914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1915 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1916 goto handle_failure;
1917 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301918 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1919 + sizeof(tHalCfg) + tlvStruct->length) ;
1920
1921 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1922 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1923 tlvStruct->length = sizeof(tANI_U32);
1924 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1925
1926 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1927 configDataValue ) != eSIR_SUCCESS)
1928 {
1929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1930 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1931 goto handle_failure;
1932 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1934 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301935
c_hpothu2d0f1c42014-04-01 18:38:51 +05301936 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1937 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1938 tlvStruct->length = sizeof(tANI_U32);
1939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1940
1941 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1942 configDataValue ) != eSIR_SUCCESS)
1943 {
1944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1945 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1946 goto handle_failure;
1947 }
1948 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1949 + sizeof(tHalCfg) + tlvStruct->length) ;
1950
1951 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1952 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1953 tlvStruct->length = sizeof(tANI_U32);
1954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1955
1956 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1957 configDataValue ) != eSIR_SUCCESS)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1960 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1961 goto handle_failure;
1962 }
1963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1964 + sizeof(tHalCfg) + tlvStruct->length) ;
1965
1966 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1967 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1968 tlvStruct->length = sizeof(tANI_U32);
1969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1970
1971 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1972 configDataValue ) != eSIR_SUCCESS)
1973 {
1974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1975 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1976 goto handle_failure;
1977 }
1978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1979 + sizeof(tHalCfg) + tlvStruct->length) ;
1980
1981 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1982 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1983 tlvStruct->length = sizeof(tANI_U32);
1984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1985
1986 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1987 configDataValue ) != eSIR_SUCCESS)
1988 {
1989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1990 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1991 goto handle_failure;
1992 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1994 + sizeof(tHalCfg) + tlvStruct->length) ;
1995
Mihir Shetec34258c2014-07-30 17:50:27 +05301996 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1997 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1998 tlvStruct->length = sizeof(tANI_U32);
1999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2000
2001 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2002 configDataValue ) != eSIR_SUCCESS)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2005 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2006 goto handle_failure;
2007 }
2008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2009 + sizeof(tHalCfg) + tlvStruct->length) ;
2010
2011 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2012 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2013 tlvStruct->length = sizeof(tANI_U32);
2014 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2015
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2021 goto handle_failure;
2022 }
2023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
2025
2026 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2027 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2036 goto handle_failure;
2037 }
2038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2042 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2051 goto handle_failure;
2052 }
2053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
2055
2056 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2057 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2062 configDataValue ) != eSIR_SUCCESS)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2065 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2072 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2077 configDataValue ) != eSIR_SUCCESS)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2080 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2081 goto handle_failure;
2082 }
2083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
2086 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2087 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2102 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2111 goto handle_failure;
2112 }
2113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302115
2116 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2117 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2122 configDataValue ) != eSIR_SUCCESS)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2125 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302131 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2132 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2137 configDataValue ) != eSIR_SUCCESS)
2138 {
2139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2140 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302146 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2147 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2152 configDataValue ) != eSIR_SUCCESS)
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302160
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302161 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2162 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2167 configDataValue ) != eSIR_SUCCESS)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002177#ifdef WLAN_DEBUG
2178 {
2179 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2181 "****** Dumping CFG TLV ***** ");
2182 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2183 {
2184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2185 "%02x %02x %02x %02x %02x %02x %02x %02x",
2186 tlvStructStart[i],
2187 tlvStructStart[i+1],
2188 tlvStructStart[i+2],
2189 tlvStructStart[i+3],
2190 tlvStructStart[i+4],
2191 tlvStructStart[i+5],
2192 tlvStructStart[i+6],
2193 tlvStructStart[i+7]);
2194 }
2195 /* Dump the bytes in the last line*/
2196 for (; i < wdiStartParams->usConfigBufferLen; i++)
2197 {
2198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2199 "%02x ",tlvStructStart[i]);
2200 }
2201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2202 "**************************** ");
2203 }
2204#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002206handle_failure:
2207 vos_mem_free(configParam);
2208 return VOS_STATUS_E_FAILURE;
2209}
Jeff Johnson295189b2012-06-20 16:38:30 -07002210/*
2211 * FUNCTION: WDA_wdiCompleteCB
2212 * call the voss call back function
2213 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002214void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002215{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2217 tWDA_CbContext *wdaContext;
2218
2219 if(NULL == pWdaParams)
2220 {
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002222 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002223 VOS_ASSERT(0) ;
2224 return ;
2225 }
2226
2227 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2228
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 if (NULL == wdaContext)
2230 {
2231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002232 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 return ;
2234 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002235
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002237 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002241 vos_mem_free(pWdaParams);
2242
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 if(WDI_STATUS_SUCCESS != status)
2244 {
2245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2246 "WDI stop callback returned failure" );
2247 VOS_ASSERT(0) ;
2248 }
2249 else
2250 {
2251 wdaContext->wdaState = WDA_STOP_STATE;
2252 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002253
Leo Chang9d76f622013-08-23 16:34:52 -07002254 /* FTM Driver stop procedure should be synced.
2255 * Stop and Close will happen on same context */
2256 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2257 {
2258 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2259 {
2260 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2261 "%s: FTM Stop Event Set Fail", __func__);
2262 VOS_ASSERT(0);
2263 }
2264 }
2265
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002267 vos_WDAComplete_cback(wdaContext->pVosContext);
2268
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 return ;
2270}
Jeff Johnson295189b2012-06-20 16:38:30 -07002271/*
2272 * FUNCTION: WDA_stop
2273 * call WDI_stop
2274 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002275VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2276{
2277 WDI_Status wdiStatus;
2278 VOS_STATUS status = VOS_STATUS_SUCCESS;
2279 WDI_StopReqParamsType *wdiStopReq;
2280 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002281 tWDA_ReqParams *pWdaParams ;
2282
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 if (NULL == pWDA)
2284 {
2285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002286 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 VOS_ASSERT(0);
2288 return VOS_STATUS_E_FAILURE;
2289 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002290 if (pWDA->wdiFailed == true)
2291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002293 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002294 return VOS_STATUS_E_ALREADY;
2295 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002296
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 /* FTM mode stay START_STATE */
2298 if( (WDA_READY_STATE != pWDA->wdaState) &&
2299 (WDA_INIT_STATE != pWDA->wdaState) &&
2300 (WDA_START_STATE != pWDA->wdaState) )
2301 {
2302 VOS_ASSERT(0);
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 wdiStopReq = (WDI_StopReqParamsType *)
2305 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2306 if(NULL == wdiStopReq)
2307 {
2308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 VOS_ASSERT(0);
2311 return VOS_STATUS_E_NOMEM;
2312 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002313
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 wdiStopReq->wdiStopReason = reason;
2315 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302316
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2318 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 VOS_ASSERT(0);
2323 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002324 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002326
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002327 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2328 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 {
2330 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002331 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002333
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002334 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2335 pWdaParams->wdaMsgParam = NULL;
2336 pWdaParams->pWdaContext = pWDA;
2337
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 /* call WDI stop */
2339 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002340 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2341
Jeff Johnson295189b2012-06-20 16:38:30 -07002342 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2343 {
2344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2345 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2347 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 status = VOS_STATUS_E_FAILURE;
2349 }
Leo Chang9d76f622013-08-23 16:34:52 -07002350
2351 /* FTM Driver stop procedure should be synced.
2352 * Stop and Close will happen on same context */
2353 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2354 {
2355 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2356 WDI_RESPONSE_TIMEOUT);
2357 if (status != VOS_STATUS_SUCCESS)
2358 {
2359 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2360 "%s: FTM Stop Timepoout", __func__);
2361 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002362 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302363 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 return status;
2366}
Jeff Johnson295189b2012-06-20 16:38:30 -07002367/*
2368 * FUNCTION: WDA_close
2369 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302370 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002371VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2372{
Jeff Johnson43971f52012-07-17 12:26:56 -07002373 VOS_STATUS status = VOS_STATUS_SUCCESS;
2374 WDI_Status wstatus;
2375 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 if (NULL == wdaContext)
2378 {
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002380 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 return VOS_STATUS_E_FAILURE;
2382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2384 (WDA_STOP_STATE != wdaContext->wdaState))
2385 {
2386 VOS_ASSERT(0);
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002389 wstatus = WDI_Close();
2390 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 {
2392 status = VOS_STATUS_E_FAILURE;
2393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002396 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2397 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 {
2399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002400 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 status = VOS_STATUS_E_FAILURE;
2402 }
2403
Jeff Johnson43971f52012-07-17 12:26:56 -07002404 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002405 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 {
2407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002408 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 status = VOS_STATUS_E_FAILURE;
2410 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002411 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002412 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002413 {
2414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002415 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 status = VOS_STATUS_E_FAILURE;
2417 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002418 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002419 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 {
2421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002422 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 status = VOS_STATUS_E_FAILURE;
2424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002426 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002427 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 {
2429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2430 "error in WDA close " );
2431 status = VOS_STATUS_E_FAILURE;
2432 }
2433 return status;
2434}
Jeff Johnson295189b2012-06-20 16:38:30 -07002435/*
2436 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2437 * returns 1 if the compiled version is greater than or equal to the input version
2438 */
2439
2440uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2441{
2442 VOS_STATUS status = VOS_STATUS_SUCCESS;
2443 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2444 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2447 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2448 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2449 (compiledVersion.revision >= revision)))
2450 return 1;
2451 else
2452 return 0;
2453}
Jeff Johnson295189b2012-06-20 16:38:30 -07002454/*
2455 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2456 * returns 1 if the compiled version is greater than or equal to the input version
2457 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002458uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2459{
2460 VOS_STATUS status = VOS_STATUS_SUCCESS;
2461 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2462 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2465 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2466 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2467 (reportedVersion.revision >= revision)))
2468 return 1;
2469 else
2470 return 0;
2471}
Jeff Johnson295189b2012-06-20 16:38:30 -07002472/*
2473 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2474 * Returns the version of the WCNSS WLAN API with which the HOST
2475 * device driver was compiled
2476 */
2477VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2478 tSirVersionType *pVersion)
2479{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302480 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 if ((NULL == pvosGCtx) || (NULL == pVersion))
2482 {
2483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002484 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_ASSERT(0);
2486 return VOS_STATUS_E_FAILURE;
2487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2489 if (NULL == pWDA )
2490 {
2491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002492 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 VOS_ASSERT(0);
2494 return VOS_STATUS_E_FAILURE;
2495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 *pVersion = pWDA->wcnssWlanCompiledVersion;
2497 return VOS_STATUS_SUCCESS;
2498}
Jeff Johnson295189b2012-06-20 16:38:30 -07002499/*
2500 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2501 * Returns the version of the WCNSS WLAN API with which the WCNSS
2502 * device driver was compiled
2503 */
2504VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2505 tSirVersionType *pVersion)
2506{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302507 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 if ((NULL == pvosGCtx) || (NULL == pVersion))
2509 {
2510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002511 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 VOS_ASSERT(0);
2513 return VOS_STATUS_E_FAILURE;
2514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2516 if (NULL == pWDA )
2517 {
2518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0);
2521 return VOS_STATUS_E_FAILURE;
2522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 *pVersion = pWDA->wcnssWlanReportedVersion;
2524 return VOS_STATUS_SUCCESS;
2525}
Jeff Johnson295189b2012-06-20 16:38:30 -07002526/*
2527 * FUNCTION: WDA_GetWcnssSoftwareVersion
2528 * Returns the WCNSS Software version string
2529 */
2530VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2531 tANI_U8 *pVersion,
2532 tANI_U32 versionBufferSize)
2533{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302534 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002536 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 if ((NULL == pvosGCtx) || (NULL == pVersion))
2538 {
2539 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002540 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 VOS_ASSERT(0);
2542 return VOS_STATUS_E_FAILURE;
2543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2545 if (NULL == pWDA )
2546 {
2547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002548 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 VOS_ASSERT(0);
2550 return VOS_STATUS_E_FAILURE;
2551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2553 return VOS_STATUS_SUCCESS;
2554}
Jeff Johnson295189b2012-06-20 16:38:30 -07002555/*
2556 * FUNCTION: WDA_GetWcnssHardwareVersion
2557 * Returns the WCNSS Hardware version string
2558 */
2559VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2560 tANI_U8 *pVersion,
2561 tANI_U32 versionBufferSize)
2562{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302563 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002565 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 if ((NULL == pvosGCtx) || (NULL == pVersion))
2567 {
2568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002569 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 VOS_ASSERT(0);
2571 return VOS_STATUS_E_FAILURE;
2572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2574 if (NULL == pWDA )
2575 {
2576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002577 "%s: Invalid WDA context", __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 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2582 return VOS_STATUS_SUCCESS;
2583}
Jeff Johnson295189b2012-06-20 16:38:30 -07002584/*
2585 * FUNCTION: WDA_WniCfgDnld
2586 * Trigger CFG Download
2587 */
2588VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2589{
2590 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302591 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002592
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 if (NULL == pMac )
2594 {
2595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002596 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 VOS_ASSERT(0);
2598 return VOS_STATUS_E_FAILURE;
2599 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302600 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 return vosStatus;
2602}
Jeff Johnson295189b2012-06-20 16:38:30 -07002603/* -----------------------------------------------------------------
2604 * WDI interface
2605 * -----------------------------------------------------------------
2606 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002607/*
2608 * FUNCTION: WDA_suspendDataTxCallback
2609 * call back function called from TL after suspend Transmission
2610 */
2611VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2612 v_U8_t* ucSTAId,
2613 VOS_STATUS vosStatus)
2614{
2615 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002617 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 if (NULL == pWDA )
2619 {
2620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002621 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 VOS_ASSERT(0);
2623 return VOS_STATUS_E_FAILURE;
2624 }
2625 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2626 {
2627 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2628 }
2629 else
2630 {
2631 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 /* Trigger the event to bring the WDA TL suspend function to come
2634 * out of wait*/
2635 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2636 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002639 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* If TL suspended had timedout before this callback was called, resume back
2642 * TL.*/
2643 if (pWDA->txSuspendTimedOut)
2644 {
2645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002646 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 WDA_ResumeDataTx(pWDA);
2648 pWDA->txSuspendTimedOut = FALSE;
2649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 return VOS_STATUS_SUCCESS;
2651}
Jeff Johnson295189b2012-06-20 16:38:30 -07002652/*
2653 * FUNCTION: WDA_suspendDataTx
2654 * Update TL to suspend the data Transmission
2655 */
2656VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2657{
2658 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2659 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002662 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 if (pWDA->txSuspendTimedOut)
2665 {
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002667 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 return status;
2669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 /* Reset the event to be not signalled */
2671 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2672 if(!VOS_IS_STATUS_SUCCESS(status))
2673 {
2674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002675 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 return VOS_STATUS_E_FAILURE;
2677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002679 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 WDA_SuspendDataTxCallback);
2681 if(status != VOS_STATUS_SUCCESS)
2682 {
2683 return status;
2684 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 /* Wait for the event to be set by the TL, to get the response of
2686 * suspending the TX queues, this event should be set by the Callback
2687 * function called by TL*/
2688 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2689 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2690 if(!VOS_IS_STATUS_SUCCESS(status))
2691 {
2692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2693 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002694 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 /* Set this flag to true when TL suspend times out, so that when TL
2696 * suspend eventually happens and calls the callback, TL can be resumed
2697 * right away by looking at this flag when true.*/
2698 pWDA->txSuspendTimedOut = TRUE;
2699 }
2700 else
2701 {
2702 pWDA->txSuspendTimedOut = FALSE;
2703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2705 {
2706 status = VOS_STATUS_SUCCESS;
2707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 return status;
2709}
Jeff Johnson295189b2012-06-20 16:38:30 -07002710/*
2711 * FUNCTION: WDA_resumeDataTx
2712 * Update TL to resume the data Transmission
2713 */
2714VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2715{
2716 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717
2718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002719 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002720
2721 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 return status;
2723}
Jeff Johnson295189b2012-06-20 16:38:30 -07002724/*
2725 * FUNCTION: WDA_InitScanReqCallback
2726 * Trigger Init SCAN callback
2727 */
2728void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2729{
2730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2731 tWDA_CbContext *pWDA;
2732 tInitScanParams *pWDA_ScanParam ;
2733 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002735 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 if(NULL == pWdaParams)
2737 {
2738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 VOS_ASSERT(0) ;
2741 return ;
2742 }
2743 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2744 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 if(NULL == pWDA_ScanParam)
2746 {
2747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002748 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002749 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2751 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 return ;
2753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002754 if(WDI_STATUS_SUCCESS != wdiStatus)
2755 {
2756 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 if(VOS_STATUS_SUCCESS != status)
2758 {
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 }
2762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 /* free WDI command buffer */
2764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302766
2767
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002769 /* without converting the Status to Failure or Success Just
2770 pass the same status to lim */
2771 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 /* send SCAN RSP message back to PE */
2773 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 return ;
2775}
2776
2777/*
2778 * FUNCTION: WDA_ProcessInitScanReq
2779 * Trigger Init SCAN in DAL
2780 */
2781VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2782 tInitScanParams *initScanParams)
2783{
2784 WDI_Status status = WDI_STATUS_SUCCESS ;
2785 WDI_InitScanReqParamsType *wdiInitScanParam =
2786 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2787 sizeof(WDI_InitScanReqParamsType)) ;
2788 tWDA_ReqParams *pWdaParams;
2789 tANI_U8 i = 0;
2790
2791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002792 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 if(NULL == wdiInitScanParam)
2794 {
2795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002796 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 VOS_ASSERT(0);
2798 return VOS_STATUS_E_NOMEM;
2799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2801 if(NULL == pWdaParams)
2802 {
2803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 VOS_ASSERT(0);
2806 vos_mem_free(wdiInitScanParam);
2807 return VOS_STATUS_E_NOMEM;
2808 }
2809
2810 /* Copy init Scan params to WDI structure */
2811 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2812 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2813 sizeof(tSirMacAddr)) ;
2814 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2815 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2816 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2818 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2820 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2822 {
2823 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2824 initScanParams->scanEntry.bssIdx[i] ;
2825 }
2826
2827 /* if Frame length, copy macMgmtHdr or WDI structure */
2828 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2829 {
2830 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2831 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2832 }
2833 wdiInitScanParam->wdiReqStatusCB = NULL ;
2834
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 /* Store Init Req pointer, as this will be used for response */
2836 pWdaParams->pWdaContext = pWDA;
2837 pWdaParams->wdaMsgParam = initScanParams;
2838 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 /* first try to suspend TX */
2840 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 if(WDI_STATUS_SUCCESS != status)
2842 {
2843 goto handleWdiFailure;
2844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 /* call DAL API to pass init scan request to DAL */
2846 status = WDI_InitScanReq(wdiInitScanParam,
2847 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 if(IS_WDI_STATUS_FAILURE(status))
2849 {
2850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2851 "error in WDA Init Scan, Resume Tx " );
2852 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 VOS_ASSERT(0) ;
2854
2855 goto handleWdiFailure;
2856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002858handleWdiFailure:
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2860 "Failure in WDI Api, free all the memory " );
2861 /* free WDI command buffer */
2862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2863 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 /* send Failure to PE */
2865 initScanParams->status = eSIR_FAILURE ;
2866 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 return CONVERT_WDI2VOS_STATUS(status) ;
2868}
2869
Jeff Johnson295189b2012-06-20 16:38:30 -07002870/*
2871 * FUNCTION: WDA_StartScanReqCallback
2872 * send Start SCAN RSP back to PE
2873 */
2874void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2875 void* pUserData)
2876{
2877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2878 tWDA_CbContext *pWDA;
2879 tStartScanParams *pWDA_ScanParam;
2880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002881 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 if(NULL == pWdaParams)
2883 {
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002885 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 VOS_ASSERT(0) ;
2887 return ;
2888 }
2889 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2890 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 if(NULL == pWDA_ScanParam)
2892 {
2893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002894 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002896 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 return ;
2898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2900 {
2901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002902 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002904 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 return ;
2906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2908 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002909
Jeff Johnson295189b2012-06-20 16:38:30 -07002910
2911 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002912 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 /* send SCAN RSP message back to PE */
2914 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 return ;
2916}
2917
Jeff Johnson295189b2012-06-20 16:38:30 -07002918/*
2919 * FUNCTION: WDA_ProcessStartScanReq
2920 * Trigger start SCAN in WDI
2921 */
2922VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2923 tStartScanParams *startScanParams)
2924{
2925 WDI_Status status = WDI_STATUS_SUCCESS;
2926 WDI_StartScanReqParamsType *wdiStartScanParams =
2927 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2928 sizeof(WDI_StartScanReqParamsType)) ;
2929 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002931 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 if(NULL == wdiStartScanParams)
2933 {
2934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 VOS_ASSERT(0);
2937 return VOS_STATUS_E_NOMEM;
2938 }
2939 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2940 if(NULL == pWdaParams)
2941 {
2942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 VOS_ASSERT(0);
2945 vos_mem_free(wdiStartScanParams);
2946 return VOS_STATUS_E_NOMEM;
2947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 /* Copy init Scan params to WDI structure */
2949 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2950 wdiStartScanParams->wdiReqStatusCB = NULL ;
2951
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 /* Store Init Req pointer, as this will be used for response */
2953 /* store Params pass it to WDI */
2954 pWdaParams->pWdaContext = pWDA;
2955 pWdaParams->wdaMsgParam = startScanParams;
2956 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 /* call DAL API to pass init scan request to DAL */
2958 status = WDI_StartScanReq(wdiStartScanParams,
2959 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 /* failure returned by WDI API */
2961 if(IS_WDI_STATUS_FAILURE(status))
2962 {
2963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2964 "Failure in Start Scan WDI API, free all the memory "
2965 "It should be due to previous abort scan." );
2966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2967 vos_mem_free(pWdaParams) ;
2968 startScanParams->status = eSIR_FAILURE ;
2969 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 return CONVERT_WDI2VOS_STATUS(status) ;
2972}
Jeff Johnson295189b2012-06-20 16:38:30 -07002973/*
2974 * FUNCTION: WDA_EndScanReqCallback
2975 * END SCAN callback
2976 */
2977void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2978{
2979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2980 tWDA_CbContext *pWDA;
2981 tEndScanParams *endScanParam;
2982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 if(NULL == pWdaParams)
2985 {
2986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 VOS_ASSERT(0) ;
2989 return ;
2990 }
2991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2992 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 if(NULL == endScanParam)
2994 {
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2999 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return ;
3001 }
3002
3003 /* Free WDI command buffer */
3004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3005 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003007 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 /* send response back to PE */
3009 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3010 return ;
3011}
3012
Jeff Johnson295189b2012-06-20 16:38:30 -07003013/*
3014 * FUNCTION: WDA_ProcessEndScanReq
3015 * Trigger END SCAN in WDI
3016 */
3017VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3018 tEndScanParams *endScanParams)
3019{
3020 WDI_Status status = WDI_STATUS_SUCCESS;
3021 WDI_EndScanReqParamsType *wdiEndScanParams =
3022 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3023 sizeof(WDI_EndScanReqParamsType)) ;
3024 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 if(NULL == wdiEndScanParams)
3028 {
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 VOS_ASSERT(0);
3032 return VOS_STATUS_E_NOMEM;
3033 }
3034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3035 if(NULL == pWdaParams)
3036 {
3037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 VOS_ASSERT(0);
3040 vos_mem_free(wdiEndScanParams);
3041 return VOS_STATUS_E_NOMEM;
3042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 /* Copy init Scan params to WDI structure */
3044 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3045 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 /* Store Init Req pointer, as this will be used for response */
3047 /* store Params pass it to WDI */
3048 pWdaParams->pWdaContext = pWDA;
3049 pWdaParams->wdaMsgParam = endScanParams;
3050 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 /* call DAL API to pass init scan request to DAL */
3052 status = WDI_EndScanReq(wdiEndScanParams,
3053 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(IS_WDI_STATUS_FAILURE(status))
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3057 "Failure in End Scan WDI API, free all the memory "
3058 "It should be due to previous abort scan." );
3059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3060 vos_mem_free(pWdaParams) ;
3061 endScanParams->status = eSIR_FAILURE ;
3062 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 return CONVERT_WDI2VOS_STATUS(status) ;
3065}
Jeff Johnson295189b2012-06-20 16:38:30 -07003066/*
3067 * FUNCTION: WDA_FinishScanReqCallback
3068 * Trigger Finish SCAN callback
3069 */
3070void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3071{
3072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3073 tWDA_CbContext *pWDA;
3074 tFinishScanParams *finishScanParam;
3075 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(NULL == pWdaParams)
3079 {
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003081 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 VOS_ASSERT(0) ;
3083 return ;
3084 }
3085
3086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3087 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 if(NULL == finishScanParam)
3089 {
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003091 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3094 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return ;
3096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3098 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 /*
3100 * Now Resume TX, if we reached here means, TX is already suspended, we
3101 * have to resume it unconditionaly
3102 */
3103 status = WDA_ResumeDataTx(pWDA) ;
3104
3105 if(VOS_STATUS_SUCCESS != status)
3106 {
3107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003110 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3112 return ;
3113}
Jeff Johnson295189b2012-06-20 16:38:30 -07003114/*
3115 * FUNCTION: WDA_ProcessFinshScanReq
3116 * Trigger Finish SCAN in WDI
3117 */
3118VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3119 tFinishScanParams *finishScanParams)
3120{
3121 WDI_Status status = WDI_STATUS_SUCCESS;
3122 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3123 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3124 sizeof(WDI_FinishScanReqParamsType)) ;
3125 tWDA_ReqParams *pWdaParams ;
3126 tANI_U8 i = 0;
3127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 if(NULL == wdiFinishScanParams)
3130 {
3131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_ASSERT(0);
3134 return VOS_STATUS_E_NOMEM;
3135 }
3136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3137 if(NULL == pWdaParams)
3138 {
3139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 VOS_ASSERT(0);
3142 vos_mem_free(wdiFinishScanParams);
3143 return VOS_STATUS_E_NOMEM;
3144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 /* Copy init Scan params to WDI structure */
3146 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3147 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3148 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3150 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3151 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3152 finishScanParams->frameLength ;
3153 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3154 finishScanParams->currentOperChannel ;
3155 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3156 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3157 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3159 {
3160 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3161 finishScanParams->scanEntry.bssIdx[i] ;
3162 }
3163
3164
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 /* if Frame length, copy macMgmtHdr ro WDI structure */
3166 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3167 {
3168 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3169 &finishScanParams->macMgmtHdr,
3170 sizeof(WDI_MacMgmtHdr)) ;
3171 }
3172 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 /* Store Init Req pointer, as this will be used for response */
3174 /* store Params pass it to WDI */
3175 pWdaParams->pWdaContext = pWDA;
3176 pWdaParams->wdaMsgParam = finishScanParams;
3177 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 /* call DAL API to pass init scan request to DAL */
3179 status = WDI_FinishScanReq(wdiFinishScanParams,
3180 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003181
Jeff Johnson295189b2012-06-20 16:38:30 -07003182
3183 /*
3184 * WDI API returns failure..
3185 */
3186 if(IS_WDI_STATUS_FAILURE( status))
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3189 "Failure in Finish Scan WDI API, free all the memory " );
3190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3191 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 finishScanParams->status = eSIR_FAILURE ;
3193 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return CONVERT_WDI2VOS_STATUS(status) ;
3196}
Jeff Johnson295189b2012-06-20 16:38:30 -07003197/*---------------------------------------------------------------------
3198 * ASSOC API's
3199 *---------------------------------------------------------------------
3200 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003201/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303202 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 * Trigger Init SCAN callback
3204 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303205void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003206{
3207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3208 tWDA_CbContext *pWDA;
3209 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003211 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 if(NULL == pWdaParams)
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0) ;
3217 return ;
3218 }
3219 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3220 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3222 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* reset macBSSID */
3224 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 /* reset macSTASelf */
3226 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003227 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 return ;
3230}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303231
3232/*
3233 * FUNCTION: WDA_JoinReqCallback
3234 * Free memory and send SWITCH CHANNEL RSP back to PE.
3235 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3236 */
3237void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3238{
3239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3240 tWDA_CbContext *pWDA;
3241 tSwitchChannelParams *joinReqParam;
3242
3243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3244 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3245
3246 if(NULL == pWdaParams)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3249 "%s: pWdaParams received NULL", __func__);
3250 VOS_ASSERT(0);
3251 return;
3252 }
3253
3254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3255 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3256 joinReqParam->status = wdiStatus;
3257
3258 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3259 {
3260 /* reset macBSSID */
3261 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3262 /* reset macSTASelf */
3263 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3264
3265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3266 vos_mem_free(pWdaParams);
3267 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3268 }
3269
3270 return;
3271}
3272
Jeff Johnson295189b2012-06-20 16:38:30 -07003273/*
3274 * FUNCTION: WDA_ProcessJoinReq
3275 * Trigger Join REQ in WDI
3276 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003277VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3278 tSwitchChannelParams* joinReqParam)
3279{
3280 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 WDI_JoinReqParamsType *wdiJoinReqParam =
3282 (WDI_JoinReqParamsType *)vos_mem_malloc(
3283 sizeof(WDI_JoinReqParamsType)) ;
3284 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 if(NULL == wdiJoinReqParam)
3288 {
3289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003292 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return VOS_STATUS_E_NOMEM;
3294 }
3295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3296 if(NULL == pWdaParams)
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0);
3301 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003302 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 return VOS_STATUS_E_NOMEM;
3304 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003305
3306 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3307 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3308 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3311 "%s: received join request when BSSID or self-STA is NULL "
3312 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003314 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3315 VOS_ASSERT(0);
3316 vos_mem_free(wdiJoinReqParam);
3317 vos_mem_free(pWdaParams);
3318 joinReqParam->status = eSIR_FAILURE ;
3319 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3320 return VOS_STATUS_E_INVAL;
3321 }
3322
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 /* copy the BSSID for pWDA */
3324 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3325 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3327 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3329 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003330#ifdef WLAN_FEATURE_VOWIFI
3331 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3332 joinReqParam->maxTxPower ;
3333#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3335 joinReqParam->localPowerConstraint ;
3336#endif
3337 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3338 joinReqParam->secondaryChannelOffset ;
3339 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3340
Sachin Ahuja935eda782014-07-30 14:57:41 +05303341 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3342 wdiJoinReqParam->pUserData = pWdaParams;
3343
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 /* Store Init Req pointer, as this will be used for response */
3345 /* store Params pass it to WDI */
3346 pWdaParams->pWdaContext = pWDA;
3347 pWdaParams->wdaMsgParam = joinReqParam;
3348 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303350 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 if(IS_WDI_STATUS_FAILURE(status))
3352 {
3353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3354 "Failure in Join WDI API, free all the memory " );
3355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3356 vos_mem_free(pWdaParams) ;
3357 joinReqParam->status = eSIR_FAILURE ;
3358 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 return CONVERT_WDI2VOS_STATUS(status) ;
3361}
Jeff Johnson295189b2012-06-20 16:38:30 -07003362/*
3363 * FUNCTION: WDA_SwitchChannelReqCallback
3364 * send Switch channel RSP back to PE
3365 */
3366void WDA_SwitchChannelReqCallback(
3367 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3368{
3369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3370 tWDA_CbContext *pWDA;
3371 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003373 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 if(NULL == pWdaParams)
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003377 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003378 VOS_ASSERT(0) ;
3379 return ;
3380 }
3381 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3382 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3383
3384#ifdef WLAN_FEATURE_VOWIFI
3385 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3386#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3388 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003390 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 return ;
3393}
Jeff Johnson295189b2012-06-20 16:38:30 -07003394/*
3395 * FUNCTION: WDA_ProcessChannelSwitchReq
3396 * Request to WDI to switch channel REQ params.
3397 */
3398VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3399 tSwitchChannelParams *pSwitchChanParams)
3400{
3401 WDI_Status status = WDI_STATUS_SUCCESS ;
3402 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3403 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3404 sizeof(WDI_SwitchChReqParamsType)) ;
3405 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(NULL == wdiSwitchChanParam)
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0);
3413 return VOS_STATUS_E_NOMEM;
3414 }
3415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3416 if(NULL == pWdaParams)
3417 {
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 VOS_ASSERT(0);
3421 vos_mem_free(wdiSwitchChanParam);
3422 return VOS_STATUS_E_NOMEM;
3423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3425#ifndef WLAN_FEATURE_VOWIFI
3426 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3427 pSwitchChanParams->localPowerConstraint;
3428#endif
3429 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3430 pSwitchChanParams->secondaryChannelOffset;
3431 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 /* Store req pointer, as this will be used for response */
3433 /* store Params pass it to WDI */
3434 pWdaParams->pWdaContext = pWDA;
3435 pWdaParams->wdaMsgParam = pSwitchChanParams;
3436 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437#ifdef WLAN_FEATURE_VOWIFI
3438 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3439 = pSwitchChanParams->maxTxPower;
3440 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3441 pSwitchChanParams ->selfStaMacAddr,
3442 sizeof(tSirMacAddr));
3443#endif
3444 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3445 pSwitchChanParams->bssId,
3446 sizeof(tSirMacAddr));
3447
3448 status = WDI_SwitchChReq(wdiSwitchChanParam,
3449 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 if(IS_WDI_STATUS_FAILURE(status))
3451 {
3452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3453 "Failure in process channel switch Req WDI API, free all the memory " );
3454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3455 vos_mem_free(pWdaParams) ;
3456 pSwitchChanParams->status = eSIR_FAILURE ;
3457 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 return CONVERT_WDI2VOS_STATUS(status) ;
3460}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003461
3462/*
3463 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3464 * send Switch channel RSP back to PE
3465 */
3466void WDA_SwitchChannelReqCallback_V1(
3467 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3468 void* pUserData)
3469{
3470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3471 tWDA_CbContext *pWDA;
3472 tSwitchChannelParams *pSwitchChanParams;
3473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3474 "<------ %s " ,__func__);
3475
3476 if (NULL == pWdaParams)
3477 {
3478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3479 "%s: pWdaParams received NULL", __func__);
3480 VOS_ASSERT(0);
3481 return ;
3482 }
3483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3484 pSwitchChanParams =
3485 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3486 pSwitchChanParams->channelSwitchSrc =
3487 wdiSwitchChanRsp->channelSwitchSrc;
3488#ifdef WLAN_FEATURE_VOWIFI
3489 pSwitchChanParams->txMgmtPower =
3490 wdiSwitchChanRsp->ucTxMgmtPower;
3491#endif
3492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3493 vos_mem_free(pWdaParams);
3494 pSwitchChanParams->status =
3495 wdiSwitchChanRsp->wdiStatus ;
3496 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3497 (void *)pSwitchChanParams , 0);
3498 return;
3499}
3500
3501/*
3502 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3503 * Request to WDI to switch channel REQ params.
3504 */
3505VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3506 tSwitchChannelParams *pSwitchChanParams)
3507{
3508 WDI_Status status = WDI_STATUS_SUCCESS ;
3509 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3510 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3511 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3512 tWDA_ReqParams *pWdaParams ;
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3514 "------> %s " ,__func__);
3515 if (NULL == wdiSwitchChanParam)
3516 {
3517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3518 "%s: VOS MEM Alloc Failure", __func__);
3519 VOS_ASSERT(0);
3520 return VOS_STATUS_E_NOMEM;
3521 }
3522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3523 if (NULL == pWdaParams)
3524 {
3525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3526 "%s: VOS MEM Alloc Failure", __func__);
3527 VOS_ASSERT(0);
3528 vos_mem_free(wdiSwitchChanParam);
3529 return VOS_STATUS_E_NOMEM;
3530 }
3531 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3532 pSwitchChanParams->channelSwitchSrc;
3533
3534 wdiSwitchChanParam->wdiChInfo.ucChannel =
3535 pSwitchChanParams->channelNumber;
3536#ifndef WLAN_FEATURE_VOWIFI
3537 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3538 pSwitchChanParams->localPowerConstraint;
3539#endif
3540 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3541 pSwitchChanParams->secondaryChannelOffset;
3542 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3543 /* Store req pointer, as this will be used for response */
3544 /* store Params pass it to WDI */
3545 pWdaParams->pWdaContext = pWDA;
3546 pWdaParams->wdaMsgParam = pSwitchChanParams;
3547 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3548#ifdef WLAN_FEATURE_VOWIFI
3549 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3550 pSwitchChanParams->maxTxPower;
3551 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3552 pSwitchChanParams ->selfStaMacAddr,
3553 sizeof(tSirMacAddr));
3554#endif
3555 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3556 pSwitchChanParams->bssId,
3557 sizeof(tSirMacAddr));
3558
3559 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3560 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3561 pWdaParams);
3562 if (IS_WDI_STATUS_FAILURE(status))
3563 {
3564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3565 "Failure in process channel switch Req WDI "
3566 "API, free all the memory " );
3567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3568 vos_mem_free(pWdaParams) ;
3569 pSwitchChanParams->status = eSIR_FAILURE ;
3570 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3571 (void *)pSwitchChanParams, 0) ;
3572 }
3573 return CONVERT_WDI2VOS_STATUS(status) ;
3574}
3575
Jeff Johnson295189b2012-06-20 16:38:30 -07003576/*
3577 * FUNCTION: WDA_ConfigBssReqCallback
3578 * config BSS Req Callback, called by WDI
3579 */
3580void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3581 ,void* pUserData)
3582{
3583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3584 tWDA_CbContext *pWDA;
3585 tAddBssParams *configBssReqParam;
3586 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003588 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 if(NULL == pWdaParams)
3590 {
3591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003592 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_ASSERT(0) ;
3594 return ;
3595 }
3596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3597 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3598 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003600 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3602 {
3603 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3604 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3606 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3607 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3608
3609 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3610 {
3611 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3612 {
3613 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3614 staConfigBssParam->staType = STA_ENTRY_BSSID;
3615 }
3616 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3617 (staConfigBssParam->staType == STA_ENTRY_SELF))
3618 {
3619 /* This is the 1st add BSS Req for the BTAMP STA */
3620 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3621 staConfigBssParam->staType = STA_ENTRY_BSSID;
3622 }
3623 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3624 (staConfigBssParam->staType == STA_ENTRY_PEER))
3625 {
3626 /* This is the 2nd ADD BSS Request that is sent
3627 * on the BTAMP STA side. The Sta type is
3628 * set to STA_ENTRY_PEER here.*/
3629 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3630 }
3631 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3632 (staConfigBssParam->staType == STA_ENTRY_SELF))
3633 {
3634 /* statype is already set by PE.
3635 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3636 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3637 staConfigBssParam->staType = STA_ENTRY_BSSID;
3638 }
3639 else
3640 {
3641 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3642 staConfigBssParam->staType = STA_ENTRY_PEER;
3643 }
3644 }
3645 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3646 {
3647 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3648 staConfigBssParam->staType = STA_ENTRY_SELF;
3649 }
3650 else
3651 {
3652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3653 "Invalid operation mode specified");
3654 VOS_ASSERT(0);
3655 }
3656
3657 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3662 sizeof(tSirMacAddr));
3663 staConfigBssParam->txChannelWidthSet =
3664 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3666 staConfigBssParam->htCapable)
3667 {
3668 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3669 wdiConfigBssRsp->ucBSSIdx;
3670 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3671 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303672 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3673 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3676 wdiConfigBssRsp->ucBSSIdx,
3677 wdiConfigBssRsp->ucSTAIdx))
3678 {
3679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003680 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 VOS_ASSERT(0) ;
3682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3684 {
3685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003686 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 VOS_ASSERT(0) ;
3688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003689#ifdef WLAN_FEATURE_VOWIFI
3690 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3691#endif
3692 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303693 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3694 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3696 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 return ;
3699}
Jeff Johnson295189b2012-06-20 16:38:30 -07003700/*
3701 * FUNCTION: WDA_UpdateEdcaParamsForAC
3702 * Update WDI EDCA params with PE edca params
3703 */
3704void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3705 WDI_EdcaParamRecord *wdiEdcaParam,
3706 tSirMacEdcaParamRecord *macEdcaParam)
3707{
3708 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3709 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3710 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3711 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3712 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3713 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3714}
Jeff Johnson295189b2012-06-20 16:38:30 -07003715/*
3716 * FUNCTION: WDA_ProcessConfigBssReq
3717 * Configure BSS before starting Assoc with AP
3718 */
3719VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3720 tAddBssParams* configBssReqParam)
3721{
3722 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303723 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003726 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303727 if (NULL == configBssReqParam)
3728 {
3729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3730 "%s: configBssReqParam is NULL", __func__);
3731 return VOS_STATUS_E_INVAL;
3732 }
3733
3734 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3735 sizeof(WDI_ConfigBSSReqParamsType)) ;
3736
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 if(NULL == wdiConfigBssReqParam)
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 VOS_ASSERT(0);
3742 return VOS_STATUS_E_NOMEM;
3743 }
3744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3745 if(NULL == pWdaParams)
3746 {
3747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 VOS_ASSERT(0);
3750 vos_mem_free(wdiConfigBssReqParam);
3751 return VOS_STATUS_E_NOMEM;
3752 }
Kiran4a17ebe2013-01-31 10:43:43 -08003753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3754 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003755 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3757 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 /* Store Init Req pointer, as this will be used for response */
3759 /* store Params pass it to WDI */
3760 pWdaParams->pWdaContext = pWDA;
3761 pWdaParams->wdaMsgParam = configBssReqParam;
3762 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3764 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 if(IS_WDI_STATUS_FAILURE(status))
3766 {
3767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3768 "Failure in Config BSS WDI API, free all the memory " );
3769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3770 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 return CONVERT_WDI2VOS_STATUS(status) ;
3775}
Jeff Johnson295189b2012-06-20 16:38:30 -07003776#ifdef ENABLE_HAL_COMBINED_MESSAGES
3777/*
3778 * FUNCTION: WDA_PostAssocReqCallback
3779 * Post ASSOC req callback, send RSP back to PE
3780 */
3781void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3782 void* pUserData)
3783{
3784 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3785 tPostAssocParams *postAssocReqParam =
3786 (tPostAssocParams *)pWDA->wdaMsgParam ;
3787 /*STA context within the BSS Params*/
3788 tAddStaParams *staPostAssocParam =
3789 &postAssocReqParam->addBssParams.staContext ;
3790 /*STA Params for self STA*/
3791 tAddStaParams *selfStaPostAssocParam =
3792 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003794 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003796 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3798 {
3799 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3800 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3801 sizeof(tSirMacAddr)) ;
3802 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3803 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3804 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3806 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303807 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3809 pWDA->wdaWdiApiMsgParam = NULL;
3810 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 return ;
3813}
Jeff Johnson295189b2012-06-20 16:38:30 -07003814/*
3815 * FUNCTION: WDA_ProcessPostAssocReq
3816 * Trigger POST ASSOC processing in WDI
3817 */
3818VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3819 tPostAssocParams *postAssocReqParam)
3820{
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 WDI_Status status = WDI_STATUS_SUCCESS ;
3822
3823 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3824 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3825 sizeof(WDI_PostAssocReqParamsType)) ;
3826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 if(NULL == wdiPostAssocReqParam)
3830 {
3831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 VOS_ASSERT(0);
3834 return VOS_STATUS_E_NOMEM;
3835 }
3836
3837 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3838 {
3839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003840 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 VOS_ASSERT(0);
3842 return VOS_STATUS_E_FAILURE;
3843 }
3844
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 /* update BSS params into WDI structure */
3846 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3847 &postAssocReqParam->addBssParams) ;
3848 /* update STA params into WDI structure */
3849 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3850 &postAssocReqParam->addStaParams) ;
3851
3852 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3853 postAssocReqParam->addBssParams.highPerformance;
3854 WDA_UpdateEdcaParamsForAC(pWDA,
3855 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3856 &postAssocReqParam->addBssParams.acbe);
3857 WDA_UpdateEdcaParamsForAC(pWDA,
3858 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3859 &postAssocReqParam->addBssParams.acbk);
3860 WDA_UpdateEdcaParamsForAC(pWDA,
3861 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3862 &postAssocReqParam->addBssParams.acvi);
3863 WDA_UpdateEdcaParamsForAC(pWDA,
3864 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3865 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 /* Store Init Req pointer, as this will be used for response */
3867 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 /* store Params pass it to WDI */
3869 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3871 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 if(IS_WDI_STATUS_FAILURE(status))
3873 {
3874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3875 "Failure in Post Assoc WDI API, free all the memory " );
3876 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3877 pWDA->wdaWdiApiMsgParam = NULL;
3878 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 return CONVERT_WDI2VOS_STATUS(status) ;
3883}
3884#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003885/*
3886 * FUNCTION: WDA_AddStaReqCallback
3887 * ADD STA req callback, send RSP back to PE
3888 */
3889void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3890 void* pUserData)
3891{
3892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3893 tWDA_CbContext *pWDA;
3894 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003896 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 if(NULL == pWdaParams)
3898 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 VOS_ASSERT(0) ;
3901 return ;
3902 }
3903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3904 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003906 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3908 {
3909 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3910 /*TODO: UMAC structure doesn't have these fields*/
3911 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3912 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3913 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3914 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3915 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3916 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003917#ifdef FEATURE_WLAN_TDLS
3918 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3919 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3920#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003922#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 {
3924 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3925 wdiConfigStaRsp->ucBssIdx;
3926 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3927 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303928 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3929 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 }
3931 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3932 {
3933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003934 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 VOS_ASSERT(0) ;
3936 return ;
3937 }
3938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3940 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003941 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 return ;
3943}
Jeff Johnson295189b2012-06-20 16:38:30 -07003944/*
3945 * FUNCTION: WDA_ConfigStaReq
3946 * Trigger Config STA processing in WDI
3947 */
3948VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3949 tAddStaParams *addStaReqParam)
3950{
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3953 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3954 sizeof(WDI_ConfigSTAReqParamsType)) ;
3955 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003957 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 if(NULL == wdiConfigStaReqParam)
3959 {
3960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 VOS_ASSERT(0);
3963 return VOS_STATUS_E_NOMEM;
3964 }
3965 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3966 if(NULL == pWdaParams)
3967 {
3968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 VOS_ASSERT(0);
3971 vos_mem_free(wdiConfigStaReqParam);
3972 return VOS_STATUS_E_NOMEM;
3973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 /* update STA params into WDI structure */
3976 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3977 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 /* Store Init Req pointer, as this will be used for response */
3979 /* store Params pass it to WDI */
3980 pWdaParams->pWdaContext = pWDA;
3981 pWdaParams->wdaMsgParam = addStaReqParam;
3982 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3984 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 if(IS_WDI_STATUS_FAILURE(status))
3986 {
3987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3988 "Failure in Config STA WDI API, free all the memory " );
3989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3990 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 return CONVERT_WDI2VOS_STATUS(status) ;
3995}
Jeff Johnson295189b2012-06-20 16:38:30 -07003996/*
3997 * FUNCTION: WDA_DelBSSReqCallback
3998 * Dens DEL BSS RSP back to PE
3999 */
4000void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
4001 void* pUserData)
4002{
4003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4004 tWDA_CbContext *pWDA;
4005 tDeleteBssParams *delBssReqParam;
4006 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(NULL == pWdaParams)
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 VOS_ASSERT(0) ;
4014 return ;
4015 }
4016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4017 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004018 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4020 {
4021 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4022 sizeof(tSirMacAddr)) ;
4023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4025 {
4026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004027 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 VOS_ASSERT(0) ;
4029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4031 {
4032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004033 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 VOS_ASSERT(0) ;
4035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4037 {
4038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004039 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 VOS_ASSERT(0) ;
4041 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304042
4043 WLANTL_StartForwarding(staIdx,0,0);
4044
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4046 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004047 /* reset the the system role*/
4048 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4049
4050 /* Reset the BA related information */
4051 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4052 {
4053 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4054 {
4055 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4056 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304057 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 /* Reset framesTxed counters here */
4059 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4060 {
4061 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4062 }
4063 }
4064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 return ;
4067}
4068
Jeff Johnson295189b2012-06-20 16:38:30 -07004069/*
4070 * FUNCTION: WDA_ProcessDelBssReq
4071 * Init DEL BSS req with WDI
4072 */
4073VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4074 tDeleteBssParams *delBssParam)
4075{
4076 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4078 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4079 sizeof(WDI_DelBSSReqParamsType)) ;
4080 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004082 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 if(NULL == wdiDelBssReqParam)
4084 {
4085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 VOS_ASSERT(0);
4088 return VOS_STATUS_E_NOMEM;
4089 }
4090 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4091 if(NULL == pWdaParams)
4092 {
4093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004094 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 VOS_ASSERT(0);
4096 vos_mem_free(wdiDelBssReqParam);
4097 return VOS_STATUS_E_NOMEM;
4098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4100 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4101
4102 /* Store Init Req pointer, as this will be used for response */
4103 /* store Params pass it to WDI */
4104 pWdaParams->pWdaContext = pWDA;
4105 pWdaParams->wdaMsgParam = delBssParam;
4106 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 status = WDI_DelBSSReq(wdiDelBssReqParam,
4108 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 if(IS_WDI_STATUS_FAILURE(status))
4110 {
4111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4112 "Failure in Del BSS WDI API, free all the memory " );
4113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4114 vos_mem_free(pWdaParams) ;
4115 delBssParam->status = eSIR_FAILURE ;
4116 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 return CONVERT_WDI2VOS_STATUS(status) ;
4119}
Jeff Johnson295189b2012-06-20 16:38:30 -07004120/*
4121 * FUNCTION: WDA_DelSTAReqCallback
4122 * Dens DEL STA RSP back to PE
4123 */
4124void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4125 void* pUserData)
4126{
4127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4128 tWDA_CbContext *pWDA;
4129 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004131 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 if(NULL == pWdaParams)
4133 {
4134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004135 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 VOS_ASSERT(0) ;
4137 return ;
4138 }
4139 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4140 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004141 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4143 {
4144 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4145 {
4146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 VOS_ASSERT(0) ;
4149 }
4150 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304151 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 }
4153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4154 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 /*Reset the BA information corresponding to this STAIdx */
4156 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4157 WDA_INVALID_STA_INDEX;
4158 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304159 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 return ;
4162}
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_ProcessDelStaReq
4165 * Init DEL STA req with WDI
4166 */
4167VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4168 tDeleteStaParams *delStaParam)
4169{
4170 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4172 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4173 sizeof(WDI_DelSTAReqParamsType)) ;
4174 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 if(NULL == wdiDelStaReqParam)
4178 {
4179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 VOS_ASSERT(0);
4182 return VOS_STATUS_E_NOMEM;
4183 }
4184 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4185 if(NULL == pWdaParams)
4186 {
4187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 VOS_ASSERT(0);
4190 vos_mem_free(wdiDelStaReqParam);
4191 return VOS_STATUS_E_NOMEM;
4192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4194 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 /* Store Init Req pointer, as this will be used for response */
4196 /* store Params pass it to WDI */
4197 pWdaParams->pWdaContext = pWDA;
4198 pWdaParams->wdaMsgParam = delStaParam;
4199 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 status = WDI_DelSTAReq(wdiDelStaReqParam,
4201 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 if(IS_WDI_STATUS_FAILURE(status))
4203 {
4204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4205 "Failure in Del STA WDI API, free all the memory status = %d",
4206 status );
4207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4208 vos_mem_free(pWdaParams) ;
4209 delStaParam->status = eSIR_FAILURE ;
4210 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 return CONVERT_WDI2VOS_STATUS(status) ;
4213}
Jeff Johnson295189b2012-06-20 16:38:30 -07004214void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4215{
4216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4217 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304218 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004220 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 if(NULL == pWdaParams)
4222 {
4223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004224 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 VOS_ASSERT(0) ;
4226 return ;
4227 }
4228 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4229 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4231 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4233 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4234 pwdiAddSTASelfRsp->macSelfSta,
4235 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304236 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4237 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4238 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4239 {
4240 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4241 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 return ;
4245}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304246
Jeff Johnson295189b2012-06-20 16:38:30 -07004247/*
4248 * FUNCTION: WDA_ProcessAddStaSelfReq
4249 *
4250 */
4251VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4252{
4253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4256 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4257 sizeof(WDI_AddSTASelfReqParamsType)) ;
4258 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004260 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304261 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 if( NULL == wdiAddStaSelfReq )
4263 {
4264 VOS_ASSERT( 0 );
4265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004266 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304267 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4268 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 return( VOS_STATUS_E_NOMEM );
4270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 if( NULL == pWdaParams )
4273 {
4274 VOS_ASSERT( 0 );
4275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004276 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304277 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4278 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 vos_mem_free(wdiAddStaSelfReq) ;
4280 return( VOS_STATUS_E_NOMEM );
4281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004284 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 /* Store Init Req pointer, as this will be used for response */
4286 /* store Params pass it to WDI */
4287 pWdaParams->pWdaContext = pWDA;
4288 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4289 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004290 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004291
Jeff Johnson43971f52012-07-17 12:26:56 -07004292 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 {
4294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4295 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004296 wstatus );
4297 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4299 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304300 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4301 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 pAddStaSelfReq->status = eSIR_FAILURE ;
4303 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4304 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004305 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004306}
Jeff Johnson295189b2012-06-20 16:38:30 -07004307/*
4308 * FUNCTION: WDA_DelSTASelfRespCallback
4309 *
4310 */
4311void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4312 wdiDelStaSelfRspParams , void* pUserData)
4313{
4314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4315 tWDA_CbContext *pWDA;
4316 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 if (NULL == pWdaParams)
4320 {
4321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004322 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 VOS_ASSERT(0);
4324 return;
4325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4327 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004329 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330
4331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4332 vos_mem_free(pWdaParams) ;
4333
4334 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 return ;
4336}
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_DelSTASelfReqCallback
4339 *
4340 */
4341void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4342 void* pUserData)
4343{
4344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4345 tWDA_CbContext *pWDA;
4346 tDelStaSelfParams *delStaSelfParams;
4347
4348 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304349 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004350 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351
4352 if (NULL == pWdaParams)
4353 {
4354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 VOS_ASSERT(0);
4357 return;
4358 }
4359
4360 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4361 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4362
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004363 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004364
4365 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4366 {
4367 VOS_ASSERT(0);
4368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4369 vos_mem_free(pWdaParams) ;
4370 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4371 }
4372
4373 return ;
4374}
4375
4376/*
4377 * FUNCTION: WDA_DelSTASelfReq
4378 * Trigger Config STA processing in WDI
4379 */
4380VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4381 tDelStaSelfParams* pDelStaSelfReqParam)
4382{
4383 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004384 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 tWDA_ReqParams *pWdaParams = NULL;
4386 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4387 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4388 sizeof(WDI_DelSTASelfReqParamsType)) ;
4389
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 if( NULL == wdiDelStaSelfReq )
4393 {
4394 VOS_ASSERT( 0 );
4395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004396 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004397 return( VOS_STATUS_E_NOMEM );
4398 }
4399
4400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4401 if( NULL == pWdaParams )
4402 {
4403 VOS_ASSERT( 0 );
4404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004405 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 vos_mem_free(wdiDelStaSelfReq) ;
4407 return( VOS_STATUS_E_NOMEM );
4408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 pWdaParams->pWdaContext = pWDA;
4410 /* Store param pointer as passed in by caller */
4411 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4412 /* store Params pass it to WDI */
4413 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4415 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4416
4417 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4418 wdiDelStaSelfReq->pUserData = pWdaParams;
4419
Jeff Johnson43971f52012-07-17 12:26:56 -07004420 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4422
Jeff Johnson43971f52012-07-17 12:26:56 -07004423 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 {
4425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4426 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4427 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004428 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4430 vos_mem_free(pWdaParams) ;
4431 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4432 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4433 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004434 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435}
4436
Jeff Johnson295189b2012-06-20 16:38:30 -07004437/*
4438 * FUNCTION: WDA_SendMsg
4439 * Send Message back to PE
4440 */
4441void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4442 void *pBodyptr, tANI_U32 bodyVal)
4443{
4444 tSirMsgQ msg = {0} ;
4445 tANI_U32 status = VOS_STATUS_SUCCESS ;
4446 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 msg.type = msgType;
4448 msg.bodyval = bodyVal;
4449 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 if (VOS_STATUS_SUCCESS != status)
4452 {
4453 if(NULL != pBodyptr)
4454 {
4455 vos_mem_free(pBodyptr);
4456 }
4457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004458 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 VOS_ASSERT(0) ;
4460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 return ;
4462}
Jeff Johnson295189b2012-06-20 16:38:30 -07004463/*
4464 * FUNCTION: WDA_UpdateBSSParams
4465 * Translated WDA/PE BSS info into WDI BSS info..
4466 */
4467void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4468 WDI_ConfigBSSReqInfoType *wdiBssParams,
4469 tAddBssParams *wdaBssParams)
4470{
4471 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304472 v_U8_t i = 0;
4473
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 /* copy bssReq Params to WDI structure */
4475 vos_mem_copy(wdiBssParams->macBSSID,
4476 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4477 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4478 sizeof(tSirMacAddr)) ;
4479 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4480 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4481 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 wdiBssParams->ucShortSlotTimeSupported =
4483 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4485 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4486 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4487 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4488 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4489
4490 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4491 wdiBssParams->ucTXOPProtectionFullSupport =
4492 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4494 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4497 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4498 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4499 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4500
Chet Lanctot186b5732013-03-18 10:26:30 -07004501 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4502
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 /* copy SSID into WDI structure */
4504 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4505 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4506 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4508 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004510#ifdef WLAN_FEATURE_VOWIFI
4511 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4512#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515#ifdef WLAN_FEATURE_VOWIFI_11R
4516 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 if(wdiBssParams->bExtSetStaKeyParamValid)
4518 {
4519 /* copy set STA key params to WDI structure */
4520 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4521 wdaBssParams->extSetStaKeyParam.staIdx;
4522 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4523 wdaBssParams->extSetStaKeyParam.encType;
4524 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4525 wdaBssParams->extSetStaKeyParam.wepType;
4526 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4527 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4529 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004530 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4532 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4533 {
4534 WDA_GetWepKeysFromCfg( pWDA,
4535 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4536 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4537 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4538 }
4539 else
4540 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4542 keyIndex++)
4543 {
4544 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4545 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4546 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4547 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4548 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4549 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304550
4551 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4552 {
4553 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4554 {
4555 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4556 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4557 }
4558
4559 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4560 {
4561 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4562 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4563 }
4564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4565 FL("%s: Negated Keys"), __func__);
4566 }
4567 else
4568 {
4569 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4570 FL("%s: No change in Keys "), __func__);
4571 vos_mem_copy(
4572 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4573 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4574 WLAN_MAX_KEY_RSC_LEN);
4575 vos_mem_copy(
4576 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4577 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4578 SIR_MAC_MAX_KEY_LENGTH);
4579 }
4580
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4582 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4583 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4584 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304586 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 }
4589 }
4590 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4591 }
4592 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4593 {
4594 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4595 sizeof(wdaBssParams->extSetStaKeyParam) );
4596 }
4597#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004598#ifdef WLAN_FEATURE_11AC
4599 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4600 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4601#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004602
4603 return ;
4604}
Jeff Johnson295189b2012-06-20 16:38:30 -07004605/*
4606 * FUNCTION: WDA_UpdateSTAParams
4607 * Translated WDA/PE BSS info into WDI BSS info..
4608 */
4609void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4610 WDI_ConfigStaReqInfoType *wdiStaParams,
4611 tAddStaParams *wdaStaParams)
4612{
4613 tANI_U8 i = 0;
4614 /* Update STA params */
4615 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4616 sizeof(tSirMacAddr)) ;
4617 wdiStaParams->usAssocId = wdaStaParams->assocId;
4618 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004619 wdiStaParams->staIdx = wdaStaParams->staIdx;
4620
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 wdiStaParams->ucShortPreambleSupported =
4622 wdaStaParams->shortPreambleSupported;
4623 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4624 sizeof(tSirMacAddr)) ;
4625 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4626
4627 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4628
4629 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4630 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4631 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4632 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4633 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4634 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4635 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4636
4637 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4638 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004639 wdiStaParams->wdiSupportedRates.opRateMode =
4640 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004641 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4642 {
4643 wdiStaParams->wdiSupportedRates.llbRates[i] =
4644 wdaStaParams->supportedRates.llbRates[i];
4645 }
4646 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4647 {
4648 wdiStaParams->wdiSupportedRates.llaRates[i] =
4649 wdaStaParams->supportedRates.llaRates[i];
4650 }
4651 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4652 {
4653 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4654 wdaStaParams->supportedRates.aniLegacyRates[i];
4655 }
4656 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4657 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004658#ifdef WLAN_FEATURE_11AC
4659 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4660 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4661 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4662 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4663#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4665 {
4666 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4667 wdaStaParams->supportedRates.supportedMCSSet[i];
4668 }
4669 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4670 wdaStaParams->supportedRates.rxHighestDataRate;
4671
4672 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4673
4674 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4675
4676 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4677 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4678 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4679
4680 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4681 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4682 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4683 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004685#ifdef WLAN_FEATURE_11AC
4686 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4687 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004688 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304689 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4690 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4691 * must be set by default */
4692 if ( wdiStaParams->vhtTxMUBformeeCapable )
4693 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004694#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004695 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4696 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 return ;
4698}
Jeff Johnson295189b2012-06-20 16:38:30 -07004699/*
4700 * -------------------------------------------------------------------------
4701 * CFG update to WDI
4702 * -------------------------------------------------------------------------
4703 */
4704
4705 /*
4706 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4707 * Convert the WNI CFG ID to HAL CFG ID
4708 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004709static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004710{
4711 switch(wniCfgId)
4712 {
4713 case WNI_CFG_STA_ID:
4714 return QWLAN_HAL_CFG_STA_ID;
4715 case WNI_CFG_CURRENT_TX_ANTENNA:
4716 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4717 case WNI_CFG_CURRENT_RX_ANTENNA:
4718 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4719 case WNI_CFG_LOW_GAIN_OVERRIDE:
4720 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4721 case WNI_CFG_POWER_STATE_PER_CHAIN:
4722 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4723 case WNI_CFG_CAL_PERIOD:
4724 return QWLAN_HAL_CFG_CAL_PERIOD;
4725 case WNI_CFG_CAL_CONTROL:
4726 return QWLAN_HAL_CFG_CAL_CONTROL;
4727 case WNI_CFG_PROXIMITY:
4728 return QWLAN_HAL_CFG_PROXIMITY;
4729 case WNI_CFG_NETWORK_DENSITY:
4730 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4731 case WNI_CFG_MAX_MEDIUM_TIME:
4732 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4733 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4734 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4735 case WNI_CFG_RTS_THRESHOLD:
4736 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4737 case WNI_CFG_SHORT_RETRY_LIMIT:
4738 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4739 case WNI_CFG_LONG_RETRY_LIMIT:
4740 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4741 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4742 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4743 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4744 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4745 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4746 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4747 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4748 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4749 case WNI_CFG_FIXED_RATE:
4750 return QWLAN_HAL_CFG_FIXED_RATE;
4751 case WNI_CFG_RETRYRATE_POLICY:
4752 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4753 case WNI_CFG_RETRYRATE_SECONDARY:
4754 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4755 case WNI_CFG_RETRYRATE_TERTIARY:
4756 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4757 case WNI_CFG_FORCE_POLICY_PROTECTION:
4758 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4759 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4760 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4761 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4762 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4763 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4764 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4765 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4766 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4767 case WNI_CFG_MAX_BA_SESSIONS:
4768 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4769 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4770 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4771 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4772 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4773 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4774 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4775 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4776 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4777 case WNI_CFG_STATS_PERIOD:
4778 return QWLAN_HAL_CFG_STATS_PERIOD;
4779 case WNI_CFG_CFP_MAX_DURATION:
4780 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4781#if 0 /*This is not part of CFG*/
4782 case WNI_CFG_FRAME_TRANS_ENABLED:
4783 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4784#endif
4785 case WNI_CFG_DTIM_PERIOD:
4786 return QWLAN_HAL_CFG_DTIM_PERIOD;
4787 case WNI_CFG_EDCA_WME_ACBK:
4788 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4789 case WNI_CFG_EDCA_WME_ACBE:
4790 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4791 case WNI_CFG_EDCA_WME_ACVI:
4792 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4793 case WNI_CFG_EDCA_WME_ACVO:
4794 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4795#if 0
4796 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4797 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4798 case WNI_CFG_TELE_BCN_TRANS_LI:
4799 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4800 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4801 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4802 case WNI_CFG_TELE_BCN_MAX_LI:
4803 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4804 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4805 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4806#endif
4807 case WNI_CFG_ENABLE_CLOSE_LOOP:
4808 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004809 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4810 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304811 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4812 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 default:
4814 {
4815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004816 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 wniCfgId);
4818 return VOS_STATUS_E_INVAL;
4819 }
4820 }
4821}
Jeff Johnson295189b2012-06-20 16:38:30 -07004822/*
4823 * FUNCTION: WDA_UpdateCfgCallback
4824 *
4825 */
4826void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4827{
4828 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4829 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4830 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004832 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 /*
4834 * currently there is no response message is expected between PE and
4835 * WDA, Failure return from WDI is a ASSERT condition
4836 */
4837 if(WDI_STATUS_SUCCESS != wdiStatus)
4838 {
4839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004840 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4842 }
4843
4844 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4845 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4846 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 return ;
4848}
Jeff Johnson295189b2012-06-20 16:38:30 -07004849/*
4850 * FUNCTION: WDA_UpdateCfg
4851 *
4852 */
4853VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4854{
4855
4856 WDI_Status status = WDI_STATUS_SUCCESS ;
4857 tANI_U32 val =0;
4858 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4859 tHalCfg *configData;
4860 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4861 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 if (NULL == pMac )
4865 {
4866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004867 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 return VOS_STATUS_E_FAILURE;
4869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 if(WDA_START_STATE != pWDA->wdaState)
4871 {
4872 return VOS_STATUS_E_FAILURE;
4873 }
4874
4875 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4876 {
4877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004878 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 VOS_ASSERT(0);
4880 return VOS_STATUS_E_FAILURE;
4881 }
4882
4883 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4884 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 if(NULL == wdiCfgReqParam)
4886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 VOS_ASSERT(0);
4890 return VOS_STATUS_E_NOMEM;
4891 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4893 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 if(NULL == wdiCfgReqParam->pConfigBuffer)
4895 {
4896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 vos_mem_free(wdiCfgReqParam);
4899 VOS_ASSERT(0);
4900 return VOS_STATUS_E_NOMEM;
4901 }
4902
4903 /*convert the WNI CFG Id to HAL CFG Id*/
4904 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4905 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4906
4907 /*TODO: revisit this for handling string parameters */
4908 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4909 &val) != eSIR_SUCCESS)
4910 {
4911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004912 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4914 vos_mem_free(wdiCfgReqParam);
4915 return eSIR_FAILURE;
4916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4918 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4919 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4920 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4921 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4922
4923 /* store Params pass it to WDI */
4924 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004925#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4926 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4927 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 if(IS_WDI_STATUS_FAILURE(status))
4929 {
4930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4931 "Failure in Update CFG WDI API, free all the memory " );
4932 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4933 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4934 pWDA->wdaWdiCfgApiMsgParam = NULL;
4935 /* Failure is not expected */
4936 VOS_ASSERT(0) ;
4937 }
4938#else
4939 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4940 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4941 pWDA->wdaWdiCfgApiMsgParam = NULL;
4942#endif
4943 return CONVERT_WDI2VOS_STATUS(status) ;
4944}
4945
Jeff Johnson295189b2012-06-20 16:38:30 -07004946VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4947 v_U8_t *pDefaultKeyId,
4948 v_U8_t *pNumKeys,
4949 WDI_KeysType *pWdiKeys )
4950{
4951 v_U32_t i, j, defKeyId = 0;
4952 v_U32_t val = SIR_MAC_KEY_LENGTH;
4953 VOS_STATUS status = WDI_STATUS_SUCCESS;
4954 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 if (NULL == pMac )
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004958 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 return VOS_STATUS_E_FAILURE;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4962 &defKeyId ))
4963 {
4964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4965 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4966 }
4967
4968 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 /* Need to extract ALL of the configured WEP Keys */
4970 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4971 {
4972 val = SIR_MAC_KEY_LENGTH;
4973 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4974 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4975 pWdiKeys[j].key,
4976 &val ))
4977 {
4978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004979 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 }
4981 else
4982 {
4983 pWdiKeys[j].keyId = (tANI_U8) i;
4984 /*
4985 * Actually, a DC (Don't Care) because
4986 * this is determined (and set) by PE/MLME
4987 */
4988 pWdiKeys[j].unicast = 0;
4989 /*
4990 * Another DC (Don't Care)
4991 */
4992 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4993 /* Another DC (Don't Care). Unused for WEP */
4994 pWdiKeys[j].paeRole = 0;
4995 /* Determined from wlan_cfgGetStr() above.*/
4996 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 j++;
4998 *pNumKeys = (tANI_U8) j;
4999 }
5000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 return status;
5002}
Jeff Johnson295189b2012-06-20 16:38:30 -07005003/*
5004 * FUNCTION: WDA_SetBssKeyReqCallback
5005 * send SET BSS key RSP back to PE
5006 */
5007void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5008{
5009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5010 tWDA_CbContext *pWDA;
5011 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 if(NULL == pWdaParams)
5015 {
5016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 VOS_ASSERT(0) ;
5019 return ;
5020 }
5021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5022 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305023 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5024 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5026 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005027 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 return ;
5030}
Jeff Johnson295189b2012-06-20 16:38:30 -07005031/*
5032 * FUNCTION: WDA_ProcessSetBssKeyReq
5033 * Request to WDI for programming the BSS key( key for
5034 * broadcast/multicast frames Encryption)
5035 */
5036VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5037 tSetBssKeyParams *setBssKeyParams )
5038{
5039 WDI_Status status = WDI_STATUS_SUCCESS ;
5040 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5041 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5042 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 if(NULL == wdiSetBssKeyParam)
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 VOS_ASSERT(0);
5052 return VOS_STATUS_E_NOMEM;
5053 }
5054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5055 if(NULL == pWdaParams)
5056 {
5057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 VOS_ASSERT(0);
5060 vos_mem_free(wdiSetBssKeyParam);
5061 return VOS_STATUS_E_NOMEM;
5062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005064 /* copy set BSS params to WDI structure */
5065 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5066 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5067 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 if(setBssKeyParams->encType != eSIR_ED_NONE)
5069 {
5070 if( setBssKeyParams->numKeys == 0 &&
5071 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5072 setBssKeyParams->encType == eSIR_ED_WEP104))
5073 {
5074 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5076 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5077 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5078 }
5079 else
5080 {
5081 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5082 {
5083 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5084 setBssKeyParams->key[keyIndex].keyId;
5085 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5086 setBssKeyParams->key[keyIndex].unicast;
5087 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5088 setBssKeyParams->key[keyIndex].keyDirection;
5089 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5090 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5091 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5092 setBssKeyParams->key[keyIndex].paeRole;
5093 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5094 setBssKeyParams->key[keyIndex].keyLength;
5095 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5096 setBssKeyParams->key[keyIndex].key,
5097 SIR_MAC_MAX_KEY_LENGTH);
5098 }
5099 }
5100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5102 setBssKeyParams->singleTidRc;
5103 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 /* Store set key pointer, as this will be used for response */
5105 /* store Params pass it to WDI */
5106 pWdaParams->pWdaContext = pWDA;
5107 pWdaParams->wdaMsgParam = setBssKeyParams;
5108 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5110 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5111
5112 if(IS_WDI_STATUS_FAILURE(status))
5113 {
5114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5115 "Failure in Set BSS Key Req WDI API, free all the memory " );
5116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5117 vos_mem_free(pWdaParams) ;
5118 setBssKeyParams->status = eSIR_FAILURE ;
5119 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 return CONVERT_WDI2VOS_STATUS(status) ;
5122}
Jeff Johnson295189b2012-06-20 16:38:30 -07005123/*
5124 * FUNCTION: WDA_RemoveBssKeyReqCallback
5125 * send SET BSS key RSP back to PE
5126 */
5127void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5128{
5129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5130 tWDA_CbContext *pWDA;
5131 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005133 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005134 if(NULL == pWdaParams)
5135 {
5136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005137 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 VOS_ASSERT(0) ;
5139 return ;
5140 }
5141 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5142 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5144 vos_mem_free(pWdaParams) ;
5145
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005146 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 return ;
5149}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305150
5151/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305152 * FUNCTION: WDA_GetFrameLogRspCallback
5153 * recieves get frame log response from FW
5154 */
5155void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5156 void* pUserData)
5157{
5158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5159 tWDA_CbContext *pWDA = NULL;
5160 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5161
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5163 "<------ Entering: %s " ,__func__);
5164 if(NULL == pWdaParams)
5165 {
5166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5167 "%s: pWdaParams received NULL", __func__);
5168 VOS_ASSERT(0) ;
5169 return ;
5170 }
5171
5172 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5173 if (NULL == pWDA)
5174 {
5175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5176 "%s:pWDA is NULL", __func__);
5177 VOS_ASSERT(0);
5178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5179 vos_mem_free(pWdaParams);
5180 return ;
5181 }
5182
5183 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5184 if(NULL == pGetFrameLogReqParams)
5185 {
5186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5187 "%s: pGetFrameLogReqParams received NULL", __func__);
5188 VOS_ASSERT(0);
5189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5190 vos_mem_free(pWdaParams);
5191 return;
5192 }
5193
5194 pGetFrameLogReqParams->rspStatus = wdiRsp->wdiStatus;
5195 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5197 "%s:GetFrameLog with rsp status %d", __func__, wdiRsp->wdiStatus);
5198 }
5199
5200 if(pGetFrameLogReqParams->getFramelogCallback)
5201 {
5202 pGetFrameLogReqParams->getFramelogCallback(
5203 pGetFrameLogReqParams->pDevContext);
5204 }
5205 else
5206 {
5207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5208 "%s: pGetFrameLogReqParams callback is NULL", __func__);
5209 }
5210
5211 /* free WDI command buffer only */
5212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5213 vos_mem_free(pWdaParams->wdaMsgParam);
5214 vos_mem_free(pWdaParams);
5215
5216 return ;
5217
5218}
5219/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305220 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305221 * recieves Mgmt Logging init response from FW
5222 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305223void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305224 void* pUserData)
5225{
5226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305227 tSirFWLoggingInitParam *pFWLoggingInitParams;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305228
5229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5230 "<------ %s " ,__func__);
5231
5232 if(NULL == pWdaParams)
5233 {
5234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5235 "%s: pWdaParams received NULL", __func__);
5236 VOS_ASSERT(0);
5237 return ;
5238 }
5239
5240 if(NULL == pWdaParams->wdaMsgParam)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5243 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5244 VOS_ASSERT(0);
5245 vos_mem_free(pWdaParams);
5246 return ;
5247 }
5248
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305249 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305250
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305251 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305252 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305253 pFWLoggingInitParams->fwlogInitCallback(
5254 pFWLoggingInitParams->fwlogInitCbContext,
5255 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305256 }
5257 else
5258 {
5259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305260 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305261 }
5262
5263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5264 vos_mem_free(pWdaParams->wdaMsgParam);
5265 vos_mem_free(pWdaParams);
5266
5267 return;
5268}
5269
5270/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305271 * FUNCTION: WDA_SpoofMacAddrRspCallback
5272 * recieves spoof mac addr response from FW
5273 */
5274void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5275{
5276 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5277 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305278
Siddharth Bhal171788a2014-09-29 21:02:40 +05305279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5280 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305281
Siddharth Bhal171788a2014-09-29 21:02:40 +05305282 if(NULL == pWdaParams)
5283 {
5284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5285 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305286 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305287 return ;
5288 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305290
Siddharth Bhal029d6732014-10-09 21:31:23 +05305291 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305293 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305294 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305295 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5296 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305297
Siddharth Bhal171788a2014-09-29 21:02:40 +05305298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305299 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305300 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305301
5302 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305303}
5304
Jeff Johnson295189b2012-06-20 16:38:30 -07005305/*
5306 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5307 * Request to WDI to remove the BSS key( key for broadcast/multicast
5308 * frames Encryption)
5309 */
5310VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5311 tRemoveBssKeyParams *removeBssKeyParams )
5312{
5313 WDI_Status status = WDI_STATUS_SUCCESS ;
5314 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5315 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5316 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5317 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 if(NULL == wdiRemoveBssKeyParam)
5321 {
5322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 VOS_ASSERT(0);
5325 return VOS_STATUS_E_NOMEM;
5326 }
5327 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5328 if(NULL == pWdaParams)
5329 {
5330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 VOS_ASSERT(0);
5333 vos_mem_free(wdiRemoveBssKeyParam);
5334 return VOS_STATUS_E_NOMEM;
5335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 /* copy Remove BSS key params to WDI structure*/
5337 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5338 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5339 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5340 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5341 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 /* Store remove key pointer, as this will be used for response */
5343 /* store Params pass it to WDI */
5344 pWdaParams->pWdaContext = pWDA;
5345 pWdaParams->wdaMsgParam = removeBssKeyParams;
5346 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5348 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if(IS_WDI_STATUS_FAILURE(status))
5350 {
5351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5352 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5354 vos_mem_free(pWdaParams) ;
5355 removeBssKeyParams->status = eSIR_FAILURE ;
5356 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 return CONVERT_WDI2VOS_STATUS(status) ;
5359}
Jeff Johnson295189b2012-06-20 16:38:30 -07005360/*
5361 * FUNCTION: WDA_SetBssKeyReqCallback
5362 * send SET BSS key RSP back to PE
5363 */
5364void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5365{
5366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5367 tWDA_CbContext *pWDA;
5368 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005370 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 if(NULL == pWdaParams)
5372 {
5373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 VOS_ASSERT(0) ;
5376 return ;
5377 }
5378 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5379 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305380 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5381 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5383 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005384 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 return ;
5387}
Jeff Johnson295189b2012-06-20 16:38:30 -07005388/*
5389 * FUNCTION: WDA_ProcessSetStaKeyReq
5390 * Request to WDI for programming the STA key( key for Unicast frames
5391 * Encryption)
5392 */
5393VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5394 tSetStaKeyParams *setStaKeyParams )
5395{
5396 WDI_Status status = WDI_STATUS_SUCCESS ;
5397 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5398 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5399 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5400 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 if(NULL == wdiSetStaKeyParam)
5405 {
5406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 VOS_ASSERT(0);
5409 return VOS_STATUS_E_NOMEM;
5410 }
5411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5412 if(NULL == pWdaParams)
5413 {
5414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 VOS_ASSERT(0);
5417 vos_mem_free(wdiSetStaKeyParam);
5418 return VOS_STATUS_E_NOMEM;
5419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 /* copy set STA key params to WDI structure */
5423 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5424 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5425 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5426 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 if(setStaKeyParams->encType != eSIR_ED_NONE)
5428 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005429 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5431 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5432 {
5433 WDA_GetWepKeysFromCfg( pWDA,
5434 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5435 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5436 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5437 }
5438 else
5439 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5441 keyIndex++)
5442 {
5443 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5444 setStaKeyParams->key[keyIndex].keyId;
5445 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5446 setStaKeyParams->key[keyIndex].unicast;
5447 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5448 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5450 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5451 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5452 setStaKeyParams->key[keyIndex].paeRole;
5453 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5454 setStaKeyParams->key[keyIndex].keyLength;
5455 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5456 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5457 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5458 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5459 {
5460 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5461 }
5462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5464 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 }
5466 }
5467 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5468 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 /* Store set key pointer, as this will be used for response */
5470 /* store Params pass it to WDI */
5471 pWdaParams->pWdaContext = pWDA;
5472 pWdaParams->wdaMsgParam = setStaKeyParams;
5473 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5475 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 if(IS_WDI_STATUS_FAILURE(status))
5477 {
5478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5479 "Failure in set STA Key Req WDI API, free all the memory " );
5480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5481 vos_mem_free(pWdaParams) ;
5482 setStaKeyParams->status = eSIR_FAILURE ;
5483 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 return CONVERT_WDI2VOS_STATUS(status) ;
5486}
Jeff Johnson295189b2012-06-20 16:38:30 -07005487/*
5488 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5489 * send SET Bcast STA key RSP back to PE
5490 */
5491void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5492{
5493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5494 tWDA_CbContext *pWDA;
5495 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005497 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 if(NULL == pWdaParams)
5499 {
5500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005501 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005502 VOS_ASSERT(0) ;
5503 return ;
5504 }
5505 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5506 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5508 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005509 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 return ;
5512}
5513
Jeff Johnson295189b2012-06-20 16:38:30 -07005514/*
5515 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5516 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5517 * Encryption)
5518 */
5519VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5520 tSetStaKeyParams *setStaKeyParams )
5521{
5522 WDI_Status status = WDI_STATUS_SUCCESS ;
5523 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5524 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5525 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5526 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005529 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 if(NULL == wdiSetStaKeyParam)
5531 {
5532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 VOS_ASSERT(0);
5535 return VOS_STATUS_E_NOMEM;
5536 }
5537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5538 if(NULL == pWdaParams)
5539 {
5540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 VOS_ASSERT(0);
5543 vos_mem_free(wdiSetStaKeyParam);
5544 return VOS_STATUS_E_NOMEM;
5545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 /* copy set STA key params to WDI structure */
5549 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5550 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5551 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5552 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 if(setStaKeyParams->encType != eSIR_ED_NONE)
5554 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5556 keyIndex++)
5557 {
5558 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5559 setStaKeyParams->key[keyIndex].keyId;
5560 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5561 setStaKeyParams->key[keyIndex].unicast;
5562 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5563 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5565 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5566 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5567 setStaKeyParams->key[keyIndex].paeRole;
5568 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5569 setStaKeyParams->key[keyIndex].keyLength;
5570 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5571 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5574 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 }
5576 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 /* Store set key pointer, as this will be used for response */
5578 /* store Params pass it to WDI */
5579 pWdaParams->pWdaContext = pWDA;
5580 pWdaParams->wdaMsgParam = setStaKeyParams;
5581 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5583 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 if(IS_WDI_STATUS_FAILURE(status))
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5587 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5589 vos_mem_free(pWdaParams) ;
5590 setStaKeyParams->status = eSIR_FAILURE ;
5591 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 return CONVERT_WDI2VOS_STATUS(status) ;
5594}
Jeff Johnson295189b2012-06-20 16:38:30 -07005595/*
5596 * FUNCTION: WDA_RemoveStaKeyReqCallback
5597 * send SET BSS key RSP back to PE
5598 */
5599void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5600{
5601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5602 tWDA_CbContext *pWDA;
5603 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 if(NULL == pWdaParams)
5607 {
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 VOS_ASSERT(0) ;
5611 return ;
5612 }
5613 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5614 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5616 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005617 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 return ;
5620}
5621
Jeff Johnson295189b2012-06-20 16:38:30 -07005622/*
5623 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5624 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5625 */
5626VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5627 tRemoveStaKeyParams *removeStaKeyParams )
5628{
5629 WDI_Status status = WDI_STATUS_SUCCESS ;
5630 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5631 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5632 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5633 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005635 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 if(NULL == wdiRemoveStaKeyParam)
5637 {
5638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 VOS_ASSERT(0);
5641 return VOS_STATUS_E_NOMEM;
5642 }
5643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5644 if(NULL == pWdaParams)
5645 {
5646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 VOS_ASSERT(0);
5649 vos_mem_free(wdiRemoveStaKeyParam);
5650 return VOS_STATUS_E_NOMEM;
5651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 /* copy remove STA key params to WDI structure*/
5653 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5654 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5655 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5656 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5657 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 /* Store remove key pointer, as this will be used for response */
5659 /* store Params pass it to WDI */
5660 pWdaParams->pWdaContext = pWDA;
5661 pWdaParams->wdaMsgParam = removeStaKeyParams;
5662 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5664 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 if(IS_WDI_STATUS_FAILURE(status))
5666 {
5667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5668 "Failure in remove STA Key Req WDI API, free all the memory " );
5669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5670 vos_mem_free(pWdaParams) ;
5671 removeStaKeyParams->status = eSIR_FAILURE ;
5672 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 return CONVERT_WDI2VOS_STATUS(status) ;
5675}
Jeff Johnson295189b2012-06-20 16:38:30 -07005676/*
5677 * FUNCTION: WDA_IsHandleSetLinkStateReq
5678 * Update the WDA state and return the status to handle this message or not
5679 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005680WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5681 tWDA_CbContext *pWDA,
5682 tLinkStateParams *linkStateParams)
5683{
5684 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 switch(linkStateParams->state)
5686 {
5687 case eSIR_LINK_PREASSOC_STATE:
5688 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5689 /*
5690 * set the WDA state to PRE ASSOC
5691 * copy the BSSID into pWDA to use it in join request and return,
5692 * No need to handle these messages.
5693 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005694 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5695 {
5696 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005697 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005698 }
5699 else
5700 {
5701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005702 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005703 VOS_ASSERT(0);
5704 }
5705
5706 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5707 {
5708 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005710 }
5711 else
5712 {
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005714 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005715 VOS_ASSERT(0);
5716 }
5717
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5719 *channel and after ) so reset the WDA state to ready when the second
5720 * time UMAC issue the link state with PREASSOC
5721 */
5722 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5723 {
5724 /* RESET WDA state back to WDA_READY_STATE */
5725 pWDA->wdaState = WDA_READY_STATE;
5726 }
5727 else
5728 {
5729 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5730 }
5731 //populate linkState info in WDACbCtxt
5732 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005734 default:
5735 if(pWDA->wdaState != WDA_READY_STATE)
5736 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005737 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5738 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5739 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5740 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5741 *the ASSERT in WDA_Stop during module unload.*/
5742 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5743 {
5744 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005745 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005746 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005747 else
5748 {
5749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005750 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005751 status = WDA_IGNORE_SET_LINK_STATE;
5752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005753 }
5754 break;
5755 }
5756
5757 return status;
5758}
Jeff Johnson295189b2012-06-20 16:38:30 -07005759/*
5760 * FUNCTION: WDA_SetLinkStateCallback
5761 * call back function for set link state from WDI
5762 */
5763void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5764{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305765 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 tLinkStateParams *linkStateParams;
5767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005769 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305770 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 {
5772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005773 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005774 VOS_ASSERT(0) ;
5775 return ;
5776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305778 if (NULL == pWDA)
5779 {
5780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5781 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5783 vos_mem_free(pWdaParams->wdaMsgParam);
5784 vos_mem_free(pWdaParams);
5785
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305786 VOS_ASSERT(0);
5787 return ;
5788 }
5789
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 /*
5792 * In STA mode start the BA activity check timer after association
5793 * and in AP mode start BA activity check timer after BSS start */
5794 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5795 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005796 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5797 ((status == WDI_STATUS_SUCCESS) &&
5798 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 {
5800 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 /*
5804 * No respone required for WDA_SET_LINK_STATE so free the request
5805 * param here
5806 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5808 vos_mem_free(pWdaParams);
5809
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 return ;
5811}
Jeff Johnson295189b2012-06-20 16:38:30 -07005812/*
5813 * FUNCTION: WDA_ProcessSetLinkState
5814 * Request to WDI to set the link status.
5815 */
5816VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5817 tLinkStateParams *linkStateParams)
5818{
5819 WDI_Status status = WDI_STATUS_SUCCESS ;
5820 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5821 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5822 sizeof(WDI_SetLinkReqParamsType)) ;
5823 tWDA_ReqParams *pWdaParams ;
5824 tpAniSirGlobal pMac;
5825 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5826
5827 if(NULL == pMac)
5828 {
5829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005830 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005832 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 return VOS_STATUS_E_FAILURE;
5834 }
5835
5836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 if(NULL == wdiSetLinkStateParam)
5839 {
5840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_ASSERT(0);
5843 return VOS_STATUS_E_NOMEM;
5844 }
5845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5846 if(NULL == pWdaParams)
5847 {
5848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 VOS_ASSERT(0);
5851 vos_mem_free(wdiSetLinkStateParam);
5852 return VOS_STATUS_E_NOMEM;
5853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 if(WDA_IGNORE_SET_LINK_STATE ==
5855 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5856 {
5857 status = WDI_STATUS_E_FAILURE;
5858 }
5859 else
5860 {
5861 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5862 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5864 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5866 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005867 pWdaParams->pWdaContext = pWDA;
5868 /* Store remove key pointer, as this will be used for response */
5869 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 /* store Params pass it to WDI */
5871 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5872 /* Stop Timer only other than GO role and concurrent session */
5873 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005874 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5876 {
5877 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5880 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 if(IS_WDI_STATUS_FAILURE(status))
5882 {
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5884 "Failure in set link state Req WDI API, free all the memory " );
5885 }
5886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 if(IS_WDI_STATUS_FAILURE(status))
5888 {
5889 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005890 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 vos_mem_free(pWdaParams);
5892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 return CONVERT_WDI2VOS_STATUS(status) ;
5894}
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_GetStatsReqParamsCallback
5897 * send the response to PE with Stats received from WDI
5898 */
5899void WDA_GetStatsReqParamsCallback(
5900 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5901 void* pUserData)
5902{
5903 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5904 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5905
5906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 pGetPEStatsRspParams =
5909 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5910 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5911
5912 if(NULL == pGetPEStatsRspParams)
5913 {
5914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 VOS_ASSERT(0);
5917 return;
5918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5920 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5921 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5922 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005923
5924 //Fill the Session Id Properly in PE
5925 pGetPEStatsRspParams->sessionId = 0;
5926 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005927 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5929 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 vos_mem_copy( pGetPEStatsRspParams + 1,
5931 wdiGetStatsRsp + 1,
5932 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 /* send response to UMAC*/
5934 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5935
5936 return;
5937}
5938
Jeff Johnson295189b2012-06-20 16:38:30 -07005939/*
5940 * FUNCTION: WDA_ProcessGetStatsReq
5941 * Request to WDI to get the statistics
5942 */
5943VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5944 tAniGetPEStatsReq *pGetStatsParams)
5945{
5946 WDI_Status status = WDI_STATUS_SUCCESS ;
5947 WDI_GetStatsReqParamsType wdiGetStatsParam;
5948 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005950 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5952 pGetStatsParams->staId;
5953 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5954 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 status = WDI_GetStatsReq(&wdiGetStatsParam,
5957 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 if(IS_WDI_STATUS_FAILURE(status))
5959 {
5960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5961 "Failure in Get Stats Req WDI API, free all the memory " );
5962 pGetPEStatsRspParams =
5963 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5964 if(NULL == pGetPEStatsRspParams)
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005969 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 return VOS_STATUS_E_NOMEM;
5971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5973 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5974 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5975 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5976 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5977 (void *)pGetPEStatsRspParams, 0) ;
5978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005979 /* Free the request message */
5980 vos_mem_free(pGetStatsParams);
5981 return CONVERT_WDI2VOS_STATUS(status);
5982}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005983
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005984#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005985/*
5986 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5987 * send the response to PE with roam Rssi received from WDI
5988 */
5989void WDA_GetRoamRssiReqParamsCallback(
5990 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5991 void* pUserData)
5992{
5993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5994 tWDA_CbContext *pWDA = NULL;
5995 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5996 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5998 "<------ %s " ,__func__);
5999 if(NULL == pWdaParams)
6000 {
6001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6002 "%s: pWdaParams received NULL", __func__);
6003 VOS_ASSERT(0) ;
6004 return ;
6005 }
6006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6007 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6008
6009 if(NULL == pGetRoamRssiReqParams)
6010 {
6011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6012 "%s: pGetRoamRssiReqParams received NULL", __func__);
6013 VOS_ASSERT(0);
6014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6015 vos_mem_free(pWdaParams);
6016 return ;
6017 }
6018 pGetRoamRssiRspParams =
6019 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6020
6021 if(NULL == pGetRoamRssiRspParams)
6022 {
6023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6024 "%s: VOS MEM Alloc Failure", __func__);
6025 VOS_ASSERT(0);
6026 return;
6027 }
6028 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6029 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006030 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006031 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6032 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6033
6034 /* Assign get roam rssi req (backup) in to the response */
6035 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6036
6037 /* free WDI command buffer */
6038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6039 vos_mem_free(pWdaParams) ;
6040
6041 /* send response to UMAC*/
6042 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6043
6044 return;
6045}
6046
6047
6048
6049/*
6050 * FUNCTION: WDA_ProcessGetRoamRssiReq
6051 * Request to WDI to get the statistics
6052 */
6053VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6054 tAniGetRssiReq *pGetRoamRssiParams)
6055{
6056 WDI_Status status = WDI_STATUS_SUCCESS ;
6057 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6058 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6059 tWDA_ReqParams *pWdaParams = NULL;
6060
6061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6062 "------> %s " ,__func__);
6063 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6064 pGetRoamRssiParams->staId;
6065 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6066
6067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6068 if(NULL == pWdaParams)
6069 {
6070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6071 "%s: VOS MEM Alloc Failure", __func__);
6072 VOS_ASSERT(0);
6073 return VOS_STATUS_E_NOMEM;
6074 }
6075
6076 /* Store Init Req pointer, as this will be used for response */
6077 pWdaParams->pWdaContext = pWDA;
6078
6079 /* Take Get roam Rssi req backup as it stores the callback to be called after
6080 receiving the response */
6081 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6082 pWdaParams->wdaWdiApiMsgParam = NULL;
6083
6084 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6085 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6086 if(IS_WDI_STATUS_FAILURE(status))
6087 {
6088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6089 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6090 pGetRoamRssiRspParams =
6091 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6092 if(NULL == pGetRoamRssiRspParams)
6093 {
6094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6095 "%s: VOS MEM Alloc Failure", __func__);
6096 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306097 vos_mem_free(pGetRoamRssiParams);
6098 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006099 return VOS_STATUS_E_NOMEM;
6100 }
6101 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6102 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6103 pGetRoamRssiRspParams->rssi = 0;
6104 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6105 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6106 (void *)pGetRoamRssiRspParams, 0) ;
6107 }
6108 return CONVERT_WDI2VOS_STATUS(status);
6109}
6110#endif
6111
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113/*
6114 * FUNCTION: WDA_UpdateEDCAParamCallback
6115 * call back function for Update EDCA params from WDI
6116 */
6117void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6118{
6119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6120 tEdcaParams *pEdcaParams;
6121
6122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006123 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 if(NULL == pWdaParams)
6125 {
6126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006127 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 VOS_ASSERT(0) ;
6129 return ;
6130 }
6131 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6133 vos_mem_free(pWdaParams);
6134 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 return ;
6136}
Jeff Johnson295189b2012-06-20 16:38:30 -07006137/*
6138 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6139 * Request to WDI to Update the EDCA params.
6140 */
6141VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6142 tEdcaParams *pEdcaParams)
6143{
6144 WDI_Status status = WDI_STATUS_SUCCESS ;
6145 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6146 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6147 sizeof(WDI_UpdateEDCAParamsType)) ;
6148 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 if(NULL == wdiEdcaParam)
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006156 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 return VOS_STATUS_E_NOMEM;
6158 }
6159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6160 if(NULL == pWdaParams)
6161 {
6162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 VOS_ASSERT(0);
6165 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006166 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 return VOS_STATUS_E_NOMEM;
6168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006170 /*
6171 Since firmware is not using highperformance flag, we have removed
6172 this flag from wdiEDCAInfo structure to match sizeof the structure
6173 between host and firmware.In future if we are planning to use
6174 highperformance flag then Please define this flag in wdiEDCAInfo
6175 structure, update it here and send it to firmware. i.e.
6176 Following is the original line which we removed as part of the fix
6177 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6178 pEdcaParams->highPerformance;
6179 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6181 &pEdcaParams->acbe);
6182 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6183 &pEdcaParams->acbk);
6184 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6185 &pEdcaParams->acvi);
6186 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6187 &pEdcaParams->acvo);
6188 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 pWdaParams->pWdaContext = pWDA;
6190 /* Store remove key pointer, as this will be used for response */
6191 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 /* store Params pass it to WDI */
6193 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6195 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if(IS_WDI_STATUS_FAILURE(status))
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6199 "Failure in Update EDCA Params WDI API, free all the memory " );
6200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6201 vos_mem_free(pWdaParams);
6202 vos_mem_free(pEdcaParams);
6203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 return CONVERT_WDI2VOS_STATUS(status) ;
6205}
Jeff Johnson295189b2012-06-20 16:38:30 -07006206/*
6207 * FUNCTION: WDA_AddBAReqCallback
6208 * send ADD BA RSP back to PE
6209 */
6210void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6211 void* pUserData)
6212{
6213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6214 tWDA_CbContext *pWDA;
6215 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006217 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306218 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 {
6220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 VOS_ASSERT(0) ;
6223 return ;
6224 }
6225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306226 if (NULL == pWDA)
6227 {
6228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6229 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6231 vos_mem_free(pWdaParams->wdaMsgParam);
6232 vos_mem_free(pWdaParams);
6233
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306234 VOS_ASSERT(0);
6235 return ;
6236 }
6237
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6240 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006241 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 return ;
6244}
6245
Jeff Johnson295189b2012-06-20 16:38:30 -07006246/*
6247 * FUNCTION: WDA_ProcessAddBAReq
6248 * Request to WDI to Update the ADDBA REQ params.
6249 */
6250VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306251 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006252{
Jeff Johnson43971f52012-07-17 12:26:56 -07006253 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6255 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6256 sizeof(WDI_AddBAReqParamsType)) ;
6257 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 if(NULL == wdiAddBAReqParam)
6261 {
6262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 VOS_ASSERT(0);
6265 return VOS_STATUS_E_NOMEM;
6266 }
6267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6268 if(NULL == pWdaParams)
6269 {
6270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 VOS_ASSERT(0);
6273 vos_mem_free(wdiAddBAReqParam);
6274 return VOS_STATUS_E_NOMEM;
6275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 do
6277 {
6278 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 wdiAddBaInfo->ucSTAIdx = staIdx ;
6280 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306281 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 } while(0) ;
6283 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 pWdaParams->pWdaContext = pWDA;
6285 /* store Params pass it to WDI */
6286 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6287 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006288 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6289 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006290
Jeff Johnson43971f52012-07-17 12:26:56 -07006291 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 {
6293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006294 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6295 status = CONVERT_WDI2VOS_STATUS(wstatus);
6296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 vos_mem_free(pWdaParams);
6298 pAddBAReqParams->status = eSIR_FAILURE;
6299 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6300 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006301 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006302}
Jeff Johnson295189b2012-06-20 16:38:30 -07006303/*
6304 * FUNCTION: WDA_AddBASessionReqCallback
6305 * send ADD BA SESSION RSP back to PE/(or TL)
6306 */
6307void WDA_AddBASessionReqCallback(
6308 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6309{
6310 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306312 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 tAddBAParams *pAddBAReqParams ;
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 == pWdaParams)
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_ASSERT(0) ;
6321 return ;
6322 }
6323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306324 if (NULL == pWDA)
6325 {
6326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6327 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6329 vos_mem_free(pWdaParams->wdaMsgParam);
6330 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306331 VOS_ASSERT(0);
6332 return ;
6333 }
6334
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 if( NULL == pAddBAReqParams )
6337 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006339 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6342 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 return ;
6344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6346 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306348 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 * another request to HAL(/WDI) (ADD_BA_REQ)
6350 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 if((VOS_STATUS_SUCCESS ==
6352 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306353 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 {
6355 /* Update TL with BA info received from HAL/WDI */
6356 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6357 wdiAddBaSession->usBaSessionID,
6358 wdiAddBaSession->ucSTAIdx,
6359 wdiAddBaSession->ucBaTID,
6360 wdiAddBaSession->ucBaBufferSize,
6361 wdiAddBaSession->ucWinSize,
6362 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306364 wdiAddBaSession->ucSTAIdx,
6365 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 }
6367 else
6368 {
6369 pAddBAReqParams->status =
6370 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6371
6372 /* Setting Flag to indicate that Set BA is success */
6373 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6374 {
6375 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6376 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6377 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 /*Reset the WDA state to READY */
6382 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 return ;
6384}
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386/*
6387 * FUNCTION: WDA_ProcessAddBASessionReq
6388 * Request to WDI to Update the ADDBA REQ params.
6389 */
6390VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6391 tAddBAParams *pAddBAReqParams)
6392{
6393 WDI_Status status = WDI_STATUS_SUCCESS ;
6394 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6395 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6396 sizeof(WDI_AddBASessionReqParamsType)) ;
6397 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006398 WLANTL_STAStateType tlSTAState = 0;
6399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006401 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 if(NULL == wdiAddBASessionReqParam)
6403 {
6404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 VOS_ASSERT(0);
6407 return VOS_STATUS_E_NOMEM;
6408 }
6409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6410 if(NULL == pWdaParams)
6411 {
6412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 VOS_ASSERT(0);
6415 vos_mem_free(wdiAddBASessionReqParam);
6416 return VOS_STATUS_E_NOMEM;
6417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 /*
6419 * Populate ADD BA parameters and pass these paarmeters to WDI.
6420 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6421 * the state to track if these is BA recipient case or BA initiator
6422 * case.
6423 */
6424 do
6425 {
6426 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6427 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6428 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6429 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6430 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6431 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6432 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6435 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6436 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6437 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6438 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306439
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 }while(0) ;
6441 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 pWdaParams->pWdaContext = pWDA;
6443 /* Store ADD BA pointer, as this will be used for response */
6444 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6445 /* store Params pass it to WDI */
6446 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006447
6448 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6449 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6450 */
6451 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6452 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6453 {
6454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006455 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006456 status = WDI_STATUS_E_NOT_ALLOWED;
6457 pAddBAReqParams->status =
6458 CONVERT_WDI2SIR_STATUS(status) ;
6459 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6460 /*Reset the WDA state to READY */
6461 pWDA->wdaState = WDA_READY_STATE;
6462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6463 vos_mem_free(pWdaParams);
6464
6465 return CONVERT_WDI2VOS_STATUS(status) ;
6466 }
6467
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6469 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 if(IS_WDI_STATUS_FAILURE(status))
6471 {
6472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006473 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006475 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006476 pAddBAReqParams->status =
6477 CONVERT_WDI2SIR_STATUS(status) ;
6478 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006479 /*Reset the WDA state to READY */
6480 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 vos_mem_free(pWdaParams);
6483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006485}
Jeff Johnson295189b2012-06-20 16:38:30 -07006486/*
6487 * FUNCTION: WDA_DelBANotifyTL
6488 * send DEL BA IND to TL
6489 */
6490void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6491 tDelBAParams *pDelBAReqParams)
6492{
6493 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6494 //tSirMsgQ msg;
6495 vos_msg_t vosMsg;
6496 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 if(NULL == pDelBAInd)
6498 {
6499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 VOS_ASSERT(0) ;
6502 return;
6503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6505 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6506 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6507 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006508
Jeff Johnson295189b2012-06-20 16:38:30 -07006509
6510 vosMsg.type = WDA_DELETEBA_IND;
6511 vosMsg.bodyptr = pDelBAInd;
6512 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6513 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6514 {
6515 vosStatus = VOS_STATUS_E_BADMSG;
6516 }
6517}
Jeff Johnson295189b2012-06-20 16:38:30 -07006518/*
6519 * FUNCTION: WDA_DelBAReqCallback
6520 * send DEL BA RSP back to PE
6521 */
6522void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6523{
6524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6525 tWDA_CbContext *pWDA;
6526 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006528 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 if(NULL == pWdaParams)
6530 {
6531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 VOS_ASSERT(0) ;
6534 return ;
6535 }
6536 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306537
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 /* Notify TL about DEL BA in case of recipinet */
6540 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6541 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6542 {
6543 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 /*
6546 * No respone required for WDA_DELBA_IND so just free the request
6547 * param here
6548 */
6549 vos_mem_free(pDelBAReqParams);
6550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6551 vos_mem_free(pWdaParams);
6552 return ;
6553}
6554
Jeff Johnson295189b2012-06-20 16:38:30 -07006555/*
6556 * FUNCTION: WDA_ProcessDelBAReq
6557 * Request to WDI to Update the DELBA REQ params.
6558 */
6559VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6560 tDelBAParams *pDelBAReqParams)
6561{
6562 WDI_Status status = WDI_STATUS_SUCCESS ;
6563 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6564 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6565 sizeof(WDI_DelBAReqParamsType)) ;
6566 tWDA_ReqParams *pWdaParams ;
6567 tANI_U16 staIdx = 0;
6568 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006570 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 if(NULL == wdiDelBAReqParam)
6572 {
6573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_ASSERT(0);
6576 return VOS_STATUS_E_NOMEM;
6577 }
6578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6579 if(NULL == pWdaParams)
6580 {
6581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 VOS_ASSERT(0);
6584 vos_mem_free(wdiDelBAReqParam);
6585 return VOS_STATUS_E_NOMEM;
6586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6588 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6589 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6590 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 pWdaParams->pWdaContext = pWDA;
6592 /* Store DEL BA pointer, as this will be used for response */
6593 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 /* store Params pass it to WDI */
6595 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6597 * maintained in WDA, so that WDA can retry for another BA session
6598 */
6599 staIdx = pDelBAReqParams->staIdx;
6600 tid = pDelBAReqParams->baTID;
6601 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 status = WDI_DelBAReq(wdiDelBAReqParam,
6603 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006604 if(IS_WDI_STATUS_FAILURE(status))
6605 {
6606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6607 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6609 vos_mem_free(pWdaParams->wdaMsgParam);
6610 vos_mem_free(pWdaParams);
6611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006613}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006614
6615/*
6616 * FUNCTION: WDA_UpdateChReqCallback
6617 *
6618 */
6619void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6620{
Siddharth Bhala006c122014-05-03 12:13:27 +05306621 tWDA_ReqParams *pWdaParams;
6622 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6623 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6624 WDI_UpdateChannelReqinfoType *pChanInfoType;
6625 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006626
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6628 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306629 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006630 {
6631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306632 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006633 VOS_ASSERT(0);
6634 return;
6635 }
6636
Siddharth Bhala006c122014-05-03 12:13:27 +05306637 pWdaParams = (tWDA_ReqParams *)pUserData;
6638 pwdiUpdateChReqParam =
6639 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6640 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6641 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6642 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006643 /*
6644 * currently there is no response message is expected between PE and
6645 * WDA, Failure return from WDI is a ASSERT condition
6646 */
6647 vos_mem_free(pChanInfoType);
6648 vos_mem_free(pChanList);
6649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6650 vos_mem_free(pWdaParams);
6651
6652 return;
6653}
6654
6655/*
6656 * FUNCTION: WDA_ProcessUpdateChannelList
6657 * Request to WDI to Update the ChannelList params.
6658 */
6659VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6660 tSirUpdateChanList *pChanList)
6661{
6662 WDI_Status status = WDI_STATUS_SUCCESS;
6663 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6664 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6665 WDI_UpdateChannelReqinfoType *pChanInfoType;
6666 tWDA_ReqParams *pWdaParams;
6667 wpt_uint8 i;
6668
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6670 "------> %s " ,__func__);
6671 if(NULL == pChanList)
6672 {
6673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6674 "%s: NULL pChanList", __func__);
6675 VOS_ASSERT(0);
6676 return VOS_STATUS_E_INVAL;
6677 }
6678
6679 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6680 {
6681 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6682 "Update channel list capability Not Supported");
6683 vos_mem_free(pChanList);
6684 return VOS_STATUS_E_INVAL;
6685 }
6686
6687 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6688 sizeof(WDI_UpdateChReqParamsType));
6689 if(NULL == pwdiUpdateChReqParam)
6690 {
6691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6692 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6693 __func__);
6694 VOS_ASSERT(0);
6695 vos_mem_free(pChanList);
6696 return VOS_STATUS_E_NOMEM;
6697 }
6698 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6699 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6700 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6701 pChanList->numChan);
6702 if(NULL == pChanInfoType)
6703 {
6704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6705 "%s: VOS MEM Alloc Failure", __func__);
6706 VOS_ASSERT(0);
6707 vos_mem_free(pChanList);
6708 vos_mem_free(pwdiUpdateChReqParam);
6709 return VOS_STATUS_E_NOMEM;
6710 }
6711 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6712 * pChanList->numChan);
6713 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6714
6715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6716 if(NULL == pWdaParams)
6717 {
6718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6719 "%s: VOS MEM Alloc Failure", __func__);
6720 VOS_ASSERT(0);
6721 vos_mem_free(pChanList);
6722 vos_mem_free(pChanInfoType);
6723 vos_mem_free(pwdiUpdateChReqParam);
6724 return VOS_STATUS_E_NOMEM;
6725 }
6726 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6727
6728 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6729 {
6730 pChanInfoType->mhz =
6731 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6732
6733 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6734 pChanInfoType->band_center_freq2 = 0;
6735
6736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6737 "chan[%d] = %u", i, pChanInfoType->mhz);
6738 if (pChanList->chanParam[i].dfsSet)
6739 {
6740 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6742 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6743 pChanList->chanParam[i].dfsSet);
6744 }
6745
6746 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6747 {
6748 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6749 }
6750 else
6751 {
6752 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6753 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6754 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6755 }
6756
6757 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6758 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306759 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006760 pChanInfoType++;
6761 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006762 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6763 pWdaParams->pWdaContext = pWDA;
6764 pWdaParams->wdaMsgParam = (void *)pChanList;
6765 /* store Params pass it to WDI */
6766 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6767 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6768 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6769 if(IS_WDI_STATUS_FAILURE(status))
6770 {
6771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6772 "Failure in Update Channel REQ Params WDI API, free all the memory");
6773 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6774 vos_mem_free(pwdiUpdateChReqParam);
6775 vos_mem_free(pWdaParams->wdaMsgParam);
6776 vos_mem_free(pWdaParams);
6777 }
6778 return CONVERT_WDI2VOS_STATUS(status);
6779}
6780
Jeff Johnson295189b2012-06-20 16:38:30 -07006781/*
6782 * FUNCTION: WDA_AddTSReqCallback
6783 * send ADD TS RSP back to PE
6784 */
6785void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6786{
6787 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306788 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 tAddTsParams *pAddTsReqParams;
6790
6791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 if(NULL == pWdaParams)
6794 {
6795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 VOS_ASSERT(0) ;
6798 return ;
6799 }
6800 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306801 if (NULL == pWDA)
6802 {
6803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6804 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6806 vos_mem_free(pWdaParams->wdaMsgParam);
6807 vos_mem_free(pWdaParams);
6808
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306809 VOS_ASSERT(0);
6810 return ;
6811 }
6812
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6815 vos_mem_free(pWdaParams);
6816
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006817 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 return ;
6820}
6821
Jeff Johnson295189b2012-06-20 16:38:30 -07006822/*
6823 * FUNCTION: WDA_ProcessAddTSReq
6824 * Request to WDI to Update the ADD TS REQ params.
6825 */
6826VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6827 tAddTsParams *pAddTsReqParams)
6828{
6829 WDI_Status status = WDI_STATUS_SUCCESS ;
6830 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6831 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6832 sizeof(WDI_AddTSReqParamsType)) ;
6833 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 if(NULL == wdiAddTSReqParam)
6837 {
6838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 VOS_ASSERT(0);
6841 return VOS_STATUS_E_NOMEM;
6842 }
6843 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6844 if(NULL == pWdaParams)
6845 {
6846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 VOS_ASSERT(0);
6849 vos_mem_free(wdiAddTSReqParam);
6850 return VOS_STATUS_E_NOMEM;
6851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6853 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 //TS IE
6855 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6856 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6857 pAddTsReqParams->tspec.length;
6858
6859 //TS IE : TS INFO : TRAFFIC
6860 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6861 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6862 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6863 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6864 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6865 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6866 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6867 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6868 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6869 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6870 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6871 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6872 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6873 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6874 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6875 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6876
6877 //TS IE : TS INFO : SCHEDULE
6878 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6879 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6880 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6881 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 //TS IE
6883 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6884 pAddTsReqParams->tspec.nomMsduSz;
6885 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6886 pAddTsReqParams->tspec.maxMsduSz;
6887 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6888 pAddTsReqParams->tspec.minSvcInterval;
6889 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6890 pAddTsReqParams->tspec.maxSvcInterval;
6891 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6892 pAddTsReqParams->tspec.inactInterval;
6893 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6894 pAddTsReqParams->tspec.suspendInterval;
6895 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6896 pAddTsReqParams->tspec.svcStartTime;
6897 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6898 pAddTsReqParams->tspec.minDataRate;
6899 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6900 pAddTsReqParams->tspec.meanDataRate;
6901 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6902 pAddTsReqParams->tspec.peakDataRate;
6903 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6904 pAddTsReqParams->tspec.maxBurstSz;
6905 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6906 pAddTsReqParams->tspec.delayBound;
6907 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6908 pAddTsReqParams->tspec.minPhyRate;
6909 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6910 pAddTsReqParams->tspec.surplusBw;
6911 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6912 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 /* TODO: tAddTsParams doesn't have the following fields */
6914#if 0
6915 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6916 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6917 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6918 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6919#endif
6920 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6921
6922 pWdaParams->pWdaContext = pWDA;
6923 /* Store ADD TS pointer, as this will be used for response */
6924 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 /* store Params pass it to WDI */
6926 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 status = WDI_AddTSReq(wdiAddTSReqParam,
6928 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 if(IS_WDI_STATUS_FAILURE(status))
6930 {
6931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6932 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6934 vos_mem_free(pWdaParams);
6935 pAddTsReqParams->status = eSIR_FAILURE ;
6936 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006939}
6940
Jeff Johnson295189b2012-06-20 16:38:30 -07006941/*
6942 * FUNCTION: WDA_DelTSReqCallback
6943 * send DEL TS RSP back to PE
6944 */
6945void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6946{
6947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6951 vos_mem_free(pWdaParams->wdaMsgParam) ;
6952 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 /*
6954 * No respone required for WDA_DEL_TS_REQ so just free the request
6955 * param here
6956 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 return ;
6958}
6959
Jeff Johnson295189b2012-06-20 16:38:30 -07006960/*
6961 * FUNCTION: WDA_ProcessDelTSReq
6962 * Request to WDI to Update the DELTS REQ params.
6963 */
6964VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6965 tDelTsParams *pDelTSReqParams)
6966{
6967 WDI_Status status = WDI_STATUS_SUCCESS ;
6968 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6969 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6970 sizeof(WDI_DelTSReqParamsType)) ;
6971 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 if(NULL == wdiDelTSReqParam)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 VOS_ASSERT(0);
6979 return VOS_STATUS_E_NOMEM;
6980 }
6981 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6982 if(NULL == pWdaParams)
6983 {
6984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 VOS_ASSERT(0);
6987 vos_mem_free(wdiDelTSReqParam);
6988 return VOS_STATUS_E_NOMEM;
6989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6991 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6992 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6993 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6994 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 pWdaParams->pWdaContext = pWDA;
6996 /* Store DEL TS pointer, as this will be used for response */
6997 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 /* store Params pass it to WDI */
6999 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 status = WDI_DelTSReq(wdiDelTSReqParam,
7001 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 if(IS_WDI_STATUS_FAILURE(status))
7003 {
7004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7005 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7007 vos_mem_free(pWdaParams->wdaMsgParam);
7008 vos_mem_free(pWdaParams);
7009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007011}
Jeff Johnson295189b2012-06-20 16:38:30 -07007012/*
7013 * FUNCTION: WDA_UpdateBeaconParamsCallback
7014 * Free the memory. No need to send any response to PE in this case
7015 */
7016void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7017{
7018 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007020 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 if(NULL == pWdaParams)
7022 {
7023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007024 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_ASSERT(0) ;
7026 return ;
7027 }
7028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7029 vos_mem_free(pWdaParams->wdaMsgParam) ;
7030 vos_mem_free(pWdaParams);
7031 /*
7032 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7033 * param here
7034 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 return ;
7036}
Jeff Johnson295189b2012-06-20 16:38:30 -07007037/*
7038 * FUNCTION: WDA_ProcessUpdateBeaconParams
7039 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7040 */
7041VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7042 tUpdateBeaconParams *pUpdateBeaconParams)
7043{
7044 WDI_Status status = WDI_STATUS_SUCCESS ;
7045 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7046 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7047 sizeof(WDI_UpdateBeaconParamsType)) ;
7048 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007050 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 if(NULL == wdiUpdateBeaconParams)
7052 {
7053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 VOS_ASSERT(0);
7056 return VOS_STATUS_E_NOMEM;
7057 }
7058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7059 if(NULL == pWdaParams)
7060 {
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 VOS_ASSERT(0);
7064 vos_mem_free(wdiUpdateBeaconParams);
7065 return VOS_STATUS_E_NOMEM;
7066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7068 pUpdateBeaconParams->bssIdx;
7069 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7070 pUpdateBeaconParams->fShortPreamble;
7071 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7072 pUpdateBeaconParams->fShortSlotTime;
7073 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7074 pUpdateBeaconParams->beaconInterval;
7075 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7076 pUpdateBeaconParams->llaCoexist;
7077 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7078 pUpdateBeaconParams->llbCoexist;
7079 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7080 pUpdateBeaconParams->llgCoexist;
7081 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7082 pUpdateBeaconParams->ht20MhzCoexist;
7083 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7084 pUpdateBeaconParams->llnNonGFCoexist;
7085 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7086 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7087 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7088 pUpdateBeaconParams->fRIFSMode;
7089 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7090 pUpdateBeaconParams->paramChangeBitmap;
7091 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7092
7093 pWdaParams->pWdaContext = pWDA;
7094 /* Store UpdateBeacon Req pointer, as this will be used for response */
7095 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 /* store Params pass it to WDI */
7097 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7099 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7100 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 if(IS_WDI_STATUS_FAILURE(status))
7102 {
7103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7104 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7106 vos_mem_free(pWdaParams->wdaMsgParam);
7107 vos_mem_free(pWdaParams);
7108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007110}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007111#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007112/*
7113 * FUNCTION: WDA_TSMStatsReqCallback
7114 * send TSM Stats RSP back to PE
7115 */
7116void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7117{
7118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7119 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007120 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7121 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007122
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 if(NULL == pWdaParams)
7126 {
7127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007128 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 VOS_ASSERT(0) ;
7130 return ;
7131 }
7132 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307133 if (NULL == pWDA)
7134 {
7135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7136 "%s:pWDA is NULL", __func__);
7137 VOS_ASSERT(0);
7138 return ;
7139 }
7140
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007141 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7142
7143 if(NULL == pGetTsmStatsReqParams)
7144 {
7145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7146 "%s: pGetTsmStatsReqParams received NULL", __func__);
7147 VOS_ASSERT(0);
7148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7149 vos_mem_free(pWdaParams);
7150 return;
7151 }
7152
7153 pTsmRspParams =
7154 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 if( NULL == pTsmRspParams )
7156 {
7157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007158 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 VOS_ASSERT( 0 );
7160 return ;
7161 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007162 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7163 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7164 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7167 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7168 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7169 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7170 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7171 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7172 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7173 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7174 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7175 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007176
7177 /* Assign get tsm stats req req (backup) in to the response */
7178 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7179
7180 /* free WDI command buffer */
7181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7182 vos_mem_free(pWdaParams);
7183
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 return ;
7186}
7187
7188
Jeff Johnson295189b2012-06-20 16:38:30 -07007189/*
7190 * FUNCTION: WDA_ProcessTsmStatsReq
7191 * Request to WDI to get the TSM Stats params.
7192 */
7193VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007194 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007195{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007196 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007198 tWDA_ReqParams *pWdaParams = NULL;
7199 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7200
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007202 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7204 sizeof(WDI_TSMStatsReqParamsType));
7205 if(NULL == wdiTSMReqParam)
7206 {
7207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209 VOS_ASSERT(0);
7210 return VOS_STATUS_E_NOMEM;
7211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7213 if(NULL == pWdaParams)
7214 {
7215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 VOS_ASSERT(0);
7218 vos_mem_free(wdiTSMReqParam);
7219 return VOS_STATUS_E_NOMEM;
7220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7222 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7223 pTsmStats->bssId,
7224 sizeof(wpt_macAddr));
7225 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7226
7227 pWdaParams->pWdaContext = pWDA;
7228 /* Store TSM Stats pointer, as this will be used for response */
7229 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007230 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 status = WDI_TSMStatsReq(wdiTSMReqParam,
7232 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 if(IS_WDI_STATUS_FAILURE(status))
7234 {
7235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7236 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007237 vos_mem_free(pWdaParams);
7238
7239 pGetTsmStatsRspParams =
7240 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7241 if(NULL == pGetTsmStatsRspParams)
7242 {
7243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7244 "%s: VOS MEM Alloc Failure", __func__);
7245 VOS_ASSERT(0);
7246 vos_mem_free(pTsmStats);
7247 return VOS_STATUS_E_NOMEM;
7248 }
7249 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7250 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7251 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7252
7253 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 return CONVERT_WDI2VOS_STATUS(status) ;
7256}
7257#endif
7258/*
7259 * FUNCTION: WDA_SendBeaconParamsCallback
7260 * No need to send any response to PE in this case
7261 */
7262void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7263{
7264
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007266 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 return ;
7268}
Jeff Johnson295189b2012-06-20 16:38:30 -07007269/*
7270 * FUNCTION: WDA_ProcessSendBeacon
7271 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7272 * start beacon trasmission
7273 */
7274VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7275 tSendbeaconParams *pSendbeaconParams)
7276{
7277 WDI_Status status = WDI_STATUS_SUCCESS ;
7278 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007280 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7282 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7283 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7284 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7286 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307287 /* p2pIeOffset should be atleast greater than timIeOffset */
7288 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7289 (pSendbeaconParams->p2pIeOffset <
7290 pSendbeaconParams->timIeOffset))
7291 {
7292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7293 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7294 VOS_ASSERT( 0 );
7295 return WDI_STATUS_E_FAILURE;
7296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7298 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 /* Copy the beacon template to local buffer */
7300 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7301 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7302 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7303
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7305 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 if(IS_WDI_STATUS_FAILURE(status))
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "Failure in SEND BEACON REQ Params WDI API" );
7310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 vos_mem_free(pSendbeaconParams);
7312 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007313}
Jeff Johnson295189b2012-06-20 16:38:30 -07007314/*
7315 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7316 * No need to send any response to PE in this case
7317 */
7318void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7319{
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 return ;
7323}
7324
Jeff Johnson295189b2012-06-20 16:38:30 -07007325/*
7326 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7327 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7328 * send probe response
7329 */
7330VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7331 tSendProbeRespParams *pSendProbeRspParams)
7332{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007333 WDI_Status status = WDI_STATUS_SUCCESS;
7334 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7335 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007337 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007338
7339 if (!wdiSendProbeRspParam)
7340 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7341
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007343 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007345 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 /* Copy the Probe Response template to local buffer */
7348 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007349 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 pSendProbeRspParams->pProbeRespTemplate,
7351 pSendProbeRspParams->probeRespTemplateLen);
7352 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007353 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7355 WDI_PROBE_REQ_BITMAP_IE_LEN);
7356
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007357 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007358
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007359 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 if(IS_WDI_STATUS_FAILURE(status))
7362 {
7363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7364 "Failure in SEND Probe RSP Params WDI API" );
7365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007367 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007369}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007370#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007371/*
7372 * FUNCTION: WDA_SetMaxTxPowerCallBack
7373 * send the response to PE with power value received from WDI
7374 */
7375void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7376 void* pUserData)
7377{
7378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7379 tWDA_CbContext *pWDA = NULL;
7380 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7381
7382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 if(NULL == pWdaParams)
7385 {
7386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007387 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 VOS_ASSERT(0) ;
7389 return ;
7390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307392 if (NULL == pWDA)
7393 {
7394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7395 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7397 vos_mem_free(pWdaParams->wdaMsgParam);
7398 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307399 VOS_ASSERT(0);
7400 return ;
7401 }
7402
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if( NULL == pMaxTxPowerParams )
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007408 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7410 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 return ;
7412 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007413
Jeff Johnson295189b2012-06-20 16:38:30 -07007414
7415 /*need to free memory for the pointers used in the
7416 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7418 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007420
Jeff Johnson295189b2012-06-20 16:38:30 -07007421
7422 /* send response to UMAC*/
7423 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7424
7425 return;
7426}
Jeff Johnson295189b2012-06-20 16:38:30 -07007427/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007428 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 * Request to WDI to send set Max Tx Power Request
7430 */
7431 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7432 tMaxTxPowerParams *MaxTxPowerParams)
7433{
7434 WDI_Status status = WDI_STATUS_SUCCESS;
7435 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7436 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007437
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007439 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007440
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7442 sizeof(WDI_SetMaxTxPowerParamsType));
7443 if(NULL == wdiSetMaxTxPowerParams)
7444 {
7445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007446 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 VOS_ASSERT(0);
7448 return VOS_STATUS_E_NOMEM;
7449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7451 if(NULL == pWdaParams)
7452 {
7453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007454 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007455 vos_mem_free(wdiSetMaxTxPowerParams);
7456 VOS_ASSERT(0);
7457 return VOS_STATUS_E_NOMEM;
7458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 /* Copy.Max.Tx.Power Params to WDI structure */
7460 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7461 MaxTxPowerParams->bssId,
7462 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7464 MaxTxPowerParams->selfStaMacAddr,
7465 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7467 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 pWdaParams->pWdaContext = pWDA;
7470 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 /* store Params pass it to WDI */
7472 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7474 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 if(IS_WDI_STATUS_FAILURE(status))
7476 {
7477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7478 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7480 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007481 /* send response to UMAC*/
7482 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 }
7484 return CONVERT_WDI2VOS_STATUS(status);
7485
7486}
Jeff Johnson295189b2012-06-20 16:38:30 -07007487#endif
schang86c22c42013-03-13 18:41:24 -07007488
7489/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007490 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7491 * send the response to PE with power value received from WDI
7492 */
7493void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7494 *pwdiSetMaxTxPowerPerBandRsp,
7495 void* pUserData)
7496{
7497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7498 tWDA_CbContext *pWDA = NULL;
7499 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7500
7501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7502 "<------ %s ", __func__);
7503 if (NULL == pWdaParams)
7504 {
7505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7506 "%s: pWdaParams received NULL", __func__);
7507 VOS_ASSERT(0);
7508 return ;
7509 }
7510 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307511 if (NULL == pWDA)
7512 {
7513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7514 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7516 vos_mem_free(pWdaParams->wdaMsgParam);
7517 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307518 VOS_ASSERT(0);
7519 return ;
7520 }
7521
Arif Hussaina5ebce02013-08-09 15:09:58 -07007522 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7523 if ( NULL == pMxTxPwrPerBandParams )
7524 {
7525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7526 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7527 VOS_ASSERT(0);
7528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7529 vos_mem_free(pWdaParams);
7530 return;
7531 }
7532
7533 /*need to free memory for the pointers used in the
7534 WDA Process.Set Max Tx Power Req function*/
7535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7536 vos_mem_free(pWdaParams);
7537 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7538
7539 /* send response to UMAC*/
7540 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7541 pMxTxPwrPerBandParams, 0);
7542
7543 return;
7544}
7545
7546/*
7547 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7548 * Request to WDI to send set Max Tx Power Per band Request
7549 */
7550 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7551 tMaxTxPowerPerBandParams
7552 *MaxTxPowerPerBandParams)
7553{
7554 WDI_Status status = WDI_STATUS_SUCCESS;
7555 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7556 tWDA_ReqParams *pWdaParams = NULL;
7557
7558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7559 "------> %s ", __func__);
7560
7561 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7562 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7563
7564 if (NULL == wdiSetMxTxPwrPerBandParams)
7565 {
7566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7567 "%s: VOS MEM Alloc Failure", __func__);
7568 VOS_ASSERT(0);
7569 return VOS_STATUS_E_NOMEM;
7570 }
7571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7572 if (NULL == pWdaParams)
7573 {
7574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7575 "%s: VOS MEM Alloc Failure", __func__);
7576 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7577 VOS_ASSERT(0);
7578 return VOS_STATUS_E_NOMEM;
7579 }
7580 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7581 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7582 MaxTxPowerPerBandParams->bandInfo;
7583 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7584 MaxTxPowerPerBandParams->power;
7585 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7586 pWdaParams->pWdaContext = pWDA;
7587 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7588 /* store Params pass it to WDI */
7589 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7590 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7591 WDA_SetMaxTxPowerPerBandCallBack,
7592 pWdaParams);
7593 if (IS_WDI_STATUS_FAILURE(status))
7594 {
7595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7596 "Failure in SET MAX TX Power REQ Params WDI API,"
7597 " free all the memory");
7598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7599 vos_mem_free(pWdaParams);
7600 /* send response to UMAC*/
7601 WDA_SendMsg(pWDA,
7602 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7603 MaxTxPowerPerBandParams, 0);
7604 }
7605 return CONVERT_WDI2VOS_STATUS(status);
7606}
7607
7608/*
schang86c22c42013-03-13 18:41:24 -07007609 * FUNCTION: WDA_SetTxPowerCallBack
7610 * send the response to PE with power value received from WDI
7611 */
7612void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7613 void* pUserData)
7614{
7615 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7616 tWDA_CbContext *pWDA = NULL;
7617 tSirSetTxPowerReq *pTxPowerParams = NULL;
7618
7619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7620 "<------ %s ", __func__);
7621 if(NULL == pWdaParams)
7622 {
7623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7624 "%s: pWdaParams received NULL", __func__);
7625 VOS_ASSERT(0) ;
7626 return ;
7627 }
7628 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307629 if (NULL == pWDA)
7630 {
7631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7632 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7634 vos_mem_free(pWdaParams->wdaMsgParam);
7635 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307636 VOS_ASSERT(0);
7637 return ;
7638 }
7639
schang86c22c42013-03-13 18:41:24 -07007640 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7641 if(NULL == pTxPowerParams)
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7644 "%s: pTxPowerParams received NULL " ,__func__);
7645 VOS_ASSERT(0);
7646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7647 vos_mem_free(pWdaParams);
7648 return ;
7649 }
7650
7651 /*need to free memory for the pointers used in the
7652 WDA Process.Set Max Tx Power Req function*/
7653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7654 vos_mem_free(pWdaParams);
7655
7656 /* send response to UMAC*/
7657 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7658 return;
7659}
7660
7661/*
7662 * FUNCTION: WDA_ProcessSetTxPowerReq
7663 * Request to WDI to send set Tx Power Request
7664 */
7665 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7666 tSirSetTxPowerReq *txPowerParams)
7667{
7668 WDI_Status status = WDI_STATUS_SUCCESS;
7669 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7670 tWDA_ReqParams *pWdaParams = NULL;
7671
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7673 "------> %s ", __func__);
7674
7675 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7676 sizeof(WDI_SetTxPowerParamsType));
7677 if(NULL == wdiSetTxPowerParams)
7678 {
7679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7680 "%s: VOS MEM Alloc Failure", __func__);
7681 VOS_ASSERT(0);
7682 return VOS_STATUS_E_NOMEM;
7683 }
7684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7685 if(NULL == pWdaParams)
7686 {
7687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7688 "%s: VOS MEM Alloc Failure", __func__);
7689 vos_mem_free(wdiSetTxPowerParams);
7690 VOS_ASSERT(0);
7691 return VOS_STATUS_E_NOMEM;
7692 }
7693 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7694 txPowerParams->bssIdx;
7695 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7696 txPowerParams->mwPower;
7697 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7698 pWdaParams->pWdaContext = pWDA;
7699 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7700 /* store Params pass it to WDI */
7701 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7702 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7703 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7704 if(IS_WDI_STATUS_FAILURE(status))
7705 {
7706 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7707 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7709 vos_mem_free(pWdaParams);
7710 /* send response to UMAC*/
7711 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7712 }
7713 return CONVERT_WDI2VOS_STATUS(status);
7714}
7715
Jeff Johnson295189b2012-06-20 16:38:30 -07007716/*
7717 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7718 * Free the memory. No need to send any response to PE in this case
7719 */
7720void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7721{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7723
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007725 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007726
7727 if(NULL == pWdaParams)
7728 {
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007730 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007731 VOS_ASSERT(0) ;
7732 return ;
7733 }
7734
7735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7736 vos_mem_free(pWdaParams->wdaMsgParam) ;
7737 vos_mem_free(pWdaParams);
7738
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 /*
7740 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7741 * so just free the request param here
7742 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 return ;
7744}
7745
Jeff Johnson295189b2012-06-20 16:38:30 -07007746/*
7747 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7748 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7749 */
7750VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7751 tP2pPsParams *pP2pPsConfigParams)
7752{
7753 WDI_Status status = WDI_STATUS_SUCCESS ;
7754 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7755 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7756 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007757 tWDA_ReqParams *pWdaParams = NULL;
7758
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 if(NULL == wdiSetP2PGONOAReqParam)
7762 {
7763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 VOS_ASSERT(0);
7766 return VOS_STATUS_E_NOMEM;
7767 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007768
7769 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7770 if(NULL == pWdaParams)
7771 {
7772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007773 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007774 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007775 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007776 VOS_ASSERT(0);
7777 return VOS_STATUS_E_NOMEM;
7778 }
7779
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7781 pP2pPsConfigParams->opp_ps;
7782 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7783 pP2pPsConfigParams->ctWindow;
7784 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7785 pP2pPsConfigParams->count;
7786 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7787 pP2pPsConfigParams->duration;
7788 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7789 pP2pPsConfigParams->interval;
7790 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7791 pP2pPsConfigParams->single_noa_duration;
7792 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7793 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007794
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7796 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007797 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7798
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7801 pWdaParams->pWdaContext = pWDA;
7802
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007804 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 if(IS_WDI_STATUS_FAILURE(status))
7807 {
7808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7809 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7811 vos_mem_free(pWdaParams->wdaMsgParam);
7812 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 return CONVERT_WDI2VOS_STATUS(status);
7815
Jeff Johnson295189b2012-06-20 16:38:30 -07007816}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307817
7818#ifdef FEATURE_WLAN_TDLS
7819/*
7820 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7821 * Free the memory. No need to send any response to PE in this case
7822 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307823void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7824 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307825{
7826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7827 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307828 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307829
7830
7831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7832 "<------ %s " ,__func__);
7833 if(NULL == pWdaParams)
7834 {
7835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7836 "%s: pWdaParams received NULL", __func__);
7837 VOS_ASSERT(0) ;
7838 return ;
7839 }
7840 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7841
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307842 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307843 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7845 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7847 vos_mem_free(pWdaParams->wdaMsgParam);
7848 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307849 VOS_ASSERT(0);
7850 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307851 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307852
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307853 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7854 if( NULL == pTdlsLinkEstablishParams )
7855 {
7856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7857 "%s: pTdlsLinkEstablishParams "
7858 "received NULL " ,__func__);
7859 VOS_ASSERT(0);
7860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7861 vos_mem_free(pWdaParams);
7862 return ;
7863 }
7864 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7865 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307867 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307868 /* send response to UMAC*/
7869 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7870
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307871 return ;
7872}
7873
7874VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7875 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7876{
7877 WDI_Status status = WDI_STATUS_SUCCESS ;
7878 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7879 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7880 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7881 tWDA_ReqParams *pWdaParams = NULL;
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7883 "------> %s " ,__func__);
7884 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7885 {
7886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7887 "%s: VOS MEM Alloc Failure", __func__);
7888 VOS_ASSERT(0);
7889 return VOS_STATUS_E_NOMEM;
7890 }
7891 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7892 if(NULL == pWdaParams)
7893 {
7894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7895 "%s: VOS MEM Alloc Failure", __func__);
7896 vos_mem_free(pTdlsLinkEstablishParams);
7897 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7898 VOS_ASSERT(0);
7899 return VOS_STATUS_E_NOMEM;
7900 }
7901 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307902 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307903 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307904 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307905 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307906 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307907 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307908 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307909 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307910 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307911 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7912 pTdlsLinkEstablishParams->isOffChannelSupported;
7913
7914 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7915 pTdlsLinkEstablishParams->validChannels,
7916 pTdlsLinkEstablishParams->validChannelsLen);
7917
7918 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7919 pTdlsLinkEstablishParams->validChannelsLen;
7920
7921 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7922 pTdlsLinkEstablishParams->validOperClasses,
7923 pTdlsLinkEstablishParams->validOperClassesLen);
7924 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7925 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307926
7927 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7928 /* Store msg pointer from PE, as this will be used for response */
7929 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7930 /* store Params pass it to WDI */
7931 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7932 pWdaParams->pWdaContext = pWDA;
7933
7934 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7935 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7936 WDA_SetTDLSLinkEstablishReqParamsCallback,
7937 pWdaParams);
7938 if(IS_WDI_STATUS_FAILURE(status))
7939 {
7940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7941 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7943 vos_mem_free(pWdaParams->wdaMsgParam);
7944 vos_mem_free(pWdaParams);
7945 }
7946 return CONVERT_WDI2VOS_STATUS(status);
7947}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307948
7949// tdlsoffchan
7950void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7951 void* pUserData)
7952{
7953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7954 tWDA_CbContext *pWDA = NULL;
7955 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7956
7957
7958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7959 "<------ %s " ,__func__);
7960 if(NULL == pWdaParams)
7961 {
7962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7963 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307964 VOS_ASSERT(0) ;
7965 return ;
7966 }
7967 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7968
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307969 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307970 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7972 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7974 vos_mem_free(pWdaParams->wdaMsgParam);
7975 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307976 VOS_ASSERT(0);
7977 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307978 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307979
Atul Mittalc0f739f2014-07-31 13:47:47 +05307980 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307981 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307982 {
7983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7984 "%s: pTdlsChanSwitchParams "
7985 "received NULL " ,__func__);
7986 VOS_ASSERT(0);
7987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7988 vos_mem_free(pWdaParams);
7989 return ;
7990 }
7991 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7992 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7994 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307995 /* send response to UMAC*/
7996 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307997
7998 return ;
7999}
8000VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8001 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8002{
8003 WDI_Status status = WDI_STATUS_SUCCESS ;
8004 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8005 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8006 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8007 tWDA_ReqParams *pWdaParams = NULL;
8008
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8010 "Enter: %s ",__func__);
8011 if(NULL == wdiSetTDLSChanSwitchReqParam)
8012 {
8013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8014 "%s: VOS MEM Alloc Failure", __func__);
8015 VOS_ASSERT(0);
8016 return VOS_STATUS_E_NOMEM;
8017 }
8018
8019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8020 if(NULL == pWdaParams)
8021 {
8022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8023 "%s: VOS MEM Alloc Failure", __func__);
8024 vos_mem_free(pTdlsChanSwitchParams);
8025 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8026 VOS_ASSERT(0);
8027 return VOS_STATUS_E_NOMEM;
8028 }
8029 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8030 pTdlsChanSwitchParams->staIdx;
8031 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8032 pTdlsChanSwitchParams->tdlsSwMode;
8033 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8034 pTdlsChanSwitchParams->operClass;
8035 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8036 pTdlsChanSwitchParams->tdlsOffCh;
8037 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8038 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8039
8040
8041 /* Store msg pointer from PE, as this will be used for response */
8042 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8043 /* store Params pass it to WDI */
8044 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8045 pWdaParams->pWdaContext = pWDA;
8046 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8047 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8048 WDA_SetTDLSChanSwitchReqParamsCallback,
8049 pWdaParams);
8050 if(IS_WDI_STATUS_FAILURE(status))
8051 {
8052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8053 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8055 vos_mem_free(pWdaParams->wdaMsgParam);
8056 vos_mem_free(pWdaParams);
8057 }
8058 return CONVERT_WDI2VOS_STATUS(status);
8059}
8060#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308061
8062
Jeff Johnson295189b2012-06-20 16:38:30 -07008063#ifdef WLAN_FEATURE_VOWIFI_11R
8064/*
8065 * FUNCTION: WDA_AggrAddTSReqCallback
8066 * send ADD AGGREGATED TS RSP back to PE
8067 */
8068void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8069{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308071 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008072 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008075 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008076 if(NULL == pWdaParams)
8077 {
8078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008079 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008080 VOS_ASSERT(0) ;
8081 return ;
8082 }
8083
8084 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308085 if (NULL == pWDA)
8086 {
8087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8088 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8090 vos_mem_free(pWdaParams->wdaMsgParam);
8091 vos_mem_free(pWdaParams);
8092
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308093 VOS_ASSERT(0);
8094 return ;
8095 }
8096
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008097 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008098
8099 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8100 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008101 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008104
8105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8106 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 return ;
8108}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008109/*
8110 * FUNCTION: WDA_ProcessAddTSReq
8111 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8112 */
8113VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8114 tAggrAddTsParams *pAggrAddTsReqParams)
8115{
8116 WDI_Status status = WDI_STATUS_SUCCESS ;
8117 int i;
8118 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008119 tWDA_ReqParams *pWdaParams = NULL;
8120
8121
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8125 sizeof(WDI_AggrAddTSReqParamsType)) ;
8126 if(NULL == wdiAggrAddTSReqParam)
8127 {
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 VOS_ASSERT(0);
8131 return VOS_STATUS_E_NOMEM;
8132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008133
8134
8135 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8136 if(NULL == pWdaParams)
8137 {
8138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008139 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008140 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008141 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008142 VOS_ASSERT(0);
8143 return VOS_STATUS_E_NOMEM;
8144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8146 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8147 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8149 {
8150 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8151 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8152 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8154 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8155 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8156 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8157 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8158 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8159 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8160 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8161 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8162 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8163 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8164 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8165 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8166 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8168 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8170 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8172 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8174 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8176 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8178 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8180 pAggrAddTsReqParams->tspec[i].inactInterval;
8181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8182 pAggrAddTsReqParams->tspec[i].suspendInterval;
8183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8184 pAggrAddTsReqParams->tspec[i].svcStartTime;
8185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8186 pAggrAddTsReqParams->tspec[i].minDataRate;
8187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8188 pAggrAddTsReqParams->tspec[i].meanDataRate;
8189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8190 pAggrAddTsReqParams->tspec[i].peakDataRate;
8191 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8192 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8193 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8194 pAggrAddTsReqParams->tspec[i].delayBound;
8195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8196 pAggrAddTsReqParams->tspec[i].minPhyRate;
8197 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8198 pAggrAddTsReqParams->tspec[i].surplusBw;
8199 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8200 pAggrAddTsReqParams->tspec[i].mediumTime;
8201 }
8202
8203 /* TODO: tAggrAddTsParams doesn't have the following fields */
8204#if 0
8205 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8206 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8207 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8208 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8209#endif
8210 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8211
8212 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008213 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008215 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8216
8217 pWdaParams->pWdaContext = pWDA;
8218
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008220 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8221
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 if(IS_WDI_STATUS_FAILURE(status))
8223 {
8224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8225 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8227 vos_mem_free(pWdaParams);
8228
8229 /* send the failure response back to PE*/
8230 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8231 {
8232 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8233 }
8234
8235 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8236 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 return CONVERT_WDI2VOS_STATUS(status) ;
8239}
8240#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008241/*
Mihir Shetea4306052014-03-25 00:02:54 +05308242 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 * send Enter IMPS RSP back to PE
8244 */
Mihir Shetea4306052014-03-25 00:02:54 +05308245void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008246{
Mihir Shetea4306052014-03-25 00:02:54 +05308247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308248 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308249
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308251 "<------ %s status=%d" ,__func__,status);
8252 if(NULL == pWdaParams)
8253 {
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8255 "%s: pWdaParams received NULL", __func__);
8256 VOS_ASSERT(0);
8257 return;
8258 }
8259
8260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308261 if (NULL == pWDA)
8262 {
8263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8264 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8266 vos_mem_free(pWdaParams->wdaMsgParam);
8267 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308268 VOS_ASSERT(0);
8269 return ;
8270 }
Mihir Shetea4306052014-03-25 00:02:54 +05308271
8272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8273 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008274 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 return ;
8276}
Mihir Shetea4306052014-03-25 00:02:54 +05308277
8278
8279/*
8280 * FUNCTION: WDA_EnterImpsReqCallback
8281 * Free memory and send Enter IMPS RSP back to PE.
8282 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8283 */
8284void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8285{
8286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308287 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308288
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8290 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8291
8292 if(NULL == pWdaParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "%s: pWdaParams received NULL", __func__);
8296 VOS_ASSERT(0);
8297 return;
8298 }
8299
8300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308301 if (NULL == pWDA)
8302 {
8303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8304 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8306 vos_mem_free(pWdaParams->wdaMsgParam);
8307 vos_mem_free(pWdaParams);
8308
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308309 VOS_ASSERT(0);
8310 return ;
8311 }
8312
Mihir Shetea4306052014-03-25 00:02:54 +05308313
8314 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8315 {
8316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8317 vos_mem_free(pWdaParams);
8318 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8319 CONVERT_WDI2SIR_STATUS(wdiStatus));
8320 }
8321
8322 return;
8323}
Jeff Johnson295189b2012-06-20 16:38:30 -07008324/*
8325 * FUNCTION: WDA_ProcessEnterImpsReq
8326 * Request to WDI to Enter IMPS power state.
8327 */
8328VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8329{
8330 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308331 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8332 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308333 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308336
8337
8338 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8339 if (NULL == wdiEnterImpsReqParams)
8340 {
8341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8342 "%s: VOS MEM Alloc Failure", __func__);
8343 VOS_ASSERT(0);
8344 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8345 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8346 return VOS_STATUS_E_NOMEM;
8347 }
8348
8349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8350 if (NULL == pWdaParams)
8351 {
8352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8353 "%s: VOS MEM Alloc Failure", __func__);
8354 VOS_ASSERT(0);
8355 vos_mem_free(wdiEnterImpsReqParams);
8356 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8357 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8358 return VOS_STATUS_E_NOMEM;
8359 }
8360
8361 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8362 wdiEnterImpsReqParams->pUserData = pWdaParams;
8363
8364 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8365 pWdaParams->wdaMsgParam = NULL;
8366 pWdaParams->pWdaContext = pWDA;
8367
8368 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8369 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8370 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 if(IS_WDI_STATUS_FAILURE(status))
8372 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308373 if (! (failcnt & 0xF))
8374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8375 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8376 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308377 vos_mem_free(wdiEnterImpsReqParams);
8378 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008379 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 return CONVERT_WDI2VOS_STATUS(status) ;
8382}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308383
8384/*
8385 * FUNCTION: WDA_ExitImpsRespCallback
8386 * send Exit IMPS RSP back to PE
8387 */
8388void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8389{
8390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8391 tWDA_CbContext *pWDA;
8392
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8394 "<------ %s " ,__func__);
8395
8396 if (NULL == pWdaParams)
8397 {
8398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8399 "%s: pWdaParams received NULL", __func__);
8400 VOS_ASSERT(0);
8401 return;
8402 }
8403 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8404
8405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8406 vos_mem_free(pWdaParams);
8407
8408 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8409 return;
8410}
8411
Jeff Johnson295189b2012-06-20 16:38:30 -07008412/*
8413 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 */
8415void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8416{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308420 if(NULL == pWdaParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8423 "%s: pWdaParams received NULL", __func__);
8424 VOS_ASSERT(0);
8425 return;
8426 }
8427
8428 if (IS_WDI_STATUS_FAILURE(status))
8429 {
8430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8431 vos_mem_free(pWdaParams);
8432 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8433 {
8434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8435 FL("reload wlan driver"));
8436 wpalWlanReload();
8437 }
8438 }
8439 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008440}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308441
Jeff Johnson295189b2012-06-20 16:38:30 -07008442/*
8443 * FUNCTION: WDA_ProcessExitImpsReq
8444 * Request to WDI to Exit IMPS power state.
8445 */
8446VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8447{
8448 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308449 tWDA_ReqParams *pWdaParams;
8450 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8451
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008453 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308454 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8455 sizeof(WDI_ExitImpsReqParamsType));
8456 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8459 "%s: VOS MEM Alloc Failure", __func__);
8460 VOS_ASSERT(0);
8461 return VOS_STATUS_E_NOMEM;
8462 }
8463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8464 if(NULL == pWdaParams)
8465 {
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8467 "%s: VOS MEM Alloc Failure", __func__);
8468 VOS_ASSERT(0);
8469 vos_mem_free(wdiExitImpsReqParams);
8470 return VOS_STATUS_E_NOMEM;
8471 }
8472 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8473 wdiExitImpsReqParams->pUserData = pWdaParams;
8474
8475 /* Store param pointer as passed in by caller */
8476 /* store Params pass it to WDI */
8477 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8478 pWdaParams->pWdaContext = pWDA;
8479 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8480 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8481 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8482 pWdaParams);
8483 if (IS_WDI_STATUS_FAILURE(status))
8484 {
8485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8486 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8488 vos_mem_free(pWdaParams);
8489 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 return CONVERT_WDI2VOS_STATUS(status) ;
8492}
Jeff Johnson295189b2012-06-20 16:38:30 -07008493/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008494 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 * send Enter BMPS RSP back to PE
8496 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008497void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008498{
8499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308500 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008501 tEnterBmpsParams *pEnterBmpsRspParams;
8502
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 if(NULL == pWdaParams)
8506 {
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 VOS_ASSERT(0) ;
8510 return ;
8511 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008512
8513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308514 if (NULL == pWDA)
8515 {
8516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8517 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308518
8519 if(pWdaParams->wdaWdiApiMsgParam)
8520 {
8521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8522 }
8523 vos_mem_free(pWdaParams);
8524
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308525 VOS_ASSERT(0);
8526 return ;
8527 }
8528
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008529 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8530
8531 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008532 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008533
8534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008536 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8537
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 return ;
8539}
Jeff Johnson295189b2012-06-20 16:38:30 -07008540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008541 * FUNCTION: WDA_EnterBmpsReqCallback
8542 * Free memory and send Enter BMPS RSP back to PE.
8543 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8544 */
8545void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8546{
8547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308548 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008549 tEnterBmpsParams *pEnterBmpsRspParams;
8550
8551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8553
8554 if(NULL == pWdaParams)
8555 {
8556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8557 "%s: pWdaParams received NULL", __func__);
8558 VOS_ASSERT(0);
8559 return;
8560 }
8561
8562 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308563 if (NULL == pWDA)
8564 {
8565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8566 "%s:pWDA is NULL", __func__);
8567 VOS_ASSERT(0);
8568 return ;
8569 }
8570
Yue Ma7f44bbe2013-04-12 11:47:39 -07008571 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8572 pEnterBmpsRspParams->status = wdiStatus;
8573
8574 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8575 {
8576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8577 vos_mem_free(pWdaParams);
8578 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8579 }
8580
8581 return;
8582}
8583/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 * FUNCTION: WDA_ProcessEnterBmpsReq
8585 * Request to WDI to Enter BMPS power state.
8586 */
8587VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8588 tEnterBmpsParams *pEnterBmpsReqParams)
8589{
8590 WDI_Status status = WDI_STATUS_SUCCESS;
8591 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8592 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8596 {
8597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008598 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 VOS_ASSERT(0);
8600 return VOS_STATUS_E_FAILURE;
8601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8603 if (NULL == wdiEnterBmpsReqParams)
8604 {
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008608 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8609 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 return VOS_STATUS_E_NOMEM;
8611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8613 if (NULL == pWdaParams)
8614 {
8615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 VOS_ASSERT(0);
8618 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008619 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8620 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 return VOS_STATUS_E_NOMEM;
8622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8624 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8625 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8626 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008627 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8629 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8630 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008631 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8632 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008633
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 /* Store param pointer as passed in by caller */
8635 /* store Params pass it to WDI */
8636 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008637 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008640 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 if (IS_WDI_STATUS_FAILURE(status))
8642 {
8643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8644 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008646 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008648 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 return CONVERT_WDI2VOS_STATUS(status);
8651}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008652
8653
8654static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8655 WDI_Status wdiStatus,
8656 tExitBmpsParams *pExitBmpsReqParams)
8657{
8658 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8659
8660 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8661}
8662
8663
Jeff Johnson295189b2012-06-20 16:38:30 -07008664/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008665 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 * send Exit BMPS RSP back to PE
8667 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008668void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008669{
8670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308671 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008672 tExitBmpsParams *pExitBmpsRspParams;
8673
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 if(NULL == pWdaParams)
8677 {
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008679 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 VOS_ASSERT(0) ;
8681 return ;
8682 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008683
8684 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308685 if (NULL == pWDA)
8686 {
8687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8688 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308689
8690 if(pWdaParams->wdaWdiApiMsgParam)
8691 {
8692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8693 }
8694 vos_mem_free(pWdaParams);
8695
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308696 VOS_ASSERT(0);
8697 return ;
8698 }
8699
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008700 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8701
8702 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008703 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8706 vos_mem_free(pWdaParams) ;
8707
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008708 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 return ;
8710}
Jeff Johnson295189b2012-06-20 16:38:30 -07008711/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008712 * FUNCTION: WDA_ExitBmpsReqCallback
8713 * Free memory and send Exit BMPS RSP back to PE.
8714 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8715 */
8716void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8717{
8718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308719 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008720 tExitBmpsParams *pExitBmpsRspParams;
8721
8722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8723 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8724
8725 if(NULL == pWdaParams)
8726 {
8727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8728 "%s: pWdaParams received NULL", __func__);
8729 VOS_ASSERT(0);
8730 return;
8731 }
8732
8733 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308734 if (NULL == pWDA)
8735 {
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8737 "%s:pWDA is NULL", __func__);
8738 VOS_ASSERT(0);
8739 return ;
8740 }
8741
Yue Ma7f44bbe2013-04-12 11:47:39 -07008742 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8743 pExitBmpsRspParams->status = wdiStatus;
8744
8745 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8746 {
8747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8748 vos_mem_free(pWdaParams);
8749 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8750 }
8751
8752 return;
8753}
8754/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 * FUNCTION: WDA_ProcessExitBmpsReq
8756 * Request to WDI to Exit BMPS power state.
8757 */
8758VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8759 tExitBmpsParams *pExitBmpsReqParams)
8760{
8761 WDI_Status status = WDI_STATUS_SUCCESS ;
8762 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8763 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8764 sizeof(WDI_ExitBmpsReqParamsType)) ;
8765 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 if(NULL == wdiExitBmpsReqParams)
8769 {
8770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008773 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 return VOS_STATUS_E_NOMEM;
8775 }
8776 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8777 if(NULL == pWdaParams)
8778 {
8779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 VOS_ASSERT(0);
8782 vos_mem_free(wdiExitBmpsReqParams);
8783 return VOS_STATUS_E_NOMEM;
8784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008786
8787 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8788
Yue Ma7f44bbe2013-04-12 11:47:39 -07008789 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8790 wdiExitBmpsReqParams->pUserData = pWdaParams;
8791
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 /* Store param pointer as passed in by caller */
8793 /* store Params pass it to WDI */
8794 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8795 pWdaParams->pWdaContext = pWDA;
8796 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008798 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 if(IS_WDI_STATUS_FAILURE(status))
8800 {
8801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8802 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8804 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008805 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 return CONVERT_WDI2VOS_STATUS(status) ;
8808}
Jeff Johnson295189b2012-06-20 16:38:30 -07008809/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008810 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 * send Enter UAPSD RSP back to PE
8812 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008813void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008814{
8815 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308816 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008817 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008819 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 if(NULL == pWdaParams)
8821 {
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008823 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 VOS_ASSERT(0) ;
8825 return ;
8826 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008827
8828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308829 if (NULL == pWDA)
8830 {
8831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8832 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308833
8834 if(pWdaParams->wdaWdiApiMsgParam)
8835 {
8836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8837 }
8838 vos_mem_free(pWdaParams);
8839
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308840 VOS_ASSERT(0);
8841 return ;
8842 }
8843
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008844 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8845
8846 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008847 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008848
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8850 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008851 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 return ;
8853}
Jeff Johnson295189b2012-06-20 16:38:30 -07008854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008855 * FUNCTION: WDA_EnterUapsdReqCallback
8856 * Free memory and send Enter UAPSD RSP back to PE.
8857 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8858 */
8859void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8860{
8861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8862 tWDA_CbContext *pWDA;
8863 tUapsdParams *pEnterUapsdRsqParams;
8864
8865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8866 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8867
8868 if(NULL == pWdaParams)
8869 {
8870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8871 "%s: pWdaParams received NULL", __func__);
8872 VOS_ASSERT(0);
8873 return;
8874 }
8875
8876 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308877 if (NULL == pWDA)
8878 {
8879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8880 "%s:pWDA is NULL", __func__);
8881 VOS_ASSERT(0);
8882 return ;
8883 }
8884
Yue Ma7f44bbe2013-04-12 11:47:39 -07008885 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8886 pEnterUapsdRsqParams->status = wdiStatus;
8887
8888 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8889 {
8890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8891 vos_mem_free(pWdaParams);
8892 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8893 }
8894
8895 return;
8896}
8897/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 * FUNCTION: WDA_ProcessEnterUapsdReq
8899 * Request to WDI to Enter UAPSD power state.
8900 */
8901VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8902 tUapsdParams *pEnterUapsdReqParams)
8903{
8904 WDI_Status status = WDI_STATUS_SUCCESS ;
8905 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8906 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8907 sizeof(WDI_EnterUapsdReqParamsType)) ;
8908 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 if(NULL == wdiEnterUapsdReqParams)
8912 {
8913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 VOS_ASSERT(0);
8916 return VOS_STATUS_E_NOMEM;
8917 }
8918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8919 if(NULL == pWdaParams)
8920 {
8921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 VOS_ASSERT(0);
8924 vos_mem_free(wdiEnterUapsdReqParams);
8925 return VOS_STATUS_E_NOMEM;
8926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8928 pEnterUapsdReqParams->beDeliveryEnabled;
8929 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8930 pEnterUapsdReqParams->beTriggerEnabled;
8931 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8932 pEnterUapsdReqParams->bkDeliveryEnabled;
8933 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8934 pEnterUapsdReqParams->bkTriggerEnabled;
8935 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8936 pEnterUapsdReqParams->viDeliveryEnabled;
8937 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8938 pEnterUapsdReqParams->viTriggerEnabled;
8939 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8940 pEnterUapsdReqParams->voDeliveryEnabled;
8941 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8942 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008943 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008944
Yue Ma7f44bbe2013-04-12 11:47:39 -07008945 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8946 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008947
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* Store param pointer as passed in by caller */
8949 /* store Params pass it to WDI */
8950 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8951 pWdaParams->pWdaContext = pWDA;
8952 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008954 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 if(IS_WDI_STATUS_FAILURE(status))
8956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8958 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8959 vos_mem_free(pWdaParams->wdaMsgParam) ;
8960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8961 vos_mem_free(pWdaParams) ;
8962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 return CONVERT_WDI2VOS_STATUS(status) ;
8964}
Jeff Johnson295189b2012-06-20 16:38:30 -07008965/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008966 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 * send Exit UAPSD RSP back to PE
8968 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008969void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008970{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008971
8972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8973 tWDA_CbContext *pWDA;
8974 tExitUapsdParams *pExitUapsdRspParams;
8975
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008977 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008978 if(NULL == pWdaParams)
8979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008982 VOS_ASSERT(0);
8983 return;
8984 }
8985
8986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8987 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8988
8989 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008990 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008991
8992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8993 vos_mem_free(pWdaParams) ;
8994
8995 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 return ;
8997}
Jeff Johnson295189b2012-06-20 16:38:30 -07008998/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008999 * FUNCTION: WDA_ExitUapsdReqCallback
9000 * Free memory and send Exit UAPSD RSP back to PE.
9001 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9002 */
9003void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9004{
9005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309006 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009007 tExitUapsdParams *pExitUapsdRspParams;
9008
9009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9010 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9011
9012 if(NULL == pWdaParams)
9013 {
9014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "%s: pWdaParams received NULL", __func__);
9016 VOS_ASSERT(0);
9017 return;
9018 }
9019
9020 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309021 if (NULL == pWDA)
9022 {
9023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9024 "%s:pWDA is NULL", __func__);
9025 VOS_ASSERT(0);
9026 return ;
9027 }
9028
Yue Ma7f44bbe2013-04-12 11:47:39 -07009029 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9030 pExitUapsdRspParams->status = wdiStatus;
9031
9032 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9033 {
9034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9035 vos_mem_free(pWdaParams);
9036 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9037 }
9038
9039 return;
9040}
9041/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 * FUNCTION: WDA_ProcessExitUapsdReq
9043 * Request to WDI to Exit UAPSD power state.
9044 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009045VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9046 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009047{
9048 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009049 tWDA_ReqParams *pWdaParams ;
9050 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9051 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9052 sizeof(WDI_ExitUapsdReqParamsType)) ;
9053
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009055 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009056
9057 if(NULL == wdiExitUapsdReqParams)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009061 VOS_ASSERT(0);
9062 return VOS_STATUS_E_NOMEM;
9063 }
9064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9065 if(NULL == pWdaParams)
9066 {
9067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009068 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009069 VOS_ASSERT(0);
9070 vos_mem_free(wdiExitUapsdReqParams);
9071 return VOS_STATUS_E_NOMEM;
9072 }
9073
9074 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009075 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9076 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009077
9078 /* Store param pointer as passed in by caller */
9079 /* store Params pass it to WDI */
9080 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9081 pWdaParams->pWdaContext = pWDA;
9082 pWdaParams->wdaMsgParam = pExitUapsdParams;
9083
Yue Ma7f44bbe2013-04-12 11:47:39 -07009084 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 if(IS_WDI_STATUS_FAILURE(status))
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9088 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009089 vos_mem_free(pWdaParams->wdaMsgParam) ;
9090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9091 vos_mem_free(pWdaParams) ;
9092
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 return CONVERT_WDI2VOS_STATUS(status) ;
9095}
9096
Jeff Johnson295189b2012-06-20 16:38:30 -07009097/*
9098 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9099 *
9100 */
9101void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9102{
9103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009105 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 if(NULL == pWdaParams)
9107 {
9108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009109 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 VOS_ASSERT(0) ;
9111 return ;
9112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 if( pWdaParams != NULL )
9114 {
9115 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9116 {
9117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9118 }
9119 if( pWdaParams->wdaMsgParam != NULL )
9120 {
9121 vos_mem_free(pWdaParams->wdaMsgParam) ;
9122 }
9123 vos_mem_free(pWdaParams) ;
9124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009125 return ;
9126}
Jeff Johnson295189b2012-06-20 16:38:30 -07009127/*
9128 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9129 * Request to WDI to set the power save params at start.
9130 */
9131VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9132 tSirPowerSaveCfg *pPowerSaveCfg)
9133{
9134 WDI_Status status = WDI_STATUS_SUCCESS ;
9135 tHalCfg *tlvStruct = NULL ;
9136 tANI_U8 *tlvStructStart = NULL ;
9137 v_PVOID_t *configParam;
9138 tANI_U32 configParamSize;
9139 tANI_U32 *configDataValue;
9140 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9141 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9145 {
9146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009147 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009149 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 return VOS_STATUS_E_FAILURE;
9151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9153 if (NULL == wdiPowerSaveCfg)
9154 {
9155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009158 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 return VOS_STATUS_E_NOMEM;
9160 }
9161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9162 if(NULL == pWdaParams)
9163 {
9164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 VOS_ASSERT(0);
9167 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009168 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 return VOS_STATUS_E_NOMEM;
9170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9172 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 if(NULL == configParam)
9174 {
9175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009176 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009177 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 vos_mem_free(pWdaParams);
9179 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009180 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 return VOS_STATUS_E_NOMEM;
9182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 vos_mem_set(configParam, configParamSize, 0);
9184 wdiPowerSaveCfg->pConfigBuffer = configParam;
9185 tlvStruct = (tHalCfg *)configParam;
9186 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9188 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9189 tlvStruct->length = sizeof(tANI_U32);
9190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9191 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9193 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9195 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9196 tlvStruct->length = sizeof(tANI_U32);
9197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9198 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9200 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9202 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9203 tlvStruct->length = sizeof(tANI_U32);
9204 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9205 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9207 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9209 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9210 tlvStruct->length = sizeof(tANI_U32);
9211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9212 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9214 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9216 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9217 tlvStruct->length = sizeof(tANI_U32);
9218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9219 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9221 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9223 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9224 tlvStruct->length = sizeof(tANI_U32);
9225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9226 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9228 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9230 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9231 tlvStruct->length = sizeof(tANI_U32);
9232 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9233 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9235 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009236 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9237 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9238 tlvStruct->length = sizeof(tANI_U32);
9239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9240 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9241 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9242 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9244 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9245 tlvStruct->length = sizeof(tANI_U32);
9246 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9247 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9248 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9249 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9251 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9252 tlvStruct->length = sizeof(tANI_U32);
9253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9254 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9256 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9258 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9259 tlvStruct->length = sizeof(tANI_U32);
9260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9261 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9263 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 /* store Params pass it to WDI */
9267 pWdaParams->wdaMsgParam = configParam;
9268 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9269 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9271 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 if(IS_WDI_STATUS_FAILURE(status))
9273 {
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9275 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9276 vos_mem_free(pWdaParams->wdaMsgParam);
9277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9278 vos_mem_free(pWdaParams);
9279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 return CONVERT_WDI2VOS_STATUS(status);
9282}
Jeff Johnson295189b2012-06-20 16:38:30 -07009283/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009284 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 *
9286 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009287void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009288{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9290
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009292 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009293
9294 if(NULL == pWdaParams)
9295 {
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9297 "%s: pWdaParams received NULL", __func__);
9298 VOS_ASSERT(0);
9299 return ;
9300 }
9301
9302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 vos_mem_free(pWdaParams);
9304
Jeff Johnson295189b2012-06-20 16:38:30 -07009305 return ;
9306}
Jeff Johnson295189b2012-06-20 16:38:30 -07009307/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009308 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9309 * Free memory.
9310 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9311 */
9312void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9313{
9314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9315
9316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9317 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9318
9319 if(NULL == pWdaParams)
9320 {
9321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9322 "%s: pWdaParams received NULL", __func__);
9323 VOS_ASSERT(0);
9324 return;
9325 }
9326
9327 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9328 {
9329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9330 vos_mem_free(pWdaParams);
9331 }
9332
9333 return;
9334}
9335/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 * FUNCTION: WDA_SetUapsdAcParamsReq
9337 * Request to WDI to set the UAPSD params for an ac (sta mode).
9338 */
9339VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9340 tUapsdInfo *pUapsdInfo)
9341{
9342 WDI_Status status = WDI_STATUS_SUCCESS;
9343 tWDA_CbContext *pWDA = NULL ;
9344 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9345 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9346 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9347 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 if(NULL == wdiUapsdParams)
9351 {
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_ASSERT(0);
9355 return VOS_STATUS_E_NOMEM;
9356 }
9357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9358 if(NULL == pWdaParams)
9359 {
9360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 VOS_ASSERT(0);
9363 vos_mem_free(wdiUapsdParams);
9364 return VOS_STATUS_E_NOMEM;
9365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9367 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9368 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9369 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9370 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9371 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009372 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9373 wdiUapsdParams->pUserData = pWdaParams;
9374
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 pWdaParams->pWdaContext = pWDA;
9377 /* Store param pointer as passed in by caller */
9378 pWdaParams->wdaMsgParam = pUapsdInfo;
9379 /* store Params pass it to WDI */
9380 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009382 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 if(IS_WDI_STATUS_FAILURE(status))
9385 {
9386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9387 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9389 vos_mem_free(pWdaParams);
9390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9392 return VOS_STATUS_SUCCESS;
9393 else
9394 return VOS_STATUS_E_FAILURE;
9395
Jeff Johnson295189b2012-06-20 16:38:30 -07009396}
9397/*
9398 * FUNCTION: WDA_ClearUapsdAcParamsReq
9399 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9400 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9401 * and again enter the UPASD with the modified params. Hence the disable
9402 * function was kept empty.
9403 *
9404 */
9405VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9406{
9407 /* do nothing */
9408 return VOS_STATUS_SUCCESS;
9409}
Jeff Johnson295189b2012-06-20 16:38:30 -07009410/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009411 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 *
9413 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009414void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009415{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9417
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009419 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009420
9421 if(NULL == pWdaParams)
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009424 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009425 VOS_ASSERT(0) ;
9426 return ;
9427 }
9428
9429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9430 vos_mem_free(pWdaParams->wdaMsgParam);
9431 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009432
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 //print a msg, nothing else to do
9434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009435 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 return ;
9437}
Jeff Johnson295189b2012-06-20 16:38:30 -07009438/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009439 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9440 * Free memory.
9441 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9442 */
9443void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9444{
9445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9446
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9449
9450 if(NULL == pWdaParams)
9451 {
9452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9453 "%s: pWdaParams received NULL", __func__);
9454 VOS_ASSERT(0);
9455 return;
9456 }
9457
9458 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9459 {
9460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9461 vos_mem_free(pWdaParams->wdaMsgParam);
9462 vos_mem_free(pWdaParams);
9463 }
9464
9465 return;
9466}
9467/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 * FUNCTION: WDA_UpdateUapsdParamsReq
9469 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9470 */
9471VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9472 tUpdateUapsdParams* pUpdateUapsdInfo)
9473{
9474 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009475 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9477 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9478 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009479 tWDA_ReqParams *pWdaParams = NULL;
9480
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 if(NULL == wdiUpdateUapsdParams)
9484 {
9485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 VOS_ASSERT(0);
9488 return VOS_STATUS_E_NOMEM;
9489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9491 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9492 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009493 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9494 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009495
9496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9497 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 {
9499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009502 vos_mem_free(pUpdateUapsdInfo);
9503 vos_mem_free(wdiUpdateUapsdParams);
9504 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009507 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009509 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9510 pWdaParams->pWdaContext = pWDA;
9511
Jeff Johnson43971f52012-07-17 12:26:56 -07009512 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009513 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009514 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009515
Jeff Johnson43971f52012-07-17 12:26:56 -07009516 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 {
9518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9519 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009520 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9522 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009523 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009525 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009526}
Jeff Johnson295189b2012-06-20 16:38:30 -07009527/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009528 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 *
9530 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009531void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009532{
9533 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009535 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 if(WDI_STATUS_SUCCESS != wdiStatus)
9537 {
9538 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009539 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 if(NULL == pWdaParams)
9542 {
9543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 VOS_ASSERT(0) ;
9546 return ;
9547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9549 vos_mem_free(pWdaParams->wdaMsgParam);
9550 vos_mem_free(pWdaParams);
9551 return ;
9552}
Jeff Johnson295189b2012-06-20 16:38:30 -07009553/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009554 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9555 * Free memory.
9556 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9557 */
9558void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9559{
9560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9561
9562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9563 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9564
9565 if(NULL == pWdaParams)
9566 {
9567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9568 "%s: pWdaParams received NULL", __func__);
9569 VOS_ASSERT(0);
9570 return;
9571 }
9572
9573 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9574 {
9575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9576 vos_mem_free(pWdaParams->wdaMsgParam);
9577 vos_mem_free(pWdaParams);
9578 }
9579
9580 return;
9581}
9582/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9584 *
9585 */
9586VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9587 tSirWlanSetRxpFilters *pWlanSuspendParam)
9588{
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009590 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309591 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309593 /* Sanity Check
9594 * This is very unlikely and add assert to collect more info next time */
9595 if(NULL == pWlanSuspendParam)
9596 {
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9598 "%s: pWlanSuspendParam received NULL", __func__);
9599 VOS_ASSERT(0) ;
9600 return VOS_STATUS_E_FAULT;
9601 }
9602 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9603 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 if(NULL == wdiRxpFilterParams)
9607 {
9608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 VOS_ASSERT(0);
9611 vos_mem_free(pWlanSuspendParam);
9612 return VOS_STATUS_E_NOMEM;
9613 }
9614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9615 if(NULL == pWdaParams)
9616 {
9617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 VOS_ASSERT(0);
9620 vos_mem_free(wdiRxpFilterParams);
9621 vos_mem_free(pWlanSuspendParam);
9622 return VOS_STATUS_E_NOMEM;
9623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9625 pWlanSuspendParam->setMcstBcstFilter;
9626 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9627 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9628
Yue Ma7f44bbe2013-04-12 11:47:39 -07009629 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9630 wdiRxpFilterParams->pUserData = pWdaParams;
9631
Jeff Johnson295189b2012-06-20 16:38:30 -07009632 pWdaParams->pWdaContext = pWDA;
9633 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009635 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009636 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009638 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 {
9640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9641 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009642 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9644 vos_mem_free(pWdaParams->wdaMsgParam);
9645 vos_mem_free(pWdaParams);
9646 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009647 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009648}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309649
9650/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309651 * FUNCTION: WDA_ProcessGetFrameLogReq
9652 * Request to WDI to get the Frame Log.
9653 */
9654VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9655 tAniGetFrameLogReq *pGetFrameLog)
9656{
9657 VOS_STATUS status = VOS_STATUS_SUCCESS;
9658 WDI_Status wstatus;
9659 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9660 tWDA_ReqParams *pWdaParams ;
9661
9662 /* Sanity Check*/
9663 if(NULL == pGetFrameLog)
9664 {
9665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309666 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +05309667 VOS_ASSERT(0) ;
9668 return VOS_STATUS_E_FAULT;
9669 }
9670
9671 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9672 sizeof(WDI_GetFrameLogReqInfoType));
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9674 "------> %s " ,__func__);
9675
9676 if(NULL == wdiGetFrameLogInfo)
9677 {
9678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9679 "%s: VOS MEM Alloc Failure", __func__);
9680 VOS_ASSERT(0);
9681 vos_mem_free(pGetFrameLog);
9682 return VOS_STATUS_E_NOMEM;
9683 }
9684
9685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9686 if(NULL == pWdaParams)
9687 {
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9689 "%s: VOS MEM Alloc Failure", __func__);
9690 VOS_ASSERT(0);
9691 vos_mem_free(wdiGetFrameLogInfo);
9692 vos_mem_free(pGetFrameLog);
9693 return VOS_STATUS_E_NOMEM;
9694 }
9695
9696 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9697
9698 pWdaParams->pWdaContext = pWDA;
9699 pWdaParams->wdaMsgParam = pGetFrameLog;
9700 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9701
9702 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9703 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9704 pWdaParams);
9705 if(IS_WDI_STATUS_FAILURE(wstatus))
9706 {
9707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9708 "Failure in get frame log REQ WDI API, free all the memory" );
9709 status = CONVERT_WDI2VOS_STATUS(wstatus);
9710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9711 vos_mem_free(pWdaParams->wdaMsgParam);
9712 vos_mem_free(pWdaParams);
9713 }
9714 return status;
9715}
9716
9717/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309718 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309719 *
9720 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309721VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
9722 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309723{
9724 VOS_STATUS status = VOS_STATUS_SUCCESS;
9725 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309726 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309727 tWDA_ReqParams *pWdaParams ;
9728
9729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9730 "------> %s " ,__func__);
9731
9732 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309733 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309734 {
9735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309736 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309737 VOS_ASSERT(0) ;
9738 return VOS_STATUS_E_FAULT;
9739 }
9740
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309741 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
9742 sizeof(WDI_FWLoggingInitReqInfoType));
9743 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309744 {
9745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9746 "%s: VOS MEM Alloc Failure", __func__);
9747 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309748 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309749 return VOS_STATUS_E_NOMEM;
9750 }
9751
9752 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9753 if(NULL == pWdaParams)
9754 {
9755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9756 "%s: VOS MEM Alloc Failure", __func__);
9757 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309758 vos_mem_free(wdiFWLoggingInitInfo);
9759 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309760 return VOS_STATUS_E_NOMEM;
9761 }
9762
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309763 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
9764 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
9765 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
9766 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
9767 wdiFWLoggingInitInfo->continuousFrameLogging =
9768 pFWLoggingInitParam->continuousFrameLogging;
9769 wdiFWLoggingInitInfo->minLogBufferSize=
9770 pFWLoggingInitParam->minLogBufferSize;
9771 wdiFWLoggingInitInfo->maxLogBufferSize=
9772 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309773
9774 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309775 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
9776 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309777
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309778 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
9779 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309780 pWdaParams);
9781 if(IS_WDI_STATUS_FAILURE(wstatus))
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9784 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9785 status = CONVERT_WDI2VOS_STATUS(wstatus);
9786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9787 vos_mem_free(pWdaParams->wdaMsgParam);
9788 vos_mem_free(pWdaParams);
9789 }
9790
9791 return status;
9792}
9793
Jeff Johnson295189b2012-06-20 16:38:30 -07009794/*
9795 * FUNCTION: WDA_WdiIndicationCallback
9796 *
9797 */
9798void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9799 void* pUserData)
9800{
9801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009802 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009803}
Jeff Johnson295189b2012-06-20 16:38:30 -07009804/*
9805 * FUNCTION: WDA_ProcessWlanSuspendInd
9806 *
9807 */
9808VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9809 tSirWlanSuspendParam *pWlanSuspendParam)
9810{
9811 WDI_Status wdiStatus;
9812 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009814 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009815 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9816 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9817 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9818 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9821 if(WDI_STATUS_PENDING == wdiStatus)
9822 {
9823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009824 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009825 }
9826 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9827 {
9828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009829 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009831 vos_mem_free(pWlanSuspendParam);
9832 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9833}
9834
Chet Lanctot186b5732013-03-18 10:26:30 -07009835#ifdef WLAN_FEATURE_11W
9836/*
9837 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9838 *
9839 */
9840VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9841 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9842{
9843 WDI_Status wdiStatus;
9844 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9846 "------> %s ", __func__);
9847
9848 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9849 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9850 sizeof(tSirMacAddr));
9851
9852 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9853 wdiExclUnencryptParams.pUserData = pWDA;
9854
9855 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9856 if(WDI_STATUS_PENDING == wdiStatus)
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9859 "Pending received for %s:%d ", __func__, __LINE__ );
9860 }
9861 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9862 {
9863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9864 "Failure in %s:%d ", __func__, __LINE__ );
9865 }
9866 vos_mem_free(pExclUnencryptParam);
9867 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9868}
9869#endif
9870
Jeff Johnson295189b2012-06-20 16:38:30 -07009871/*
9872 * FUNCTION: WDA_ProcessWlanResumeCallback
9873 *
9874 */
9875void WDA_ProcessWlanResumeCallback(
9876 WDI_SuspendResumeRspParamsType *resumeRspParams,
9877 void* pUserData)
9878{
9879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009881 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 if(NULL == pWdaParams)
9883 {
9884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009885 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 VOS_ASSERT(0) ;
9887 return ;
9888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9890 {
9891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009892 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9895 vos_mem_free(pWdaParams->wdaMsgParam);
9896 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 return ;
9898}
Jeff Johnson295189b2012-06-20 16:38:30 -07009899/*
9900 * FUNCTION: WDA_ProcessWlanResumeReq
9901 *
9902 */
9903VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9904 tSirWlanResumeParam *pWlanResumeParam)
9905{
9906 WDI_Status wdiStatus;
9907 WDI_ResumeParamsType *wdiResumeParams =
9908 (WDI_ResumeParamsType *)vos_mem_malloc(
9909 sizeof(WDI_ResumeParamsType) ) ;
9910 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 if(NULL == wdiResumeParams)
9914 {
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 VOS_ASSERT(0);
9918 return VOS_STATUS_E_NOMEM;
9919 }
9920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9921 if(NULL == pWdaParams)
9922 {
9923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 VOS_ASSERT(0);
9926 vos_mem_free(wdiResumeParams);
9927 return VOS_STATUS_E_NOMEM;
9928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9930 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 wdiResumeParams->wdiReqStatusCB = NULL;
9933 pWdaParams->wdaMsgParam = pWlanResumeParam;
9934 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9935 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9937 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9938 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9940 {
9941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9942 "Failure in Host Resume REQ WDI API, free all the memory " );
9943 VOS_ASSERT(0);
9944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9945 vos_mem_free(pWdaParams->wdaMsgParam);
9946 vos_mem_free(pWdaParams);
9947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9949}
9950
Jeff Johnson295189b2012-06-20 16:38:30 -07009951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009952 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 *
9954 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009955void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009956{
9957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009959 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 if(NULL == pWdaParams)
9961 {
9962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009963 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 VOS_ASSERT(0) ;
9965 return ;
9966 }
9967
9968 vos_mem_free(pWdaParams->wdaMsgParam) ;
9969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9970 vos_mem_free(pWdaParams) ;
9971 /*
9972 * No respone required for SetBeaconFilter req so just free the request
9973 * param here
9974 */
9975
Jeff Johnson295189b2012-06-20 16:38:30 -07009976 return ;
9977}
Jeff Johnson295189b2012-06-20 16:38:30 -07009978/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009979 * FUNCTION: WDA_SetBeaconFilterReqCallback
9980 * Free memory.
9981 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9982 */
9983void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9984{
9985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9986
9987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9988 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9989
9990 if(NULL == pWdaParams)
9991 {
9992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9993 "%s: pWdaParams received NULL", __func__);
9994 VOS_ASSERT(0);
9995 return;
9996 }
9997
9998 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9999 {
10000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10001 vos_mem_free(pWdaParams->wdaMsgParam);
10002 vos_mem_free(pWdaParams);
10003 }
10004
10005 return;
10006}
10007/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010008 * FUNCTION: WDA_SetBeaconFilterReq
10009 * Request to WDI to send the beacon filtering related information.
10010 */
10011VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10012 tBeaconFilterMsg* pBeaconFilterInfo)
10013{
10014 WDI_Status status = WDI_STATUS_SUCCESS;
10015 tANI_U8 *dstPtr, *srcPtr;
10016 tANI_U8 filterLength;
10017 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10018 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10019 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10020 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010022 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 if(NULL == wdiBeaconFilterInfo)
10024 {
10025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 VOS_ASSERT(0);
10028 return VOS_STATUS_E_NOMEM;
10029 }
10030 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10031 if(NULL == pWdaParams)
10032 {
10033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 VOS_ASSERT(0);
10036 vos_mem_free(wdiBeaconFilterInfo);
10037 return VOS_STATUS_E_NOMEM;
10038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10040 pBeaconFilterInfo->beaconInterval;
10041 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10042 pBeaconFilterInfo->capabilityInfo;
10043 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10044 pBeaconFilterInfo->capabilityMask;
10045 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010046
10047 //Fill the BssIdx
10048 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10049
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 //Fill structure with info contained in the beaconFilterTable
10051 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10052 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10053 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10054 if(WDI_BEACON_FILTER_LEN < filterLength)
10055 {
10056 filterLength = WDI_BEACON_FILTER_LEN;
10057 }
10058 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010059 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10060 wdiBeaconFilterInfo->pUserData = pWdaParams;
10061
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 /* Store param pointer as passed in by caller */
10063 /* store Params pass it to WDI */
10064 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10065 pWdaParams->pWdaContext = pWDA;
10066 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10067
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010069 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010070 if(IS_WDI_STATUS_FAILURE(status))
10071 {
10072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10073 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10074 vos_mem_free(pWdaParams->wdaMsgParam) ;
10075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10076 vos_mem_free(pWdaParams) ;
10077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 return CONVERT_WDI2VOS_STATUS(status) ;
10079}
Jeff Johnson295189b2012-06-20 16:38:30 -070010080/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010081 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 *
10083 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010084void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010085{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10087
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010089 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010090
10091 if(NULL == pWdaParams)
10092 {
10093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010094 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010095 VOS_ASSERT(0) ;
10096 return ;
10097 }
10098
10099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10100 vos_mem_free(pWdaParams->wdaMsgParam);
10101 vos_mem_free(pWdaParams);
10102
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 //print a msg, nothing else to do
10104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010105 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 return ;
10107}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010108/*
10109 * FUNCTION: WDA_RemBeaconFilterReqCallback
10110 * Free memory.
10111 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10112 */
10113void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10114{
10115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10116
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10118 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10119
10120 if(NULL == pWdaParams)
10121 {
10122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10123 "%s: pWdaParams received NULL", __func__);
10124 VOS_ASSERT(0);
10125 return;
10126 }
10127
10128 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10129 {
10130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10131 vos_mem_free(pWdaParams->wdaMsgParam);
10132 vos_mem_free(pWdaParams);
10133 }
10134
10135 return;
10136}
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 // TODO: PE does not have this feature for now implemented,
10138 // but the support for removing beacon filter exists between
10139 // HAL and FW. This function can be called whenever PE defines
10140 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010141/*
10142 * FUNCTION: WDA_RemBeaconFilterReq
10143 * Request to WDI to send the removal of beacon filtering related information.
10144 */
10145VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10146 tRemBeaconFilterMsg* pBeaconFilterInfo)
10147{
10148 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010149 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10151 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10152 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010153 tWDA_ReqParams *pWdaParams ;
10154
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 if(NULL == wdiBeaconFilterInfo)
10158 {
10159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 VOS_ASSERT(0);
10162 return VOS_STATUS_E_NOMEM;
10163 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10165 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 {
10167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010170 vos_mem_free(wdiBeaconFilterInfo);
10171 vos_mem_free(pBeaconFilterInfo);
10172 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174
10175 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10176 pBeaconFilterInfo->ucIeCount;
10177 //Fill structure with info contained in the ucRemIeId
10178 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10179 pBeaconFilterInfo->ucRemIeId,
10180 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10181 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10182 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010183
10184 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010185 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010187 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10188
10189 pWdaParams->pWdaContext = pWDA;
10190
Jeff Johnson43971f52012-07-17 12:26:56 -070010191 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010192 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010193 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 {
10195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10196 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010197 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10199 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010200 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010201 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010202 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010203}
Jeff Johnson295189b2012-06-20 16:38:30 -070010204/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010205 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 *
10207 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010208void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010209{
10210 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 if(NULL == pWdaParams)
10214 {
10215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 VOS_ASSERT(0) ;
10218 return ;
10219 }
10220
10221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10222 vos_mem_free(pWdaParams) ;
10223
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 return ;
10225}
Jeff Johnson295189b2012-06-20 16:38:30 -070010226/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010227 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10228 * Free memory.
10229 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10230 */
10231void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10232{
10233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10234
10235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10236 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10237
10238 if(NULL == pWdaParams)
10239 {
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10241 "%s: pWdaParams received NULL", __func__);
10242 VOS_ASSERT(0);
10243 return;
10244 }
10245
10246 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10247 {
10248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10249 vos_mem_free(pWdaParams);
10250 }
10251
10252 return;
10253}
10254/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 * FUNCTION: WDA_SetRSSIThresholdsReq
10256 * Request to WDI to set the RSSI thresholds (sta mode).
10257 */
10258VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10259{
10260 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010261 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 tWDA_CbContext *pWDA = NULL ;
10263 v_PVOID_t pVosContext = NULL;
10264 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10265 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10266 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10267 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 if(NULL == wdiRSSIThresholdsInfo)
10271 {
10272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010273 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 VOS_ASSERT(0);
10275 return VOS_STATUS_E_NOMEM;
10276 }
10277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10278 if(NULL == pWdaParams)
10279 {
10280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 VOS_ASSERT(0);
10283 vos_mem_free(wdiRSSIThresholdsInfo);
10284 return VOS_STATUS_E_NOMEM;
10285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10289 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10291 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10292 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10294 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10295 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010296 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10297 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10299 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10300
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 /* Store param pointer as passed in by caller */
10302 /* store Params pass it to WDI */
10303 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10304 pWdaParams->pWdaContext = pWDA;
10305 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010306 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010307 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010308 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 {
10310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10311 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010312 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10314 vos_mem_free(pWdaParams) ;
10315 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010316 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010317
10318}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010319/*
Yue Madb90ac12013-04-04 13:39:13 -070010320 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 *
10322 */
Yue Madb90ac12013-04-04 13:39:13 -070010323void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010324{
10325 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10326
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 if(NULL == pWdaParams)
10330 {
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 VOS_ASSERT(0) ;
10334 return ;
10335 }
10336
10337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10338 vos_mem_free(pWdaParams->wdaMsgParam);
10339 vos_mem_free(pWdaParams) ;
10340
10341 //print a msg, nothing else to do
10342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010343 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 return ;
10345}
Jeff Johnson295189b2012-06-20 16:38:30 -070010346/*
Yue Madb90ac12013-04-04 13:39:13 -070010347 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010348 * Free memory.
10349 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010350 */
10351void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10352{
10353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10354
10355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10356 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10357
10358 if(NULL == pWdaParams)
10359 {
10360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10361 "%s: Invalid pWdaParams pointer", __func__);
10362 VOS_ASSERT(0);
10363 return;
10364 }
10365
10366 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10367 {
10368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10369 vos_mem_free(pWdaParams->wdaMsgParam);
10370 vos_mem_free(pWdaParams);
10371 }
10372
10373 return;
10374}
10375/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 * FUNCTION: WDA_ProcessHostOffloadReq
10377 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10378 * to broadcast traffic (sta mode).
10379 */
10380VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10381 tSirHostOffloadReq *pHostOffloadParams)
10382{
10383 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010384 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10386 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10387 sizeof(WDI_HostOffloadReqParamsType)) ;
10388 tWDA_ReqParams *pWdaParams ;
10389
10390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010391 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010392
10393 if(NULL == wdiHostOffloadInfo)
10394 {
10395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 VOS_ASSERT(0);
10398 return VOS_STATUS_E_NOMEM;
10399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10401 if(NULL == pWdaParams)
10402 {
10403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 VOS_ASSERT(0);
10406 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010407 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 return VOS_STATUS_E_NOMEM;
10409 }
10410
10411 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10412 pHostOffloadParams->offloadType;
10413 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10414 pHostOffloadParams->enableOrDisable;
10415
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010416 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10417 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10418
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10420 {
10421 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10422 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10423 pHostOffloadParams->params.hostIpv4Addr,
10424 4);
10425 break;
10426 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10427 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10428 pHostOffloadParams->params.hostIpv6Addr,
10429 16);
10430 break;
10431 case SIR_IPV6_NS_OFFLOAD:
10432 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10433 pHostOffloadParams->params.hostIpv6Addr,
10434 16);
10435
10436#ifdef WLAN_NS_OFFLOAD
10437 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10438 {
10439 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10440 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10441 16);
10442 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10443 }
10444 else
10445 {
10446 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10447 }
10448
10449 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10450 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10451 16);
10452 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10453 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10454 6);
10455
10456 //Only two are supported so let's go through them without a loop
10457 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10458 {
10459 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10460 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10461 16);
10462 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10463 }
10464 else
10465 {
10466 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10467 }
10468
10469 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10470 {
10471 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10472 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10473 16);
10474 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10475 }
10476 else
10477 {
10478 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10479 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010480 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10481 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 break;
10483#endif //WLAN_NS_OFFLOAD
10484 default:
10485 {
10486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10487 "No Handling for Offload Type %x in WDA "
10488 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10489 //WDA_VOS_ASSERT(0) ;
10490 }
10491 }
Yue Madb90ac12013-04-04 13:39:13 -070010492 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10493 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010494
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010496 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010497 /* store Params pass it to WDI */
10498 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10499 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010500
Jeff Johnson295189b2012-06-20 16:38:30 -070010501
Jeff Johnson43971f52012-07-17 12:26:56 -070010502 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010503 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010504
Jeff Johnson43971f52012-07-17 12:26:56 -070010505 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 {
10507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010508 "Failure in host offload REQ WDI API, free all the memory %d",
10509 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010510 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10512 vos_mem_free(pWdaParams->wdaMsgParam);
10513 vos_mem_free(pWdaParams) ;
10514 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010515 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010516
10517}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010518/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010519 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 *
10521 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010522void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010523{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10525
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010527 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010528
10529 if(NULL == pWdaParams)
10530 {
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010532 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010533 VOS_ASSERT(0) ;
10534 return ;
10535 }
10536
10537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10538 vos_mem_free(pWdaParams->wdaMsgParam);
10539 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010540
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 //print a msg, nothing else to do
10542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010543 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010544 return ;
10545}
Jeff Johnson295189b2012-06-20 16:38:30 -070010546/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010547 * FUNCTION: WDA_KeepAliveReqCallback
10548 * Free memory.
10549 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10550 */
10551void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10552{
10553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10554
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10556 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10557
10558 if(NULL == pWdaParams)
10559 {
10560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10561 "%s: pWdaParams received NULL", __func__);
10562 VOS_ASSERT(0);
10563 return;
10564 }
10565
10566 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10567 {
10568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10569 vos_mem_free(pWdaParams->wdaMsgParam);
10570 vos_mem_free(pWdaParams);
10571 }
10572
10573 return;
10574}
10575/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010576 * FUNCTION: WDA_ProcessKeepAliveReq
10577 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10578 * wakeup due to broadcast traffic (sta mode).
10579 */
10580VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10581 tSirKeepAliveReq *pKeepAliveParams)
10582{
10583 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010584 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010585 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10586 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10587 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010588 tWDA_ReqParams *pWdaParams;
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 if(NULL == wdiKeepAliveInfo)
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010596 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010597 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010598 return VOS_STATUS_E_NOMEM;
10599 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010600
10601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10602 if(NULL == pWdaParams)
10603 {
10604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010605 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010606 VOS_ASSERT(0);
10607 vos_mem_free(wdiKeepAliveInfo);
10608 vos_mem_free(pKeepAliveParams);
10609 return VOS_STATUS_E_NOMEM;
10610 }
10611
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10613 pKeepAliveParams->packetType;
10614 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10615 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010616
10617 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10618 pKeepAliveParams->bssId,
10619 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010620
10621 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10622 {
10623 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10624 pKeepAliveParams->hostIpv4Addr,
10625 SIR_IPV4_ADDR_LEN);
10626 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10627 pKeepAliveParams->destIpv4Addr,
10628 SIR_IPV4_ADDR_LEN);
10629 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10630 pKeepAliveParams->destMacAddr,
10631 SIR_MAC_ADDR_LEN);
10632 }
10633 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10634 {
10635 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10636 SIR_IPV4_ADDR_LEN,
10637 0);
10638 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10639 SIR_IPV4_ADDR_LEN,
10640 0);
10641 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10642 SIR_MAC_ADDR_LEN,
10643 0);
10644 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010645 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10646 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010647
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010649 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010650 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10652 pWdaParams->pWdaContext = pWDA;
10653
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10655 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10656 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10657 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10658 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10660 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10661 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10662 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10663 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10665 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10666 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10667 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10668 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10669 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10670 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10671 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10673 "TimePeriod %d PacketType %d",
10674 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10675 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010676 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010677 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010678
Jeff Johnson43971f52012-07-17 12:26:56 -070010679 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10682 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010683 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10685 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010686 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010687 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010688 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010689
10690}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010691/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010692 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010693 *
10694 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010695void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010696 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10697 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010698{
10699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010701 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 if(NULL == pWdaParams)
10703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010705 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010706 VOS_ASSERT(0) ;
10707 return ;
10708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10710 vos_mem_free(pWdaParams->wdaMsgParam);
10711 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 return ;
10713}
Jeff Johnson295189b2012-06-20 16:38:30 -070010714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010715 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10716 * Free memory.
10717 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10718 */
10719void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10720{
10721 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10722
10723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10724 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10725
10726 if(NULL == pWdaParams)
10727 {
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10729 "%s: pWdaParams received NULL", __func__);
10730 VOS_ASSERT(0);
10731 return;
10732 }
10733
10734 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10735 {
10736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10737 vos_mem_free(pWdaParams->wdaMsgParam);
10738 vos_mem_free(pWdaParams);
10739 }
10740
10741 return;
10742}
10743
10744/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10746 * Request to WDI to add WOWL Bcast pattern
10747 */
10748VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10749 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10750{
10751 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010752 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10754 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10755 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10756 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010758 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 if(NULL == wdiWowlAddBcPtrnInfo)
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010763 VOS_ASSERT(0);
10764 return VOS_STATUS_E_NOMEM;
10765 }
10766 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10767 if(NULL == pWdaParams)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 VOS_ASSERT(0);
10772 vos_mem_free(wdiWowlAddBcPtrnInfo);
10773 return VOS_STATUS_E_NOMEM;
10774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10776 pWowlAddBcPtrnParams->ucPatternId;
10777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10778 pWowlAddBcPtrnParams->ucPatternByteOffset;
10779 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10780 pWowlAddBcPtrnParams->ucPatternMaskSize;
10781 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10782 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010783 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10784 {
10785 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10786 pWowlAddBcPtrnParams->ucPattern,
10787 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10788 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10789 pWowlAddBcPtrnParams->ucPatternMask,
10790 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10791 }
10792 else
10793 {
10794 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10795 pWowlAddBcPtrnParams->ucPattern,
10796 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10797 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10798 pWowlAddBcPtrnParams->ucPatternMask,
10799 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10800
10801 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10802 pWowlAddBcPtrnParams->ucPatternExt,
10803 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10804 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10805 pWowlAddBcPtrnParams->ucPatternMaskExt,
10806 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10807 }
10808
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010809 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10810 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10811
Yue Ma7f44bbe2013-04-12 11:47:39 -070010812 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10813 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 /* Store param pointer as passed in by caller */
10815 /* store Params pass it to WDI */
10816 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10817 pWdaParams->pWdaContext = pWDA;
10818 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010819 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010820 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010821 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010822 {
10823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10824 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010825 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010826 vos_mem_free(pWdaParams->wdaMsgParam) ;
10827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10828 vos_mem_free(pWdaParams) ;
10829 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010830 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010831
10832}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010833/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010834 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 *
10836 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010837void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010838 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10839 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010840{
10841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 if(NULL == pWdaParams)
10845 {
10846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010847 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 VOS_ASSERT(0) ;
10849 return ;
10850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10852 vos_mem_free(pWdaParams->wdaMsgParam);
10853 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010854 return ;
10855}
Jeff Johnson295189b2012-06-20 16:38:30 -070010856/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010857 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10858 * Free memory.
10859 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10860 */
10861void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10862{
10863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10864
10865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10866 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10867
10868 if(NULL == pWdaParams)
10869 {
10870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10871 "%s: pWdaParams received NULL", __func__);
10872 VOS_ASSERT(0);
10873 return;
10874 }
10875
10876 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10877 {
10878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10879 vos_mem_free(pWdaParams->wdaMsgParam);
10880 vos_mem_free(pWdaParams);
10881 }
10882
10883 return;
10884}
10885/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10887 * Request to WDI to delete WOWL Bcast pattern
10888 */
10889VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10890 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10891{
10892 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010893 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10895 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10896 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 if(NULL == wdiWowlDelBcPtrnInfo)
10901 {
10902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010904 VOS_ASSERT(0);
10905 return VOS_STATUS_E_NOMEM;
10906 }
10907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10908 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 VOS_ASSERT(0);
10913 vos_mem_free(wdiWowlDelBcPtrnInfo);
10914 return VOS_STATUS_E_NOMEM;
10915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10917 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010918
10919 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10920 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10921
Yue Ma7f44bbe2013-04-12 11:47:39 -070010922 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10923 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 /* Store param pointer as passed in by caller */
10925 /* store Params pass it to WDI */
10926 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10927 pWdaParams->pWdaContext = pWDA;
10928 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010929 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010930 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010931 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10934 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010935 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 vos_mem_free(pWdaParams->wdaMsgParam) ;
10937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10938 vos_mem_free(pWdaParams) ;
10939 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010940 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010941
10942}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010943/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010944 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 *
10946 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010947void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010948{
10949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010950 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 if(NULL == pWdaParams)
10955 {
10956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 VOS_ASSERT(0) ;
10959 return ;
10960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010962 if (NULL == pWDA)
10963 {
10964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10965 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010966
10967 if(pWdaParams->wdaWdiApiMsgParam)
10968 {
10969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10970 }
10971 vos_mem_free(pWdaParams);
10972
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010973 VOS_ASSERT(0);
10974 return ;
10975 }
10976
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10978
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010979 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10980
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10982 vos_mem_free(pWdaParams) ;
10983
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010984 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010985 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 return ;
10988}
Jeff Johnson295189b2012-06-20 16:38:30 -070010989/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010990 * FUNCTION: WDA_WowlEnterReqCallback
10991 * Free memory and send WOWL Enter RSP back to PE.
10992 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10993 */
10994void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10995{
10996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010997 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010998 tSirHalWowlEnterParams *pWowlEnterParams;
10999
11000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11001 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11002
11003 if(NULL == pWdaParams)
11004 {
11005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11006 "%s: pWdaParams received NULL", __func__);
11007 VOS_ASSERT(0);
11008 return;
11009 }
11010
11011 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011012 if (NULL == pWDA)
11013 {
11014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11015 "%s:pWDA is NULL", __func__);
11016 VOS_ASSERT(0);
11017 return ;
11018 }
11019
Yue Ma7f44bbe2013-04-12 11:47:39 -070011020 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11021 pWowlEnterParams->status = wdiStatus;
11022
11023 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11024 {
11025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11026 vos_mem_free(pWdaParams);
11027 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11028 }
11029
11030 return;
11031}
11032/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 * FUNCTION: WDA_ProcessWowlEnterReq
11034 * Request to WDI to enter WOWL
11035 */
11036VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11037 tSirHalWowlEnterParams *pWowlEnterParams)
11038{
11039 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011040 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11042 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11043 sizeof(WDI_WowlEnterReqParamsType)) ;
11044 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 if(NULL == wdiWowlEnterInfo)
11048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 VOS_ASSERT(0);
11052 return VOS_STATUS_E_NOMEM;
11053 }
11054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11055 if(NULL == pWdaParams)
11056 {
11057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 VOS_ASSERT(0);
11060 vos_mem_free(wdiWowlEnterInfo);
11061 return VOS_STATUS_E_NOMEM;
11062 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011063
11064 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11065
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11067 pWowlEnterParams->magicPtrn,
11068 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11070 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11072 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11074 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11076 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011077 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11078 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11080 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11082 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11084 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011085#ifdef WLAN_WAKEUP_EVENTS
11086 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11087 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11088
11089 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11090 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11091
11092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11093 pWowlEnterParams->ucWowNetScanOffloadMatch;
11094
11095 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11096 pWowlEnterParams->ucWowGTKRekeyError;
11097
11098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11099 pWowlEnterParams->ucWoWBSSConnLoss;
11100#endif // WLAN_WAKEUP_EVENTS
11101
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011102 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11103 pWowlEnterParams->bssIdx;
11104
Yue Ma7f44bbe2013-04-12 11:47:39 -070011105 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11106 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 /* Store param pointer as passed in by caller */
11108 /* store Params pass it to WDI */
11109 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11110 pWdaParams->pWdaContext = pWDA;
11111 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011112 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011113 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011114 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 {
11116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11117 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011118 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 vos_mem_free(pWdaParams->wdaMsgParam) ;
11120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11121 vos_mem_free(pWdaParams) ;
11122 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011123 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011124
11125}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011126/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011127 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 *
11129 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011130void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011131{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011133 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011134 tSirHalWowlExitParams *pWowlExitParams;
11135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011136 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011137 if(NULL == pWdaParams)
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011140 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011141 VOS_ASSERT(0) ;
11142 return ;
11143 }
11144 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011145 if (NULL == pWDA)
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011149
11150 if(pWdaParams->wdaWdiApiMsgParam)
11151 {
11152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11153 }
11154 vos_mem_free(pWdaParams);
11155
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011156 VOS_ASSERT(0);
11157 return ;
11158 }
11159
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011160 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11161
11162 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011163 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011164
11165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11166 vos_mem_free(pWdaParams) ;
11167
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011169 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011170 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 return ;
11172}
Jeff Johnson295189b2012-06-20 16:38:30 -070011173/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011174 * FUNCTION: WDA_WowlExitReqCallback
11175 * Free memory and send WOWL Exit RSP back to PE.
11176 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11177 */
11178void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11179{
11180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011181 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011182 tSirHalWowlExitParams *pWowlExitParams;
11183
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11185 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11186
11187 if(NULL == pWdaParams)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11190 "%s: pWdaParams received NULL", __func__);
11191 VOS_ASSERT(0);
11192 return;
11193 }
11194
11195 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011196 if (NULL == pWDA)
11197 {
11198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11199 "%s:pWDA is NULL", __func__);
11200 VOS_ASSERT(0);
11201 return ;
11202 }
11203
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11205 pWowlExitParams->status = wdiStatus;
11206
11207 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11208 {
11209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11210 vos_mem_free(pWdaParams);
11211 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11212 }
11213
11214 return;
11215}
11216/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 * FUNCTION: WDA_ProcessWowlExitReq
11218 * Request to WDI to add WOWL Bcast pattern
11219 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011220VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11221 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011222{
11223 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011224 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011225 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11226 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11227 sizeof(WDI_WowlExitReqParamsType)) ;
11228 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011230 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011231 if(NULL == wdiWowlExitInfo)
11232 {
11233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011234 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011235 VOS_ASSERT(0);
11236 return VOS_STATUS_E_NOMEM;
11237 }
11238 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11239 if(NULL == pWdaParams)
11240 {
11241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011242 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011243 VOS_ASSERT(0);
11244 vos_mem_free(wdiWowlExitInfo);
11245 return VOS_STATUS_E_NOMEM;
11246 }
11247
11248 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11249 pWowlExitParams->bssIdx;
11250
Yue Ma7f44bbe2013-04-12 11:47:39 -070011251 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11252 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011253
11254 /* Store param pointer as passed in by caller */
11255 /* store Params pass it to WDI */
11256 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11257 pWdaParams->pWdaContext = pWDA;
11258 pWdaParams->wdaMsgParam = pWowlExitParams;
11259
11260 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011261 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262
Jeff Johnson43971f52012-07-17 12:26:56 -070011263 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011267 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11269 vos_mem_free(pWdaParams->wdaMsgParam);
11270 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011271 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011272 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011273}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011274/*
11275 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11276 * Request to WDI to determine whether a given station is capable of
11277 * using HW-based frame translation
11278 */
11279v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11280 tANI_U8 staIdx)
11281{
11282 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11283}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011284
11285/*
11286 * FUNCTION: WDA_IsSelfSTA
11287 * Request to WDI to determine whether a given STAID is self station
11288 * index.
11289 */
11290v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11291{
11292
11293 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11294
Girish Gowli05cf44e2014-06-12 21:53:37 +053011295 if (NULL != pWDA)
11296 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11297 else
11298 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011299}
Jeff Johnson295189b2012-06-20 16:38:30 -070011300/*
11301 * FUNCTION: WDA_NvDownloadReqCallback
11302 * send NV Download RSP back to PE
11303 */
11304void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11305 void* pUserData)
11306{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011307
11308 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011309 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011310
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011312 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011313
11314 if(NULL == pWdaParams)
11315 {
11316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011317 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011318 VOS_ASSERT(0) ;
11319 return ;
11320 }
11321
11322 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011323 if (NULL == pWDA)
11324 {
11325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11326 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011327
11328 if(pWdaParams->wdaWdiApiMsgParam)
11329 {
11330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11331 }
11332 vos_mem_free(pWdaParams);
11333
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011334 VOS_ASSERT(0);
11335 return ;
11336 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011337
Jeff Johnson295189b2012-06-20 16:38:30 -070011338 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11340 vos_mem_free(pWdaParams);
11341
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 return ;
11344}
Jeff Johnson295189b2012-06-20 16:38:30 -070011345/*
11346 * FUNCTION: WDA_ProcessNvDownloadReq
11347 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11348 */
11349VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11350{
11351 /* Initialize the local Variables*/
11352 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11353 v_VOID_t *pNvBuffer=NULL;
11354 v_SIZE_t bufferSize = 0;
11355 WDI_Status status = WDI_STATUS_E_FAILURE;
11356 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011357 tWDA_ReqParams *pWdaParams ;
11358
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011360 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011361 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 {
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011364 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011365 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011366 return VOS_STATUS_E_FAILURE;
11367 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011368
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011370 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11371
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11373 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 if(NULL == wdiNvDownloadReqParam)
11375 {
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 VOS_ASSERT(0);
11379 return VOS_STATUS_E_NOMEM;
11380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 /* Copy Params to wdiNvDownloadReqParam*/
11382 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11383 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011384
11385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11386 if(NULL == pWdaParams)
11387 {
11388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011389 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011390 VOS_ASSERT(0);
11391 vos_mem_free(wdiNvDownloadReqParam);
11392 return VOS_STATUS_E_NOMEM;
11393 }
11394
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011396 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11397 pWdaParams->wdaMsgParam = NULL;
11398 pWdaParams->pWdaContext = pWDA;
11399
11400
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011402
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011404 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11405
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 if(IS_WDI_STATUS_FAILURE(status))
11407 {
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11409 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11411 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011412 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011414}
11415/*
11416 * FUNCTION: WDA_FlushAcReqCallback
11417 * send Flush AC RSP back to TL
11418 */
11419void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11420{
11421 vos_msg_t wdaMsg = {0} ;
11422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11423 tFlushACReq *pFlushACReqParams;
11424 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 if(NULL == pWdaParams)
11428 {
11429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 VOS_ASSERT(0) ;
11432 return ;
11433 }
11434
11435 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11436 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11437 if(NULL == pFlushACRspParams)
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011442 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 return ;
11444 }
11445 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11446 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11447 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11448 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11449 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011450 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 vos_mem_free(pWdaParams->wdaMsgParam) ;
11452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11453 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011454 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11455 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11456 // POST message to TL
11457 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11458
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 return ;
11460}
Jeff Johnson295189b2012-06-20 16:38:30 -070011461/*
11462 * FUNCTION: WDA_ProcessFlushAcReq
11463 * Request to WDI to Update the DELBA REQ params.
11464 */
11465VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11466 tFlushACReq *pFlushAcReqParams)
11467{
11468 WDI_Status status = WDI_STATUS_SUCCESS ;
11469 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11470 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11471 sizeof(WDI_FlushAcReqParamsType)) ;
11472 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 if(NULL == wdiFlushAcReqParam)
11474 {
11475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 VOS_ASSERT(0);
11478 return VOS_STATUS_E_NOMEM;
11479 }
11480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11481 if(NULL == pWdaParams)
11482 {
11483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 VOS_ASSERT(0);
11486 vos_mem_free(wdiFlushAcReqParam);
11487 return VOS_STATUS_E_NOMEM;
11488 }
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 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11492 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11493 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11494 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 /* Store Flush AC pointer, as this will be used for response */
11496 /* store Params pass it to WDI */
11497 pWdaParams->pWdaContext = pWDA;
11498 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11499 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11501 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 if(IS_WDI_STATUS_FAILURE(status))
11503 {
11504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11505 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11506 vos_mem_free(pWdaParams->wdaMsgParam) ;
11507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11508 vos_mem_free(pWdaParams) ;
11509 //TODO: respond to TL with failure
11510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512}
Jeff Johnson295189b2012-06-20 16:38:30 -070011513/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011514 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 *
11516 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011517void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011518{
11519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011520 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011521 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011522
11523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 if(NULL == pWdaParams)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 VOS_ASSERT(0) ;
11530 return ;
11531 }
11532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011533 if (NULL == pWDA)
11534 {
11535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11536 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011537 vos_mem_free(pWdaParams->wdaMsgParam) ;
11538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11539 vos_mem_free(pWdaParams) ;
11540
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011541 VOS_ASSERT(0);
11542 return ;
11543 }
11544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11546 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11547 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11548 {
11549 pWDA->wdaAmpSessionOn = VOS_FALSE;
11550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 vos_mem_free(pWdaParams->wdaMsgParam) ;
11552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11553 vos_mem_free(pWdaParams) ;
11554 /*
11555 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11556 * param here
11557 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 return ;
11559}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011560/*
11561 * FUNCTION: WDA_BtAmpEventReqCallback
11562 * Free memory.
11563 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11564 */
11565void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11566{
11567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011568 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011569 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011570
Yue Ma7f44bbe2013-04-12 11:47:39 -070011571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11572 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11573
11574 if(NULL == pWdaParams)
11575 {
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11577 "%s: pWdaParams received NULL", __func__);
11578 VOS_ASSERT(0);
11579 return;
11580 }
11581
11582 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011583 if (NULL == pWDA)
11584 {
11585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11586 "%s:pWDA is NULL", __func__);
11587 VOS_ASSERT(0);
11588 return ;
11589 }
11590
Yue Ma7f44bbe2013-04-12 11:47:39 -070011591 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11592
11593 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11594 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11595 {
11596 pWDA->wdaAmpSessionOn = VOS_FALSE;
11597 }
11598
11599 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11600 {
11601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11602 vos_mem_free(pWdaParams->wdaMsgParam);
11603 vos_mem_free(pWdaParams);
11604 }
11605
11606 return;
11607}
Jeff Johnson295189b2012-06-20 16:38:30 -070011608/*
11609 * FUNCTION: WDA_ProcessBtAmpEventReq
11610 * Request to WDI to Update with BT AMP events.
11611 */
11612VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11613 tSmeBtAmpEvent *pBtAmpEventParams)
11614{
11615 WDI_Status status = WDI_STATUS_SUCCESS ;
11616 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11617 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11618 sizeof(WDI_BtAmpEventParamsType)) ;
11619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 if(NULL == wdiBtAmpEventParam)
11623 {
11624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 VOS_ASSERT(0);
11627 return VOS_STATUS_E_NOMEM;
11628 }
11629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11630 if(NULL == pWdaParams)
11631 {
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 VOS_ASSERT(0);
11635 vos_mem_free(wdiBtAmpEventParam);
11636 return VOS_STATUS_E_NOMEM;
11637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11639 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011640 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11641 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011642 /* Store BT AMP event pointer, as this will be used for response */
11643 /* store Params pass it to WDI */
11644 pWdaParams->pWdaContext = pWDA;
11645 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11646 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011648 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 if(IS_WDI_STATUS_FAILURE(status))
11650 {
11651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11652 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11653 vos_mem_free(pWdaParams->wdaMsgParam) ;
11654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11655 vos_mem_free(pWdaParams) ;
11656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11658 {
11659 pWDA->wdaAmpSessionOn = VOS_TRUE;
11660 }
11661 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011662}
11663
Jeff Johnson295189b2012-06-20 16:38:30 -070011664/*
11665 * FUNCTION: WDA_FTMCommandReqCallback
11666 * Handle FTM CMD response came from HAL
11667 * Route responce to HDD FTM
11668 */
11669void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11670 void *usrData)
11671{
11672 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11674 {
11675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011676 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 return;
11678 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 /* Release Current FTM Command Request */
11680 vos_mem_free(pWDA->wdaFTMCmdReq);
11681 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 /* Post FTM Responce to HDD FTM */
11683 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 return;
11685}
Jeff Johnson295189b2012-06-20 16:38:30 -070011686/*
11687 * FUNCTION: WDA_ProcessFTMCommand
11688 * Send FTM command to WDI
11689 */
11690VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11691 tPttMsgbuffer *pPTTFtmCmd)
11692{
11693 WDI_Status status = WDI_STATUS_SUCCESS;
11694 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 ftmCMDReq = (WDI_FTMCommandReqType *)
11696 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11697 if(NULL == ftmCMDReq)
11698 {
11699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11700 "WDA FTM Command buffer alloc fail");
11701 return VOS_STATUS_E_NOMEM;
11702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11704 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 /* Send command to WDI */
11707 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 return status;
11709}
Jeff Johnsone7245742012-09-05 17:12:55 -070011710#ifdef FEATURE_OEM_DATA_SUPPORT
11711/*
11712 * FUNCTION: WDA_StartOemDataReqCallback
11713 *
11714 */
11715void WDA_StartOemDataReqCallback(
11716 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11717 void* pUserData)
11718{
11719 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011721 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011722 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011723
Jeff Johnsone7245742012-09-05 17:12:55 -070011724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011725 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011726
11727 if(NULL == pWdaParams)
11728 {
11729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011730 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011731 VOS_ASSERT(0) ;
11732 return ;
11733 }
11734 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11735
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011736 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011737 {
11738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011739 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011740 VOS_ASSERT(0);
11741 return ;
11742 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011743
Jeff Johnsone7245742012-09-05 17:12:55 -070011744 /*
11745 * Allocate memory for response params sent to PE
11746 */
11747 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11748
11749 // Check if memory is allocated for OemdataMeasRsp Params.
11750 if(NULL == pOemDataRspParams)
11751 {
11752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11753 "OEM DATA WDA callback alloc fail");
11754 VOS_ASSERT(0) ;
11755 return;
11756 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011757
Jeff Johnsone7245742012-09-05 17:12:55 -070011758 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11760 vos_mem_free(pWdaParams->wdaMsgParam);
11761 vos_mem_free(pWdaParams) ;
11762
Jeff Johnsone7245742012-09-05 17:12:55 -070011763 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011764 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011765 * Also, here success always means that we have atleast one BSSID.
11766 */
11767 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11768
11769 //enable Tx
11770 status = WDA_ResumeDataTx(pWDA);
11771 if(status != VOS_STATUS_SUCCESS)
11772 {
11773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11774 }
11775 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11776 return ;
11777}
11778/*
11779 * FUNCTION: WDA_ProcessStartOemDataReq
11780 * Send Start Oem Data Req to WDI
11781 */
11782VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11783 tStartOemDataReq *pOemDataReqParams)
11784{
11785 WDI_Status status = WDI_STATUS_SUCCESS;
11786 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011787 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011788
11789 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11790
11791 if(NULL == wdiOemDataReqParams)
11792 {
11793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011795 VOS_ASSERT(0);
11796 return VOS_STATUS_E_NOMEM;
11797 }
11798
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011799 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11800 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11801 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11802 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011803
11804 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11805
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011806 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11807 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011808 {
11809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011811 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011812 vos_mem_free(pOemDataReqParams);
11813 VOS_ASSERT(0);
11814 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011815 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011816
Bernald44a1ae2013-01-09 08:30:39 -080011817 pWdaParams->pWdaContext = (void*)pWDA;
11818 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11819 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011820
11821 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11822 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011823
11824 if(IS_WDI_STATUS_FAILURE(status))
11825 {
11826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11827 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11829 vos_mem_free(pWdaParams->wdaMsgParam);
11830 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011831 }
11832 return CONVERT_WDI2VOS_STATUS(status) ;
11833}
11834#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011835/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011836 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 *
11838 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011839void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011840{
11841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 if(NULL == pWdaParams)
11845 {
11846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011847 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011848 VOS_ASSERT(0) ;
11849 return ;
11850 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011851
11852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11853 vos_mem_free(pWdaParams->wdaMsgParam);
11854 vos_mem_free(pWdaParams);
11855
11856 return ;
11857}
11858/*
11859 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11860 * Free memory.
11861 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11862 */
11863void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11864{
11865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11866
11867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11868 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11869
11870 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011871 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11873 "%s: pWdaParams received NULL", __func__);
11874 VOS_ASSERT(0);
11875 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011877
11878 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 {
11880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011881 vos_mem_free(pWdaParams->wdaMsgParam);
11882 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011884
11885 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011886}
Jeff Johnson295189b2012-06-20 16:38:30 -070011887#ifdef WLAN_FEATURE_GTK_OFFLOAD
11888/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011889 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 *
11891 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011892void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011893 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011894{
11895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11896
11897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011898 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011899 if(NULL == pWdaParams)
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "%s: pWdaParams received NULL", __func__);
11903 VOS_ASSERT(0);
11904 return;
11905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011906
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 vos_mem_free(pWdaParams->wdaMsgParam) ;
11908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11909 vos_mem_free(pWdaParams) ;
11910
11911 //print a msg, nothing else to do
11912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011913 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011914
11915 return ;
11916}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011917/*
11918 * FUNCTION: WDA_GTKOffloadReqCallback
11919 * Free memory.
11920 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11921 */
11922void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11923{
11924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011925
Yue Ma7f44bbe2013-04-12 11:47:39 -070011926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11927 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11928
11929 if(NULL == pWdaParams)
11930 {
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11932 "%s: pWdaParams received NULL", __func__);
11933 VOS_ASSERT(0);
11934 return;
11935 }
11936
11937 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11938 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011939 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11940 sizeof(WDI_GtkOffloadReqMsg));
11941 vos_mem_zero(pWdaParams->wdaMsgParam,
11942 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11944 vos_mem_free(pWdaParams->wdaMsgParam);
11945 vos_mem_free(pWdaParams);
11946 }
11947
11948 return;
11949}
Jeff Johnson295189b2012-06-20 16:38:30 -070011950/*
11951 * FUNCTION: WDA_ProcessGTKOffloadReq
11952 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11953 * to broadcast traffic (sta mode).
11954 */
11955VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11956 tpSirGtkOffloadParams pGtkOffloadParams)
11957{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011958 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11960 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11961 sizeof(WDI_GtkOffloadReqMsg)) ;
11962 tWDA_ReqParams *pWdaParams ;
11963
11964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011965 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011966
11967 if(NULL == wdiGtkOffloadReqMsg)
11968 {
11969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011970 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 VOS_ASSERT(0);
11972 return VOS_STATUS_E_NOMEM;
11973 }
11974
11975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11976 if(NULL == pWdaParams)
11977 {
11978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 VOS_ASSERT(0);
11981 vos_mem_free(wdiGtkOffloadReqMsg);
11982 return VOS_STATUS_E_NOMEM;
11983 }
11984
11985 //
11986 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11987 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011988
11989 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011990 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011991
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11993 // Copy KCK
11994 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11995 // Copy KEK
11996 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11997 // Copy KeyReplayCounter
11998 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11999 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12000
Yue Ma7f44bbe2013-04-12 11:47:39 -070012001 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12002 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012003
Jeff Johnson295189b2012-06-20 16:38:30 -070012004
12005 /* Store Params pass it to WDI */
12006 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12007 pWdaParams->pWdaContext = pWDA;
12008 /* Store param pointer as passed in by caller */
12009 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12010
Yue Ma7f44bbe2013-04-12 11:47:39 -070012011 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012012
12013 if(IS_WDI_STATUS_FAILURE(status))
12014 {
12015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12016 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012017 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12018 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12020 vos_mem_free(pWdaParams->wdaMsgParam);
12021 vos_mem_free(pWdaParams);
12022 }
12023
12024 return CONVERT_WDI2VOS_STATUS(status) ;
12025}
12026
12027/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012028 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 *
12030 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012031void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012032 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012033{
12034 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12035 tWDA_CbContext *pWDA;
12036 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012037 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012038 vos_msg_t vosMsg;
12039
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012041 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012042
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012043 if(NULL == pWdaParams)
12044 {
12045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12046 "%s: pWdaParams received NULL", __func__);
12047 VOS_ASSERT(0);
12048 return;
12049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012050
Nirav Shah374de6e2014-02-13 16:40:01 +053012051 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12052 if(NULL == pGtkOffloadGetInfoRsp)
12053 {
12054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12055 "%s: vos_mem_malloc failed ", __func__);
12056 VOS_ASSERT(0);
12057 return;
12058 }
12059
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12061 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12062
12063 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12064 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12065
12066 /* Message Header */
12067 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012068 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012069
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012070 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12071 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12072 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12073 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12074 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012076 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12077 pwdiGtkOffloadGetInfoRsparams->bssId,
12078 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 /* VOS message wrapper */
12080 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12081 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12082 vosMsg.bodyval = 0;
12083
12084 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12085 {
12086 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012087 vos_mem_zero(pGtkOffloadGetInfoRsp,
12088 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12090 }
12091
12092 vos_mem_free(pWdaParams->wdaMsgParam) ;
12093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12094 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012095
12096 return;
12097}
12098/*
12099 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12100 * Free memory and send RSP back to SME.
12101 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12102 */
12103void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12104{
12105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12106 vos_msg_t vosMsg;
12107
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12109 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12110
12111 if(NULL == pWdaParams)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "%s: pWdaParams received NULL", __func__);
12115 VOS_ASSERT(0);
12116 return;
12117 }
12118
12119 /* VOS message wrapper */
12120 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12121 vosMsg.bodyptr = NULL;
12122 vosMsg.bodyval = 0;
12123
12124 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12125 {
12126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12127 vos_mem_free(pWdaParams->wdaMsgParam);
12128 vos_mem_free(pWdaParams);
12129 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12130 }
12131
12132 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012133}
12134#endif
12135
12136/*
12137 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12138 * Request to WDI to set Tx Per Tracking configurations
12139 */
12140VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12141{
12142 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012143 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12145 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12146 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12147 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012149 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012150 if(NULL == pwdiSetTxPerTrackingReqParams)
12151 {
12152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012153 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 vos_mem_free(pTxPerTrackingParams);
12155 VOS_ASSERT(0);
12156 return VOS_STATUS_E_NOMEM;
12157 }
12158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12159 if(NULL == pWdaParams)
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12164 vos_mem_free(pTxPerTrackingParams);
12165 VOS_ASSERT(0);
12166 return VOS_STATUS_E_NOMEM;
12167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012168 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12169 pTxPerTrackingParams->ucTxPerTrackingEnable;
12170 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12171 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12172 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12173 pTxPerTrackingParams->ucTxPerTrackingRatio;
12174 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12175 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012176 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12177 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012178 /* Store param pointer as passed in by caller */
12179 /* store Params pass it to WDI
12180 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12181 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12182 pWdaParams->pWdaContext = pWDA;
12183 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012184 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012185 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012186 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012190 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 vos_mem_free(pWdaParams->wdaMsgParam) ;
12192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12193 vos_mem_free(pWdaParams) ;
12194 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012195 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012196
12197}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012198/*
12199 * FUNCTION: WDA_HALDumpCmdCallback
12200 * Send the VOS complete .
12201 */
12202void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12203 void* pUserData)
12204{
12205 tANI_U8 *buffer = NULL;
12206 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012207 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012208 if(NULL == pWdaParams)
12209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012212 VOS_ASSERT(0) ;
12213 return ;
12214 }
12215
12216 pWDA = pWdaParams->pWdaContext;
12217 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 if(wdiRspParams->usBufferLen > 0)
12219 {
12220 /*Copy the Resp data to UMAC supplied buffer*/
12221 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12222 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012223
12224 if (!pWdaParams->wdaHALDumpAsync)
12225 {/* Indicate VOSS about the start complete */
12226 vos_WDAComplete_cback(pWDA->pVosContext);
12227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12229 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012230 return ;
12231}
12232
Jeff Johnson295189b2012-06-20 16:38:30 -070012233/*
12234 * FUNCTION: WDA_ProcessHALDumpCmdReq
12235 * Send Dump command to WDI
12236 */
12237VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12238 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012239 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012240{
12241 WDI_Status status = WDI_STATUS_SUCCESS;
12242 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12243 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012244 tWDA_HalDumpReqParams *pWdaParams ;
12245
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 pVosContextType pVosContext = NULL;
12247 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12249 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012250 if(pVosContext)
12251 {
12252 if (pVosContext->isLogpInProgress)
12253 {
12254 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12255 "%s:LOGP in Progress. Ignore!!!", __func__);
12256 return VOS_STATUS_E_BUSY;
12257 }
12258 }
12259 else
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12262 "%s: VOS Context Null", __func__);
12263 return VOS_STATUS_E_RESOURCES;
12264 }
12265
Siddharth Bhal68115602015-01-18 20:44:55 +053012266 if (NULL == pVosContext->pWDAContext)
12267 {
12268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12269 "%s: WDA Context Null", __func__);
12270 return VOS_STATUS_E_RESOURCES;
12271 }
12272 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 if(NULL == pWdaParams)
12274 {
12275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 return VOS_STATUS_E_NOMEM;
12278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012279 /* Allocate memory WDI request structure*/
12280 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12281 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12282 if(NULL == wdiHALDumpCmdReqParam)
12283 {
12284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12285 "WDA HAL DUMP Command buffer alloc fail");
12286 vos_mem_free(pWdaParams);
12287 return WDI_STATUS_E_FAILURE;
12288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 /* Extract the arguments */
12291 wdiHalDumpCmdInfo->command = cmd;
12292 wdiHalDumpCmdInfo->argument1 = arg1;
12293 wdiHalDumpCmdInfo->argument2 = arg2;
12294 wdiHalDumpCmdInfo->argument3 = arg3;
12295 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012297 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012298 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012299
12300 /* Response message will be passed through the buffer */
12301 pWdaParams->wdaMsgParam = (void *)pBuffer;
12302
12303 /* store Params pass it to WDI */
12304 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012306 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12307 pWdaParams);
12308 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12309 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012311 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12312 WDA_DUMPCMD_WAIT_TIMEOUT );
12313 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012315 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12316 {
12317 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12318 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12319 }
12320 else
12321 {
12322 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12323 "%s: WDA_HALDUMP reporting other error",__func__);
12324 }
12325 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012327 }
12328 return status;
12329}
Jeff Johnson295189b2012-06-20 16:38:30 -070012330#ifdef WLAN_FEATURE_GTK_OFFLOAD
12331/*
12332 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12333 * Request to WDI to get GTK Offload Information
12334 */
12335VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12336 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12337{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012338 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12340 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12341 tWDA_ReqParams *pWdaParams ;
12342
12343 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 VOS_ASSERT(0);
12348 return VOS_STATUS_E_NOMEM;
12349 }
12350
12351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12352 if(NULL == pWdaParams)
12353 {
12354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012356 VOS_ASSERT(0);
12357 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12358 return VOS_STATUS_E_NOMEM;
12359 }
12360
Yue Ma7f44bbe2013-04-12 11:47:39 -070012361 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12362 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012363
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 /* Store Params pass it to WDI */
12365 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12366 pWdaParams->pWdaContext = pWDA;
12367 /* Store param pointer as passed in by caller */
12368 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12369
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012370 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012371 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012372
Yue Ma7f44bbe2013-04-12 11:47:39 -070012373 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012374
12375 if(IS_WDI_STATUS_FAILURE(status))
12376 {
12377 /* failure returned by WDI API */
12378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12379 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12381 vos_mem_free(pWdaParams) ;
12382 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12383 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12384 }
12385
12386 return CONVERT_WDI2VOS_STATUS(status) ;
12387}
12388#endif // WLAN_FEATURE_GTK_OFFLOAD
12389
12390/*
Yue Mab9c86f42013-08-14 15:59:08 -070012391 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12392 *
12393 */
12394VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12395 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12396{
12397 WDI_Status wdiStatus;
12398 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12399
12400 addPeriodicTxPtrnParams =
12401 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12402
12403 if (NULL == addPeriodicTxPtrnParams)
12404 {
12405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12406 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12407 __func__);
12408
12409 return VOS_STATUS_E_NOMEM;
12410 }
12411
12412 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12413 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12414
12415 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12416 addPeriodicTxPtrnParams->pUserData = pWDA;
12417
12418 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12419
12420 if (WDI_STATUS_PENDING == wdiStatus)
12421 {
12422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12423 "Pending received for %s:%d", __func__, __LINE__ );
12424 }
12425 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12426 {
12427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12428 "Failure in %s:%d", __func__, __LINE__ );
12429 }
12430
12431 vos_mem_free(addPeriodicTxPtrnParams);
12432
12433 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12434}
12435
12436/*
12437 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12438 *
12439 */
12440VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12441 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12442{
12443 WDI_Status wdiStatus;
12444 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12445
12446 delPeriodicTxPtrnParams =
12447 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12448
12449 if (NULL == delPeriodicTxPtrnParams)
12450 {
12451 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12452 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12453 __func__);
12454
12455 return VOS_STATUS_E_NOMEM;
12456 }
12457
12458 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12459 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12460
12461 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12462 delPeriodicTxPtrnParams->pUserData = pWDA;
12463
12464 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12465
12466 if (WDI_STATUS_PENDING == wdiStatus)
12467 {
12468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12469 "Pending received for %s:%d", __func__, __LINE__ );
12470 }
12471 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12472 {
12473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "Failure in %s:%d", __func__, __LINE__ );
12475 }
12476
12477 vos_mem_free(delPeriodicTxPtrnParams);
12478
12479 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12480}
12481
Rajeev79dbe4c2013-10-05 11:03:42 +053012482#ifdef FEATURE_WLAN_BATCH_SCAN
12483/*
12484 * FUNCTION: WDA_ProcessStopBatchScanInd
12485 *
12486 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12487 *
12488 * PARAM:
12489 * pWDA: pointer to WDA context
12490 * pReq: pointer to stop batch scan request
12491 */
12492VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12493 tSirStopBatchScanInd *pReq)
12494{
12495 WDI_Status wdiStatus;
12496 WDI_StopBatchScanIndType wdiReq;
12497
12498 wdiReq.param = pReq->param;
12499
12500 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12501
12502 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12503 {
12504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12505 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12506 }
12507
12508 vos_mem_free(pReq);
12509
12510 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12511}
12512/*==========================================================================
12513 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12514
12515 DESCRIPTION
12516 API to pull batch scan result from FW
12517
12518 PARAMETERS
12519 pWDA: Pointer to WDA context
12520 pGetBatchScanReq: Pointer to get batch scan result indication
12521
12522 RETURN VALUE
12523 NONE
12524
12525===========================================================================*/
12526VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12527 tSirTriggerBatchScanResultInd *pReq)
12528{
12529 WDI_Status wdiStatus;
12530 WDI_TriggerBatchScanResultIndType wdiReq;
12531
12532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12533 "------> %s " ,__func__);
12534
12535 wdiReq.param = pReq->param;
12536
12537 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12538
12539 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12540 {
12541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12542 "Trigger batch scan result ind failed %s:%d",
12543 __func__, wdiStatus);
12544 }
12545
12546 vos_mem_free(pReq);
12547
12548 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12549}
12550
12551/*==========================================================================
12552 FUNCTION WDA_SetBatchScanRespCallback
12553
12554 DESCRIPTION
12555 API to process set batch scan response from FW
12556
12557 PARAMETERS
12558 pRsp: Pointer to set batch scan response
12559 pUserData: Pointer to user data
12560
12561 RETURN VALUE
12562 NONE
12563
12564===========================================================================*/
12565void WDA_SetBatchScanRespCallback
12566(
12567 WDI_SetBatchScanRspType *pRsp,
12568 void* pUserData
12569)
12570{
12571 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12572 tpAniSirGlobal pMac;
12573 void *pCallbackContext;
12574 tWDA_CbContext *pWDA = NULL ;
12575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12576
12577
12578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12579 "<------ %s " ,__func__);
12580 if (NULL == pWdaParams)
12581 {
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12583 "%s: pWdaParams received NULL", __func__);
12584 VOS_ASSERT(0) ;
12585 return ;
12586 }
12587
12588 /*extract WDA context*/
12589 pWDA = pWdaParams->pWdaContext;
12590 if (NULL == pWDA)
12591 {
12592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12593 "%s:pWDA is NULL can't invole HDD callback",
12594 __func__);
12595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12596 vos_mem_free(pWdaParams->wdaMsgParam);
12597 vos_mem_free(pWdaParams);
12598 VOS_ASSERT(0);
12599 return;
12600 }
12601
12602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12603 vos_mem_free(pWdaParams->wdaMsgParam);
12604 vos_mem_free(pWdaParams);
12605
12606 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12607 if (NULL == pMac)
12608 {
12609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12610 "%s:pMac is NULL", __func__);
12611 VOS_ASSERT(0);
12612 return;
12613 }
12614
12615 pHddSetBatchScanRsp =
12616 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12617 if (NULL == pHddSetBatchScanRsp)
12618 {
12619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12620 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12621 VOS_ASSERT(0);
12622 return;
12623 }
12624
12625 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12626
12627 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12628 /*call hdd callback with set batch scan response data*/
12629 if(pMac->pmc.setBatchScanReqCallback)
12630 {
12631 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12632 }
12633 else
12634 {
12635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12636 "%s:HDD callback is null", __func__);
12637 VOS_ASSERT(0);
12638 }
12639
12640 vos_mem_free(pHddSetBatchScanRsp);
12641 return ;
12642}
12643
12644/*==========================================================================
12645 FUNCTION WDA_ProcessSetBatchScanReq
12646
12647 DESCRIPTION
12648 API to send set batch scan request to WDI
12649
12650 PARAMETERS
12651 pWDA: Pointer to WDA context
12652 pSetBatchScanReq: Pointer to set batch scan req
12653
12654 RETURN VALUE
12655 NONE
12656
12657===========================================================================*/
12658VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12659 tSirSetBatchScanReq *pSetBatchScanReq)
12660{
12661 WDI_Status status;
12662 tWDA_ReqParams *pWdaParams ;
12663 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12664
12665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12666 "------> %s " ,__func__);
12667
12668 pWdiSetBatchScanReq =
12669 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12670 if (NULL == pWdiSetBatchScanReq)
12671 {
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12673 "%s: VOS MEM Alloc Failure", __func__);
12674 vos_mem_free(pSetBatchScanReq);
12675 VOS_ASSERT(0);
12676 return VOS_STATUS_E_NOMEM;
12677 }
12678
12679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12680 if (NULL == pWdaParams)
12681 {
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12683 "%s: VOS MEM Alloc Failure", __func__);
12684 VOS_ASSERT(0);
12685 vos_mem_free(pSetBatchScanReq);
12686 vos_mem_free(pWdiSetBatchScanReq);
12687 return VOS_STATUS_E_NOMEM;
12688 }
12689
12690 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12691 pWdiSetBatchScanReq->numberOfScansToBatch =
12692 pSetBatchScanReq->numberOfScansToBatch;
12693 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12694 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12695 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12696
12697 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12698 pWdaParams->pWdaContext = pWDA;
12699 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12700
12701 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12702 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12703 if (IS_WDI_STATUS_FAILURE(status))
12704 {
12705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12706 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12708 vos_mem_free(pWdaParams->wdaMsgParam);
12709 vos_mem_free(pWdaParams);
12710 }
12711 return CONVERT_WDI2VOS_STATUS(status);
12712}
12713
12714#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012715/*
12716 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12717 *
12718 * DESCRIPTION: This function sends start/update OBSS scan
12719 * inidcation message to WDI
12720 *
12721 * PARAM:
12722 * pWDA: pointer to WDA context
12723 * pReq: pointer to start OBSS scan request
12724 */
12725VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12726 tSirHT40OBSSScanInd *pReq)
12727{
12728 WDI_Status status;
12729 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12730 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012731
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12733 "------> %s " ,__func__);
12734 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12735 wdiOBSSScanParams.pUserData = pWDA;
12736
12737 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12738 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12739 pWdiOBSSScanInd->scanType = pReq->scanType;
12740 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12741 pReq->OBSSScanActiveDwellTime;
12742 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12743 pReq->OBSSScanPassiveDwellTime;
12744 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12745 pReq->BSSChannelWidthTriggerScanInterval;
12746 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12747 pReq->BSSWidthChannelTransitionDelayFactor;
12748 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12749 pReq->OBSSScanActiveTotalPerChannel;
12750 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12751 pReq->OBSSScanPassiveTotalPerChannel;
12752 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12753 pReq->OBSSScanActivityThreshold;
12754 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12755 vos_mem_copy(pWdiOBSSScanInd->channels,
12756 pReq->channels,
12757 pReq->channelCount);
12758 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12759 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12760 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12761 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12762 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12763
12764 vos_mem_copy(pWdiOBSSScanInd->ieField,
12765 pReq->ieField,
12766 pReq->ieFieldLen);
12767
12768 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12769 if (WDI_STATUS_PENDING == status)
12770 {
12771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12772 "Pending received for %s:%d ",__func__,__LINE__ );
12773 }
12774 else if (WDI_STATUS_SUCCESS_SYNC != status)
12775 {
12776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12777 "Failure in %s:%d ",__func__,__LINE__ );
12778 }
12779 return CONVERT_WDI2VOS_STATUS(status) ;
12780}
12781/*
12782 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12783 *
12784 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12785 *
12786 * PARAM:
12787 * pWDA: pointer to WDA context
12788 * pReq: pointer to stop batch scan request
12789 */
12790VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12791 tANI_U8 *bssIdx)
12792{
12793 WDI_Status status;
12794
12795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12796 "------> %s " ,__func__);
12797
12798 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12799 if (WDI_STATUS_PENDING == status)
12800 {
12801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12802 "Pending received for %s:%d ",__func__,__LINE__ );
12803 }
12804 else if (WDI_STATUS_SUCCESS_SYNC != status)
12805 {
12806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12807 "Failure in %s:%d ",__func__,__LINE__ );
12808 }
12809 return CONVERT_WDI2VOS_STATUS(status) ;
12810}
Yue Mab9c86f42013-08-14 15:59:08 -070012811/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012812 * FUNCTION: WDA_ProcessRateUpdateInd
12813 *
12814 */
12815VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12816 tSirRateUpdateInd *pRateUpdateParams)
12817{
12818 WDI_Status wdiStatus;
12819 WDI_RateUpdateIndParams rateUpdateParams;
12820
12821 vos_mem_copy(rateUpdateParams.bssid,
12822 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12823
12824 rateUpdateParams.ucastDataRateTxFlag =
12825 pRateUpdateParams->ucastDataRateTxFlag;
12826 rateUpdateParams.reliableMcastDataRateTxFlag =
12827 pRateUpdateParams->reliableMcastDataRateTxFlag;
12828 rateUpdateParams.mcastDataRate24GHzTxFlag =
12829 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12830 rateUpdateParams.mcastDataRate5GHzTxFlag =
12831 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12832
12833 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12834 rateUpdateParams.reliableMcastDataRate =
12835 pRateUpdateParams->reliableMcastDataRate;
12836 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12837 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12838
12839 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12840 rateUpdateParams.pUserData = pWDA;
12841
12842 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12843
12844 if (WDI_STATUS_PENDING == wdiStatus)
12845 {
12846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12847 "Pending received for %s:%d", __func__, __LINE__ );
12848 }
12849 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12850 {
12851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12852 "Failure in %s:%d", __func__, __LINE__ );
12853 }
12854
12855 vos_mem_free(pRateUpdateParams);
12856
12857 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12858}
12859
12860/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 * -------------------------------------------------------------------------
12862 * DATA interface with WDI for Mgmt Frames
12863 * -------------------------------------------------------------------------
12864 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012865/*
12866 * FUNCTION: WDA_TxComplete
12867 * Callback function for the WDA_TxPacket
12868 */
12869VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12870 VOS_STATUS status )
12871{
12872
12873 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12874 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012875 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012876
Mihir Shete63341222015-03-24 15:39:18 +053012877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12878
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 if(NULL == wdaContext)
12880 {
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12882 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012883 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012884 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012885 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 return VOS_STATUS_E_FAILURE;
12887 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012888
12889 /*Check if frame was timed out or not*/
12890 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12891 (v_PVOID_t)&uUserData);
12892
12893 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12894 {
12895 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12897 "%s: MGMT Frame Tx timed out",
12898 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012899 vos_pkt_return_packet(pData);
12900 return VOS_STATUS_SUCCESS;
12901 }
12902
Jeff Johnson295189b2012-06-20 16:38:30 -070012903 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12904 if( NULL!=wdaContext->pTxCbFunc)
12905 {
12906 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012907 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012908 {
12909 wdaContext->pTxCbFunc(pMac, pData);
12910 }
12911 else
12912 {
12913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012914 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012915 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012916 //Return from here since we reaching here because the packet already timeout
12917 return status;
12918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012919 }
12920
12921 /*
12922 * Trigger the event to bring the HAL TL Tx complete function to come
12923 * out of wait
12924 * Let the coe above to complete the packet first. When this event is set,
12925 * the thread waiting for the event may run and set Vospacket_freed causing the original
12926 * packet not being freed.
12927 */
12928 status = vos_event_set(&wdaContext->txFrameEvent);
12929 if(!VOS_IS_STATUS_SUCCESS(status))
12930 {
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012932 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012934 return status;
12935}
Jeff Johnson295189b2012-06-20 16:38:30 -070012936/*
12937 * FUNCTION: WDA_TxPacket
12938 * Forward TX management frame to WDI
12939 */
12940VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12941 void *pFrmBuf,
12942 tANI_U16 frmLen,
12943 eFrameType frmType,
12944 eFrameTxDir txDir,
12945 tANI_U8 tid,
12946 pWDATxRxCompFunc pCompFunc,
12947 void *pData,
12948 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012949 tANI_U32 txFlag,
12950 tANI_U32 txBdToken
12951 )
Jeff Johnson295189b2012-06-20 16:38:30 -070012952{
12953 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12954 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12955 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12956 tANI_U8 eventIdx = 0;
12957 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12958 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053012959 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012960
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 if((NULL == pWDA)||(NULL == pFrmBuf))
12962 {
12963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012964 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012965 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012966 VOS_ASSERT(0);
12967 return VOS_STATUS_E_FAILURE;
12968 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012969
Jeff Johnson295189b2012-06-20 16:38:30 -070012970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012971 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
12972 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12974 if(NULL == pMac)
12975 {
12976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012977 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 VOS_ASSERT(0);
12979 return VOS_STATUS_E_FAILURE;
12980 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012981
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 /* store the call back function in WDA context */
12983 pWDA->pTxCbFunc = pCompFunc;
12984 /* store the call back for the function of ackTxComplete */
12985 if( pAckTxComp )
12986 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012987 if( NULL != pWDA->pAckTxCbFunc )
12988 {
12989 /* Already TxComp is active no need to active again */
12990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012991 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053012992 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070012993 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012994
Jeff Johnsone7245742012-09-05 17:12:55 -070012995 if( VOS_STATUS_SUCCESS !=
12996 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12997 {
12998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12999 "Tx Complete timeout Timer Stop Failed ");
13000 }
13001 else
13002 {
13003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013004 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013005 }
13006 }
13007
13008 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13009 pWDA->pAckTxCbFunc = pAckTxComp;
13010 if( VOS_STATUS_SUCCESS !=
13011 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13014 "Tx Complete Timer Start Failed ");
13015 pWDA->pAckTxCbFunc = NULL;
13016 return eHAL_STATUS_FAILURE;
13017 }
13018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013019 /* Reset the event to be not signalled */
13020 status = vos_event_reset(&pWDA->txFrameEvent);
13021 if(!VOS_IS_STATUS_SUCCESS(status))
13022 {
13023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013024 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013025 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13026 if( pAckTxComp )
13027 {
13028 pWDA->pAckTxCbFunc = NULL;
13029 if( VOS_STATUS_SUCCESS !=
13030 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13031 {
13032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13033 "Tx Complete timeout Timer Stop Failed ");
13034 }
13035 }
13036 return VOS_STATUS_E_FAILURE;
13037 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013038
13039 /* If Peer Sta mask is set don't overwrite to self sta */
13040 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013041 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013042 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013044 else
13045 {
Ganesh K08bce952012-12-13 15:04:41 -080013046 /* Get system role, use the self station if in unknown role or STA role */
13047 systemRole = wdaGetGlobalSystemRole(pMac);
13048 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13049 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013050#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013051 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013052#endif
Ganesh K08bce952012-12-13 15:04:41 -080013053 ))
13054 {
13055 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13056 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013058
Jeff Johnsone7245742012-09-05 17:12:55 -070013059 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13060 disassoc frame reaches the HW, HAL has already deleted the peer station */
13061 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013062 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013063 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013064 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013065 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013066 /*Send Probe request frames on self sta idx*/
13067 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 /* Since we donot want probe responses to be retried, send probe responses
13070 through the NO_ACK queues */
13071 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13072 {
13073 //probe response is sent out using self station and no retries options.
13074 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13075 }
13076 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13077 {
13078 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13079 }
13080 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013081 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013082
13083 /*Set frame tag to 0
13084 We will use the WDA user data in order to tag a frame as expired*/
13085 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13086 (v_PVOID_t)0);
13087
13088
13089 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013090 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13091 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013092 {
13093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013094 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013096 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 -070013097 if( pAckTxComp )
13098 {
13099 pWDA->pAckTxCbFunc = NULL;
13100 if( VOS_STATUS_SUCCESS !=
13101 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13102 {
13103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13104 "Tx Complete timeout Timer Stop Failed ");
13105 }
13106 }
13107 return VOS_STATUS_E_FAILURE;
13108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013109 /*
13110 * Wait for the event to be set by the TL, to get the response of TX
13111 * complete, this event should be set by the Callback function called by TL
13112 */
13113 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13114 &eventIdx);
13115 if(!VOS_IS_STATUS_SUCCESS(status))
13116 {
13117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13118 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013119 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013120
13121 /*Tag Frame as timed out for later deletion*/
13122 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13123 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13125 after the packet gets completed(packet freed once)*/
13126
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013127 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013128 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013129
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 /* check whether the packet was freed already,so need not free again when
13131 * TL calls the WDA_Txcomplete routine
13132 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013133 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13134 /*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 -070013135 {
13136 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013137 } */
13138
Jeff Johnson295189b2012-06-20 16:38:30 -070013139 if( pAckTxComp )
13140 {
13141 pWDA->pAckTxCbFunc = NULL;
13142 if( VOS_STATUS_SUCCESS !=
13143 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13144 {
13145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13146 "Tx Complete timeout Timer Stop Failed ");
13147 }
13148 }
13149 status = VOS_STATUS_E_FAILURE;
13150 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013151#ifdef WLAN_DUMP_MGMTFRAMES
13152 if (VOS_IS_STATUS_SUCCESS(status))
13153 {
13154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13155 "%s() TX packet : SubType %d", __func__,pFc->subType);
13156 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13157 pData, frmLen);
13158 }
13159#endif
13160
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013161 if (VOS_IS_STATUS_SUCCESS(status))
13162 {
13163 if (pMac->fEnableDebugLog & 0x1)
13164 {
13165 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13166 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13167 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13168 {
13169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13170 pFc->type, pFc->subType);
13171 }
13172 }
13173 }
13174
13175
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 return status;
13177}
Jeff Johnson295189b2012-06-20 16:38:30 -070013178/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013179 * FUNCTION: WDA_ProcessDHCPStartInd
13180 * Forward DHCP Start to WDI
13181 */
13182static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13183 tAniDHCPInd *dhcpStartInd)
13184{
13185 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013186 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013187
c_hpothu0b0cab72014-02-13 21:52:40 +053013188 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13189 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013190 sizeof(tSirMacAddr));
13191
c_hpothu0b0cab72014-02-13 21:52:40 +053013192 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013193
c_hpothu0b0cab72014-02-13 21:52:40 +053013194 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013195 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13197 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013198 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013199 else if (WDI_STATUS_SUCCESS_SYNC != status)
13200 {
13201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13202 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13203 }
13204
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013205 vos_mem_free(dhcpStartInd);
13206 return CONVERT_WDI2VOS_STATUS(status) ;
13207}
13208
13209 /*
13210 * FUNCTION: WDA_ProcessDHCPStopInd
13211 * Forward DHCP Stop to WDI
13212 */
13213 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13214 tAniDHCPInd *dhcpStopInd)
13215 {
13216 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013217 WDI_DHCPInd wdiDHCPInd;
13218
13219 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13220 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13221
13222 status = WDI_dhcpStopInd(&wdiDHCPInd);
13223
13224 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013225 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13227 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013228 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013229 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013230 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13232 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013233 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013234
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013235 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013236
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013237 return CONVERT_WDI2VOS_STATUS(status) ;
13238 }
13239
13240/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013241 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13242 *
13243 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13244 *
13245 * PARAM:
13246 * pWDA: pointer to WDA context
13247 * pReq: pointer to stop batch scan request
13248 */
13249VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13250 tpSpoofMacAddrReqParams pReq)
13251{
13252 WDI_Status wdiStatus;
13253 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13254 tWDA_ReqParams *pWdaParams;
13255
13256 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13257 sizeof(WDI_SpoofMacAddrInfoType));
13258 if(NULL == WDI_SpoofMacAddrInfoParams) {
13259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13260 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13261 VOS_ASSERT(0);
13262 return VOS_STATUS_E_NOMEM;
13263 }
13264 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13265 if(NULL == pWdaParams) {
13266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13267 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013268 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013269 VOS_ASSERT(0);
13270 return VOS_STATUS_E_NOMEM;
13271 }
13272
13273 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13274 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13275
13276 pWdaParams->pWdaContext = pWDA;
13277 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013278 pWdaParams->wdaMsgParam = (void *)pReq;
13279
13280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13281 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13282
Siddharth Bhal171788a2014-09-29 21:02:40 +053013283 /* store Params pass it to WDI */
13284 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13285
13286 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013287 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13288 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013289
13290 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13291 {
13292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13293 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13295 vos_mem_free(pWdaParams->wdaMsgParam);
13296 vos_mem_free(pWdaParams);
13297 }
13298
13299 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13300}
13301
13302/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 * FUNCTION: WDA_McProcessMsg
13304 * Trigger DAL-AL to start CFG download
13305 */
13306VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13307{
13308 VOS_STATUS status = VOS_STATUS_SUCCESS;
13309 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013310 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 {
13312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013313 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013314 VOS_ASSERT(0);
13315 return VOS_STATUS_E_FAILURE;
13316 }
13317
13318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013319 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013320
13321 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13322 if(NULL == pWDA )
13323 {
13324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013325 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013327 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 return VOS_STATUS_E_FAILURE;
13329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 /* Process all the WDA messages.. */
13331 switch( pMsg->type )
13332 {
13333 case WNI_CFG_DNLD_REQ:
13334 {
13335 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013336 /* call WDA complete event if config download success */
13337 if( VOS_IS_STATUS_SUCCESS(status) )
13338 {
13339 vos_WDAComplete_cback(pVosContext);
13340 }
13341 else
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13344 "WDA Config Download failure" );
13345 }
13346 break ;
13347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 /*
13349 * Init SCAN request from PE, convert it into DAL format
13350 * and send it to DAL
13351 */
13352 case WDA_INIT_SCAN_REQ:
13353 {
13354 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13355 break ;
13356 }
13357 /* start SCAN request from PE */
13358 case WDA_START_SCAN_REQ:
13359 {
13360 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13361 break ;
13362 }
13363 /* end SCAN request from PE */
13364 case WDA_END_SCAN_REQ:
13365 {
13366 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13367 break ;
13368 }
13369 /* end SCAN request from PE */
13370 case WDA_FINISH_SCAN_REQ:
13371 {
13372 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13373 break ;
13374 }
13375 /* join request from PE */
13376 case WDA_CHNL_SWITCH_REQ:
13377 {
13378 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13379 {
13380 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13381 }
13382 else
13383 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013384 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13385 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13386 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13387 {
13388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13389 "call ProcessChannelSwitchReq_V1" );
13390 WDA_ProcessChannelSwitchReq_V1(pWDA,
13391 (tSwitchChannelParams*)pMsg->bodyptr) ;
13392 }
13393 else
13394 {
13395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13396 "call ProcessChannelSwitchReq" );
13397 WDA_ProcessChannelSwitchReq(pWDA,
13398 (tSwitchChannelParams*)pMsg->bodyptr) ;
13399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 }
13401 break ;
13402 }
13403 /* ADD BSS request from PE */
13404 case WDA_ADD_BSS_REQ:
13405 {
13406 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13407 break ;
13408 }
13409 case WDA_ADD_STA_REQ:
13410 {
13411 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13412 break ;
13413 }
13414 case WDA_DELETE_BSS_REQ:
13415 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013416 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13417 break ;
13418 }
13419 case WDA_DELETE_STA_REQ:
13420 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013421 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13422 break ;
13423 }
13424 case WDA_CONFIG_PARAM_UPDATE_REQ:
13425 {
13426 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13427 break ;
13428 }
13429 case WDA_SET_BSSKEY_REQ:
13430 {
13431 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13432 break ;
13433 }
13434 case WDA_SET_STAKEY_REQ:
13435 {
13436 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13437 break ;
13438 }
13439 case WDA_SET_STA_BCASTKEY_REQ:
13440 {
13441 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13442 break ;
13443 }
13444 case WDA_REMOVE_BSSKEY_REQ:
13445 {
13446 WDA_ProcessRemoveBssKeyReq(pWDA,
13447 (tRemoveBssKeyParams *)pMsg->bodyptr);
13448 break ;
13449 }
13450 case WDA_REMOVE_STAKEY_REQ:
13451 {
13452 WDA_ProcessRemoveStaKeyReq(pWDA,
13453 (tRemoveStaKeyParams *)pMsg->bodyptr);
13454 break ;
13455 }
13456 case WDA_REMOVE_STA_BCASTKEY_REQ:
13457 {
13458 /* TODO: currently UMAC is not sending this request, Add the code for
13459 handling this request when UMAC supports */
13460 break;
13461 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013462#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 case WDA_TSM_STATS_REQ:
13464 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013465 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 break;
13467 }
13468#endif
13469 case WDA_UPDATE_EDCA_PROFILE_IND:
13470 {
13471 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13472 break;
13473 }
13474 case WDA_ADD_TS_REQ:
13475 {
13476 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13477 break;
13478 }
13479 case WDA_DEL_TS_REQ:
13480 {
13481 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13482 break;
13483 }
13484 case WDA_ADDBA_REQ:
13485 {
13486 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13487 break;
13488 }
13489 case WDA_DELBA_IND:
13490 {
13491 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13492 break;
13493 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013494 case WDA_UPDATE_CHAN_LIST_REQ:
13495 {
13496 WDA_ProcessUpdateChannelList(pWDA,
13497 (tSirUpdateChanList *)pMsg->bodyptr);
13498 break;
13499 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 case WDA_SET_LINK_STATE:
13501 {
13502 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13503 break;
13504 }
13505 case WDA_GET_STATISTICS_REQ:
13506 {
13507 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13508 break;
13509 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013510#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013511 case WDA_GET_ROAM_RSSI_REQ:
13512 {
13513 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13514 break;
13515 }
13516#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 case WDA_PWR_SAVE_CFG:
13518 {
13519 if(pWDA->wdaState == WDA_READY_STATE)
13520 {
13521 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13522 }
13523 else
13524 {
13525 if(NULL != pMsg->bodyptr)
13526 {
13527 vos_mem_free(pMsg->bodyptr);
13528 }
13529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13530 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13531 }
13532 break;
13533 }
13534 case WDA_ENTER_IMPS_REQ:
13535 {
13536 if(pWDA->wdaState == WDA_READY_STATE)
13537 {
13538 WDA_ProcessEnterImpsReq(pWDA);
13539 }
13540 else
13541 {
13542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13543 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13544 }
13545 break;
13546 }
13547 case WDA_EXIT_IMPS_REQ:
13548 {
13549 if(pWDA->wdaState == WDA_READY_STATE)
13550 {
13551 WDA_ProcessExitImpsReq(pWDA);
13552 }
13553 else
13554 {
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13556 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13557 }
13558 break;
13559 }
13560 case WDA_ENTER_BMPS_REQ:
13561 {
13562 if(pWDA->wdaState == WDA_READY_STATE)
13563 {
13564 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13565 }
13566 else
13567 {
13568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13569 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13570 }
13571 break;
13572 }
13573 case WDA_EXIT_BMPS_REQ:
13574 {
13575 if(pWDA->wdaState == WDA_READY_STATE)
13576 {
13577 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13578 }
13579 else
13580 {
13581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13582 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13583 }
13584 break;
13585 }
13586 case WDA_ENTER_UAPSD_REQ:
13587 {
13588 if(pWDA->wdaState == WDA_READY_STATE)
13589 {
13590 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13591 }
13592 else
13593 {
13594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13595 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13596 }
13597 break;
13598 }
13599 case WDA_EXIT_UAPSD_REQ:
13600 {
13601 if(pWDA->wdaState == WDA_READY_STATE)
13602 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013603 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013604 }
13605 else
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13608 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13609 }
13610 break;
13611 }
13612 case WDA_UPDATE_UAPSD_IND:
13613 {
13614 if(pWDA->wdaState == WDA_READY_STATE)
13615 {
13616 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13617 }
13618 else
13619 {
13620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13621 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13622 }
13623 break;
13624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 case WDA_REGISTER_PE_CALLBACK :
13626 {
13627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13628 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13629 /*TODO: store the PE callback */
13630 /* Do Nothing? MSG Body should be freed at here */
13631 if(NULL != pMsg->bodyptr)
13632 {
13633 vos_mem_free(pMsg->bodyptr);
13634 }
13635 break;
13636 }
13637 case WDA_SYS_READY_IND :
13638 {
13639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13640 "Handling msg type WDA_SYS_READY_IND " );
13641 pWDA->wdaState = WDA_READY_STATE;
13642 if(NULL != pMsg->bodyptr)
13643 {
13644 vos_mem_free(pMsg->bodyptr);
13645 }
13646 break;
13647 }
13648 case WDA_BEACON_FILTER_IND :
13649 {
13650 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13651 break;
13652 }
13653 case WDA_BTC_SET_CFG:
13654 {
13655 /*TODO: handle this while dealing with BTC */
13656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13657 "Handling msg type WDA_BTC_SET_CFG " );
13658 /* Do Nothing? MSG Body should be freed at here */
13659 if(NULL != pMsg->bodyptr)
13660 {
13661 vos_mem_free(pMsg->bodyptr);
13662 }
13663 break;
13664 }
13665 case WDA_SIGNAL_BT_EVENT:
13666 {
13667 /*TODO: handle this while dealing with BTC */
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13669 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13670 /* Do Nothing? MSG Body should be freed at here */
13671 if(NULL != pMsg->bodyptr)
13672 {
13673 vos_mem_free(pMsg->bodyptr);
13674 }
13675 break;
13676 }
13677 case WDA_CFG_RXP_FILTER_REQ:
13678 {
13679 WDA_ProcessConfigureRxpFilterReq(pWDA,
13680 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13681 break;
13682 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013683 case WDA_MGMT_LOGGING_INIT_REQ:
13684 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053013685 WDA_ProcessFWLoggingInitReq(pWDA,
13686 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013687 break;
13688 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013689 case WDA_GET_FRAME_LOG_REQ:
13690 {
13691 WDA_ProcessGetFrameLogReq(pWDA,
13692 (tAniGetFrameLogReq *)pMsg->bodyptr);
13693 break;
13694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013695 case WDA_SET_HOST_OFFLOAD:
13696 {
13697 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13698 break;
13699 }
13700 case WDA_SET_KEEP_ALIVE:
13701 {
13702 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13703 break;
13704 }
13705#ifdef WLAN_NS_OFFLOAD
13706 case WDA_SET_NS_OFFLOAD:
13707 {
13708 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13709 break;
13710 }
13711#endif //WLAN_NS_OFFLOAD
13712 case WDA_ADD_STA_SELF_REQ:
13713 {
13714 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13715 break;
13716 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013717 case WDA_DEL_STA_SELF_REQ:
13718 {
13719 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13720 break;
13721 }
13722 case WDA_WOWL_ADD_BCAST_PTRN:
13723 {
13724 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13725 break;
13726 }
13727 case WDA_WOWL_DEL_BCAST_PTRN:
13728 {
13729 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13730 break;
13731 }
13732 case WDA_WOWL_ENTER_REQ:
13733 {
13734 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13735 break;
13736 }
13737 case WDA_WOWL_EXIT_REQ:
13738 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013739 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 break;
13741 }
13742 case WDA_TL_FLUSH_AC_REQ:
13743 {
13744 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13745 break;
13746 }
13747 case WDA_SIGNAL_BTAMP_EVENT:
13748 {
13749 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13750 break;
13751 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013752 case WDA_FW_STATS_GET_REQ:
13753 {
13754 WDA_ProcessFWStatsGetReq(pWDA,
13755 (tSirFWStatsGetReq *)pMsg->bodyptr);
13756 break;
13757 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013758#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13759 case WDA_LINK_LAYER_STATS_SET_REQ:
13760 {
13761 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13762 break;
13763 }
13764 case WDA_LINK_LAYER_STATS_GET_REQ:
13765 {
13766 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13767 break;
13768 }
13769 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13770 {
13771 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13772 break;
13773 }
13774#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013775#ifdef WLAN_FEATURE_EXTSCAN
13776 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13777 {
13778 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13779 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13780 break;
13781 }
13782 case WDA_EXTSCAN_START_REQ:
13783 {
13784 WDA_ProcessEXTScanStartReq(pWDA,
13785 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13786 break;
13787 }
13788 case WDA_EXTSCAN_STOP_REQ:
13789 {
13790 WDA_ProcessEXTScanStopReq(pWDA,
13791 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13792 break;
13793 }
13794 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13795 {
13796 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13797 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13798 break;
13799 }
13800 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13801 {
13802 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13803 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13804 break;
13805 }
13806 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13807 {
13808 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13809 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13810 break;
13811 }
13812 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13813 {
13814 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13815 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13816 break;
13817 }
13818 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13819 {
13820 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13821 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13822 break;
13823 }
13824#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013825#ifdef WDA_UT
13826 case WDA_WDI_EVENT_MSG:
13827 {
13828 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13829 break ;
13830 }
13831#endif
13832 case WDA_UPDATE_BEACON_IND:
13833 {
13834 WDA_ProcessUpdateBeaconParams(pWDA,
13835 (tUpdateBeaconParams *)pMsg->bodyptr);
13836 break;
13837 }
13838 case WDA_SEND_BEACON_REQ:
13839 {
13840 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13841 break;
13842 }
13843 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13844 {
13845 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13846 (tSendProbeRespParams *)pMsg->bodyptr);
13847 break;
13848 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013849#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 case WDA_SET_MAX_TX_POWER_REQ:
13851 {
13852 WDA_ProcessSetMaxTxPowerReq(pWDA,
13853 (tMaxTxPowerParams *)pMsg->bodyptr);
13854 break;
13855 }
13856#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013857 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13858 {
13859 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13860 pMsg->bodyptr);
13861 break;
13862 }
schang86c22c42013-03-13 18:41:24 -070013863 case WDA_SET_TX_POWER_REQ:
13864 {
13865 WDA_ProcessSetTxPowerReq(pWDA,
13866 (tSirSetTxPowerReq *)pMsg->bodyptr);
13867 break;
13868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013869 case WDA_SET_P2P_GO_NOA_REQ:
13870 {
13871 WDA_ProcessSetP2PGONOAReq(pWDA,
13872 (tP2pPsParams *)pMsg->bodyptr);
13873 break;
13874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 /* timer related messages */
13876 case WDA_TIMER_BA_ACTIVITY_REQ:
13877 {
13878 WDA_BaCheckActivity(pWDA) ;
13879 break ;
13880 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013881
13882 /* timer related messages */
13883 case WDA_TIMER_TRAFFIC_STATS_IND:
13884 {
13885 WDA_TimerTrafficStatsInd(pWDA);
13886 break;
13887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013888#ifdef WLAN_FEATURE_VOWIFI_11R
13889 case WDA_AGGR_QOS_REQ:
13890 {
13891 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13892 break;
13893 }
13894#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013895 case WDA_FTM_CMD_REQ:
13896 {
13897 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13898 break ;
13899 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013900#ifdef FEATURE_OEM_DATA_SUPPORT
13901 case WDA_START_OEM_DATA_REQ:
13902 {
13903 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13904 break;
13905 }
13906#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013907 /* Tx Complete Time out Indication */
13908 case WDA_TX_COMPLETE_TIMEOUT_IND:
13909 {
13910 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13911 break;
13912 }
13913 case WDA_WLAN_SUSPEND_IND:
13914 {
13915 WDA_ProcessWlanSuspendInd(pWDA,
13916 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13917 break;
13918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013919 case WDA_WLAN_RESUME_REQ:
13920 {
13921 WDA_ProcessWlanResumeReq(pWDA,
13922 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13923 break;
13924 }
13925
13926 case WDA_UPDATE_CF_IND:
13927 {
13928 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13929 pMsg->bodyptr = NULL;
13930 break;
13931 }
13932#ifdef FEATURE_WLAN_SCAN_PNO
13933 case WDA_SET_PNO_REQ:
13934 {
13935 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13936 break;
13937 }
13938 case WDA_UPDATE_SCAN_PARAMS_REQ:
13939 {
13940 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13941 break;
13942 }
13943 case WDA_SET_RSSI_FILTER_REQ:
13944 {
13945 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13946 break;
13947 }
13948#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013949#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013950 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013951 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013952 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013953 break;
13954 }
13955#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013956 case WDA_SET_TX_PER_TRACKING_REQ:
13957 {
13958 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13959 break;
13960 }
13961
13962#ifdef WLAN_FEATURE_PACKET_FILTERING
13963 case WDA_8023_MULTICAST_LIST_REQ:
13964 {
13965 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13966 break;
13967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013968 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13969 {
13970 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13971 break;
13972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013973 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13974 {
13975 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13976 break;
13977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013978 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13979 {
13980 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13981 break;
13982 }
13983#endif // WLAN_FEATURE_PACKET_FILTERING
13984
13985
13986 case WDA_TRANSMISSION_CONTROL_IND:
13987 {
13988 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13989 break;
13990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013991 case WDA_SET_POWER_PARAMS_REQ:
13992 {
13993 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13994 break;
13995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013996#ifdef WLAN_FEATURE_GTK_OFFLOAD
13997 case WDA_GTK_OFFLOAD_REQ:
13998 {
13999 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
14000 break;
14001 }
14002
14003 case WDA_GTK_OFFLOAD_GETINFO_REQ:
14004 {
14005 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14006 break;
14007 }
14008#endif //WLAN_FEATURE_GTK_OFFLOAD
14009
14010 case WDA_SET_TM_LEVEL_REQ:
14011 {
14012 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14013 break;
14014 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014015
Mohit Khanna4a70d262012-09-11 16:30:12 -070014016 case WDA_UPDATE_OP_MODE:
14017 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014018 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14019 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14020 {
14021 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14022 }
14023 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014024 {
14025 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14026 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14027 else
14028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014029 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014030 }
14031 else
14032 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014033 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014034 break;
14035 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014036#ifdef WLAN_FEATURE_11W
14037 case WDA_EXCLUDE_UNENCRYPTED_IND:
14038 {
14039 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14040 break;
14041 }
14042#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014043#ifdef FEATURE_WLAN_TDLS
14044 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14045 {
14046 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14047 break;
14048 }
14049#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014050 case WDA_DHCP_START_IND:
14051 {
14052 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14053 break;
14054 }
14055 case WDA_DHCP_STOP_IND:
14056 {
14057 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14058 break;
14059 }
Leo Chang9056f462013-08-01 19:21:11 -070014060#ifdef FEATURE_WLAN_LPHB
14061 case WDA_LPHB_CONF_REQ:
14062 {
14063 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14064 break;
14065 }
14066#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014067 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14068 {
14069 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14070 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14071 break;
14072 }
14073 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14074 {
14075 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14076 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14077 break;
14078 }
14079
Rajeev79dbe4c2013-10-05 11:03:42 +053014080#ifdef FEATURE_WLAN_BATCH_SCAN
14081 case WDA_SET_BATCH_SCAN_REQ:
14082 {
14083 WDA_ProcessSetBatchScanReq(pWDA,
14084 (tSirSetBatchScanReq *)pMsg->bodyptr);
14085 break;
14086 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014087 case WDA_RATE_UPDATE_IND:
14088 {
14089 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14090 break;
14091 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014092 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14093 {
14094 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14095 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14096 break;
14097 }
14098 case WDA_STOP_BATCH_SCAN_IND:
14099 {
14100 WDA_ProcessStopBatchScanInd(pWDA,
14101 (tSirStopBatchScanInd *)pMsg->bodyptr);
14102 break;
14103 }
c_hpothu92367912014-05-01 15:18:17 +053014104 case WDA_GET_BCN_MISS_RATE_REQ:
14105 WDA_ProcessGetBcnMissRateReq(pWDA,
14106 (tSirBcnMissRateReq *)pMsg->bodyptr);
14107 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014108#endif
14109
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014110 case WDA_HT40_OBSS_SCAN_IND:
14111 {
14112 WDA_ProcessHT40OBSSScanInd(pWDA,
14113 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14114 break;
14115 }
14116 case WDA_HT40_OBSS_STOP_SCAN_IND:
14117 {
14118 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14119 (tANI_U8*)pMsg->bodyptr);
14120 break;
14121 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014122// tdlsoffchan
14123#ifdef FEATURE_WLAN_TDLS
14124 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14125 {
14126 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14127 break;
14128 }
14129#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014130 case WDA_SPOOF_MAC_ADDR_REQ:
14131 {
14132 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14133 break;
14134 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014135 case WDA_ENCRYPT_MSG_REQ:
14136 {
14137 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14138 break;
14139 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014140
14141 case WDA_NAN_REQUEST:
14142 {
14143 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14144 break;
14145 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014146 case WDA_SET_RTS_CTS_HTVHT:
14147 {
14148 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14149 break;
14150 }
Katya Nigamf0511f62015-05-05 16:40:57 +053014151
14152 case WDA_MON_START_REQ:
14153 {
14154 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
14155 break;
14156 }
14157 case WDA_MON_STOP_REQ:
14158 {
14159 WDA_ProcessMonStopReq(pWDA,NULL);
14160 break;
14161 }
14162
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 default:
14164 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014166 "No Handling for msg type %x in WDA "
14167 ,pMsg->type);
14168 /* Do Nothing? MSG Body should be freed at here */
14169 if(NULL != pMsg->bodyptr)
14170 {
14171 vos_mem_free(pMsg->bodyptr);
14172 }
14173 //WDA_VOS_ASSERT(0) ;
14174 }
14175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 return status ;
14177}
14178
Jeff Johnson295189b2012-06-20 16:38:30 -070014179/*
14180 * FUNCTION: WDA_LowLevelIndCallback
14181 * IND API callback from WDI, send Ind to PE
14182 */
14183void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14184 void* pUserData )
14185{
14186 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14187#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14188 tSirRSSINotification rssiNotification;
14189#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014190 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014191 {
14192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014193 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014194 VOS_ASSERT(0);
14195 return ;
14196 }
14197
14198 switch(wdiLowLevelInd->wdiIndicationType)
14199 {
14200 case WDI_RSSI_NOTIFICATION_IND:
14201 {
14202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14203 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014204#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14205 rssiNotification.bReserved =
14206 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14207 rssiNotification.bRssiThres1NegCross =
14208 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14209 rssiNotification.bRssiThres1PosCross =
14210 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14211 rssiNotification.bRssiThres2NegCross =
14212 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14213 rssiNotification.bRssiThres2PosCross =
14214 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14215 rssiNotification.bRssiThres3NegCross =
14216 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14217 rssiNotification.bRssiThres3PosCross =
14218 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014219 rssiNotification.avgRssi = (v_S7_t)
14220 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 WLANTL_BMPSRSSIRegionChangedNotification(
14222 pWDA->pVosContext,
14223 &rssiNotification);
14224#endif
14225 break ;
14226 }
14227 case WDI_MISSED_BEACON_IND:
14228 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014229 tpSirSmeMissedBeaconInd pMissBeacInd =
14230 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14232 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014233 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014234 if(NULL == pMissBeacInd)
14235 {
14236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14237 "%s: VOS MEM Alloc Failure", __func__);
14238 break;
14239 }
14240 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14241 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14242 pMissBeacInd->bssIdx =
14243 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14244 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014245 break ;
14246 }
14247 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14248 {
14249 /* TODO: Decode Ind and send Ind to PE */
14250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14251 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14252 break ;
14253 }
14254
14255 case WDI_MIC_FAILURE_IND:
14256 {
14257 tpSirSmeMicFailureInd pMicInd =
14258 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14259
14260 if(NULL == pMicInd)
14261 {
14262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014264 break;
14265 }
14266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14267 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014268 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14269 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14270 vos_mem_copy(pMicInd->bssId,
14271 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14272 sizeof(tSirMacAddr));
14273 vos_mem_copy(pMicInd->info.srcMacAddr,
14274 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14275 sizeof(tSirMacAddr));
14276 vos_mem_copy(pMicInd->info.taMacAddr,
14277 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14278 sizeof(tSirMacAddr));
14279 vos_mem_copy(pMicInd->info.dstMacAddr,
14280 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14281 sizeof(tSirMacAddr));
14282 vos_mem_copy(pMicInd->info.rxMacAddr,
14283 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14284 sizeof(tSirMacAddr));
14285 pMicInd->info.multicast =
14286 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14287 pMicInd->info.keyId=
14288 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14289 pMicInd->info.IV1=
14290 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14291 vos_mem_copy(pMicInd->info.TSC,
14292 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014293 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14294 (void *)pMicInd , 0) ;
14295 break ;
14296 }
14297 case WDI_FATAL_ERROR_IND:
14298 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014299 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014300 /* TODO: Decode Ind and send Ind to PE */
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14302 "Received WDI_FATAL_ERROR_IND from WDI ");
14303 break ;
14304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014305 case WDI_DEL_STA_IND:
14306 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014307 tpDeleteStaContext pDelSTACtx =
14308 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14309
14310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14311 "Received WDI_DEL_STA_IND from WDI ");
14312 if(NULL == pDelSTACtx)
14313 {
14314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014316 break;
14317 }
14318 vos_mem_copy(pDelSTACtx->addr2,
14319 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14320 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014321 vos_mem_copy(pDelSTACtx->bssId,
14322 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14323 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014324 pDelSTACtx->assocId =
14325 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14326 pDelSTACtx->reasonCode =
14327 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14328 pDelSTACtx->staId =
14329 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014330 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14331 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 break ;
14333 }
14334 case WDI_COEX_IND:
14335 {
14336 tANI_U32 index;
14337 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014338 tSirSmeCoexInd *pSmeCoexInd;
14339
14340 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14341 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14342 {
14343 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14344 {
14345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14346 FL("Coex state: 0x%x coex feature: 0x%x"),
14347 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14348 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14349
14350 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14351 {
14352 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14353 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14354 }
14355 }
14356 break;
14357 }
14358
14359 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014360 if(NULL == pSmeCoexInd)
14361 {
14362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014363 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014364 break;
14365 }
14366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14367 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014368 /* Message Header */
14369 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14370 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014371 /* Info from WDI Indication */
14372 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14373 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14374 {
14375 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014377 /* VOS message wrapper */
14378 vosMsg.type = eWNI_SME_COEX_IND;
14379 vosMsg.bodyptr = (void *)pSmeCoexInd;
14380 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014381 /* Send message to SME */
14382 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14383 {
14384 /* free the mem and return */
14385 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14386 }
14387 else
14388 {
14389 /* DEBUG */
14390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14391 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14392 pSmeCoexInd->coexIndType,
14393 pSmeCoexInd->coexIndData[0],
14394 pSmeCoexInd->coexIndData[1],
14395 pSmeCoexInd->coexIndData[2],
14396 pSmeCoexInd->coexIndData[3]);
14397 }
14398 break;
14399 }
14400 case WDI_TX_COMPLETE_IND:
14401 {
14402 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14403 /* Calling TxCompleteAck Indication from wda context*/
14404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14405 "Complete Indication received from HAL");
14406 if( pWDA->pAckTxCbFunc )
14407 {
14408 if( VOS_STATUS_SUCCESS !=
14409 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14410 {
14411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14412 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014413 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053014414 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014415 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14416 else
14417 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 pWDA->pAckTxCbFunc = NULL;
14419 }
14420 else
14421 {
14422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14423 "Tx Complete Indication is received after timeout ");
14424 }
14425 break;
14426 }
Viral Modid86bde22012-12-10 13:09:21 -080014427 case WDI_P2P_NOA_START_IND :
14428 {
14429 tSirP2PNoaStart *pP2pNoaStart =
14430 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14431
14432 if (NULL == pP2pNoaStart)
14433 {
14434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14435 "Memory allocation failure, "
14436 "WDI_P2P_NOA_START_IND not forwarded");
14437 break;
14438 }
14439 pP2pNoaStart->status =
14440 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14441 pP2pNoaStart->bssIdx =
14442 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14443 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14444 (void *)pP2pNoaStart , 0) ;
14445 break;
14446 }
14447
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014448#ifdef FEATURE_WLAN_TDLS
14449 case WDI_TDLS_IND :
14450 {
14451 tSirTdlsInd *pTdlsInd =
14452 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14453
14454 if (NULL == pTdlsInd)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "Memory allocation failure, "
14458 "WDI_TDLS_IND not forwarded");
14459 break;
14460 }
14461 pTdlsInd->status =
14462 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14463 pTdlsInd->assocId =
14464 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14465 pTdlsInd->staIdx =
14466 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14467 pTdlsInd->reasonCode =
14468 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14469 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14470 (void *)pTdlsInd , 0) ;
14471 break;
14472 }
14473#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014474 case WDI_P2P_NOA_ATTR_IND :
14475 {
14476 tSirP2PNoaAttr *pP2pNoaAttr =
14477 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14479 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014480 if (NULL == pP2pNoaAttr)
14481 {
14482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14483 "Memory allocation failure, "
14484 "WDI_P2P_NOA_ATTR_IND not forwarded");
14485 break;
14486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014487 pP2pNoaAttr->index =
14488 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14489 pP2pNoaAttr->oppPsFlag =
14490 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14491 pP2pNoaAttr->ctWin =
14492 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14493
14494 pP2pNoaAttr->uNoa1IntervalCnt =
14495 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14496 pP2pNoaAttr->uNoa1Duration =
14497 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14498 pP2pNoaAttr->uNoa1Interval =
14499 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14500 pP2pNoaAttr->uNoa1StartTime =
14501 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014502 pP2pNoaAttr->uNoa2IntervalCnt =
14503 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14504 pP2pNoaAttr->uNoa2Duration =
14505 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14506 pP2pNoaAttr->uNoa2Interval =
14507 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14508 pP2pNoaAttr->uNoa2StartTime =
14509 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014510 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14511 (void *)pP2pNoaAttr , 0) ;
14512 break;
14513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014514#ifdef FEATURE_WLAN_SCAN_PNO
14515 case WDI_PREF_NETWORK_FOUND_IND:
14516 {
14517 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014518 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14519 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14520 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14521 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14522
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14524 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014525 if (NULL == pPrefNetworkFoundInd)
14526 {
14527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14528 "Memory allocation failure, "
14529 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014530 if (NULL !=
14531 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14532 {
14533 wpalMemoryFree(
14534 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14535 );
14536 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 break;
14539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 /* Message Header */
14541 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014542 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014543
14544 /* Info from WDI Indication */
14545 pPrefNetworkFoundInd->ssId.length =
14546 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14549 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14550 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014551 if (NULL !=
14552 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14553 {
14554 pPrefNetworkFoundInd->frameLength =
14555 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14556 vos_mem_copy( pPrefNetworkFoundInd->data,
14557 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14558 pPrefNetworkFoundInd->frameLength);
14559 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14560 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14561 }
14562 else
14563 {
14564 pPrefNetworkFoundInd->frameLength = 0;
14565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 /* VOS message wrapper */
14568 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14569 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14570 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014571 /* Send message to SME */
14572 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14573 {
14574 /* free the mem and return */
14575 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014577 break;
14578 }
14579#endif // FEATURE_WLAN_SCAN_PNO
14580
14581#ifdef WLAN_WAKEUP_EVENTS
14582 case WDI_WAKE_REASON_IND:
14583 {
14584 vos_msg_t vosMsg;
14585 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14586 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14587 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14588
14589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014590 "[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 -070014591 wdiLowLevelInd->wdiIndicationType,
14592 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14593 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14594 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14595
14596 if (NULL == pWakeReasonInd)
14597 {
14598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14599 "Memory allocation failure, "
14600 "WDI_WAKE_REASON_IND not forwarded");
14601 break;
14602 }
14603
14604 vos_mem_zero(pWakeReasonInd, allocSize);
14605
14606 /* Message Header */
14607 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14608 pWakeReasonInd->mesgLen = allocSize;
14609
14610 /* Info from WDI Indication */
14611 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14612 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14613 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14614 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14615 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14616 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14617 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14618 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14619
14620 /* VOS message wrapper */
14621 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14622 vosMsg.bodyptr = (void *) pWakeReasonInd;
14623 vosMsg.bodyval = 0;
14624
14625 /* Send message to SME */
14626 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14627 {
14628 /* free the mem and return */
14629 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14630 }
14631
14632 break;
14633 }
14634#endif // WLAN_WAKEUP_EVENTS
14635
14636 case WDI_TX_PER_HIT_IND:
14637 {
14638 vos_msg_t vosMsg;
14639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14640 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14641 /* VOS message wrapper */
14642 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14643 vosMsg.bodyptr = NULL;
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 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14649 }
14650 break;
14651 }
14652
Leo Chang9056f462013-08-01 19:21:11 -070014653#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014654 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014655 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014656 vos_msg_t vosMsg;
14657 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014658
Leo Changd9df8aa2013-09-26 13:32:26 -070014659 lphbInd =
14660 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14661 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014662 {
14663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14664 "%s: LPHB IND buffer alloc Fail", __func__);
14665 return ;
14666 }
14667
Leo Changd9df8aa2013-09-26 13:32:26 -070014668 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014669 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014670 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014671 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014672 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014673 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14674
14675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014676 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014677 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14678
Leo Changd9df8aa2013-09-26 13:32:26 -070014679 vosMsg.type = eWNI_SME_LPHB_IND;
14680 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014681 vosMsg.bodyval = 0;
14682 /* Send message to SME */
14683 if (VOS_STATUS_SUCCESS !=
14684 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14685 {
14686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14687 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014688 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014689 }
14690 break;
14691 }
14692#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014693 case WDI_PERIODIC_TX_PTRN_FW_IND:
14694 {
14695 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14696 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14697 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14698 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14699 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14700 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14701 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14702
14703 break;
14704 }
Leo Chang9056f462013-08-01 19:21:11 -070014705
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014706 case WDI_IBSS_PEER_INACTIVITY_IND:
14707 {
14708 tSirIbssPeerInactivityInd *pIbssInd =
14709 (tSirIbssPeerInactivityInd *)
14710 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14711
14712 if (NULL == pIbssInd)
14713 {
14714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14715 "Memory allocation failure, "
14716 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14717 break;
14718 }
14719
14720 pIbssInd->bssIdx =
14721 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14722 pIbssInd->staIdx =
14723 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14724 vos_mem_copy(pIbssInd->peerAddr,
14725 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14726 sizeof(tSirMacAddr));
14727 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14728 break;
14729 }
14730
Rajeev79dbe4c2013-10-05 11:03:42 +053014731#ifdef FEATURE_WLAN_BATCH_SCAN
14732 case WDI_BATCH_SCAN_RESULT_IND:
14733 {
14734 void *pBatchScanResult;
14735 void *pCallbackContext;
14736 tpAniSirGlobal pMac;
14737
14738 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14739 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14740
14741 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014742 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014743 {
14744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14745 "%s:pWDA is NULL", __func__);
14746 VOS_ASSERT(0);
14747 return;
14748 }
14749
14750 pBatchScanResult =
14751 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14752 if (NULL == pBatchScanResult)
14753 {
14754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14755 "%s:Batch scan result from FW is null can't invoke HDD callback",
14756 __func__);
14757 VOS_ASSERT(0);
14758 return;
14759 }
14760
14761 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14762 if (NULL == pMac)
14763 {
14764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14765 "%s:pMac is NULL", __func__);
14766 VOS_ASSERT(0);
14767 return;
14768 }
14769
14770 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14771 /*call hdd callback with set batch scan response data*/
14772 if(pMac->pmc.batchScanResultCallback)
14773 {
14774 pMac->pmc.batchScanResultCallback(pCallbackContext,
14775 pBatchScanResult);
14776 }
14777 else
14778 {
14779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14780 "%s:HDD callback is null", __func__);
14781 VOS_ASSERT(0);
14782 }
14783 break;
14784 }
14785#endif
14786
Leo Chang0b0e45a2013-12-15 15:18:55 -080014787#ifdef FEATURE_WLAN_CH_AVOID
14788 case WDI_CH_AVOID_IND:
14789 {
14790 vos_msg_t vosMsg;
14791 tSirChAvoidIndType *chAvoidInd;
14792
14793 chAvoidInd =
14794 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14795 if (NULL == chAvoidInd)
14796 {
14797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14798 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14799 return ;
14800 }
14801
14802 chAvoidInd->avoidRangeCount =
14803 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14804 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14805 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14806 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14807
14808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14809 "%s : WDA CH avoid notification", __func__);
14810
14811 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14812 vosMsg.bodyptr = chAvoidInd;
14813 vosMsg.bodyval = 0;
14814 /* Send message to SME */
14815 if (VOS_STATUS_SUCCESS !=
14816 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14817 {
14818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14819 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14820 vos_mem_free(chAvoidInd);
14821 }
14822 break;
14823 }
14824#endif /* FEATURE_WLAN_CH_AVOID */
14825
Sunil Duttbd736ed2014-05-26 21:19:41 +053014826#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14827 case WDI_LL_STATS_RESULTS_IND:
14828 {
14829 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014830 tpAniSirGlobal pMac;
14831
14832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14833 "Received WDI_LL_STATS_RESULTS_IND from FW");
14834
14835 /*sanity check*/
14836 if (NULL == pWDA)
14837 {
14838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14839 "%s:pWDA is NULL", __func__);
14840 VOS_ASSERT(0);
14841 return;
14842 }
14843
14844 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014845 (void *)wdiLowLevelInd->
14846 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014847 if (NULL == pLinkLayerStatsInd)
14848 {
14849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14850 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14851 __func__);
14852 VOS_ASSERT(0);
14853 return;
14854 }
14855
14856 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14857 if (NULL == pMac)
14858 {
14859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14860 "%s:pMac is NULL", __func__);
14861 VOS_ASSERT(0);
14862 return;
14863 }
14864
Dino Mycled3d50022014-07-07 12:58:25 +053014865 /* call hdd callback with Link Layer Statistics.
14866 * vdev_id/ifacId in link_stats_results will be
14867 * used to retrieve the correct HDD context
14868 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014869 if (pMac->sme.pLinkLayerStatsIndCallback)
14870 {
Dino Mycled3d50022014-07-07 12:58:25 +053014871 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014872 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014873 pLinkLayerStatsInd,
14874 wdiLowLevelInd->
14875 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014876 }
14877 else
14878 {
14879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14880 "%s:HDD callback is null", __func__);
14881 }
14882 break;
14883 }
14884#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14885
Dino Mycle41bdc942014-06-10 11:30:24 +053014886#ifdef WLAN_FEATURE_EXTSCAN
14887 case WDI_EXTSCAN_PROGRESS_IND:
14888 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14889 case WDI_EXTSCAN_SCAN_RESULT_IND:
14890 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14891 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14892 {
14893 void *pEXTScanData;
14894 void *pCallbackContext;
14895 tpAniSirGlobal pMac;
14896 tANI_U16 indType;
14897
14898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14899 "Received WDI_EXTSCAN Indications from FW");
14900 /*sanity check*/
14901 if (NULL == pWDA)
14902 {
14903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14904 "%s:pWDA is NULL", __func__);
14905 VOS_ASSERT(0);
14906 return;
14907 }
14908 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14909 {
14910 indType = WDA_EXTSCAN_PROGRESS_IND;
14911
14912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14913 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14914 }
14915 if (wdiLowLevelInd->wdiIndicationType ==
14916 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14917 {
14918 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14919
14920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14921 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14922 }
14923 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14924 {
14925 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14926
14927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14928 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14929 }
14930 if (wdiLowLevelInd->wdiIndicationType ==
14931 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14932 {
14933 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14934
14935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14936 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14937 }
14938 if (wdiLowLevelInd->wdiIndicationType ==
14939 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14940 {
14941 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14942
14943 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14944 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14945 }
14946
14947 pEXTScanData =
14948 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14949 if (NULL == pEXTScanData)
14950 {
14951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14952 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14953 __func__);
14954 VOS_ASSERT(0);
14955 return;
14956 }
14957
14958 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14959 if (NULL == pMac)
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "%s:pMac is NULL", __func__);
14963 VOS_ASSERT(0);
14964 return;
14965 }
14966
14967 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14968
14969 if(pMac->sme.pEXTScanIndCb)
14970 {
14971 pMac->sme.pEXTScanIndCb(pCallbackContext,
14972 indType,
14973 pEXTScanData);
14974 }
14975 else
14976 {
14977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14978 "%s:HDD callback is null", __func__);
14979 }
14980 break;
14981 }
14982#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014983 case WDI_DEL_BA_IND:
14984 {
14985 tpBADeleteParams pDelBAInd =
14986 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14987
14988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14989 "Received WDI_DEL_BA_IND from WDI ");
14990 if(NULL == pDelBAInd)
14991 {
14992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14993 "%s: VOS MEM Alloc Failure", __func__);
14994 break;
14995 }
14996 vos_mem_copy(pDelBAInd->peerMacAddr,
14997 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14998 sizeof(tSirMacAddr));
14999 vos_mem_copy(pDelBAInd->bssId,
15000 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
15001 sizeof(tSirMacAddr));
15002 pDelBAInd->staIdx =
15003 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
15004 pDelBAInd->baTID =
15005 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
15006 pDelBAInd->baDirection =
15007 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
15008 pDelBAInd->reasonCode =
15009 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
15010
15011 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
15012 (void *)pDelBAInd , 0) ;
15013 break;
15014 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015015 case WDI_NAN_EVENT_IND:
15016 {
15017 vos_msg_t vosMsg;
15018 tpSirNanEvent pSirNanEvent = NULL;
15019
15020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15021 "Received WDI_NAN_EVENT");
15022
15023 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15024 - sizeof( pSirNanEvent->event_data)
15025 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15026
15027 if (NULL == pSirNanEvent)
15028 {
15029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15030 "%s: VOS MEM Alloc Failure", __func__);
15031 VOS_ASSERT(0) ;
15032 break;
15033 }
15034
15035 pSirNanEvent->event_data_len =
15036 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15037
15038 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15039 {
15040 vos_mem_copy( pSirNanEvent->event_data,
15041 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15042 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15043 }
15044
15045 /* VOS message wrapper */
15046 vosMsg.type = eWNI_SME_NAN_EVENT;
15047 vosMsg.bodyptr = pSirNanEvent;
15048 vosMsg.bodyval = 0;
15049
15050 /* Send message to SME */
15051 if (VOS_STATUS_SUCCESS
15052 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15053 {
15054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15055 "post eWNI_SME_NAN_EVENT to SME Failed");
15056 vos_mem_free(pSirNanEvent);
15057 }
15058 break;
15059 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015060
Jeff Johnson295189b2012-06-20 16:38:30 -070015061 default:
15062 {
15063 /* TODO error */
15064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15065 "Received UNKNOWN Indication from WDI ");
15066 }
15067 }
15068 return ;
15069}
15070
Jeff Johnson295189b2012-06-20 16:38:30 -070015071/*
15072 * BA related processing in WDA.
15073 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015074void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15075 void* pUserData)
15076{
15077 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15078 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 if(NULL == pWdaParams)
15080 {
15081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015082 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015083 VOS_ASSERT(0) ;
15084 return ;
15085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015087 vos_mem_free(pWdaParams->wdaMsgParam) ;
15088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15089 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015091 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015092 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15093 {
15094 tANI_U8 i = 0 ;
15095 tBaActivityInd *baActivityInd = NULL ;
15096 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15097 tANI_U8 allocSize = sizeof(tBaActivityInd)
15098 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15099 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15100 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 if(NULL == baActivityInd)
15103 {
15104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 VOS_ASSERT(0) ;
15107 return;
15108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015109 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15110 sizeof(tSirMacAddr)) ;
15111 baActivityInd->baCandidateCnt = baCandidateCount ;
15112
15113 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15114 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15115
15116 for(i = 0 ; i < baCandidateCount ; i++)
15117 {
15118 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015119 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15120 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015121 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15122 {
15123 baCandidate->baInfo[tid].fBaEnable =
15124 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15125 baCandidate->baInfo[tid].startingSeqNum =
15126 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15127 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015128 wdiBaCandidate++ ;
15129 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015131 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15132 }
15133 else
15134 {
15135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15136 "BA Trigger RSP with Failure received ");
15137 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015138 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015139}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015140
15141
15142/*
15143 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15144 * during MCC
15145 */
15146void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15147{
15148 wpt_uint32 enabled;
15149 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15150 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15151 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15152
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015153 if (NULL == pMac )
15154 {
15155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15156 "%s: Invoked with invalid MAC context ", __func__ );
15157 VOS_ASSERT(0);
15158 return;
15159 }
15160
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015161 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15162 != eSIR_SUCCESS)
15163 {
15164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15165 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15166 return;
15167 }
15168
15169 if(!enabled)
15170 {
15171 return;
15172 }
15173
15174 if(NULL == pWDA)
15175 {
15176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15177 "%s:WDA context is NULL", __func__);
15178 VOS_ASSERT(0);
15179 return;
15180 }
15181
15182 if(activate)
15183 {
15184 if( VOS_STATUS_SUCCESS !=
15185 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15186 {
15187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15188 "Traffic Stats Timer Start Failed ");
15189 return;
15190 }
15191 WDI_DS_ActivateTrafficStats();
15192 }
15193 else
15194 {
15195 WDI_DS_DeactivateTrafficStats();
15196 WDI_DS_ClearTrafficStats();
15197
15198 if( VOS_STATUS_SUCCESS !=
15199 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15200 {
15201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15202 "Traffic Stats Timer Stop Failed ");
15203 return;
15204 }
15205 }
15206}
15207
15208/*
15209 * Traffic Stats Timer handler
15210 */
15211void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15212{
15213 WDI_Status wdiStatus;
15214 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15215 WDI_TrafficStatsIndType trafficStatsIndParams;
15216 wpt_uint32 length, enabled;
15217 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15218
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015219 if (NULL == pMac )
15220 {
15221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15222 "%s: Invoked with invalid MAC context ", __func__ );
15223 VOS_ASSERT(0);
15224 return;
15225 }
15226
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15228 != eSIR_SUCCESS)
15229 {
15230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15231 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15232 return;
15233 }
15234
15235 if(!enabled)
15236 {
15237 WDI_DS_DeactivateTrafficStats();
15238 return;
15239 }
15240
15241 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15242
15243 if(pWdiTrafficStats != NULL)
15244 {
15245 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15246 trafficStatsIndParams.length = length;
15247 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015248 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015249 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15250 trafficStatsIndParams.pUserData = pWDA;
15251
15252 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15253
15254 if(WDI_STATUS_PENDING == wdiStatus)
15255 {
15256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15257 "Pending received for %s:%d ",__func__,__LINE__ );
15258 }
15259 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15260 {
15261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15262 "Failure in %s:%d ",__func__,__LINE__ );
15263 }
15264
15265 WDI_DS_ClearTrafficStats();
15266 }
15267 else
15268 {
15269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15270 "pWdiTrafficStats is Null");
15271 }
15272
15273 if( VOS_STATUS_SUCCESS !=
15274 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15275 {
15276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15277 "Traffic Stats Timer Start Failed ");
15278 return;
15279 }
15280}
15281
Jeff Johnson295189b2012-06-20 16:38:30 -070015282/*
15283 * BA Activity check timer handler
15284 */
15285void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15286{
15287 tANI_U8 curSta = 0 ;
15288 tANI_U8 tid = 0 ;
15289 tANI_U8 size = 0 ;
15290 tANI_U8 baCandidateCount = 0 ;
15291 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015292 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015293 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015294 tpAniSirGlobal pMac;
15295
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015296 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015297 {
15298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015299 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 VOS_ASSERT(0);
15301 return ;
15302 }
15303 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15304 {
15305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15306 "Inconsistent STA entries in WDA");
15307 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015308 }
15309 if(NULL == pWDA->pVosContext)
15310 {
15311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15312 "%s: pVosContext is NULL",__func__);
15313 VOS_ASSERT(0);
15314 return ;
15315 }
15316 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015317 if(NULL == pMac)
15318 {
15319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15320 "%s: pMac is NULL",__func__);
15321 VOS_ASSERT(0);
15322 return ;
15323 }
15324
Abhishek Singh0644e482014-10-06 18:38:23 +053015325 if (wlan_cfgGetInt(pMac,
15326 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15327 eSIR_SUCCESS)
15328 {
15329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15330 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15331 val = 0;
15332 }
15333
Jeff Johnson295189b2012-06-20 16:38:30 -070015334 /* walk through all STA entries and find out TX packet count */
15335 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15336 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015337 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015338#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015339 // We can only do BA on "hard" STAs.
15340 if (!(IS_HWSTA_IDX(curSta)))
15341 {
15342 continue;
15343 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015344#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015345 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15346 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015347 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 tANI_U32 txPktCount = 0 ;
15349 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015350 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015351 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15352 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015353 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15354 curSta, tid, &txPktCount)))
15355 {
15356#if 0
15357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15358 "************* %d:%d, %d ",curSta, txPktCount,
15359 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15360#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015361 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15362 (currentOperChan <= SIR_11B_CHANNEL_END)))
15363 {
15364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15365 "%s: BTC disabled aggregation - dont start "
15366 "TX ADDBA req",__func__);
15367 }
15368 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015369 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015370 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15371 pWDA->wdaGlobalSystemRole) && txPktCount )
15372 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15373 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015374 {
15375 /* get prepare for sending message to HAL */
15376 //baCandidate[baCandidateCount].staIdx = curSta ;
15377 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15378 newBaCandidate = WDA_ENABLE_BA ;
15379 }
15380 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15381 }
15382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015383 /* fill the entry for all the sta with given TID's */
15384 if(WDA_ENABLE_BA == newBaCandidate)
15385 {
15386 /* move to next BA candidate */
15387 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15388 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15389 baCandidateCount++ ;
15390 newBaCandidate = WDA_DISABLE_BA ;
15391 }
15392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015393 /* prepare and send message to hal */
15394 if( 0 < baCandidateCount)
15395 {
15396 WDI_Status status = WDI_STATUS_SUCCESS ;
15397 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15398 tWDA_ReqParams *pWdaParams =
15399 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015400 if(NULL == pWdaParams)
15401 {
15402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015404 VOS_ASSERT(0) ;
15405 return;
15406 }
15407 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15408 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15409 if(NULL == wdiTriggerBaReq)
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015413 VOS_ASSERT(0) ;
15414 vos_mem_free(pWdaParams);
15415 return;
15416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015417 do
15418 {
15419 WDI_TriggerBAReqinfoType *triggerBaInfo =
15420 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15421 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15422 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15423 * for each request */
15424 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15425 triggerBaInfo->ucBASessionID = 0;
15426 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15427 } while(0) ;
15428 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015430 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015431 pWdaParams->pWdaContext = pWDA;
15432 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15433 pWdaParams->wdaMsgParam = NULL;
15434 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15435 WDA_TriggerBaReqCallback, pWdaParams) ;
15436 if(IS_WDI_STATUS_FAILURE(status))
15437 {
15438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15439 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15440 vos_mem_free(pWdaParams->wdaMsgParam) ;
15441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15442 vos_mem_free(pWdaParams) ;
15443 }
15444 }
15445 else
15446 {
15447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15448 "There is no TID for initiating BA");
15449 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015450 if( VOS_STATUS_SUCCESS !=
15451 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15452 {
15453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15454 "BA Activity Timer Stop Failed ");
15455 return ;
15456 }
15457 if( VOS_STATUS_SUCCESS !=
15458 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15459 {
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15461 "BA Activity Timer Start Failed ");
15462 return;
15463 }
15464 return ;
15465}
Jeff Johnson295189b2012-06-20 16:38:30 -070015466/*
15467 * WDA common routine to create timer used by WDA.
15468 */
15469static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15470{
Jeff Johnson295189b2012-06-20 16:38:30 -070015471 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15472 tANI_U32 val = 0 ;
15473 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15474
15475 if(NULL == pMac)
15476 {
15477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015478 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015479 VOS_ASSERT(0);
15480 return VOS_STATUS_E_FAILURE;
15481 }
15482 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15483 != eSIR_SUCCESS)
15484 {
15485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15486 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15487 return VOS_STATUS_E_FAILURE;
15488 }
15489 val = SYS_MS_TO_TICKS(val) ;
15490
15491 /* BA activity check timer */
15492 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15493 "BA Activity Check timer", WDA_TimerHandler,
15494 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15495 if(status != TX_SUCCESS)
15496 {
15497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15498 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015499 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015501 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 /* Tx Complete Timeout timer */
15503 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15504 "Tx Complete Check timer", WDA_TimerHandler,
15505 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015506 if(status != TX_SUCCESS)
15507 {
15508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15509 "Unable to create Tx Complete Timeout timer");
15510 /* Destroy timer of BA activity check timer */
15511 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15512 if(status != TX_SUCCESS)
15513 {
15514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15515 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015516 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015517 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015518 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015519 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015520
15521 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15522
15523 /* Traffic Stats timer */
15524 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15525 "Traffic Stats timer", WDA_TimerHandler,
15526 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15527 if(status != TX_SUCCESS)
15528 {
15529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15530 "Unable to create traffic stats timer");
15531 /* Destroy timer of BA activity check timer */
15532 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15533 if(status != TX_SUCCESS)
15534 {
15535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15536 "Unable to Destroy BA activity timer");
15537 }
15538 /* Destroy timer of tx complete timer */
15539 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15540 if(status != TX_SUCCESS)
15541 {
15542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15543 "Unable to Tx complete timer");
15544 }
15545 return VOS_STATUS_E_FAILURE ;
15546 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015547 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015548}
Jeff Johnson295189b2012-06-20 16:38:30 -070015549/*
15550 * WDA common routine to destroy timer used by WDA.
15551 */
15552static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15553{
15554 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015555 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15556 if(status != TX_SUCCESS)
15557 {
15558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15559 "Unable to Destroy Tx Complete Timeout timer");
15560 return eSIR_FAILURE ;
15561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15563 if(status != TX_SUCCESS)
15564 {
15565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15566 "Unable to Destroy BA activity timer");
15567 return eSIR_FAILURE ;
15568 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015569 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15570 if(status != TX_SUCCESS)
15571 {
15572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15573 "Unable to Destroy traffic stats timer");
15574 return eSIR_FAILURE ;
15575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015576 return eSIR_SUCCESS ;
15577}
Jeff Johnson295189b2012-06-20 16:38:30 -070015578/*
15579 * WDA timer handler.
15580 */
15581void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15582{
15583 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15584 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015585 /*
15586 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15587 */
15588 wdaMsg.type = timerInfo ;
15589 wdaMsg.bodyptr = NULL;
15590 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 /* post the message.. */
15592 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15593 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15594 {
15595 vosStatus = VOS_STATUS_E_BADMSG;
15596 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015597}
Jeff Johnson295189b2012-06-20 16:38:30 -070015598/*
15599 * WDA Tx Complete timeout Indication.
15600 */
15601void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15602{
15603 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015604 tpSirTxBdStatus txBdStatus = {0};
15605
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 if( pWDA->pAckTxCbFunc )
15607 {
15608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015609 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015610 /*Indicate failure*/
15611 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015612 pWDA->pAckTxCbFunc = NULL;
15613 }
15614 else
15615 {
15616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015617 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015619}
Jeff Johnson295189b2012-06-20 16:38:30 -070015620/*
15621 * WDA Set REG Domain to VOS NV
15622 */
Abhishek Singha306a442013-11-07 18:39:01 +053015623eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15624 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015625{
Abhishek Singha306a442013-11-07 18:39:01 +053015626 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015627 {
15628 return eHAL_STATUS_INVALID_PARAMETER;
15629 }
15630 return eHAL_STATUS_SUCCESS;
15631}
Jeff Johnson295189b2012-06-20 16:38:30 -070015632
Jeff Johnson295189b2012-06-20 16:38:30 -070015633#ifdef FEATURE_WLAN_SCAN_PNO
15634/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015635 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 *
15637 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015638void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015639{
15640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015641 tSirPNOScanReq *pPNOScanReqParams;
15642
Jeff Johnson295189b2012-06-20 16:38:30 -070015643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015644 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015645 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 {
15647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015648 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015649 VOS_ASSERT(0) ;
15650 return ;
15651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015652
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015653 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15654 if(pPNOScanReqParams->statusCallback)
15655 {
15656 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15657 (status == WDI_STATUS_SUCCESS) ?
15658 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15659 }
15660
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015661 if (pPNOScanReqParams->enable == 1)
15662 {
15663 if (pPNOScanReqParams->aNetworks)
15664 vos_mem_free(pPNOScanReqParams->aNetworks);
15665 if (pPNOScanReqParams->p24GProbeTemplate)
15666 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15667 if (pPNOScanReqParams->p5GProbeTemplate)
15668 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15669 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15671 vos_mem_free(pWdaParams->wdaMsgParam);
15672 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015673
15674 return ;
15675}
Jeff Johnson295189b2012-06-20 16:38:30 -070015676/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015677 * FUNCTION: WDA_PNOScanReqCallback
15678 * Free memory.
15679 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15680 */
15681void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015682{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015684 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015685
15686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15687 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15688
15689 if(NULL == pWdaParams)
15690 {
15691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15692 "%s: pWdaParams received NULL", __func__);
15693 VOS_ASSERT(0);
15694 return;
15695 }
15696
15697 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15698 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015699 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15700 if(pPNOScanReqParams->statusCallback)
15701 {
15702 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15703 VOS_STATUS_E_FAILURE);
15704 }
15705
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015706 if (pPNOScanReqParams->enable == 1)
15707 {
15708 if (pPNOScanReqParams->aNetworks)
15709 vos_mem_free(pPNOScanReqParams->aNetworks);
15710 if (pPNOScanReqParams->p24GProbeTemplate)
15711 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15712 if (pPNOScanReqParams->p5GProbeTemplate)
15713 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15714 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15716 vos_mem_free(pWdaParams->wdaMsgParam);
15717 vos_mem_free(pWdaParams);
15718 }
15719
15720 return;
15721}
15722/*
15723 * FUNCTION: WDA_UpdateScanParamsRespCallback
15724 *
15725 */
15726void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15727{
15728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015730 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015731 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 {
15733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015735 VOS_ASSERT(0) ;
15736 return ;
15737 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015738
15739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15740 vos_mem_free(pWdaParams->wdaMsgParam);
15741 vos_mem_free(pWdaParams);
15742
Jeff Johnson295189b2012-06-20 16:38:30 -070015743 return ;
15744}
Jeff Johnson295189b2012-06-20 16:38:30 -070015745/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015746 * FUNCTION: WDA_UpdateScanParamsReqCallback
15747 * Free memory.
15748 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15749 */
15750void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15751{
15752 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15753
15754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15755 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15756
15757 if(NULL == pWdaParams)
15758 {
15759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15760 "%s: pWdaParams received NULL", __func__);
15761 VOS_ASSERT(0);
15762 return;
15763 }
15764
15765 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15766 {
15767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15768 vos_mem_free(pWdaParams->wdaMsgParam);
15769 vos_mem_free(pWdaParams);
15770 }
15771
15772 return;
15773}
15774/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015775 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15776 * Request to WDI to set Preferred Network List.Offload
15777 */
15778VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15779 tSirPNOScanReq *pPNOScanReqParams)
15780{
Jeff Johnson43971f52012-07-17 12:26:56 -070015781 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15783 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15784 tWDA_ReqParams *pWdaParams ;
15785 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 if(NULL == pwdiPNOScanReqInfo)
15789 {
15790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 VOS_ASSERT(0);
15793 return VOS_STATUS_E_NOMEM;
15794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15796 if(NULL == pWdaParams)
15797 {
15798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015800 VOS_ASSERT(0);
15801 vos_mem_free(pwdiPNOScanReqInfo);
15802 return VOS_STATUS_E_NOMEM;
15803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015804 //
15805 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15806 //
15807 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15808 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15810 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15811 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015812 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15813 {
15814 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15815 &pPNOScanReqParams->aNetworks[i],
15816 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015818 /*Scan timer intervals*/
15819 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15820 &pPNOScanReqParams->scanTimers,
15821 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 /*Probe template for 2.4GHz band*/
15823 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15824 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15825 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015826 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15827 pPNOScanReqParams->p24GProbeTemplate,
15828 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 /*Probe template for 5GHz band*/
15830 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15831 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15832 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015833 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15834 pPNOScanReqParams->p5GProbeTemplate,
15835 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015836 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15837 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015838
Jeff Johnson295189b2012-06-20 16:38:30 -070015839 /* Store Params pass it to WDI */
15840 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15841 pWdaParams->pWdaContext = pWDA;
15842 /* Store param pointer as passed in by caller */
15843 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015844 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015845 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015846 if(IS_WDI_STATUS_FAILURE(status))
15847 {
15848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15849 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015850 if(pPNOScanReqParams->statusCallback)
15851 {
15852 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15853 VOS_STATUS_E_FAILURE);
15854 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015855 if (pPNOScanReqParams->enable == 1)
15856 {
15857 if (pPNOScanReqParams->aNetworks)
15858 vos_mem_free(pPNOScanReqParams->aNetworks);
15859 if (pPNOScanReqParams->p24GProbeTemplate)
15860 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15861 if (pPNOScanReqParams->p5GProbeTemplate)
15862 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15865 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015866
Jeff Johnson295189b2012-06-20 16:38:30 -070015867 pWdaParams->wdaWdiApiMsgParam = NULL;
15868 pWdaParams->wdaMsgParam = NULL;
15869 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015870 return CONVERT_WDI2VOS_STATUS(status) ;
15871}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015872
15873#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15874
15875void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15876{
15877 /*Convert the CSR Auth types to WDI Auth types */
15878 switch (csrAuthType)
15879 {
15880 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15881 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15882 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015883#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015884 case eCSR_AUTH_TYPE_CCKM_WPA:
15885 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15886 break;
15887#endif
15888 case eCSR_AUTH_TYPE_WPA:
15889 *AuthType = eWDA_AUTH_TYPE_WPA;
15890 break;
15891 case eCSR_AUTH_TYPE_WPA_PSK:
15892 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15893 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015894#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015895 case eCSR_AUTH_TYPE_CCKM_RSN:
15896 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15897 break;
15898#endif
15899 case eCSR_AUTH_TYPE_RSN:
15900 *AuthType = eWDA_AUTH_TYPE_RSN;
15901 break;
15902 case eCSR_AUTH_TYPE_RSN_PSK:
15903 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15904 break;
15905#if defined WLAN_FEATURE_VOWIFI_11R
15906 case eCSR_AUTH_TYPE_FT_RSN:
15907 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15908 break;
15909 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15910 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15911 break;
15912#endif
15913#ifdef FEATURE_WLAN_WAPI
15914 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15915 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15916 break;
15917 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15918 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15919 break;
15920#endif /* FEATURE_WLAN_WAPI */
15921 case eCSR_AUTH_TYPE_SHARED_KEY:
15922 case eCSR_AUTH_TYPE_AUTOSWITCH:
15923 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15924 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053015925#ifdef WLAN_FEATURE_11W
15926 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
15927 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015928 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053015929 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
15930 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
15931 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015932#endif
15933 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015935 "%s: Unknown Auth Type", __func__);
15936 break;
15937 }
15938}
15939void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15940{
15941 switch (csrEncrType)
15942 {
15943 case eCSR_ENCRYPT_TYPE_NONE:
15944 *EncrType = WDI_ED_NONE;
15945 break;
15946 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15947 case eCSR_ENCRYPT_TYPE_WEP40:
15948 *EncrType = WDI_ED_WEP40;
15949 break;
15950 case eCSR_ENCRYPT_TYPE_WEP104:
15951 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15952 *EncrType = WDI_ED_WEP104;
15953 break;
15954 case eCSR_ENCRYPT_TYPE_TKIP:
15955 *EncrType = WDI_ED_TKIP;
15956 break;
15957 case eCSR_ENCRYPT_TYPE_AES:
15958 *EncrType = WDI_ED_CCMP;
15959 break;
15960#ifdef WLAN_FEATURE_11W
15961 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15962 *EncrType = WDI_ED_AES_128_CMAC;
15963 break;
15964#endif
15965#ifdef FEATURE_WLAN_WAPI
15966 case eCSR_ENCRYPT_TYPE_WPI:
15967 *EncrType = WDI_ED_WPI;
15968 break;
15969#endif
15970 case eCSR_ENCRYPT_TYPE_ANY:
15971 *EncrType = WDI_ED_ANY;
15972 break;
15973
15974 default:
15975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15976 "%s: Unknown Encryption Type", __func__);
15977 break;
15978 }
15979}
15980
15981/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015982 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015983 * Request to WDI to set Roam Offload Scan
15984 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015985VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015986 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15987{
15988 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015989 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15990 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015991 tWDA_ReqParams *pWdaParams ;
15992 v_U8_t csrAuthType;
15993 WDI_RoamNetworkType *pwdiRoamNetworkType;
15994 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15996 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015997 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015998 {
15999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16000 "%s: VOS MEM Alloc Failure", __func__);
16001 VOS_ASSERT(0);
16002 return VOS_STATUS_E_NOMEM;
16003 }
16004 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16005 if (NULL == pWdaParams)
16006 {
16007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16008 "%s: VOS MEM Alloc Failure", __func__);
16009 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016010 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016011 return VOS_STATUS_E_NOMEM;
16012 }
16013
16014 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016015 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016016 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016017 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
16018 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016019 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
16020 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16021 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16022 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16023 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16024 sizeof(pwdiRoamNetworkType->currAPbssid));
16025 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16026 csrAuthType);
16027 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16028 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16029 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16030 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16031 pwdiRoamOffloadScanInfo->LookupThreshold =
16032 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016033 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16034 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016035 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16036 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016037 pwdiRoamOffloadScanInfo->MAWCEnabled =
16038 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016039 pwdiRoamOffloadScanInfo->Command =
16040 pRoamOffloadScanReqParams->Command ;
16041 pwdiRoamOffloadScanInfo->StartScanReason =
16042 pRoamOffloadScanReqParams->StartScanReason ;
16043 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16044 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16045 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16046 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16047 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16048 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16049 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16050 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16051 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16052 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016053 pwdiRoamOffloadScanInfo->IsESEEnabled =
16054 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016055 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16056 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16057 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16058 pwdiRoamNetworkType->ssId.ucLength =
16059 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16060 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16061 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16062 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16063 pwdiRoamNetworkType->ChannelCount =
16064 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16065 pwdiRoamOffloadScanInfo->ChannelCacheType =
16066 pRoamOffloadScanReqParams->ChannelCacheType;
16067 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16068 pRoamOffloadScanReqParams->ValidChannelList,
16069 pRoamOffloadScanReqParams->ValidChannelCount);
16070 pwdiRoamOffloadScanInfo->ValidChannelCount =
16071 pRoamOffloadScanReqParams->ValidChannelCount;
16072 pwdiRoamOffloadScanInfo->us24GProbeSize =
16073 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16074 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16075 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16076 pRoamOffloadScanReqParams->p24GProbeTemplate,
16077 pwdiRoamOffloadScanInfo->us24GProbeSize);
16078 pwdiRoamOffloadScanInfo->us5GProbeSize =
16079 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16080 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16081 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16082 pRoamOffloadScanReqParams->p5GProbeTemplate,
16083 pwdiRoamOffloadScanInfo->us5GProbeSize);
16084 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16085 pRoamOffloadScanReqParams->MDID.mdiePresent;
16086 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16087 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016088 pwdiRoamOffloadScanInfo->nProbes =
16089 pRoamOffloadScanReqParams->nProbes;
16090 pwdiRoamOffloadScanInfo->HomeAwayTime =
16091 pRoamOffloadScanReqParams->HomeAwayTime;
16092 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016093 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016094 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016095 pWdaParams->pWdaContext = pWDA;
16096 /* Store param pointer as passed in by caller */
16097 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016098 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016099 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16100 if(IS_WDI_STATUS_FAILURE(status))
16101 {
16102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16103 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16105 vos_mem_free(pWdaParams->wdaMsgParam);
16106 pWdaParams->wdaWdiApiMsgParam = NULL;
16107 pWdaParams->wdaMsgParam = NULL;
16108 }
16109 return CONVERT_WDI2VOS_STATUS(status) ;
16110}
16111#endif
16112
Jeff Johnson295189b2012-06-20 16:38:30 -070016113/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016114 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016115 *
16116 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016117void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016118{
16119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16120
16121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016122 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016123
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016124 if(NULL == pWdaParams)
16125 {
16126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016127 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016128 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016129 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016130 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016131
Jeff Johnson295189b2012-06-20 16:38:30 -070016132 vos_mem_free(pWdaParams->wdaMsgParam) ;
16133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16134 vos_mem_free(pWdaParams) ;
16135
16136 return ;
16137}
16138/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016139 * FUNCTION: WDA_RssiFilterReqCallback
16140 * Free memory.
16141 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16142 */
16143void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16144{
16145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16146
16147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16148 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16149
16150 if(NULL == pWdaParams)
16151 {
16152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16153 "%s: pWdaParams received NULL", __func__);
16154 VOS_ASSERT(0);
16155 return;
16156 }
16157
16158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16159 {
16160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16161 vos_mem_free(pWdaParams->wdaMsgParam);
16162 vos_mem_free(pWdaParams);
16163 }
16164
16165 return;
16166}
16167/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016168 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 * Request to WDI to set Preferred Network List.Offload
16170 */
16171VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16172 tSirSetRSSIFilterReq* pRssiFilterParams)
16173{
Jeff Johnson43971f52012-07-17 12:26:56 -070016174 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16176 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016179 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016180 if(NULL == pwdiSetRssiFilterReqInfo)
16181 {
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016184 VOS_ASSERT(0);
16185 return VOS_STATUS_E_NOMEM;
16186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16188 if(NULL == pWdaParams)
16189 {
16190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016192 VOS_ASSERT(0);
16193 vos_mem_free(pwdiSetRssiFilterReqInfo);
16194 return VOS_STATUS_E_NOMEM;
16195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016196 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016197 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16198 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016199
Jeff Johnson295189b2012-06-20 16:38:30 -070016200 /* Store Params pass it to WDI */
16201 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16202 pWdaParams->pWdaContext = pWDA;
16203 /* Store param pointer as passed in by caller */
16204 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016205 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016206 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016208 if(IS_WDI_STATUS_FAILURE(status))
16209 {
16210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16211 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16213 vos_mem_free(pWdaParams->wdaMsgParam);
16214 pWdaParams->wdaWdiApiMsgParam = NULL;
16215 pWdaParams->wdaMsgParam = NULL;
16216 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016217 return CONVERT_WDI2VOS_STATUS(status) ;
16218}
16219
Jeff Johnson295189b2012-06-20 16:38:30 -070016220/*
16221 * FUNCTION: WDA_ProcessUpdateScanParams
16222 * Request to WDI to update Scan Parameters
16223 */
16224VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16225 tSirUpdateScanParams *pUpdateScanParams)
16226{
Jeff Johnson43971f52012-07-17 12:26:56 -070016227 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016228 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16229 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16230 sizeof(WDI_UpdateScanParamsInfoType)) ;
16231 tWDA_ReqParams *pWdaParams ;
16232 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016235 if(NULL == wdiUpdateScanParamsInfoType)
16236 {
16237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016239 VOS_ASSERT(0);
16240 return VOS_STATUS_E_NOMEM;
16241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16243 if ( NULL == pWdaParams )
16244 {
16245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016247 VOS_ASSERT(0);
16248 vos_mem_free(wdiUpdateScanParamsInfoType);
16249 return VOS_STATUS_E_NOMEM;
16250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016251 //
16252 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16253 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16255 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16256 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16257 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016258 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016259 pUpdateScanParams->b11dEnabled,
16260 pUpdateScanParams->b11dResolved,
16261 pUpdateScanParams->ucChannelCount,
16262 pUpdateScanParams->usPassiveMinChTime,
16263 pUpdateScanParams->usPassiveMaxChTime,
16264 pUpdateScanParams->usActiveMinChTime,
16265 pUpdateScanParams->usActiveMaxChTime,
16266 sizeof(tSirUpdateScanParams),
16267 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16268
Jeff Johnson295189b2012-06-20 16:38:30 -070016269 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16270 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016271 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16272 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016273 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16274 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016275 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16276 pUpdateScanParams->usActiveMaxChTime;
16277 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16278 pUpdateScanParams->usActiveMinChTime;
16279 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16280 pUpdateScanParams->usPassiveMaxChTime;
16281 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16282 pUpdateScanParams->usPassiveMinChTime;
16283
Jeff Johnson295189b2012-06-20 16:38:30 -070016284 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016285 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16286 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016287
Jeff Johnson295189b2012-06-20 16:38:30 -070016288 for ( i = 0; i <
16289 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16290 i++)
16291 {
16292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16293 "Update Scan Parameters channel: %d",
16294 pUpdateScanParams->aChannels[i]);
16295
16296 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16297 pUpdateScanParams->aChannels[i];
16298 }
16299
Yue Ma7f44bbe2013-04-12 11:47:39 -070016300 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16301 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016302
Jeff Johnson295189b2012-06-20 16:38:30 -070016303 /* Store Params pass it to WDI */
16304 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16305 pWdaParams->pWdaContext = pWDA;
16306 /* Store param pointer as passed in by caller */
16307 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016308
Jeff Johnson295189b2012-06-20 16:38:30 -070016309
16310
16311 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016312 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016313 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 if(IS_WDI_STATUS_FAILURE(status))
16315 {
16316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16317 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16319 vos_mem_free(pWdaParams->wdaMsgParam);
16320 vos_mem_free(pWdaParams);
16321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 return CONVERT_WDI2VOS_STATUS(status) ;
16323}
16324#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016325
16326#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16327/*
16328 * FUNCTION: WDA_RoamOffloadScanReqCallback
16329 *
16330 */
16331void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16332{
16333 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016334 vos_msg_t vosMsg;
16335 wpt_uint8 reason = 0;
16336
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016338 "<------ %s " ,__func__);
16339 if (NULL == pWdaParams)
16340 {
16341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16342 "%s: pWdaParams received NULL", __func__);
16343 VOS_ASSERT(0) ;
16344 return ;
16345 }
16346 if ( pWdaParams != NULL )
16347 {
16348 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16349 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016350 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16352 }
16353 if ( pWdaParams->wdaMsgParam != NULL)
16354 {
16355 vos_mem_free(pWdaParams->wdaMsgParam);
16356 }
16357
16358 vos_mem_free(pWdaParams) ;
16359 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016360 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16361 vosMsg.bodyptr = NULL;
16362 if (WDI_STATUS_SUCCESS != status)
16363 {
16364 reason = 0;
16365 }
16366 vosMsg.bodyval = reason;
16367 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16368 {
16369 /* free the mem and return */
16370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016371 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016372 }
16373
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016374 return ;
16375}
16376#endif
16377
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016378/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016379 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016380 *
16381 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016382void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016383{
16384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16385
16386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16387 "<------ %s " ,__func__);
16388
16389 if(NULL == pWdaParams)
16390 {
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16392 "%s: pWdaParams received NULL", __func__);
16393 VOS_ASSERT(0);
16394 return;
16395 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016396
16397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16398 vos_mem_free(pWdaParams->wdaMsgParam);
16399 vos_mem_free(pWdaParams);
16400
16401 return;
16402}
16403/*
16404 * FUNCTION: WDA_SetPowerParamsReqCallback
16405 * Free memory.
16406 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16407 */
16408void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16409{
16410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16411
16412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16413 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16414
16415 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016416 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16418 "%s: pWdaParams received NULL", __func__);
16419 VOS_ASSERT(0);
16420 return;
16421 }
16422
16423 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16424 {
16425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16426 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016427 vos_mem_free(pWdaParams);
16428 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016429
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016430 return;
16431}
16432
Jeff Johnson295189b2012-06-20 16:38:30 -070016433#ifdef WLAN_FEATURE_PACKET_FILTERING
16434/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016435 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016436 *
16437 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016438void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016439 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16440 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016441{
16442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016445 if(NULL == pWdaParams)
16446 {
16447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016449 VOS_ASSERT(0) ;
16450 return ;
16451 }
16452
16453 vos_mem_free(pWdaParams->wdaMsgParam) ;
16454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16455 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016456 //print a msg, nothing else to do
16457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016458 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016459 return ;
16460}
Jeff Johnson295189b2012-06-20 16:38:30 -070016461/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016462 * FUNCTION: WDA_8023MulticastListReqCallback
16463 * Free memory.
16464 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16465 */
16466void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16467{
16468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16469
16470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16471 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16472
16473 if(NULL == pWdaParams)
16474 {
16475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16476 "%s: pWdaParams received NULL", __func__);
16477 VOS_ASSERT(0);
16478 return;
16479 }
16480
16481 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16482 {
16483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16484 vos_mem_free(pWdaParams->wdaMsgParam);
16485 vos_mem_free(pWdaParams);
16486 }
16487
16488 return;
16489}
16490/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016491 * FUNCTION: WDA_Process8023MulticastListReq
16492 * Request to WDI to add 8023 Multicast List
16493 */
16494VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16495 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16496{
Jeff Johnson43971f52012-07-17 12:26:56 -070016497 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016498 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16499 tWDA_ReqParams *pWdaParams ;
16500 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016502 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016503 pwdiFltPktSetMcListReqParamsType =
16504 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16505 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16506 ) ;
16507 if(NULL == pwdiFltPktSetMcListReqParamsType)
16508 {
16509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016511 return VOS_STATUS_E_NOMEM;
16512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16514 if(NULL == pWdaParams)
16515 {
16516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016518 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16519 return VOS_STATUS_E_NOMEM;
16520 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016521
Jeff Johnson295189b2012-06-20 16:38:30 -070016522 //
16523 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16524 //
16525 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016526 pRcvFltMcAddrList->ulMulticastAddrCnt;
16527
16528 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16529 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16530 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16531 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16532
Jeff Johnson295189b2012-06-20 16:38:30 -070016533 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16534 {
16535 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16536 &(pRcvFltMcAddrList->multicastAddr[i]),
16537 sizeof(tSirMacAddr));
16538 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016539 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16540 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016541
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 /* Store Params pass it to WDI */
16543 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16544 pWdaParams->pWdaContext = pWDA;
16545 /* Store param pointer as passed in by caller */
16546 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016547 status = WDI_8023MulticastListReq(
16548 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016549 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016550 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016551 if(IS_WDI_STATUS_FAILURE(status))
16552 {
16553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16554 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16556 vos_mem_free(pWdaParams->wdaMsgParam);
16557 vos_mem_free(pWdaParams);
16558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016559 return CONVERT_WDI2VOS_STATUS(status) ;
16560}
Jeff Johnson295189b2012-06-20 16:38:30 -070016561/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016562 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016563 *
16564 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016565void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016566 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16567 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016568{
16569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016572 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016573 if(NULL == pWdaParams)
16574 {
16575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016576 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016577 VOS_ASSERT(0) ;
16578 return ;
16579 }
16580
16581 vos_mem_free(pWdaParams->wdaMsgParam) ;
16582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16583 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016584 //print a msg, nothing else to do
16585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016586 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016587 return ;
16588}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016589
16590/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016591 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16592 * Free memory.
16593 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016594 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016595void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016596 void* pUserData)
16597{
16598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16599
16600 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16601 "<------ %s, wdiStatus: %d",
16602 __func__, wdiStatus);
16603
16604 if (NULL == pWdaParams)
16605 {
16606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16607 "%s: Invalid pWdaParams pointer", __func__);
16608 VOS_ASSERT(0);
16609 return;
16610 }
16611
16612 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16613 {
16614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16615 vos_mem_free(pWdaParams->wdaMsgParam);
16616 vos_mem_free(pWdaParams);
16617 }
16618
16619 return;
16620}
16621
Jeff Johnson295189b2012-06-20 16:38:30 -070016622/*
16623 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16624 * Request to WDI to set Receive Filters
16625 */
16626VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16627 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16628{
Jeff Johnson43971f52012-07-17 12:26:56 -070016629 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016630 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16631 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16632 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16633 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16634 tWDA_ReqParams *pWdaParams ;
16635 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016637 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016638 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16639 {
16640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016642 VOS_ASSERT(0);
16643 return VOS_STATUS_E_NOMEM;
16644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16646 if(NULL == pWdaParams)
16647 {
16648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016650 VOS_ASSERT(0);
16651 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16652 return VOS_STATUS_E_NOMEM;
16653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016654 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16655 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16656 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16657 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016658 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16659 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16660
16661 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16662 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016663
16664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16665 "FID %d FT %d NParams %d CT %d",
16666 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16667 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16668 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16669 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016670 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16671 {
16672 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16673 &pRcvPktFilterCfg->paramsData[i],
16674 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016676 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016677 pwdiSetRcvPktFilterReqParamsType->
16678 wdiPktFilterCfg.paramsData[i].protocolLayer,
16679 pwdiSetRcvPktFilterReqParamsType->
16680 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016682 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 pwdiSetRcvPktFilterReqParamsType->
16684 wdiPktFilterCfg.paramsData[i].dataOffset,
16685 pwdiSetRcvPktFilterReqParamsType->
16686 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016688 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016689 pwdiSetRcvPktFilterReqParamsType->
16690 wdiPktFilterCfg.paramsData[i].compareData[0],
16691 pwdiSetRcvPktFilterReqParamsType->
16692 wdiPktFilterCfg.paramsData[i].compareData[1],
16693 pwdiSetRcvPktFilterReqParamsType->
16694 wdiPktFilterCfg.paramsData[i].compareData[2],
16695 pwdiSetRcvPktFilterReqParamsType->
16696 wdiPktFilterCfg.paramsData[i].compareData[3],
16697 pwdiSetRcvPktFilterReqParamsType->
16698 wdiPktFilterCfg.paramsData[i].compareData[4],
16699 pwdiSetRcvPktFilterReqParamsType->
16700 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016702 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016703 pwdiSetRcvPktFilterReqParamsType->
16704 wdiPktFilterCfg.paramsData[i].dataMask[0],
16705 pwdiSetRcvPktFilterReqParamsType->
16706 wdiPktFilterCfg.paramsData[i].dataMask[1],
16707 pwdiSetRcvPktFilterReqParamsType->
16708 wdiPktFilterCfg.paramsData[i].dataMask[2],
16709 pwdiSetRcvPktFilterReqParamsType->
16710 wdiPktFilterCfg.paramsData[i].dataMask[3],
16711 pwdiSetRcvPktFilterReqParamsType->
16712 wdiPktFilterCfg.paramsData[i].dataMask[4],
16713 pwdiSetRcvPktFilterReqParamsType->
16714 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016715 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016716 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016717 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 /* Store Params pass it to WDI */
16719 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16720 pWdaParams->pWdaContext = pWDA;
16721 /* Store param pointer as passed in by caller */
16722 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016723 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016724 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016725 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016726 if(IS_WDI_STATUS_FAILURE(status))
16727 {
16728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16729 "Failure in SetFilter(),free all the memory,status %d ",status);
16730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16731 vos_mem_free(pWdaParams->wdaMsgParam);
16732 vos_mem_free(pWdaParams);
16733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016734 return CONVERT_WDI2VOS_STATUS(status) ;
16735}
Jeff Johnson295189b2012-06-20 16:38:30 -070016736/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016737 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016738 *
16739 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016740void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016741 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16742 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016743{
16744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16745 tWDA_CbContext *pWDA;
16746 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16747 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16748 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16749 tANI_U8 i;
16750 vos_msg_t vosMsg;
16751
16752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016754 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16755
Jeff Johnsone7245742012-09-05 17:12:55 -070016756 if(NULL == pRcvFltPktMatchCntRsp)
16757 {
16758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016759 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016760 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016761 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016762 return ;
16763 }
16764
Jeff Johnson295189b2012-06-20 16:38:30 -070016765 if(NULL == pWdaParams)
16766 {
16767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016768 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016769 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016770 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016771 return ;
16772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016773 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16774 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016775 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16776 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16777
16778 /* Message Header */
16779 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16780 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16781
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016782 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016783
16784 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16785 {
16786 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16787 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016789 /* VOS message wrapper */
16790 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16791 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16792 vosMsg.bodyval = 0;
16793 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16794 {
16795 /* free the mem and return */
16796 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16797 }
16798
16799 vos_mem_free(pWdaParams->wdaMsgParam) ;
16800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16801 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016802
16803 return;
16804}
16805/*
16806 * FUNCTION: WDA_FilterMatchCountReqCallback
16807 * Free memory and send RSP back to SME.
16808 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16809 */
16810void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16811{
16812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16813 vos_msg_t vosMsg;
16814
16815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16816 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16817
16818 if(NULL == pWdaParams)
16819 {
16820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16821 "%s: pWdaParams received NULL", __func__);
16822 VOS_ASSERT(0);
16823 return;
16824 }
16825
16826 /* VOS message wrapper */
16827 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16828 vosMsg.bodyptr = NULL;
16829 vosMsg.bodyval = 0;
16830
16831 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16832 {
16833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16834 vos_mem_free(pWdaParams->wdaMsgParam);
16835 vos_mem_free(pWdaParams);
16836 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16837 }
16838
16839 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016840}
Jeff Johnson295189b2012-06-20 16:38:30 -070016841/*
16842 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16843 * Request to WDI to get PC Filter Match Count
16844 */
16845VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16846{
Jeff Johnson43971f52012-07-17 12:26:56 -070016847 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016848 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16849 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16850 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016852 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016853 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16854 {
16855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016857 VOS_ASSERT(0);
16858 return VOS_STATUS_E_NOMEM;
16859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16861 if(NULL == pWdaParams)
16862 {
16863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016865 VOS_ASSERT(0);
16866 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16867 return VOS_STATUS_E_NOMEM;
16868 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016869
Yue Ma7f44bbe2013-04-12 11:47:39 -070016870 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16871 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016872
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016873 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16874 pRcvFltPktMatchRsp->bssId,
16875 sizeof(wpt_macAddr));
16876
Jeff Johnson295189b2012-06-20 16:38:30 -070016877 /* Store Params pass it to WDI */
16878 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16879 pWdaParams->pWdaContext = pWDA;
16880 /* Store param pointer as passed in by caller */
16881 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016882 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016883 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016884 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016885 if(IS_WDI_STATUS_FAILURE(status))
16886 {
16887 /* failure returned by WDI API */
16888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16889 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16891 vos_mem_free(pWdaParams) ;
16892 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16893 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16894 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016895 return CONVERT_WDI2VOS_STATUS(status) ;
16896}
Jeff Johnson295189b2012-06-20 16:38:30 -070016897/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016898 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016899 *
16900 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016901void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016902 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16903 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016904{
16905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016908/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16909 if(NULL == pWdaParams)
16910 {
16911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016913 VOS_ASSERT(0) ;
16914 return ;
16915 }
16916
16917 vos_mem_free(pWdaParams->wdaMsgParam) ;
16918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16919 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016920 //print a msg, nothing else to do
16921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016922 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016923 return ;
16924}
Jeff Johnson295189b2012-06-20 16:38:30 -070016925/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016926 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16927 * Free memory.
16928 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16929 */
16930void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16931{
16932 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16933
16934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16935 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16936
16937 if(NULL == pWdaParams)
16938 {
16939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16940 "%s: Invalid pWdaParams pointer", __func__);
16941 VOS_ASSERT(0);
16942 return;
16943 }
16944
16945 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16946 {
16947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16948 vos_mem_free(pWdaParams->wdaMsgParam);
16949 vos_mem_free(pWdaParams);
16950 }
16951
16952 return;
16953}
16954/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016955 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16956 * Request to WDI to clear Receive Filters
16957 */
16958VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16959 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16960{
Jeff Johnson43971f52012-07-17 12:26:56 -070016961 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016962 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16963 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16964 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016966 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016967 if(NULL == pwdiRcvFltPktClearReqParamsType)
16968 {
16969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016970 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016971 VOS_ASSERT(0);
16972 return VOS_STATUS_E_NOMEM;
16973 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16975 if(NULL == pWdaParams)
16976 {
16977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 VOS_ASSERT(0);
16980 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16981 return VOS_STATUS_E_NOMEM;
16982 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016983 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16984 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016985 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16986 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16987 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16988 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016989
Yue Ma7f44bbe2013-04-12 11:47:39 -070016990 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016991 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016992 /* Store Params pass it to WDI */
16993 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16994 pWdaParams->pWdaContext = pWDA;
16995 /* Store param pointer as passed in by caller */
16996 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016997 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016998 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017000 if(IS_WDI_STATUS_FAILURE(status))
17001 {
17002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17003 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
17004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080017005 vos_mem_free(pWdaParams->wdaMsgParam);
17006 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017008 return CONVERT_WDI2VOS_STATUS(status) ;
17009}
17010#endif // WLAN_FEATURE_PACKET_FILTERING
17011
Jeff Johnson295189b2012-06-20 16:38:30 -070017012/*
17013 * FUNCTION: WDA_ProcessSetPowerParamsReq
17014 * Request to WDI to set power params
17015 */
17016VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
17017 tSirSetPowerParamsReq *pPowerParams)
17018{
Jeff Johnson43971f52012-07-17 12:26:56 -070017019 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017020 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17021 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017022 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017025 if(NULL == pwdiSetPowerParamsReqInfo)
17026 {
17027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017029 VOS_ASSERT(0);
17030 return VOS_STATUS_E_NOMEM;
17031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017032 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17033 if(NULL == pWdaParams)
17034 {
17035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017037 VOS_ASSERT(0);
17038 vos_mem_free(pwdiSetPowerParamsReqInfo);
17039 return VOS_STATUS_E_NOMEM;
17040 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017041
Jeff Johnson295189b2012-06-20 16:38:30 -070017042
17043 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17044 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017045 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17046 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017047 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17048 pPowerParams->uListenInterval;
17049 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17050 pPowerParams->uBcastMcastFilter;
17051 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17052 pPowerParams->uEnableBET;
17053 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17054 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017055 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17056 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017057 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17058 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017059
Jeff Johnson295189b2012-06-20 16:38:30 -070017060 /* Store Params pass it to WDI */
17061 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17062 pWdaParams->pWdaContext = pWDA;
17063 /* Store param pointer as passed in by caller */
17064 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017065 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017066 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017067 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017068 if(IS_WDI_STATUS_FAILURE(status))
17069 {
17070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17071 "Failure in Set power params REQ WDI API, free all the memory " );
17072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17073 vos_mem_free(pWdaParams->wdaMsgParam);
17074 pWdaParams->wdaWdiApiMsgParam = NULL;
17075 pWdaParams->wdaMsgParam = NULL;
17076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017077 return CONVERT_WDI2VOS_STATUS(status) ;
17078}
17079
17080/*
17081 * FUNCTION: WDA_SetTmLevelRspCallback
17082 * Set TM Level response
17083 */
17084void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17085{
17086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17087
17088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017089 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017090
17091 if(NULL == pWdaParams)
17092 {
17093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017094 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017095 VOS_ASSERT(0) ;
17096 return ;
17097 }
17098
17099 /* Dose not need to send notification to upper layer
17100 * Just free allocated resources */
17101 if( pWdaParams != NULL )
17102 {
17103 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17104 {
17105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17106 }
17107 vos_mem_free(pWdaParams->wdaMsgParam) ;
17108 vos_mem_free(pWdaParams) ;
17109 }
17110}
17111
17112/*
17113 * FUNCTION: WDA_ProcessSetTmLevelReq
17114 * Set TM Level request
17115 */
17116VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17117 tAniSetTmLevelReq *setTmLevelReq)
17118{
17119 WDI_Status status = WDI_STATUS_SUCCESS ;
17120 tWDA_ReqParams *pWdaParams ;
17121 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17122 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17123 sizeof(WDI_SetTmLevelReqType)) ;
17124 if(NULL == wdiSetTmLevelReq)
17125 {
17126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017128 VOS_ASSERT(0);
17129 return VOS_STATUS_E_NOMEM;
17130 }
17131
17132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17133 if(NULL == pWdaParams)
17134 {
17135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017137 VOS_ASSERT(0);
17138 vos_mem_free(wdiSetTmLevelReq);
17139 return VOS_STATUS_E_NOMEM;
17140 }
17141
17142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017144
17145 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17146 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17147
17148 pWdaParams->pWdaContext = pWDA;
17149 pWdaParams->wdaMsgParam = setTmLevelReq;
17150 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17151
17152 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17153 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17154
17155 if(IS_WDI_STATUS_FAILURE(status))
17156 {
17157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017158 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017159 vos_mem_free(pWdaParams->wdaMsgParam) ;
17160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17161 vos_mem_free(pWdaParams) ;
17162 }
17163
17164 return CONVERT_WDI2VOS_STATUS(status) ;
17165}
17166
17167VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17168 tpTxControlParams pTxCtrlParam)
17169{
17170 VOS_STATUS wdaStatus;
17171
17172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017173 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017174 if( pTxCtrlParam == NULL )
17175 {
17176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017177 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017178 return VOS_STATUS_E_FAILURE;
17179 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017180 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17181 {
17182 wdaStatus = WDA_SuspendDataTx(pWDA);
17183 }
17184 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17185 {
17186 wdaStatus = WDA_ResumeDataTx(pWDA);
17187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017188 return wdaStatus;
17189}
17190
Mihir Shete5affadc2015-05-29 20:54:57 +053017191void WDA_FWLoggingDXEdoneInd(void)
17192{
17193 WDI_FWLoggingDXEdoneInd(NULL);
17194}
17195
Jeff Johnson295189b2012-06-20 16:38:30 -070017196 /* FUNCTION WDA_featureCapsExchange
17197 * WDA API to invoke capability exchange between host and FW.
17198 */
17199void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17200{
17201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017202 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017203 WDI_featureCapsExchangeReq( NULL, pVosContext);
17204}
17205
Yathish9f22e662012-12-10 14:21:35 -080017206/* FUNCTION WDA_disableCapablityFeature
17207 * WDA API to diable Active mode offload in host.
17208 */
17209void WDA_disableCapablityFeature(tANI_U8 feature_index)
17210{
17211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17212 "%s:enter", __func__ );
17213 WDI_disableCapablityFeature(feature_index);
17214}
17215
Jeff Johnson295189b2012-06-20 16:38:30 -070017216 /* FUNCTION WDA_getHostWlanFeatCaps
17217 * Wrapper for WDI API, that will return if the feature (enum value).passed
17218 * to this API is supported or not in Host
17219 * return value
17220 * 0 - implies feature is NOT Supported
17221 * any non zero value - implies feature is SUPPORTED
17222 */
17223tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17224{
17225 return WDI_getHostWlanFeatCaps(featEnumValue);
17226}
17227
17228 /* FUNCTION WDA_getFwWlanFeatCaps
17229 * Wrapper for WDI API, that will return if the feature (enum value).passed
17230 * to this API is supported or not in FW
17231 * return value
17232 * 0 - implies feature is NOT Supported
17233 * any non zero value - implies feature is SUPPORTED
17234 */
17235tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17236{
17237 return WDI_getFwWlanFeatCaps(featEnumValue);
17238}
17239
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017240
Jeff Johnson295189b2012-06-20 16:38:30 -070017241/*
17242 * FUNCTION: WDA_shutdown
17243 * Shutdown WDA/WDI without handshaking with Riva.
17244 * Synchronous function.
17245 */
17246VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17247{
17248 WDI_Status wdiStatus;
17249 //tANI_U8 eventIdx = 0;
17250 VOS_STATUS status = VOS_STATUS_SUCCESS;
17251 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017252 if (NULL == pWDA)
17253 {
17254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017255 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017256 VOS_ASSERT(0);
17257 return VOS_STATUS_E_FAILURE;
17258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017259 /* FTM mode stay START_STATE */
17260 if( (WDA_READY_STATE != pWDA->wdaState) &&
17261 (WDA_INIT_STATE != pWDA->wdaState) &&
17262 (WDA_START_STATE != pWDA->wdaState) )
17263 {
17264 VOS_ASSERT(0);
17265 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017266
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017267 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17268 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017269 {
17270 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017271 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017272 }
Leo Chang9d76f622013-08-23 16:34:52 -070017273 else
17274 {
17275 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17276 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017277
Jeff Johnson295189b2012-06-20 16:38:30 -070017278 /* call WDI shutdown */
17279 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017280 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17281 {
17282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17283 "error in WDA Stop" );
17284 status = VOS_STATUS_E_FAILURE;
17285 }
17286 /* WDI stop is synchrnous, shutdown is complete when it returns */
17287 pWDA->wdaState = WDA_STOP_STATE;
17288
Jeff Johnson295189b2012-06-20 16:38:30 -070017289 /* shutdown should perform the stop & close actions. */
17290 /* Destroy the event */
17291 status = vos_event_destroy(&pWDA->txFrameEvent);
17292 if(!VOS_IS_STATUS_SUCCESS(status))
17293 {
17294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017295 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017296 status = VOS_STATUS_E_FAILURE;
17297 }
17298 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17299 if(!VOS_IS_STATUS_SUCCESS(status))
17300 {
17301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017302 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017303 status = VOS_STATUS_E_FAILURE;
17304 }
17305 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17306 if(!VOS_IS_STATUS_SUCCESS(status))
17307 {
17308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017309 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017310 status = VOS_STATUS_E_FAILURE;
17311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017312 /* free WDA context */
17313 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17314 if ( !VOS_IS_STATUS_SUCCESS(status) )
17315 {
17316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17317 "error in WDA close " );
17318 status = VOS_STATUS_E_FAILURE;
17319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017320 return status;
17321}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017322
Jeff Johnsone7245742012-09-05 17:12:55 -070017323/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017324 * FUNCTION: WDA_setNeedShutdown
17325 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017326 */
17327
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017328void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017329{
17330 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017331 if(pWDA == NULL)
17332 {
17333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17334 "Could not get the WDA Context pointer" );
17335 return;
17336 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017337 pWDA->needShutdown = TRUE;
17338}
17339/*
17340 * FUNCTION: WDA_needShutdown
17341 * WDA needs a shutdown
17342 */
17343
17344v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17345{
17346 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017347 if(pWDA == NULL)
17348 {
17349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17350 "Could not get the WDA Context pointer" );
17351 return 0;
17352 }
17353 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017354}
17355
Mohit Khanna4a70d262012-09-11 16:30:12 -070017356#ifdef WLAN_FEATURE_11AC
17357/*
17358 * FUNCTION: WDA_SetBeaconFilterReqCallback
17359 *
17360 */
17361void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17362{
17363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017365 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017366 if(NULL == pWdaParams)
17367 {
17368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017369 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017370 VOS_ASSERT(0) ;
17371 return ;
17372 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017373
Mohit Khanna4a70d262012-09-11 16:30:12 -070017374 vos_mem_free(pWdaParams->wdaMsgParam) ;
17375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17376 vos_mem_free(pWdaParams) ;
17377 /*
17378 * No respone required for SetBeaconFilter req so just free the request
17379 * param here
17380 */
17381
17382 return ;
17383}
17384
17385VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17386 tUpdateVHTOpMode *pData)
17387{
17388 WDI_Status status = WDI_STATUS_SUCCESS ;
17389 tWDA_ReqParams *pWdaParams ;
17390 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17391 sizeof(WDI_UpdateVHTOpMode)) ;
17392 if(NULL == wdiTemp)
17393 {
17394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017395 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017396 VOS_ASSERT(0);
17397 return VOS_STATUS_E_NOMEM;
17398 }
17399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17400 if(NULL == pWdaParams)
17401 {
17402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017403 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017404 VOS_ASSERT(0);
17405 vos_mem_free(wdiTemp);
17406 return VOS_STATUS_E_NOMEM;
17407 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17409 "------> %s Opmode = %d and staid = %d" ,
17410 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017411 wdiTemp->opMode = pData->opMode;
17412 wdiTemp->staId = pData->staId;
17413
17414 pWdaParams->pWdaContext = pWDA;
17415 /* Store Req pointer, as this will be used for response */
17416 pWdaParams->wdaMsgParam = (void *)pData;
17417 /* store Params pass it to WDI */
17418 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17419
17420 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17421
17422 if(IS_WDI_STATUS_FAILURE(status))
17423 {
17424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17425 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17427 vos_mem_free(pWdaParams->wdaMsgParam);
17428 vos_mem_free(pWdaParams);
17429 }
17430 return CONVERT_WDI2VOS_STATUS(status) ;
17431}
17432#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017433
17434/*==========================================================================
17435 FUNCTION WDA_TransportChannelDebug
17436
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017437 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017438 Display Transport Channel debugging information
17439 User may request to display DXE channel snapshot
17440 Or if host driver detects any abnormal stcuk may display
17441
17442 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017443 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017444 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017445 debugFlags : Enable stall detect features
17446 defined by WPAL_DeviceDebugFlags
17447 These features may effect
17448 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017449
17450 RETURN VALUE
17451 NONE
17452
17453===========================================================================*/
17454void WDA_TransportChannelDebug
17455(
schang6295e542013-03-12 15:31:23 -070017456 tpAniSirGlobal pMac,
17457 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017458 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017459)
17460{
Mihir Shete40a55652014-03-02 14:14:47 +053017461 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017462 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017463}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017464
17465/*==========================================================================
17466 FUNCTION WDA_SetEnableSSR
17467
17468 DESCRIPTION
17469 API to enable/disable SSR on WDI timeout
17470
17471 PARAMETERS
17472 enableSSR : enable/disable SSR
17473
17474 RETURN VALUE
17475 NONE
17476
17477===========================================================================*/
17478void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17479{
17480 WDI_SetEnableSSR(enableSSR);
17481}
Leo Chang9056f462013-08-01 19:21:11 -070017482
17483#ifdef FEATURE_WLAN_LPHB
17484/*
17485 * FUNCTION: WDA_LPHBconfRspCallback
17486 *
17487 */
17488void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17489{
17490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17491
17492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17493 "<------ %s " ,__func__);
17494 if (NULL == pWdaParams)
17495 {
17496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17497 "%s: pWdaParams received NULL", __func__);
17498 VOS_ASSERT(0) ;
17499 return ;
17500 }
17501
17502 /* Do not need to send notification to upper layer
17503 * Just free allocated resources */
17504 if (pWdaParams != NULL)
17505 {
17506 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17507 {
17508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17509 }
17510 vos_mem_free(pWdaParams->wdaMsgParam) ;
17511 vos_mem_free(pWdaParams) ;
17512 }
17513
17514 return;
17515}
17516
17517/*
17518 * FUNCTION: WDA_ProcessLPHBConfReq
17519 *
17520 */
17521VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17522 tSirLPHBReq *pData)
17523{
17524 WDI_Status wdiStatus;
17525 tWDA_ReqParams *pWdaParams ;
17526
17527 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17528 "------> %s " , __func__);
17529
17530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17531 if (NULL == pWdaParams)
17532 {
17533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17534 "%s: VOS MEM Alloc Failure", __func__);
17535 VOS_ASSERT(0);
17536 vos_mem_free(pData);
17537 return VOS_STATUS_E_NOMEM;
17538 }
17539
17540 pWdaParams->pWdaContext = pWDA;
17541 pWdaParams->wdaMsgParam = (void *)pData;
17542 pWdaParams->wdaWdiApiMsgParam = NULL;
17543
17544 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17545 if (WDI_STATUS_PENDING == wdiStatus)
17546 {
17547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17548 "Pending received for %s:%d ", __func__, __LINE__);
17549 }
17550 else if (WDI_STATUS_SUCCESS != wdiStatus)
17551 {
17552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17553 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17554 vos_mem_free(pWdaParams->wdaMsgParam);
17555 vos_mem_free(pWdaParams);
17556 }
17557
17558 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17559}
17560#endif /* FEATURE_WLAN_LPHB */
17561
c_hpothu92367912014-05-01 15:18:17 +053017562void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17563 void* pUserData)
17564{
17565 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17566
17567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17568 "<------ %s " ,__func__);
17569 if (NULL == pBcnMissRateInfo)
17570 {
17571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17572 "%s: pWdaParams received NULL", __func__);
17573 VOS_ASSERT(0) ;
17574 return ;
17575 }
17576 if (pBcnMissRateInfo->callback)
17577 {
17578 pBcnMissRateInfo->callback(status, bcnMissRate,
17579 pBcnMissRateInfo->data);
17580 }
17581 vos_mem_free(pUserData);
17582
17583 return;
17584}
17585
17586v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17587 tSirBcnMissRateReq *pData)
17588{
17589 WDI_Status wdiStatus;
17590 tSirBcnMissRateInfo *pBcnMissRateInfo;
17591
17592 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17593 "------> %s " , __func__);
17594
17595 pBcnMissRateInfo =
17596 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17597 if (NULL == pBcnMissRateInfo)
17598 {
17599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17600 "%s: VOS MEM Alloc Failure", __func__);
17601 VOS_ASSERT(0);
17602 vos_mem_free(pData);
17603 return;
17604 }
17605
17606 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17607 pBcnMissRateInfo->data = pData->data;
17608
17609 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17610 WDA_GetBcnMissRateCallback,
17611 pData->bssid);
17612 if (WDI_STATUS_PENDING == wdiStatus)
17613 {
17614 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17615 "Pending received for %s:%d ", __func__, __LINE__);
17616 }
17617 else if (WDI_STATUS_SUCCESS != wdiStatus)
17618 {
17619 if (pBcnMissRateInfo->callback)
17620 {
17621 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17622 -1, pBcnMissRateInfo->data);
17623 }
17624 }
17625 vos_mem_free(pData);
17626}
Dino Mycle41bdc942014-06-10 11:30:24 +053017627
17628#ifdef WLAN_FEATURE_EXTSCAN
17629
17630/*==========================================================================
17631 FUNCTION WDA_EXTScanStartRspCallback
17632
17633 DESCRIPTION
17634 API to send EXTScan Start Response to HDD
17635
17636 PARAMETERS
17637 pEventData: Response from FW
17638 pUserData:
17639===========================================================================*/
17640void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17641{
17642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17643 tWDA_CbContext *pWDA = NULL;
17644 void *pCallbackContext;
17645 tpAniSirGlobal pMac;
17646
17647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17648 "%s:", __func__);
17649 if (NULL == pWdaParams)
17650 {
17651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17652 "%s: pWdaParams received NULL", __func__);
17653 VOS_ASSERT(0);
17654 return;
17655 }
17656
17657 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17658
17659 if (NULL == pWDA)
17660 {
17661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17662 "%s: pWDA received NULL", __func__);
17663 VOS_ASSERT(0);
17664 goto error;
17665 }
17666
17667 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17668 if (NULL == pMac)
17669 {
17670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17671 "%s:pMac is NULL", __func__);
17672 VOS_ASSERT(0);
17673 goto error;
17674 }
17675
17676 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17677
17678 if (pMac->sme.pEXTScanIndCb)
17679 {
17680 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17681 pEventData);
17682 }
17683 else
17684 {
17685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17686 "%s:HDD callback is null", __func__);
17687 VOS_ASSERT(0);
17688 }
17689
17690error:
17691
17692 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17693 {
17694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17695 }
17696 if (pWdaParams->wdaMsgParam != NULL)
17697 {
17698 vos_mem_free(pWdaParams->wdaMsgParam);
17699 }
17700 vos_mem_free(pWdaParams) ;
17701
17702 return;
17703}
17704
17705/*==========================================================================
17706 FUNCTION WDA_EXTScanStopRspCallback
17707
17708 DESCRIPTION
17709 API to send EXTScan Stop Response to HDD
17710
17711 PARAMETERS
17712 pEventData: Response from FW
17713 pUserData:
17714===========================================================================*/
17715void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17716{
17717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17718 tWDA_CbContext *pWDA = NULL;
17719 void *pCallbackContext;
17720 tpAniSirGlobal pMac;
17721
17722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17723 "%s:", __func__);
17724 if (NULL == pWdaParams)
17725 {
17726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17727 "%s: pWdaParams received NULL", __func__);
17728 VOS_ASSERT(0);
17729 return;
17730 }
17731
17732 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17733
17734 if (NULL == pWDA)
17735 {
17736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17737 "%s: pWDA received NULL", __func__);
17738 VOS_ASSERT(0);
17739 goto error;
17740 }
17741
17742 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17743 if (NULL == pMac)
17744 {
17745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17746 "%s:pMac is NULL", __func__);
17747 VOS_ASSERT(0);
17748 goto error;
17749 }
17750 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17751
17752 if (pMac->sme.pEXTScanIndCb)
17753 {
17754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17755 "%s:HDD call back function called", __func__);
17756 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_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
17779 return;
17780}
17781
17782/*==========================================================================
17783 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17784
17785 DESCRIPTION
17786 API to send EXTScan Get Cached Results Response to HDD
17787
17788 PARAMETERS
17789 pEventData: Response from FW
17790 pUserData:
17791===========================================================================*/
17792void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17793{
17794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17795 tWDA_CbContext *pWDA = NULL;
17796 void *pCallbackContext;
17797 tpAniSirGlobal pMac;
17798
17799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17800 "%s: ", __func__);
17801 if (NULL == pWdaParams)
17802 {
17803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17804 "%s: pWdaParams received NULL", __func__);
17805 VOS_ASSERT(0);
17806 return;
17807 }
17808
17809 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17810
17811 if (NULL == pWDA)
17812 {
17813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17814 "%s: pWDA received NULL", __func__);
17815 VOS_ASSERT(0);
17816 goto error;
17817 }
17818
17819 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17820 if (NULL == pMac)
17821 {
17822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17823 "%s:pMac is NULL", __func__);
17824 VOS_ASSERT(0);
17825 goto error;
17826 }
17827
17828 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17829
17830 if (pMac->sme.pEXTScanIndCb)
17831 {
17832 pMac->sme.pEXTScanIndCb(pCallbackContext,
17833 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17834 pEventData);
17835 }
17836 else
17837 {
17838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17839 "%s:HDD callback is null", __func__);
17840 VOS_ASSERT(0);
17841 }
17842
17843
17844error:
17845
17846 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17847 {
17848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17849 }
17850 if (pWdaParams->wdaMsgParam != NULL)
17851 {
17852 vos_mem_free(pWdaParams->wdaMsgParam);
17853 }
17854 vos_mem_free(pWdaParams) ;
17855
17856 return;
17857}
17858
17859/*==========================================================================
17860 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17861
17862 DESCRIPTION
17863 API to send EXTScan Get Capabilities Response to HDD
17864
17865 PARAMETERS
17866 pEventData: Response from FW
17867 pUserData:
17868===========================================================================*/
17869void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17870{
17871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17872 tWDA_CbContext *pWDA = NULL;
17873 void *pCallbackContext;
17874 tpAniSirGlobal pMac;
17875
17876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17877 "%s:", __func__);
17878 if (NULL == pWdaParams)
17879 {
17880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17881 "%s: pWdaParams received NULL", __func__);
17882 VOS_ASSERT(0);
17883 return;
17884 }
17885
17886 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17887
17888 if (NULL == pWDA)
17889 {
17890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17891 "%s: pWDA received NULL", __func__);
17892 VOS_ASSERT(0);
17893 goto error;
17894 }
17895
17896 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17897 if (NULL == pMac)
17898 {
17899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17900 "%s:pMac is NULL", __func__);
17901 VOS_ASSERT(0);
17902 goto error;
17903 }
17904
17905 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17906
17907 if (pMac->sme.pEXTScanIndCb)
17908 {
17909 pMac->sme.pEXTScanIndCb(pCallbackContext,
17910 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17911 pEventData);
17912 }
17913 else
17914 {
17915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17916 "%s:HDD callback is null", __func__);
17917 VOS_ASSERT(0);
17918 }
17919
17920
17921error:
17922
17923 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17924 {
17925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17926 }
17927 if (pWdaParams->wdaMsgParam != NULL)
17928 {
17929 vos_mem_free(pWdaParams->wdaMsgParam);
17930 }
17931 vos_mem_free(pWdaParams) ;
17932
17933 return;
17934}
17935
17936/*==========================================================================
17937 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17938
17939 DESCRIPTION
17940 API to send EXTScan Set BSSID Hotlist Response to HDD
17941
17942 PARAMETERS
17943 pEventData: Response from FW
17944 pUserData:
17945===========================================================================*/
17946void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17947{
17948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17949 tWDA_CbContext *pWDA = NULL;
17950 void *pCallbackContext;
17951 tpAniSirGlobal pMac;
17952
17953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17954 "%s: ", __func__);
17955 if (NULL == pWdaParams)
17956 {
17957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17958 "%s: pWdaParams received NULL", __func__);
17959 VOS_ASSERT(0) ;
17960 return;
17961 }
17962
17963 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17964
17965 if (NULL == pWDA)
17966 {
17967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17968 "%s: pWDA received NULL", __func__);
17969 VOS_ASSERT(0);
17970 goto error;
17971 }
17972
17973 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17974 if (NULL == pMac)
17975 {
17976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17977 "%s:pMac is NULL", __func__);
17978 VOS_ASSERT(0);
17979 goto error;
17980 }
17981
17982 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17983
17984 if (pMac->sme.pEXTScanIndCb)
17985 {
17986 pMac->sme.pEXTScanIndCb(pCallbackContext,
17987 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17988 pEventData);
17989 }
17990 else
17991 {
17992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17993 "%s:HDD callback is null", __func__);
17994 VOS_ASSERT(0);
17995 }
17996
17997
17998error:
17999
18000 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18001 {
18002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18003 }
18004 if (pWdaParams->wdaMsgParam != NULL)
18005 {
18006 vos_mem_free(pWdaParams->wdaMsgParam);
18007 }
18008 vos_mem_free(pWdaParams) ;
18009
18010 return;
18011}
18012
18013/*==========================================================================
18014 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
18015
18016 DESCRIPTION
18017 API to send EXTScan ReSet BSSID Hotlist Response to HDD
18018
18019 PARAMETERS
18020 pEventData: Response from FW
18021 pUserData:
18022===========================================================================*/
18023void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18024{
18025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18026 tWDA_CbContext *pWDA = NULL;
18027 void *pCallbackContext;
18028 tpAniSirGlobal pMac;
18029
18030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18031 "%s:", __func__);
18032 if (NULL == pWdaParams)
18033 {
18034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18035 "%s: pWdaParams received NULL", __func__);
18036 VOS_ASSERT(0) ;
18037 return;
18038 }
18039
18040 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18041
18042 if (NULL == pWDA)
18043 {
18044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18045 "%s: pWDA received NULL", __func__);
18046 VOS_ASSERT(0);
18047 goto error;
18048 }
18049
18050 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18051 if (NULL == pMac)
18052 {
18053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18054 "%s:pMac is NULL", __func__);
18055 VOS_ASSERT(0);
18056 goto error;
18057 }
18058
18059 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18060
18061 if (pMac->sme.pEXTScanIndCb)
18062 {
18063 pMac->sme.pEXTScanIndCb(pCallbackContext,
18064 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18065 pEventData);
18066 }
18067 else
18068 {
18069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18070 "%s:HDD callback is null", __func__);
18071 VOS_ASSERT(0);
18072 }
18073
18074
18075error:
18076
18077 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18078 {
18079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18080 }
18081 if (pWdaParams->wdaMsgParam != NULL)
18082 {
18083 vos_mem_free(pWdaParams->wdaMsgParam);
18084 }
18085 vos_mem_free(pWdaParams) ;
18086
18087 return;
18088}
18089
18090/*==========================================================================
18091 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18092
18093 DESCRIPTION
18094 API to send EXTScan Set Significant RSSI Change RSP to HDD
18095
18096 PARAMETERS
18097 pEventData: Response from FW
18098 pUserData:
18099===========================================================================*/
18100void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18101{
18102 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18103 tWDA_CbContext *pWDA = NULL;
18104 void *pCallbackContext;
18105 tpAniSirGlobal pMac;
18106
18107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18108 "%s:", __func__);
18109 if (NULL == pWdaParams)
18110 {
18111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18112 "%s: pWdaParams received NULL", __func__);
18113 VOS_ASSERT(0) ;
18114 return;
18115 }
18116
18117 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18118
18119 if (NULL == pWDA)
18120 {
18121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18122 "%s: pWDA received NULL", __func__);
18123 VOS_ASSERT(0);
18124 goto error;
18125 }
18126
18127 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18128 if (NULL == pMac)
18129 {
18130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18131 "%s:pMac is NULL", __func__);
18132 VOS_ASSERT(0);
18133 goto error;
18134 }
18135
18136 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18137
18138 if (pMac->sme.pEXTScanIndCb)
18139 {
18140 pMac->sme.pEXTScanIndCb(pCallbackContext,
18141 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18142 pEventData);
18143 }
18144 else
18145 {
18146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18147 "%s:HDD callback is null", __func__);
18148 VOS_ASSERT(0);
18149 }
18150
18151
18152error:
18153
18154 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18155 {
18156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18157 }
18158 if (pWdaParams->wdaMsgParam != NULL)
18159 {
18160 vos_mem_free(pWdaParams->wdaMsgParam);
18161 }
18162 vos_mem_free(pWdaParams) ;
18163
18164 return;
18165}
18166
18167/*==========================================================================
18168 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18169
18170 DESCRIPTION
18171 API to send EXTScan Set Significant RSSI Change RSP to HDD
18172
18173 PARAMETERS
18174 pEventData: Response from FW
18175 pUserData:
18176===========================================================================*/
18177void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18178 void* pUserData)
18179{
18180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18181 tWDA_CbContext *pWDA = NULL;
18182 void *pCallbackContext;
18183 tpAniSirGlobal pMac;
18184
18185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18186 "%s:", __func__);
18187 if (NULL == pWdaParams)
18188 {
18189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18190 "%s: pWdaParams received NULL", __func__);
18191 VOS_ASSERT(0) ;
18192 return;
18193 }
18194
18195 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18196
18197 if (NULL == pWDA)
18198 {
18199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18200 "%s: pWDA received NULL", __func__);
18201 VOS_ASSERT(0);
18202 goto error;
18203 }
18204
18205 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18206 if (NULL == pMac)
18207 {
18208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18209 "%s:pMac is NULL", __func__);
18210 VOS_ASSERT(0);
18211 goto error;
18212 }
18213
18214 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18215
18216 if (pMac->sme.pEXTScanIndCb)
18217 {
18218 pMac->sme.pEXTScanIndCb(pCallbackContext,
18219 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18220 pEventData);
18221 }
18222 else
18223 {
18224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18225 "%s:HDD callback is null", __func__);
18226 VOS_ASSERT(0);
18227 }
18228
18229
18230error:
18231
18232 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18233 {
18234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18235 }
18236 if (pWdaParams->wdaMsgParam != NULL)
18237 {
18238 vos_mem_free(pWdaParams->wdaMsgParam);
18239 }
18240 vos_mem_free(pWdaParams) ;
18241
18242 return;
18243}
18244
18245/*==========================================================================
18246 FUNCTION WDA_ProcessEXTScanStartReq
18247
18248 DESCRIPTION
18249 API to send EXTScan Start Request to WDI
18250
18251 PARAMETERS
18252 pWDA: Pointer to WDA context
18253 wdaRequest: Pointer to EXTScan req parameters
18254===========================================================================*/
18255VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18256 tSirEXTScanStartReqParams *wdaRequest)
18257{
18258 WDI_Status status = WDI_STATUS_SUCCESS;
18259 tWDA_ReqParams *pWdaParams;
18260
18261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18262 "%s: ", __func__);
18263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18264 if (NULL == pWdaParams)
18265 {
18266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18267 "%s: VOS MEM Alloc Failure", __func__);
18268 VOS_ASSERT(0);
18269 return VOS_STATUS_E_NOMEM;
18270 }
18271 pWdaParams->pWdaContext = pWDA;
18272 pWdaParams->wdaMsgParam = wdaRequest;
18273 pWdaParams->wdaWdiApiMsgParam = NULL;
18274
18275 status = WDI_EXTScanStartReq((void *)wdaRequest,
18276 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18277 (void *)pWdaParams);
18278 if (IS_WDI_STATUS_FAILURE(status))
18279 {
18280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18281 "Failure to request. Free all the memory " );
18282 vos_mem_free(pWdaParams->wdaMsgParam);
18283 vos_mem_free(pWdaParams);
18284 }
18285 return CONVERT_WDI2VOS_STATUS(status);
18286}
18287
18288/*==========================================================================
18289 FUNCTION WDA_ProcessEXTScanStopReq
18290
18291 DESCRIPTION
18292 API to send EXTScan Start Request to WDI
18293
18294 PARAMETERS
18295 pWDA: Pointer to WDA context
18296 wdaRequest: Pointer to EXTScan req parameters
18297===========================================================================*/
18298VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18299 tSirEXTScanStopReqParams *wdaRequest)
18300{
18301 WDI_Status status = WDI_STATUS_SUCCESS;
18302 tWDA_ReqParams *pWdaParams;
18303
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18305 "%s:", __func__);
18306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18307 if (NULL == pWdaParams)
18308 {
18309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18310 "%s: VOS MEM Alloc Failure", __func__);
18311 VOS_ASSERT(0);
18312 return VOS_STATUS_E_NOMEM;
18313 }
18314 pWdaParams->pWdaContext = pWDA;
18315 pWdaParams->wdaMsgParam = wdaRequest;
18316 pWdaParams->wdaWdiApiMsgParam = NULL;
18317
18318 status = WDI_EXTScanStopReq((void *)wdaRequest,
18319 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18320 (void *)pWdaParams);
18321 if (IS_WDI_STATUS_FAILURE(status))
18322 {
18323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18324 "Failure to request. Free all the memory " );
18325 vos_mem_free(pWdaParams->wdaMsgParam);
18326 vos_mem_free(pWdaParams);
18327 }
18328 return CONVERT_WDI2VOS_STATUS(status);
18329}
18330
18331/*==========================================================================
18332 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18333
18334 DESCRIPTION
18335 API to send EXTScan Get Cached Results Request to WDI
18336
18337 PARAMETERS
18338 pWDA: Pointer to WDA context
18339 wdaRequest: Pointer to EXTScan req parameters
18340===========================================================================*/
18341VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18342 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18343{
18344 WDI_Status status = WDI_STATUS_SUCCESS;
18345 tWDA_ReqParams *pWdaParams;
18346
18347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18348 "%s: ", __func__);
18349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18350 if (NULL == pWdaParams)
18351 {
18352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18353 "%s: VOS MEM Alloc Failure", __func__);
18354 VOS_ASSERT(0);
18355 return VOS_STATUS_E_NOMEM;
18356 }
18357 pWdaParams->pWdaContext = pWDA;
18358 pWdaParams->wdaMsgParam = wdaRequest;
18359 pWdaParams->wdaWdiApiMsgParam = NULL;
18360
18361 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18362 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18363 (void *)pWdaParams);
18364 if (IS_WDI_STATUS_FAILURE(status))
18365 {
18366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18367 "Failure to request. Free all the memory " );
18368 vos_mem_free(pWdaParams->wdaMsgParam);
18369 vos_mem_free(pWdaParams);
18370 }
18371 return CONVERT_WDI2VOS_STATUS(status);
18372}
18373
18374/*==========================================================================
18375 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18376
18377 DESCRIPTION
18378 API to send EXTScan Get Capabilities Request to WDI
18379
18380 PARAMETERS
18381 pWDA: Pointer to WDA context
18382 wdaRequest: Pointer to EXTScan req parameters
18383===========================================================================*/
18384VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18385 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18386{
18387 WDI_Status status = WDI_STATUS_SUCCESS;
18388 tWDA_ReqParams *pWdaParams;
18389
18390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18391 "%s:", __func__);
18392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18393 if (NULL == pWdaParams)
18394 {
18395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18396 "%s: VOS MEM Alloc Failure", __func__);
18397 VOS_ASSERT(0);
18398 return VOS_STATUS_E_NOMEM;
18399 }
18400 pWdaParams->pWdaContext = pWDA;
18401 pWdaParams->wdaMsgParam = wdaRequest;
18402 pWdaParams->wdaWdiApiMsgParam = NULL;
18403
18404 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18405 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18406 (void *)pWdaParams);
18407 if (IS_WDI_STATUS_FAILURE(status))
18408 {
18409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18410 "Failure to request. Free all the memory " );
18411 vos_mem_free(pWdaParams->wdaMsgParam);
18412 vos_mem_free(pWdaParams);
18413 }
18414 return CONVERT_WDI2VOS_STATUS(status);
18415}
18416
18417/*==========================================================================
18418 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18419
18420 DESCRIPTION
18421 API to send Set BSSID Hotlist Request to WDI
18422
18423 PARAMETERS
18424 pWDA: Pointer to WDA context
18425 wdaRequest: Pointer to EXTScan req parameters
18426===========================================================================*/
18427VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18428 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18429{
18430 WDI_Status status = WDI_STATUS_SUCCESS;
18431 tWDA_ReqParams *pWdaParams;
18432
18433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18434 "%s: ", __func__);
18435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18436 if (NULL == pWdaParams)
18437 {
18438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18439 "%s: VOS MEM Alloc Failure", __func__);
18440 VOS_ASSERT(0);
18441 return VOS_STATUS_E_NOMEM;
18442 }
18443 pWdaParams->pWdaContext = pWDA;
18444 pWdaParams->wdaMsgParam = wdaRequest;
18445 pWdaParams->wdaWdiApiMsgParam = NULL;
18446
18447 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18448 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18449 (void *)pWdaParams);
18450 if (IS_WDI_STATUS_FAILURE(status))
18451 {
18452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18453 "Failure to request. Free all the memory " );
18454 vos_mem_free(pWdaParams->wdaMsgParam);
18455 vos_mem_free(pWdaParams);
18456 }
18457 return CONVERT_WDI2VOS_STATUS(status);
18458}
18459
18460/*==========================================================================
18461 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18462
18463 DESCRIPTION
18464 API to send Reset BSSID Hotlist Request to WDI
18465
18466 PARAMETERS
18467 pWDA: Pointer to WDA context
18468 wdaRequest: Pointer to EXTScan req parameters
18469===========================================================================*/
18470VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18471 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18472{
18473 WDI_Status status = WDI_STATUS_SUCCESS;
18474 tWDA_ReqParams *pWdaParams;
18475
18476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18477 "%s:", __func__);
18478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18479 if (NULL == pWdaParams)
18480 {
18481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18482 "%s: VOS MEM Alloc Failure", __func__);
18483 VOS_ASSERT(0);
18484 return VOS_STATUS_E_NOMEM;
18485 }
18486 pWdaParams->pWdaContext = pWDA;
18487 pWdaParams->wdaMsgParam = wdaRequest;
18488 pWdaParams->wdaWdiApiMsgParam = NULL;
18489
18490 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18491 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18492 (void *)pWdaParams);
18493 if (IS_WDI_STATUS_FAILURE(status))
18494 {
18495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18496 "Failure to request. Free all the memory " );
18497 vos_mem_free(pWdaParams->wdaMsgParam);
18498 vos_mem_free(pWdaParams);
18499 }
18500 return CONVERT_WDI2VOS_STATUS(status);
18501}
18502
18503/*==========================================================================
18504 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18505
18506 DESCRIPTION
18507 API to send Set Significant RSSI Change Request to WDI
18508
18509 PARAMETERS
18510 pWDA: Pointer to WDA context
18511 wdaRequest: Pointer to EXTScan req parameters
18512===========================================================================*/
18513VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18514 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18515{
18516 WDI_Status status = WDI_STATUS_SUCCESS;
18517 tWDA_ReqParams *pWdaParams;
18518
18519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18520 "%s: ", __func__);
18521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18522 if (NULL == pWdaParams)
18523 {
18524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18525 "%s: VOS MEM Alloc Failure", __func__);
18526 VOS_ASSERT(0);
18527 return VOS_STATUS_E_NOMEM;
18528 }
18529 pWdaParams->pWdaContext = pWDA;
18530 pWdaParams->wdaMsgParam = wdaRequest;
18531 pWdaParams->wdaWdiApiMsgParam = NULL;
18532
18533 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18534 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18535 (void *)pWdaParams);
18536 if (IS_WDI_STATUS_FAILURE(status))
18537 {
18538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18539 "Failure to request. Free all the memory " );
18540 vos_mem_free(pWdaParams->wdaMsgParam);
18541 vos_mem_free(pWdaParams);
18542 }
18543 return CONVERT_WDI2VOS_STATUS(status);
18544}
18545
18546/*==========================================================================
18547 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18548
18549 DESCRIPTION
18550 API to send Reset Significant RSSI Change Request to WDI
18551
18552 PARAMETERS
18553 pWDA: Pointer to WDA context
18554 wdaRequest: Pointer to EXTScan req parameters
18555===========================================================================*/
18556VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18557 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18558{
18559 WDI_Status status = WDI_STATUS_SUCCESS;
18560 tWDA_ReqParams *pWdaParams;
18561
18562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18563 "%s:", __func__);
18564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18565 if (NULL == pWdaParams)
18566 {
18567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18568 "%s: VOS MEM Alloc Failure", __func__);
18569 VOS_ASSERT(0);
18570 return VOS_STATUS_E_NOMEM;
18571 }
18572 pWdaParams->pWdaContext = pWDA;
18573 pWdaParams->wdaMsgParam = wdaRequest;
18574 pWdaParams->wdaWdiApiMsgParam = NULL;
18575
18576 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18577 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18578 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18579 (void *)pWdaParams);
18580 if (IS_WDI_STATUS_FAILURE(status))
18581 {
18582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18583 "Failure to request. Free all the memory " );
18584 vos_mem_free(pWdaParams->wdaMsgParam);
18585 vos_mem_free(pWdaParams);
18586 }
18587 return CONVERT_WDI2VOS_STATUS(status);
18588}
18589#endif /* WLAN_FEATURE_EXTSCAN */
18590
Sunil Duttbd736ed2014-05-26 21:19:41 +053018591#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18592
18593/*==========================================================================
18594 FUNCTION WDA_LLStatsSetRspCallback
18595
18596 DESCRIPTION
18597 API to process set link layer statistics response from FW
18598
18599 PARAMETERS
18600 pRsp: Pointer to set link layer statistics response
18601 pUserData: Pointer to user data
18602
18603 RETURN VALUE
18604 NONE
18605
18606===========================================================================*/
18607void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18608{
18609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18610
18611
18612 if (NULL == pWdaParams)
18613 {
18614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18615 "%s: pWdaParams received NULL", __func__);
18616 VOS_ASSERT(0) ;
18617 return ;
18618 }
18619
18620 /* Do not need to send notification to upper layer
18621 * Just free allocated resources */
18622 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18623 {
18624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18625 }
18626 if (pWdaParams->wdaMsgParam != NULL)
18627 {
18628 vos_mem_free(pWdaParams->wdaMsgParam);
18629 }
18630 vos_mem_free(pWdaParams) ;
18631
18632 return;
18633}
18634
18635/*==========================================================================
18636 FUNCTION WDA_ProcessLLStatsSetReq
18637
18638 DESCRIPTION
18639 API to send Set Link Layer Stats request to WDI
18640
18641 PARAMETERS
18642 pWDA: Pointer to WDA context
18643 wdaRequest: Pointer to set Link Layer Stats req parameters
18644===========================================================================*/
18645VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18646 tSirLLStatsSetReq *wdaRequest)
18647{
18648 WDI_Status status = WDI_STATUS_SUCCESS;
18649 tWDA_ReqParams *pWdaParams;
18650
18651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18652 if (NULL == pWdaParams)
18653 {
18654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18655 "%s: VOS MEM Alloc Failure", __func__);
18656 VOS_ASSERT(0);
18657 return VOS_STATUS_E_NOMEM;
18658 }
18659 pWdaParams->pWdaContext = pWDA;
18660 pWdaParams->wdaMsgParam = wdaRequest;
18661 pWdaParams->wdaWdiApiMsgParam = NULL;
18662
18663 status = WDI_LLStatsSetReq((void *)wdaRequest,
18664 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18665 (void *)pWdaParams);
18666 if (IS_WDI_STATUS_FAILURE(status))
18667 {
18668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18669 "Failure to request. Free all the memory " );
18670 vos_mem_free(pWdaParams->wdaMsgParam);
18671 vos_mem_free(pWdaParams);
18672 }
18673 return CONVERT_WDI2VOS_STATUS(status);
18674}
18675
18676/*==========================================================================
18677 FUNCTION WDA_LLStatsGetRspCallback
18678
18679 DESCRIPTION
18680 API to process get link layer statistics response from FW
18681
18682 PARAMETERS
18683 pRsp: Pointer to get link layer statistics response
18684 pUserData: Pointer to user data
18685
18686 RETURN VALUE
18687 NONE
18688
18689===========================================================================*/
18690void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18691{
18692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18693
18694 if (NULL == pWdaParams)
18695 {
18696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18697 "%s: pWdaParams received NULL", __func__);
18698 VOS_ASSERT(0) ;
18699 return ;
18700 }
18701
18702 /* Do not need to send notification to upper layer
18703 * Just free allocated resources */
18704 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18705 {
18706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18707 }
18708 if (pWdaParams->wdaMsgParam != NULL)
18709 {
18710 vos_mem_free(pWdaParams->wdaMsgParam);
18711 }
18712 vos_mem_free(pWdaParams) ;
18713
18714 return;
18715}
18716
18717/*==========================================================================
18718 FUNCTION WDA_ProcessLLStatsGetReq
18719
18720 DESCRIPTION
18721 API to send Get Link Layer Stats request to WDI
18722
18723 PARAMETERS
18724 pWDA: Pointer to WDA context
18725 wdaRequest: Pointer to get Link Layer Stats req parameters
18726===========================================================================*/
18727VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18728 tSirLLStatsGetReq *wdaRequest)
18729{
18730 WDI_Status status = WDI_STATUS_SUCCESS;
18731 tWDA_ReqParams *pWdaParams;
18732
18733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18734 if (NULL == pWdaParams)
18735 {
18736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18737 "%s: VOS MEM Alloc Failure", __func__);
18738 VOS_ASSERT(0);
18739 return VOS_STATUS_E_NOMEM;
18740 }
18741 pWdaParams->pWdaContext = pWDA;
18742 pWdaParams->wdaMsgParam = wdaRequest;
18743 pWdaParams->wdaWdiApiMsgParam = NULL;
18744
18745 status = WDI_LLStatsGetReq((void *) wdaRequest,
18746 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18747 (void *)pWdaParams);
18748 if (IS_WDI_STATUS_FAILURE(status))
18749 {
18750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18751 "Failure to request. Free all the memory " );
18752 vos_mem_free(pWdaParams->wdaMsgParam);
18753 vos_mem_free(pWdaParams);
18754 }
18755 return CONVERT_WDI2VOS_STATUS(status);
18756}
18757
18758/*==========================================================================
18759 FUNCTION WDA_LLStatsClearRspCallback
18760
18761 DESCRIPTION
18762 API to process clear link layer statistics response from FW
18763
18764 PARAMETERS
18765 pRsp: Pointer to clear link layer statistics response
18766 pUserData: Pointer to user data
18767
18768 RETURN VALUE
18769 NONE
18770
18771===========================================================================*/
18772void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18773{
18774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18775
18776
18777 if (NULL == pWdaParams)
18778 {
18779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18780 "%s: pWdaParams received NULL", __func__);
18781 VOS_ASSERT(0) ;
18782 return ;
18783 }
18784 /* Do not need to send notification to upper layer
18785 * Just free allocated resources */
18786 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18787 {
18788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18789 }
18790 if (pWdaParams->wdaMsgParam != NULL)
18791 {
18792 vos_mem_free(pWdaParams->wdaMsgParam);
18793 }
18794 vos_mem_free(pWdaParams) ;
18795 return;
18796}
18797
18798/*==========================================================================
18799 FUNCTION WDA_ProcessLLStatsClearReq
18800
18801 DESCRIPTION
18802 API to send Clear Link Layer Stats request to WDI
18803
18804 PARAMETERS
18805 pWDA: Pointer to WDA context
18806 wdaRequest: Pointer to earLink Layer Stats req
18807===========================================================================*/
18808VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18809 tSirLLStatsClearReq *wdaRequest)
18810{
18811 WDI_Status status = WDI_STATUS_SUCCESS;
18812 tWDA_ReqParams *pWdaParams;
18813
18814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18815 if (NULL == pWdaParams)
18816 {
18817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18818 "%s: VOS MEM Alloc Failure", __func__);
18819 VOS_ASSERT(0);
18820 return VOS_STATUS_E_NOMEM;
18821 }
18822 pWdaParams->pWdaContext = pWDA;
18823 pWdaParams->wdaMsgParam = wdaRequest;
18824 pWdaParams->wdaWdiApiMsgParam = NULL;
18825
18826 status = WDI_LLStatsClearReq((void *) wdaRequest,
18827 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18828 (void *)pWdaParams);
18829 if (IS_WDI_STATUS_FAILURE(status))
18830 {
18831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18832 "Failure to request. Free all the memory " );
18833 vos_mem_free(pWdaParams->wdaMsgParam);
18834 vos_mem_free(pWdaParams);
18835 }
18836 return CONVERT_WDI2VOS_STATUS(status);
18837}
18838
18839#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018840
Abhishek Singh85b74712014-10-08 11:38:19 +053018841void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18842{
18843 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18844
18845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18846 "<------ %s " ,__func__);
18847 if (NULL == fwStatsinfo)
18848 {
18849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18850 "%s: pWdaParams received NULL", __func__);
18851 VOS_ASSERT(0);
18852 return;
18853 }
18854
18855 if(fwStatsinfo->callback)
18856 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18857
18858 vos_mem_free(pUserData);
18859 return;
18860}
18861
18862
18863v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18864 tSirFWStatsGetReq *pData)
18865{
18866
18867 WDI_Status wdiStatus;
18868 tSirFWStatsInfo *fwStatsinfo;
18869
18870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18871 "------> %s" , __func__);
18872
18873 fwStatsinfo =
18874 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18875 if (NULL == fwStatsinfo)
18876 {
18877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18878 "%s: VOS MEM Alloc Failure", __func__);
18879 VOS_ASSERT(0);
18880 vos_mem_free(pData);
18881 return;
18882 }
18883
18884 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18885 fwStatsinfo->data = pData->data;
18886
18887 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18888 WDA_FWStatsGetRspCallback,
18889 pData->stats);
18890 if (WDI_STATUS_PENDING == wdiStatus)
18891 {
18892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18893 "Pending received for %s:%d ", __func__, __LINE__);
18894 }
18895 else if (WDI_STATUS_SUCCESS != wdiStatus)
18896 {
18897 if (fwStatsinfo->callback)
18898 {
18899 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18900 }
18901 vos_mem_free(fwStatsinfo);
18902 }
18903 vos_mem_free(pData);
18904}
18905
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018906/*==========================================================================
18907 FUNCTION WDA_EncryptMsgRspCallback
18908
18909 DESCRIPTION
18910 API to send Encrypt message response to HDD
18911
18912 PARAMETERS
18913 pEventData: Response from FW
18914 pUserData: Data sent to firmware as part of request
18915===========================================================================*/
18916void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18917 void* pUserData)
18918{
18919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18920 tWDA_CbContext *pWDA = NULL;
18921 tpAniSirGlobal pMac;
18922 vos_msg_t vosMsg;
18923 tpSirEncryptedDataRspParams pEncRspParams;
18924 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18925
18926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18927 FL("%s:"), __func__);
18928 if (NULL == pWdaParams)
18929 {
18930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18931 FL("%s: pWdaParams received NULL"), __func__);
18932 VOS_ASSERT(0);
18933 return;
18934 }
18935
18936 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18937
18938 if (NULL == pWDA)
18939 {
18940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18941 FL("%s: pWDA received NULL"), __func__);
18942 VOS_ASSERT(0);
18943 goto error;
18944 }
18945
18946 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18947 if (NULL == pMac)
18948 {
18949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18950 FL("%s:pMac is NULL"), __func__);
18951 VOS_ASSERT(0);
18952 goto error;
18953 }
18954
18955 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18956
18957 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18958 if (NULL == pEncRspParams)
18959 {
18960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18961 FL("%s: VOS MEM Alloc Failure"), __func__);
18962 VOS_ASSERT(0);
18963 goto error;
18964 }
18965
18966 /* Message Header */
18967 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18968 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18969 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18970 pEncryptedDataRsp->encryptedPayload.length;
18971 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18972 pEncryptedDataRsp->encryptedPayload.data,
18973 pEncryptedDataRsp->encryptedPayload.length);
18974
18975 /* VOS message wrapper */
18976 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18977 vosMsg.bodyptr = (void *)pEncRspParams;
18978 vosMsg.bodyval = 0;
18979
18980 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18981 {
18982 /* free the mem */
18983 vos_mem_free((v_VOID_t *) pEncRspParams);
18984 }
18985
18986error:
18987
18988 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18989 {
18990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18991 }
18992 if (pWdaParams->wdaMsgParam != NULL)
18993 {
18994 vos_mem_free(pWdaParams->wdaMsgParam);
18995 }
18996 vos_mem_free(pWdaParams) ;
18997
18998 return;
18999}
19000/*==========================================================================
19001 FUNCTION WDA_ProcessEncryptMsgReq
19002
19003 DESCRIPTION
19004 API to send Encrypt message Request to WDI
19005
19006 PARAMETERS
19007 pWDA: Pointer to WDA context
19008 wdaRequest: Pointer to Encrypt_msg req parameters
19009===========================================================================*/
19010VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
19011 u8 *wdaRequest)
19012{
19013 WDI_Status status = WDI_STATUS_SUCCESS;
19014 tWDA_ReqParams *pWdaParams;
19015
19016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19017 FL("%s: "), __func__);
19018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19019 if (NULL == pWdaParams)
19020 {
19021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19022 FL("%s: VOS MEM Alloc Failure"), __func__);
19023 VOS_ASSERT(0);
19024 return VOS_STATUS_E_NOMEM;
19025 }
19026 pWdaParams->pWdaContext = pWDA;
19027 pWdaParams->wdaMsgParam = wdaRequest;
19028 pWdaParams->wdaWdiApiMsgParam = NULL;
19029
19030 status = WDI_EncryptMsgReq((void *)wdaRequest,
19031 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19032 (void *)pWdaParams);
19033 if (IS_WDI_STATUS_FAILURE(status))
19034 {
19035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19036 FL("Failure to request. Free all the memory " ));
19037 vos_mem_free(pWdaParams->wdaMsgParam);
19038 vos_mem_free(pWdaParams);
19039 }
19040 return CONVERT_WDI2VOS_STATUS(status);
19041}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019042/*==========================================================================
19043 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19044
19045 DESCRIPTION
19046 API to enable/disable RTS/CTS for different modes.
19047
19048 PARAMETERS
19049 pWDA: Pointer to WDA context
19050 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19051===========================================================================*/
19052
19053VOS_STATUS
19054WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19055 tANI_U32 rtsCtsVal)
19056{
19057 WDI_Status status;
19058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19059 FL("---> %s"), __func__);
19060 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19061 if (WDI_STATUS_PENDING == status)
19062 {
19063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19064 FL("pending status received "));
19065 }
19066 else if (WDI_STATUS_SUCCESS_SYNC != status)
19067 {
19068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19069 FL("Failure status %d"), status);
19070 }
19071 return CONVERT_WDI2VOS_STATUS(status) ;
19072}
Katya Nigamf0511f62015-05-05 16:40:57 +053019073void WDA_MonStartRspCallback(void *pEventData, void* pUserData)
19074{
19075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19076
19077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19078 "<------ %s " ,__func__);
19079 if (NULL == pWdaParams)
19080 {
19081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19082 "%s: pWdaParams received NULL", __func__);
19083 VOS_ASSERT(0) ;
19084 return ;
19085 }
19086
19087 vos_mem_free(pWdaParams) ;
19088
19089 return;
19090}
19091
19092
19093VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest)
19094{
19095
19096 WDI_Status status = WDI_STATUS_SUCCESS;
19097 tWDA_ReqParams *pWdaParams;
19098
19099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19100 FL("%s: "), __func__);
19101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19102 if (NULL == pWdaParams)
19103 {
19104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19105 FL("%s: VOS MEM Alloc Failure"), __func__);
19106 VOS_ASSERT(0);
19107 return VOS_STATUS_E_NOMEM;
19108 }
19109 pWdaParams->pWdaContext = pWDA;
19110 pWdaParams->wdaMsgParam = wdaRequest;
19111 pWdaParams->wdaWdiApiMsgParam = NULL;
19112
19113 status = WDI_MonStartReq((void *)wdaRequest,
19114 (WDI_MonStartRspCb)WDA_MonStartRspCallback,
19115 (void *)pWdaParams);
19116 if (IS_WDI_STATUS_FAILURE(status))
19117 {
19118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19119 "Failure to request. Free all the memory " );
19120 vos_mem_free(pWdaParams->wdaMsgParam);
19121 vos_mem_free(pWdaParams);
19122 }
19123 return CONVERT_WDI2VOS_STATUS(status);
19124}
19125
19126void WDA_MonStopRspCallback(void* pUserData)
19127{
19128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19129
19130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19131 "<------ %s " ,__func__);
19132 if (NULL == pWdaParams)
19133 {
19134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19135 "%s: pWdaParams received NULL", __func__);
19136 VOS_ASSERT(0) ;
19137 return ;
19138 }
19139
19140 vos_mem_free(pWdaParams) ;
19141
19142 return;
19143}
19144
19145VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
19146{
19147
19148 WDI_Status status = WDI_STATUS_SUCCESS;
19149 tWDA_ReqParams *pWdaParams;
19150
19151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19152 FL("%s: "), __func__);
19153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19154 if (NULL == pWdaParams)
19155 {
19156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19157 FL("%s: VOS MEM Alloc Failure"), __func__);
19158 VOS_ASSERT(0);
19159 return VOS_STATUS_E_NOMEM;
19160 }
19161 pWdaParams->pWdaContext = pWDA;
19162 pWdaParams->wdaMsgParam = wdaRequest;
19163 pWdaParams->wdaWdiApiMsgParam = NULL;
19164
19165 status = WDI_MonStopReq((WDI_MonStopRspCb)WDA_MonStopRspCallback,
19166 (void *)pWdaParams);
19167
19168 if (IS_WDI_STATUS_FAILURE(status))
19169 {
19170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19171 "Failure to request. Free all the memory " );
19172 vos_mem_free(pWdaParams->wdaMsgParam);
19173 vos_mem_free(pWdaParams);
19174 }
19175 return CONVERT_WDI2VOS_STATUS(status);
19176}