blob: 4908a4c68b6254987edd58f4fb2f410abae1bf8e [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 Kondabattini10e67352015-03-16 17:41:57 +053012959
Jeff Johnson295189b2012-06-20 16:38:30 -070012960 if((NULL == pWDA)||(NULL == pFrmBuf))
12961 {
12962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012963 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012964 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 VOS_ASSERT(0);
12966 return VOS_STATUS_E_FAILURE;
12967 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012968
Jeff Johnson295189b2012-06-20 16:38:30 -070012969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012970 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
12971 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12973 if(NULL == pMac)
12974 {
12975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012976 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012977 VOS_ASSERT(0);
12978 return VOS_STATUS_E_FAILURE;
12979 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012980
Jeff Johnson295189b2012-06-20 16:38:30 -070012981 /* store the call back function in WDA context */
12982 pWDA->pTxCbFunc = pCompFunc;
12983 /* store the call back for the function of ackTxComplete */
12984 if( pAckTxComp )
12985 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012986 if( NULL != pWDA->pAckTxCbFunc )
12987 {
12988 /* Already TxComp is active no need to active again */
12989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012990 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012991 pWDA->pAckTxCbFunc( pMac, 0);
12992 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012993
Jeff Johnsone7245742012-09-05 17:12:55 -070012994 if( VOS_STATUS_SUCCESS !=
12995 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12998 "Tx Complete timeout Timer Stop Failed ");
12999 }
13000 else
13001 {
13002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013003 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013004 }
13005 }
13006
13007 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13008 pWDA->pAckTxCbFunc = pAckTxComp;
13009 if( VOS_STATUS_SUCCESS !=
13010 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13013 "Tx Complete Timer Start Failed ");
13014 pWDA->pAckTxCbFunc = NULL;
13015 return eHAL_STATUS_FAILURE;
13016 }
13017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013018 /* Reset the event to be not signalled */
13019 status = vos_event_reset(&pWDA->txFrameEvent);
13020 if(!VOS_IS_STATUS_SUCCESS(status))
13021 {
13022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013023 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013024 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13025 if( pAckTxComp )
13026 {
13027 pWDA->pAckTxCbFunc = NULL;
13028 if( VOS_STATUS_SUCCESS !=
13029 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13030 {
13031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13032 "Tx Complete timeout Timer Stop Failed ");
13033 }
13034 }
13035 return VOS_STATUS_E_FAILURE;
13036 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013037
13038 /* If Peer Sta mask is set don't overwrite to self sta */
13039 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013040 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013041 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013043 else
13044 {
Ganesh K08bce952012-12-13 15:04:41 -080013045 /* Get system role, use the self station if in unknown role or STA role */
13046 systemRole = wdaGetGlobalSystemRole(pMac);
13047 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13048 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013049#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013050 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013051#endif
Ganesh K08bce952012-12-13 15:04:41 -080013052 ))
13053 {
13054 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13055 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013057
Jeff Johnsone7245742012-09-05 17:12:55 -070013058 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13059 disassoc frame reaches the HW, HAL has already deleted the peer station */
13060 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013062 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013063 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013064 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013065 /*Send Probe request frames on self sta idx*/
13066 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 /* Since we donot want probe responses to be retried, send probe responses
13069 through the NO_ACK queues */
13070 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13071 {
13072 //probe response is sent out using self station and no retries options.
13073 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13074 }
13075 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13076 {
13077 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13078 }
13079 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013080 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013081
13082 /*Set frame tag to 0
13083 We will use the WDA user data in order to tag a frame as expired*/
13084 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13085 (v_PVOID_t)0);
13086
13087
13088 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013089 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13090 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013091 {
13092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013093 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013094 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013095 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 -070013096 if( pAckTxComp )
13097 {
13098 pWDA->pAckTxCbFunc = NULL;
13099 if( VOS_STATUS_SUCCESS !=
13100 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13101 {
13102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13103 "Tx Complete timeout Timer Stop Failed ");
13104 }
13105 }
13106 return VOS_STATUS_E_FAILURE;
13107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 /*
13109 * Wait for the event to be set by the TL, to get the response of TX
13110 * complete, this event should be set by the Callback function called by TL
13111 */
13112 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13113 &eventIdx);
13114 if(!VOS_IS_STATUS_SUCCESS(status))
13115 {
13116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13117 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013118 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013119
13120 /*Tag Frame as timed out for later deletion*/
13121 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13122 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13124 after the packet gets completed(packet freed once)*/
13125
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013126 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013127 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013128
Jeff Johnson295189b2012-06-20 16:38:30 -070013129 /* check whether the packet was freed already,so need not free again when
13130 * TL calls the WDA_Txcomplete routine
13131 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013132 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13133 /*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 -070013134 {
13135 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013136 } */
13137
Jeff Johnson295189b2012-06-20 16:38:30 -070013138 if( pAckTxComp )
13139 {
13140 pWDA->pAckTxCbFunc = NULL;
13141 if( VOS_STATUS_SUCCESS !=
13142 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13143 {
13144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13145 "Tx Complete timeout Timer Stop Failed ");
13146 }
13147 }
13148 status = VOS_STATUS_E_FAILURE;
13149 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013150#ifdef WLAN_DUMP_MGMTFRAMES
13151 if (VOS_IS_STATUS_SUCCESS(status))
13152 {
13153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13154 "%s() TX packet : SubType %d", __func__,pFc->subType);
13155 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13156 pData, frmLen);
13157 }
13158#endif
13159
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013160 if (VOS_IS_STATUS_SUCCESS(status))
13161 {
13162 if (pMac->fEnableDebugLog & 0x1)
13163 {
13164 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13165 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13166 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13167 {
13168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13169 pFc->type, pFc->subType);
13170 }
13171 }
13172 }
13173
13174
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 return status;
13176}
Jeff Johnson295189b2012-06-20 16:38:30 -070013177/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013178 * FUNCTION: WDA_ProcessDHCPStartInd
13179 * Forward DHCP Start to WDI
13180 */
13181static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13182 tAniDHCPInd *dhcpStartInd)
13183{
13184 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013185 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013186
c_hpothu0b0cab72014-02-13 21:52:40 +053013187 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13188 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013189 sizeof(tSirMacAddr));
13190
c_hpothu0b0cab72014-02-13 21:52:40 +053013191 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013192
c_hpothu0b0cab72014-02-13 21:52:40 +053013193 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013194 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13196 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013197 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013198 else if (WDI_STATUS_SUCCESS_SYNC != status)
13199 {
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13201 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13202 }
13203
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013204 vos_mem_free(dhcpStartInd);
13205 return CONVERT_WDI2VOS_STATUS(status) ;
13206}
13207
13208 /*
13209 * FUNCTION: WDA_ProcessDHCPStopInd
13210 * Forward DHCP Stop to WDI
13211 */
13212 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13213 tAniDHCPInd *dhcpStopInd)
13214 {
13215 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013216 WDI_DHCPInd wdiDHCPInd;
13217
13218 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13219 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13220
13221 status = WDI_dhcpStopInd(&wdiDHCPInd);
13222
13223 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013224 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13226 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013227 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013228 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013229 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13231 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013232 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013233
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013234 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013235
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013236 return CONVERT_WDI2VOS_STATUS(status) ;
13237 }
13238
13239/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013240 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13241 *
13242 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13243 *
13244 * PARAM:
13245 * pWDA: pointer to WDA context
13246 * pReq: pointer to stop batch scan request
13247 */
13248VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13249 tpSpoofMacAddrReqParams pReq)
13250{
13251 WDI_Status wdiStatus;
13252 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13253 tWDA_ReqParams *pWdaParams;
13254
13255 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13256 sizeof(WDI_SpoofMacAddrInfoType));
13257 if(NULL == WDI_SpoofMacAddrInfoParams) {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13259 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13260 VOS_ASSERT(0);
13261 return VOS_STATUS_E_NOMEM;
13262 }
13263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13264 if(NULL == pWdaParams) {
13265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13266 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013267 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013268 VOS_ASSERT(0);
13269 return VOS_STATUS_E_NOMEM;
13270 }
13271
13272 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13273 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13274
13275 pWdaParams->pWdaContext = pWDA;
13276 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013277 pWdaParams->wdaMsgParam = (void *)pReq;
13278
13279 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13280 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13281
Siddharth Bhal171788a2014-09-29 21:02:40 +053013282 /* store Params pass it to WDI */
13283 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13284
13285 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013286 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13287 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013288
13289 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13290 {
13291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13292 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13294 vos_mem_free(pWdaParams->wdaMsgParam);
13295 vos_mem_free(pWdaParams);
13296 }
13297
13298 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13299}
13300
13301/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013302 * FUNCTION: WDA_McProcessMsg
13303 * Trigger DAL-AL to start CFG download
13304 */
13305VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13306{
13307 VOS_STATUS status = VOS_STATUS_SUCCESS;
13308 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013309 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 {
13311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013312 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 VOS_ASSERT(0);
13314 return VOS_STATUS_E_FAILURE;
13315 }
13316
13317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013318 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013319
13320 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13321 if(NULL == pWDA )
13322 {
13323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013324 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013326 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 return VOS_STATUS_E_FAILURE;
13328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013329 /* Process all the WDA messages.. */
13330 switch( pMsg->type )
13331 {
13332 case WNI_CFG_DNLD_REQ:
13333 {
13334 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013335 /* call WDA complete event if config download success */
13336 if( VOS_IS_STATUS_SUCCESS(status) )
13337 {
13338 vos_WDAComplete_cback(pVosContext);
13339 }
13340 else
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13343 "WDA Config Download failure" );
13344 }
13345 break ;
13346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013347 /*
13348 * Init SCAN request from PE, convert it into DAL format
13349 * and send it to DAL
13350 */
13351 case WDA_INIT_SCAN_REQ:
13352 {
13353 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13354 break ;
13355 }
13356 /* start SCAN request from PE */
13357 case WDA_START_SCAN_REQ:
13358 {
13359 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13360 break ;
13361 }
13362 /* end SCAN request from PE */
13363 case WDA_END_SCAN_REQ:
13364 {
13365 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13366 break ;
13367 }
13368 /* end SCAN request from PE */
13369 case WDA_FINISH_SCAN_REQ:
13370 {
13371 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13372 break ;
13373 }
13374 /* join request from PE */
13375 case WDA_CHNL_SWITCH_REQ:
13376 {
13377 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13378 {
13379 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13380 }
13381 else
13382 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013383 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13384 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13385 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13386 {
13387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13388 "call ProcessChannelSwitchReq_V1" );
13389 WDA_ProcessChannelSwitchReq_V1(pWDA,
13390 (tSwitchChannelParams*)pMsg->bodyptr) ;
13391 }
13392 else
13393 {
13394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13395 "call ProcessChannelSwitchReq" );
13396 WDA_ProcessChannelSwitchReq(pWDA,
13397 (tSwitchChannelParams*)pMsg->bodyptr) ;
13398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 }
13400 break ;
13401 }
13402 /* ADD BSS request from PE */
13403 case WDA_ADD_BSS_REQ:
13404 {
13405 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13406 break ;
13407 }
13408 case WDA_ADD_STA_REQ:
13409 {
13410 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13411 break ;
13412 }
13413 case WDA_DELETE_BSS_REQ:
13414 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013415 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13416 break ;
13417 }
13418 case WDA_DELETE_STA_REQ:
13419 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013420 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13421 break ;
13422 }
13423 case WDA_CONFIG_PARAM_UPDATE_REQ:
13424 {
13425 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13426 break ;
13427 }
13428 case WDA_SET_BSSKEY_REQ:
13429 {
13430 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13431 break ;
13432 }
13433 case WDA_SET_STAKEY_REQ:
13434 {
13435 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13436 break ;
13437 }
13438 case WDA_SET_STA_BCASTKEY_REQ:
13439 {
13440 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13441 break ;
13442 }
13443 case WDA_REMOVE_BSSKEY_REQ:
13444 {
13445 WDA_ProcessRemoveBssKeyReq(pWDA,
13446 (tRemoveBssKeyParams *)pMsg->bodyptr);
13447 break ;
13448 }
13449 case WDA_REMOVE_STAKEY_REQ:
13450 {
13451 WDA_ProcessRemoveStaKeyReq(pWDA,
13452 (tRemoveStaKeyParams *)pMsg->bodyptr);
13453 break ;
13454 }
13455 case WDA_REMOVE_STA_BCASTKEY_REQ:
13456 {
13457 /* TODO: currently UMAC is not sending this request, Add the code for
13458 handling this request when UMAC supports */
13459 break;
13460 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013461#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 case WDA_TSM_STATS_REQ:
13463 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013464 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 break;
13466 }
13467#endif
13468 case WDA_UPDATE_EDCA_PROFILE_IND:
13469 {
13470 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13471 break;
13472 }
13473 case WDA_ADD_TS_REQ:
13474 {
13475 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13476 break;
13477 }
13478 case WDA_DEL_TS_REQ:
13479 {
13480 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13481 break;
13482 }
13483 case WDA_ADDBA_REQ:
13484 {
13485 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13486 break;
13487 }
13488 case WDA_DELBA_IND:
13489 {
13490 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13491 break;
13492 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013493 case WDA_UPDATE_CHAN_LIST_REQ:
13494 {
13495 WDA_ProcessUpdateChannelList(pWDA,
13496 (tSirUpdateChanList *)pMsg->bodyptr);
13497 break;
13498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 case WDA_SET_LINK_STATE:
13500 {
13501 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13502 break;
13503 }
13504 case WDA_GET_STATISTICS_REQ:
13505 {
13506 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13507 break;
13508 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013509#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013510 case WDA_GET_ROAM_RSSI_REQ:
13511 {
13512 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13513 break;
13514 }
13515#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 case WDA_PWR_SAVE_CFG:
13517 {
13518 if(pWDA->wdaState == WDA_READY_STATE)
13519 {
13520 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13521 }
13522 else
13523 {
13524 if(NULL != pMsg->bodyptr)
13525 {
13526 vos_mem_free(pMsg->bodyptr);
13527 }
13528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13529 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13530 }
13531 break;
13532 }
13533 case WDA_ENTER_IMPS_REQ:
13534 {
13535 if(pWDA->wdaState == WDA_READY_STATE)
13536 {
13537 WDA_ProcessEnterImpsReq(pWDA);
13538 }
13539 else
13540 {
13541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13542 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13543 }
13544 break;
13545 }
13546 case WDA_EXIT_IMPS_REQ:
13547 {
13548 if(pWDA->wdaState == WDA_READY_STATE)
13549 {
13550 WDA_ProcessExitImpsReq(pWDA);
13551 }
13552 else
13553 {
13554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13555 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13556 }
13557 break;
13558 }
13559 case WDA_ENTER_BMPS_REQ:
13560 {
13561 if(pWDA->wdaState == WDA_READY_STATE)
13562 {
13563 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13564 }
13565 else
13566 {
13567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13568 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13569 }
13570 break;
13571 }
13572 case WDA_EXIT_BMPS_REQ:
13573 {
13574 if(pWDA->wdaState == WDA_READY_STATE)
13575 {
13576 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13577 }
13578 else
13579 {
13580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13581 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13582 }
13583 break;
13584 }
13585 case WDA_ENTER_UAPSD_REQ:
13586 {
13587 if(pWDA->wdaState == WDA_READY_STATE)
13588 {
13589 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13590 }
13591 else
13592 {
13593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13594 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13595 }
13596 break;
13597 }
13598 case WDA_EXIT_UAPSD_REQ:
13599 {
13600 if(pWDA->wdaState == WDA_READY_STATE)
13601 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013602 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013603 }
13604 else
13605 {
13606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13607 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13608 }
13609 break;
13610 }
13611 case WDA_UPDATE_UAPSD_IND:
13612 {
13613 if(pWDA->wdaState == WDA_READY_STATE)
13614 {
13615 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13616 }
13617 else
13618 {
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13620 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13621 }
13622 break;
13623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 case WDA_REGISTER_PE_CALLBACK :
13625 {
13626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13627 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13628 /*TODO: store the PE callback */
13629 /* Do Nothing? MSG Body should be freed at here */
13630 if(NULL != pMsg->bodyptr)
13631 {
13632 vos_mem_free(pMsg->bodyptr);
13633 }
13634 break;
13635 }
13636 case WDA_SYS_READY_IND :
13637 {
13638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13639 "Handling msg type WDA_SYS_READY_IND " );
13640 pWDA->wdaState = WDA_READY_STATE;
13641 if(NULL != pMsg->bodyptr)
13642 {
13643 vos_mem_free(pMsg->bodyptr);
13644 }
13645 break;
13646 }
13647 case WDA_BEACON_FILTER_IND :
13648 {
13649 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13650 break;
13651 }
13652 case WDA_BTC_SET_CFG:
13653 {
13654 /*TODO: handle this while dealing with BTC */
13655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13656 "Handling msg type WDA_BTC_SET_CFG " );
13657 /* Do Nothing? MSG Body should be freed at here */
13658 if(NULL != pMsg->bodyptr)
13659 {
13660 vos_mem_free(pMsg->bodyptr);
13661 }
13662 break;
13663 }
13664 case WDA_SIGNAL_BT_EVENT:
13665 {
13666 /*TODO: handle this while dealing with BTC */
13667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13668 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13669 /* Do Nothing? MSG Body should be freed at here */
13670 if(NULL != pMsg->bodyptr)
13671 {
13672 vos_mem_free(pMsg->bodyptr);
13673 }
13674 break;
13675 }
13676 case WDA_CFG_RXP_FILTER_REQ:
13677 {
13678 WDA_ProcessConfigureRxpFilterReq(pWDA,
13679 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13680 break;
13681 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013682 case WDA_MGMT_LOGGING_INIT_REQ:
13683 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053013684 WDA_ProcessFWLoggingInitReq(pWDA,
13685 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013686 break;
13687 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013688 case WDA_GET_FRAME_LOG_REQ:
13689 {
13690 WDA_ProcessGetFrameLogReq(pWDA,
13691 (tAniGetFrameLogReq *)pMsg->bodyptr);
13692 break;
13693 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013694 case WDA_SET_HOST_OFFLOAD:
13695 {
13696 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13697 break;
13698 }
13699 case WDA_SET_KEEP_ALIVE:
13700 {
13701 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13702 break;
13703 }
13704#ifdef WLAN_NS_OFFLOAD
13705 case WDA_SET_NS_OFFLOAD:
13706 {
13707 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13708 break;
13709 }
13710#endif //WLAN_NS_OFFLOAD
13711 case WDA_ADD_STA_SELF_REQ:
13712 {
13713 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13714 break;
13715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 case WDA_DEL_STA_SELF_REQ:
13717 {
13718 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13719 break;
13720 }
13721 case WDA_WOWL_ADD_BCAST_PTRN:
13722 {
13723 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13724 break;
13725 }
13726 case WDA_WOWL_DEL_BCAST_PTRN:
13727 {
13728 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13729 break;
13730 }
13731 case WDA_WOWL_ENTER_REQ:
13732 {
13733 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13734 break;
13735 }
13736 case WDA_WOWL_EXIT_REQ:
13737 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013738 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013739 break;
13740 }
13741 case WDA_TL_FLUSH_AC_REQ:
13742 {
13743 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13744 break;
13745 }
13746 case WDA_SIGNAL_BTAMP_EVENT:
13747 {
13748 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13749 break;
13750 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013751 case WDA_FW_STATS_GET_REQ:
13752 {
13753 WDA_ProcessFWStatsGetReq(pWDA,
13754 (tSirFWStatsGetReq *)pMsg->bodyptr);
13755 break;
13756 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013757#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13758 case WDA_LINK_LAYER_STATS_SET_REQ:
13759 {
13760 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13761 break;
13762 }
13763 case WDA_LINK_LAYER_STATS_GET_REQ:
13764 {
13765 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13766 break;
13767 }
13768 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13769 {
13770 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13771 break;
13772 }
13773#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013774#ifdef WLAN_FEATURE_EXTSCAN
13775 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13776 {
13777 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13778 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13779 break;
13780 }
13781 case WDA_EXTSCAN_START_REQ:
13782 {
13783 WDA_ProcessEXTScanStartReq(pWDA,
13784 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13785 break;
13786 }
13787 case WDA_EXTSCAN_STOP_REQ:
13788 {
13789 WDA_ProcessEXTScanStopReq(pWDA,
13790 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13791 break;
13792 }
13793 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13794 {
13795 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13796 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13797 break;
13798 }
13799 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13800 {
13801 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13802 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13803 break;
13804 }
13805 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13806 {
13807 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13808 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13809 break;
13810 }
13811 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13812 {
13813 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13814 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13815 break;
13816 }
13817 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13818 {
13819 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13820 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13821 break;
13822 }
13823#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013824#ifdef WDA_UT
13825 case WDA_WDI_EVENT_MSG:
13826 {
13827 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13828 break ;
13829 }
13830#endif
13831 case WDA_UPDATE_BEACON_IND:
13832 {
13833 WDA_ProcessUpdateBeaconParams(pWDA,
13834 (tUpdateBeaconParams *)pMsg->bodyptr);
13835 break;
13836 }
13837 case WDA_SEND_BEACON_REQ:
13838 {
13839 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13840 break;
13841 }
13842 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13843 {
13844 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13845 (tSendProbeRespParams *)pMsg->bodyptr);
13846 break;
13847 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013848#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013849 case WDA_SET_MAX_TX_POWER_REQ:
13850 {
13851 WDA_ProcessSetMaxTxPowerReq(pWDA,
13852 (tMaxTxPowerParams *)pMsg->bodyptr);
13853 break;
13854 }
13855#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013856 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13857 {
13858 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13859 pMsg->bodyptr);
13860 break;
13861 }
schang86c22c42013-03-13 18:41:24 -070013862 case WDA_SET_TX_POWER_REQ:
13863 {
13864 WDA_ProcessSetTxPowerReq(pWDA,
13865 (tSirSetTxPowerReq *)pMsg->bodyptr);
13866 break;
13867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 case WDA_SET_P2P_GO_NOA_REQ:
13869 {
13870 WDA_ProcessSetP2PGONOAReq(pWDA,
13871 (tP2pPsParams *)pMsg->bodyptr);
13872 break;
13873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013874 /* timer related messages */
13875 case WDA_TIMER_BA_ACTIVITY_REQ:
13876 {
13877 WDA_BaCheckActivity(pWDA) ;
13878 break ;
13879 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013880
13881 /* timer related messages */
13882 case WDA_TIMER_TRAFFIC_STATS_IND:
13883 {
13884 WDA_TimerTrafficStatsInd(pWDA);
13885 break;
13886 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013887#ifdef WLAN_FEATURE_VOWIFI_11R
13888 case WDA_AGGR_QOS_REQ:
13889 {
13890 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13891 break;
13892 }
13893#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013894 case WDA_FTM_CMD_REQ:
13895 {
13896 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13897 break ;
13898 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013899#ifdef FEATURE_OEM_DATA_SUPPORT
13900 case WDA_START_OEM_DATA_REQ:
13901 {
13902 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13903 break;
13904 }
13905#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 /* Tx Complete Time out Indication */
13907 case WDA_TX_COMPLETE_TIMEOUT_IND:
13908 {
13909 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13910 break;
13911 }
13912 case WDA_WLAN_SUSPEND_IND:
13913 {
13914 WDA_ProcessWlanSuspendInd(pWDA,
13915 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13916 break;
13917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013918 case WDA_WLAN_RESUME_REQ:
13919 {
13920 WDA_ProcessWlanResumeReq(pWDA,
13921 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13922 break;
13923 }
13924
13925 case WDA_UPDATE_CF_IND:
13926 {
13927 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13928 pMsg->bodyptr = NULL;
13929 break;
13930 }
13931#ifdef FEATURE_WLAN_SCAN_PNO
13932 case WDA_SET_PNO_REQ:
13933 {
13934 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13935 break;
13936 }
13937 case WDA_UPDATE_SCAN_PARAMS_REQ:
13938 {
13939 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13940 break;
13941 }
13942 case WDA_SET_RSSI_FILTER_REQ:
13943 {
13944 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13945 break;
13946 }
13947#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013948#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013949 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013950 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013951 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013952 break;
13953 }
13954#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013955 case WDA_SET_TX_PER_TRACKING_REQ:
13956 {
13957 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13958 break;
13959 }
13960
13961#ifdef WLAN_FEATURE_PACKET_FILTERING
13962 case WDA_8023_MULTICAST_LIST_REQ:
13963 {
13964 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13965 break;
13966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13968 {
13969 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13970 break;
13971 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13973 {
13974 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13975 break;
13976 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13978 {
13979 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13980 break;
13981 }
13982#endif // WLAN_FEATURE_PACKET_FILTERING
13983
13984
13985 case WDA_TRANSMISSION_CONTROL_IND:
13986 {
13987 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13988 break;
13989 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013990 case WDA_SET_POWER_PARAMS_REQ:
13991 {
13992 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13993 break;
13994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013995#ifdef WLAN_FEATURE_GTK_OFFLOAD
13996 case WDA_GTK_OFFLOAD_REQ:
13997 {
13998 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13999 break;
14000 }
14001
14002 case WDA_GTK_OFFLOAD_GETINFO_REQ:
14003 {
14004 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14005 break;
14006 }
14007#endif //WLAN_FEATURE_GTK_OFFLOAD
14008
14009 case WDA_SET_TM_LEVEL_REQ:
14010 {
14011 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14012 break;
14013 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014014
Mohit Khanna4a70d262012-09-11 16:30:12 -070014015 case WDA_UPDATE_OP_MODE:
14016 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014017 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14018 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14019 {
14020 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14021 }
14022 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014023 {
14024 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14025 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14026 else
14027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014028 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014029 }
14030 else
14031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014032 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014033 break;
14034 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014035#ifdef WLAN_FEATURE_11W
14036 case WDA_EXCLUDE_UNENCRYPTED_IND:
14037 {
14038 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14039 break;
14040 }
14041#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014042#ifdef FEATURE_WLAN_TDLS
14043 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14044 {
14045 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14046 break;
14047 }
14048#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014049 case WDA_DHCP_START_IND:
14050 {
14051 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14052 break;
14053 }
14054 case WDA_DHCP_STOP_IND:
14055 {
14056 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14057 break;
14058 }
Leo Chang9056f462013-08-01 19:21:11 -070014059#ifdef FEATURE_WLAN_LPHB
14060 case WDA_LPHB_CONF_REQ:
14061 {
14062 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14063 break;
14064 }
14065#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014066 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14067 {
14068 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14069 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14070 break;
14071 }
14072 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14073 {
14074 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14075 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14076 break;
14077 }
14078
Rajeev79dbe4c2013-10-05 11:03:42 +053014079#ifdef FEATURE_WLAN_BATCH_SCAN
14080 case WDA_SET_BATCH_SCAN_REQ:
14081 {
14082 WDA_ProcessSetBatchScanReq(pWDA,
14083 (tSirSetBatchScanReq *)pMsg->bodyptr);
14084 break;
14085 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014086 case WDA_RATE_UPDATE_IND:
14087 {
14088 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14089 break;
14090 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014091 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14092 {
14093 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14094 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14095 break;
14096 }
14097 case WDA_STOP_BATCH_SCAN_IND:
14098 {
14099 WDA_ProcessStopBatchScanInd(pWDA,
14100 (tSirStopBatchScanInd *)pMsg->bodyptr);
14101 break;
14102 }
c_hpothu92367912014-05-01 15:18:17 +053014103 case WDA_GET_BCN_MISS_RATE_REQ:
14104 WDA_ProcessGetBcnMissRateReq(pWDA,
14105 (tSirBcnMissRateReq *)pMsg->bodyptr);
14106 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014107#endif
14108
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014109 case WDA_HT40_OBSS_SCAN_IND:
14110 {
14111 WDA_ProcessHT40OBSSScanInd(pWDA,
14112 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14113 break;
14114 }
14115 case WDA_HT40_OBSS_STOP_SCAN_IND:
14116 {
14117 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14118 (tANI_U8*)pMsg->bodyptr);
14119 break;
14120 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014121// tdlsoffchan
14122#ifdef FEATURE_WLAN_TDLS
14123 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14124 {
14125 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14126 break;
14127 }
14128#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014129 case WDA_SPOOF_MAC_ADDR_REQ:
14130 {
14131 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14132 break;
14133 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014134 case WDA_ENCRYPT_MSG_REQ:
14135 {
14136 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14137 break;
14138 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014139
14140 case WDA_NAN_REQUEST:
14141 {
14142 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14143 break;
14144 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014145 case WDA_SET_RTS_CTS_HTVHT:
14146 {
14147 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14148 break;
14149 }
Katya Nigamf0511f62015-05-05 16:40:57 +053014150
14151 case WDA_MON_START_REQ:
14152 {
14153 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
14154 break;
14155 }
14156 case WDA_MON_STOP_REQ:
14157 {
14158 WDA_ProcessMonStopReq(pWDA,NULL);
14159 break;
14160 }
14161
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 default:
14163 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014165 "No Handling for msg type %x in WDA "
14166 ,pMsg->type);
14167 /* Do Nothing? MSG Body should be freed at here */
14168 if(NULL != pMsg->bodyptr)
14169 {
14170 vos_mem_free(pMsg->bodyptr);
14171 }
14172 //WDA_VOS_ASSERT(0) ;
14173 }
14174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014175 return status ;
14176}
14177
Jeff Johnson295189b2012-06-20 16:38:30 -070014178/*
14179 * FUNCTION: WDA_LowLevelIndCallback
14180 * IND API callback from WDI, send Ind to PE
14181 */
14182void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14183 void* pUserData )
14184{
14185 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14186#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14187 tSirRSSINotification rssiNotification;
14188#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014189 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 {
14191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014192 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014193 VOS_ASSERT(0);
14194 return ;
14195 }
14196
14197 switch(wdiLowLevelInd->wdiIndicationType)
14198 {
14199 case WDI_RSSI_NOTIFICATION_IND:
14200 {
14201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14202 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014203#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14204 rssiNotification.bReserved =
14205 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14206 rssiNotification.bRssiThres1NegCross =
14207 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14208 rssiNotification.bRssiThres1PosCross =
14209 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14210 rssiNotification.bRssiThres2NegCross =
14211 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14212 rssiNotification.bRssiThres2PosCross =
14213 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14214 rssiNotification.bRssiThres3NegCross =
14215 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14216 rssiNotification.bRssiThres3PosCross =
14217 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014218 rssiNotification.avgRssi = (v_S7_t)
14219 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014220 WLANTL_BMPSRSSIRegionChangedNotification(
14221 pWDA->pVosContext,
14222 &rssiNotification);
14223#endif
14224 break ;
14225 }
14226 case WDI_MISSED_BEACON_IND:
14227 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014228 tpSirSmeMissedBeaconInd pMissBeacInd =
14229 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14231 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014232 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014233 if(NULL == pMissBeacInd)
14234 {
14235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14236 "%s: VOS MEM Alloc Failure", __func__);
14237 break;
14238 }
14239 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14240 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14241 pMissBeacInd->bssIdx =
14242 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14243 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014244 break ;
14245 }
14246 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14247 {
14248 /* TODO: Decode Ind and send Ind to PE */
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14250 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14251 break ;
14252 }
14253
14254 case WDI_MIC_FAILURE_IND:
14255 {
14256 tpSirSmeMicFailureInd pMicInd =
14257 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14258
14259 if(NULL == pMicInd)
14260 {
14261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014263 break;
14264 }
14265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14266 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014267 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14268 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14269 vos_mem_copy(pMicInd->bssId,
14270 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14271 sizeof(tSirMacAddr));
14272 vos_mem_copy(pMicInd->info.srcMacAddr,
14273 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14274 sizeof(tSirMacAddr));
14275 vos_mem_copy(pMicInd->info.taMacAddr,
14276 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14277 sizeof(tSirMacAddr));
14278 vos_mem_copy(pMicInd->info.dstMacAddr,
14279 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14280 sizeof(tSirMacAddr));
14281 vos_mem_copy(pMicInd->info.rxMacAddr,
14282 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14283 sizeof(tSirMacAddr));
14284 pMicInd->info.multicast =
14285 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14286 pMicInd->info.keyId=
14287 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14288 pMicInd->info.IV1=
14289 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14290 vos_mem_copy(pMicInd->info.TSC,
14291 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014292 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14293 (void *)pMicInd , 0) ;
14294 break ;
14295 }
14296 case WDI_FATAL_ERROR_IND:
14297 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014298 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 /* TODO: Decode Ind and send Ind to PE */
14300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14301 "Received WDI_FATAL_ERROR_IND from WDI ");
14302 break ;
14303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014304 case WDI_DEL_STA_IND:
14305 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 tpDeleteStaContext pDelSTACtx =
14307 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14308
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14310 "Received WDI_DEL_STA_IND from WDI ");
14311 if(NULL == pDelSTACtx)
14312 {
14313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 break;
14316 }
14317 vos_mem_copy(pDelSTACtx->addr2,
14318 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14319 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014320 vos_mem_copy(pDelSTACtx->bssId,
14321 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14322 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014323 pDelSTACtx->assocId =
14324 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14325 pDelSTACtx->reasonCode =
14326 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14327 pDelSTACtx->staId =
14328 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014329 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14330 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014331 break ;
14332 }
14333 case WDI_COEX_IND:
14334 {
14335 tANI_U32 index;
14336 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014337 tSirSmeCoexInd *pSmeCoexInd;
14338
14339 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14340 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14341 {
14342 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14343 {
14344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14345 FL("Coex state: 0x%x coex feature: 0x%x"),
14346 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14347 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14348
14349 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14350 {
14351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14352 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14353 }
14354 }
14355 break;
14356 }
14357
14358 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014359 if(NULL == pSmeCoexInd)
14360 {
14361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014362 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 break;
14364 }
14365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14366 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 /* Message Header */
14368 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14369 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014370 /* Info from WDI Indication */
14371 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14372 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14373 {
14374 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 /* VOS message wrapper */
14377 vosMsg.type = eWNI_SME_COEX_IND;
14378 vosMsg.bodyptr = (void *)pSmeCoexInd;
14379 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014380 /* Send message to SME */
14381 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14382 {
14383 /* free the mem and return */
14384 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14385 }
14386 else
14387 {
14388 /* DEBUG */
14389 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14390 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14391 pSmeCoexInd->coexIndType,
14392 pSmeCoexInd->coexIndData[0],
14393 pSmeCoexInd->coexIndData[1],
14394 pSmeCoexInd->coexIndData[2],
14395 pSmeCoexInd->coexIndData[3]);
14396 }
14397 break;
14398 }
14399 case WDI_TX_COMPLETE_IND:
14400 {
14401 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14402 /* Calling TxCompleteAck Indication from wda context*/
14403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14404 "Complete Indication received from HAL");
14405 if( pWDA->pAckTxCbFunc )
14406 {
14407 if( VOS_STATUS_SUCCESS !=
14408 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14409 {
14410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14411 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014412 }
14413 if (IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
14414 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14415 else
14416 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014417 pWDA->pAckTxCbFunc = NULL;
14418 }
14419 else
14420 {
14421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14422 "Tx Complete Indication is received after timeout ");
14423 }
14424 break;
14425 }
Viral Modid86bde22012-12-10 13:09:21 -080014426 case WDI_P2P_NOA_START_IND :
14427 {
14428 tSirP2PNoaStart *pP2pNoaStart =
14429 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14430
14431 if (NULL == pP2pNoaStart)
14432 {
14433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14434 "Memory allocation failure, "
14435 "WDI_P2P_NOA_START_IND not forwarded");
14436 break;
14437 }
14438 pP2pNoaStart->status =
14439 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14440 pP2pNoaStart->bssIdx =
14441 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14442 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14443 (void *)pP2pNoaStart , 0) ;
14444 break;
14445 }
14446
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014447#ifdef FEATURE_WLAN_TDLS
14448 case WDI_TDLS_IND :
14449 {
14450 tSirTdlsInd *pTdlsInd =
14451 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14452
14453 if (NULL == pTdlsInd)
14454 {
14455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14456 "Memory allocation failure, "
14457 "WDI_TDLS_IND not forwarded");
14458 break;
14459 }
14460 pTdlsInd->status =
14461 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14462 pTdlsInd->assocId =
14463 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14464 pTdlsInd->staIdx =
14465 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14466 pTdlsInd->reasonCode =
14467 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14468 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14469 (void *)pTdlsInd , 0) ;
14470 break;
14471 }
14472#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014473 case WDI_P2P_NOA_ATTR_IND :
14474 {
14475 tSirP2PNoaAttr *pP2pNoaAttr =
14476 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14478 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 if (NULL == pP2pNoaAttr)
14480 {
14481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14482 "Memory allocation failure, "
14483 "WDI_P2P_NOA_ATTR_IND not forwarded");
14484 break;
14485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014486 pP2pNoaAttr->index =
14487 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14488 pP2pNoaAttr->oppPsFlag =
14489 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14490 pP2pNoaAttr->ctWin =
14491 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14492
14493 pP2pNoaAttr->uNoa1IntervalCnt =
14494 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14495 pP2pNoaAttr->uNoa1Duration =
14496 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14497 pP2pNoaAttr->uNoa1Interval =
14498 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14499 pP2pNoaAttr->uNoa1StartTime =
14500 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 pP2pNoaAttr->uNoa2IntervalCnt =
14502 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14503 pP2pNoaAttr->uNoa2Duration =
14504 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14505 pP2pNoaAttr->uNoa2Interval =
14506 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14507 pP2pNoaAttr->uNoa2StartTime =
14508 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14510 (void *)pP2pNoaAttr , 0) ;
14511 break;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513#ifdef FEATURE_WLAN_SCAN_PNO
14514 case WDI_PREF_NETWORK_FOUND_IND:
14515 {
14516 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014517 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14518 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14519 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14520 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14521
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14523 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 if (NULL == pPrefNetworkFoundInd)
14525 {
14526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14527 "Memory allocation failure, "
14528 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014529 if (NULL !=
14530 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14531 {
14532 wpalMemoryFree(
14533 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14534 );
14535 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 break;
14538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 /* Message Header */
14540 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014541 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014542
14543 /* Info from WDI Indication */
14544 pPrefNetworkFoundInd->ssId.length =
14545 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14548 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14549 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014550 if (NULL !=
14551 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14552 {
14553 pPrefNetworkFoundInd->frameLength =
14554 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14555 vos_mem_copy( pPrefNetworkFoundInd->data,
14556 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14557 pPrefNetworkFoundInd->frameLength);
14558 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14559 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14560 }
14561 else
14562 {
14563 pPrefNetworkFoundInd->frameLength = 0;
14564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 /* VOS message wrapper */
14567 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14568 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14569 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014570 /* Send message to SME */
14571 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14572 {
14573 /* free the mem and return */
14574 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 break;
14577 }
14578#endif // FEATURE_WLAN_SCAN_PNO
14579
14580#ifdef WLAN_WAKEUP_EVENTS
14581 case WDI_WAKE_REASON_IND:
14582 {
14583 vos_msg_t vosMsg;
14584 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14585 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14586 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14587
14588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014589 "[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 -070014590 wdiLowLevelInd->wdiIndicationType,
14591 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14592 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14593 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14594
14595 if (NULL == pWakeReasonInd)
14596 {
14597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14598 "Memory allocation failure, "
14599 "WDI_WAKE_REASON_IND not forwarded");
14600 break;
14601 }
14602
14603 vos_mem_zero(pWakeReasonInd, allocSize);
14604
14605 /* Message Header */
14606 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14607 pWakeReasonInd->mesgLen = allocSize;
14608
14609 /* Info from WDI Indication */
14610 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14611 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14612 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14613 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14614 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14615 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14616 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14617 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14618
14619 /* VOS message wrapper */
14620 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14621 vosMsg.bodyptr = (void *) pWakeReasonInd;
14622 vosMsg.bodyval = 0;
14623
14624 /* Send message to SME */
14625 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14626 {
14627 /* free the mem and return */
14628 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14629 }
14630
14631 break;
14632 }
14633#endif // WLAN_WAKEUP_EVENTS
14634
14635 case WDI_TX_PER_HIT_IND:
14636 {
14637 vos_msg_t vosMsg;
14638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14639 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14640 /* VOS message wrapper */
14641 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14642 vosMsg.bodyptr = NULL;
14643 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014644 /* Send message to SME */
14645 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14646 {
14647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14648 }
14649 break;
14650 }
14651
Leo Chang9056f462013-08-01 19:21:11 -070014652#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014653 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014654 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014655 vos_msg_t vosMsg;
14656 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014657
Leo Changd9df8aa2013-09-26 13:32:26 -070014658 lphbInd =
14659 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14660 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014661 {
14662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14663 "%s: LPHB IND buffer alloc Fail", __func__);
14664 return ;
14665 }
14666
Leo Changd9df8aa2013-09-26 13:32:26 -070014667 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014668 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014669 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014670 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014671 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014672 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14673
14674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014675 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014676 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14677
Leo Changd9df8aa2013-09-26 13:32:26 -070014678 vosMsg.type = eWNI_SME_LPHB_IND;
14679 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014680 vosMsg.bodyval = 0;
14681 /* Send message to SME */
14682 if (VOS_STATUS_SUCCESS !=
14683 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14684 {
14685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14686 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014687 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014688 }
14689 break;
14690 }
14691#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014692 case WDI_PERIODIC_TX_PTRN_FW_IND:
14693 {
14694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14695 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14696 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14697 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14698 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14699 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14700 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14701
14702 break;
14703 }
Leo Chang9056f462013-08-01 19:21:11 -070014704
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014705 case WDI_IBSS_PEER_INACTIVITY_IND:
14706 {
14707 tSirIbssPeerInactivityInd *pIbssInd =
14708 (tSirIbssPeerInactivityInd *)
14709 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14710
14711 if (NULL == pIbssInd)
14712 {
14713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14714 "Memory allocation failure, "
14715 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14716 break;
14717 }
14718
14719 pIbssInd->bssIdx =
14720 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14721 pIbssInd->staIdx =
14722 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14723 vos_mem_copy(pIbssInd->peerAddr,
14724 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14725 sizeof(tSirMacAddr));
14726 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14727 break;
14728 }
14729
Rajeev79dbe4c2013-10-05 11:03:42 +053014730#ifdef FEATURE_WLAN_BATCH_SCAN
14731 case WDI_BATCH_SCAN_RESULT_IND:
14732 {
14733 void *pBatchScanResult;
14734 void *pCallbackContext;
14735 tpAniSirGlobal pMac;
14736
14737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14738 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14739
14740 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014741 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014742 {
14743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14744 "%s:pWDA is NULL", __func__);
14745 VOS_ASSERT(0);
14746 return;
14747 }
14748
14749 pBatchScanResult =
14750 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14751 if (NULL == pBatchScanResult)
14752 {
14753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14754 "%s:Batch scan result from FW is null can't invoke HDD callback",
14755 __func__);
14756 VOS_ASSERT(0);
14757 return;
14758 }
14759
14760 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14761 if (NULL == pMac)
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14764 "%s:pMac is NULL", __func__);
14765 VOS_ASSERT(0);
14766 return;
14767 }
14768
14769 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14770 /*call hdd callback with set batch scan response data*/
14771 if(pMac->pmc.batchScanResultCallback)
14772 {
14773 pMac->pmc.batchScanResultCallback(pCallbackContext,
14774 pBatchScanResult);
14775 }
14776 else
14777 {
14778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14779 "%s:HDD callback is null", __func__);
14780 VOS_ASSERT(0);
14781 }
14782 break;
14783 }
14784#endif
14785
Leo Chang0b0e45a2013-12-15 15:18:55 -080014786#ifdef FEATURE_WLAN_CH_AVOID
14787 case WDI_CH_AVOID_IND:
14788 {
14789 vos_msg_t vosMsg;
14790 tSirChAvoidIndType *chAvoidInd;
14791
14792 chAvoidInd =
14793 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14794 if (NULL == chAvoidInd)
14795 {
14796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14797 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14798 return ;
14799 }
14800
14801 chAvoidInd->avoidRangeCount =
14802 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14803 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14804 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14805 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14806
14807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14808 "%s : WDA CH avoid notification", __func__);
14809
14810 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14811 vosMsg.bodyptr = chAvoidInd;
14812 vosMsg.bodyval = 0;
14813 /* Send message to SME */
14814 if (VOS_STATUS_SUCCESS !=
14815 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14816 {
14817 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14818 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14819 vos_mem_free(chAvoidInd);
14820 }
14821 break;
14822 }
14823#endif /* FEATURE_WLAN_CH_AVOID */
14824
Sunil Duttbd736ed2014-05-26 21:19:41 +053014825#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14826 case WDI_LL_STATS_RESULTS_IND:
14827 {
14828 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014829 tpAniSirGlobal pMac;
14830
14831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14832 "Received WDI_LL_STATS_RESULTS_IND from FW");
14833
14834 /*sanity check*/
14835 if (NULL == pWDA)
14836 {
14837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14838 "%s:pWDA is NULL", __func__);
14839 VOS_ASSERT(0);
14840 return;
14841 }
14842
14843 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014844 (void *)wdiLowLevelInd->
14845 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014846 if (NULL == pLinkLayerStatsInd)
14847 {
14848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14849 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14850 __func__);
14851 VOS_ASSERT(0);
14852 return;
14853 }
14854
14855 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14856 if (NULL == pMac)
14857 {
14858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14859 "%s:pMac is NULL", __func__);
14860 VOS_ASSERT(0);
14861 return;
14862 }
14863
Dino Mycled3d50022014-07-07 12:58:25 +053014864 /* call hdd callback with Link Layer Statistics.
14865 * vdev_id/ifacId in link_stats_results will be
14866 * used to retrieve the correct HDD context
14867 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014868 if (pMac->sme.pLinkLayerStatsIndCallback)
14869 {
Dino Mycled3d50022014-07-07 12:58:25 +053014870 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014871 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014872 pLinkLayerStatsInd,
14873 wdiLowLevelInd->
14874 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014875 }
14876 else
14877 {
14878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14879 "%s:HDD callback is null", __func__);
14880 }
14881 break;
14882 }
14883#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14884
Dino Mycle41bdc942014-06-10 11:30:24 +053014885#ifdef WLAN_FEATURE_EXTSCAN
14886 case WDI_EXTSCAN_PROGRESS_IND:
14887 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14888 case WDI_EXTSCAN_SCAN_RESULT_IND:
14889 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14890 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14891 {
14892 void *pEXTScanData;
14893 void *pCallbackContext;
14894 tpAniSirGlobal pMac;
14895 tANI_U16 indType;
14896
14897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14898 "Received WDI_EXTSCAN Indications from FW");
14899 /*sanity check*/
14900 if (NULL == pWDA)
14901 {
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14903 "%s:pWDA is NULL", __func__);
14904 VOS_ASSERT(0);
14905 return;
14906 }
14907 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14908 {
14909 indType = WDA_EXTSCAN_PROGRESS_IND;
14910
14911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14912 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14913 }
14914 if (wdiLowLevelInd->wdiIndicationType ==
14915 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14916 {
14917 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14918
14919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14920 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14921 }
14922 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14923 {
14924 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14925
14926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14927 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14928 }
14929 if (wdiLowLevelInd->wdiIndicationType ==
14930 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14931 {
14932 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14933
14934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14935 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14936 }
14937 if (wdiLowLevelInd->wdiIndicationType ==
14938 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14939 {
14940 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14941
14942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14943 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14944 }
14945
14946 pEXTScanData =
14947 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14948 if (NULL == pEXTScanData)
14949 {
14950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14951 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14952 __func__);
14953 VOS_ASSERT(0);
14954 return;
14955 }
14956
14957 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14958 if (NULL == pMac)
14959 {
14960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14961 "%s:pMac is NULL", __func__);
14962 VOS_ASSERT(0);
14963 return;
14964 }
14965
14966 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14967
14968 if(pMac->sme.pEXTScanIndCb)
14969 {
14970 pMac->sme.pEXTScanIndCb(pCallbackContext,
14971 indType,
14972 pEXTScanData);
14973 }
14974 else
14975 {
14976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14977 "%s:HDD callback is null", __func__);
14978 }
14979 break;
14980 }
14981#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014982 case WDI_DEL_BA_IND:
14983 {
14984 tpBADeleteParams pDelBAInd =
14985 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14986
14987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14988 "Received WDI_DEL_BA_IND from WDI ");
14989 if(NULL == pDelBAInd)
14990 {
14991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14992 "%s: VOS MEM Alloc Failure", __func__);
14993 break;
14994 }
14995 vos_mem_copy(pDelBAInd->peerMacAddr,
14996 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14997 sizeof(tSirMacAddr));
14998 vos_mem_copy(pDelBAInd->bssId,
14999 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
15000 sizeof(tSirMacAddr));
15001 pDelBAInd->staIdx =
15002 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
15003 pDelBAInd->baTID =
15004 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
15005 pDelBAInd->baDirection =
15006 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
15007 pDelBAInd->reasonCode =
15008 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
15009
15010 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
15011 (void *)pDelBAInd , 0) ;
15012 break;
15013 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015014 case WDI_NAN_EVENT_IND:
15015 {
15016 vos_msg_t vosMsg;
15017 tpSirNanEvent pSirNanEvent = NULL;
15018
15019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15020 "Received WDI_NAN_EVENT");
15021
15022 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15023 - sizeof( pSirNanEvent->event_data)
15024 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15025
15026 if (NULL == pSirNanEvent)
15027 {
15028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15029 "%s: VOS MEM Alloc Failure", __func__);
15030 VOS_ASSERT(0) ;
15031 break;
15032 }
15033
15034 pSirNanEvent->event_data_len =
15035 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15036
15037 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15038 {
15039 vos_mem_copy( pSirNanEvent->event_data,
15040 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15041 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15042 }
15043
15044 /* VOS message wrapper */
15045 vosMsg.type = eWNI_SME_NAN_EVENT;
15046 vosMsg.bodyptr = pSirNanEvent;
15047 vosMsg.bodyval = 0;
15048
15049 /* Send message to SME */
15050 if (VOS_STATUS_SUCCESS
15051 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15052 {
15053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15054 "post eWNI_SME_NAN_EVENT to SME Failed");
15055 vos_mem_free(pSirNanEvent);
15056 }
15057 break;
15058 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015059
Jeff Johnson295189b2012-06-20 16:38:30 -070015060 default:
15061 {
15062 /* TODO error */
15063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15064 "Received UNKNOWN Indication from WDI ");
15065 }
15066 }
15067 return ;
15068}
15069
Jeff Johnson295189b2012-06-20 16:38:30 -070015070/*
15071 * BA related processing in WDA.
15072 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015073void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15074 void* pUserData)
15075{
15076 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15077 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015078 if(NULL == pWdaParams)
15079 {
15080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015081 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015082 VOS_ASSERT(0) ;
15083 return ;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015086 vos_mem_free(pWdaParams->wdaMsgParam) ;
15087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15088 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015090 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015091 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15092 {
15093 tANI_U8 i = 0 ;
15094 tBaActivityInd *baActivityInd = NULL ;
15095 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15096 tANI_U8 allocSize = sizeof(tBaActivityInd)
15097 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15098 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15099 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015100 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 if(NULL == baActivityInd)
15102 {
15103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 VOS_ASSERT(0) ;
15106 return;
15107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015108 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15109 sizeof(tSirMacAddr)) ;
15110 baActivityInd->baCandidateCnt = baCandidateCount ;
15111
15112 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15113 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15114
15115 for(i = 0 ; i < baCandidateCount ; i++)
15116 {
15117 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015118 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15119 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015120 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15121 {
15122 baCandidate->baInfo[tid].fBaEnable =
15123 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15124 baCandidate->baInfo[tid].startingSeqNum =
15125 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15126 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015127 wdiBaCandidate++ ;
15128 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015129 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015130 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15131 }
15132 else
15133 {
15134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15135 "BA Trigger RSP with Failure received ");
15136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015137 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015138}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015139
15140
15141/*
15142 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15143 * during MCC
15144 */
15145void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15146{
15147 wpt_uint32 enabled;
15148 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15149 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15150 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15151
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015152 if (NULL == pMac )
15153 {
15154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15155 "%s: Invoked with invalid MAC context ", __func__ );
15156 VOS_ASSERT(0);
15157 return;
15158 }
15159
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015160 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15161 != eSIR_SUCCESS)
15162 {
15163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15164 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15165 return;
15166 }
15167
15168 if(!enabled)
15169 {
15170 return;
15171 }
15172
15173 if(NULL == pWDA)
15174 {
15175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15176 "%s:WDA context is NULL", __func__);
15177 VOS_ASSERT(0);
15178 return;
15179 }
15180
15181 if(activate)
15182 {
15183 if( VOS_STATUS_SUCCESS !=
15184 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15185 {
15186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15187 "Traffic Stats Timer Start Failed ");
15188 return;
15189 }
15190 WDI_DS_ActivateTrafficStats();
15191 }
15192 else
15193 {
15194 WDI_DS_DeactivateTrafficStats();
15195 WDI_DS_ClearTrafficStats();
15196
15197 if( VOS_STATUS_SUCCESS !=
15198 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15199 {
15200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15201 "Traffic Stats Timer Stop Failed ");
15202 return;
15203 }
15204 }
15205}
15206
15207/*
15208 * Traffic Stats Timer handler
15209 */
15210void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15211{
15212 WDI_Status wdiStatus;
15213 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15214 WDI_TrafficStatsIndType trafficStatsIndParams;
15215 wpt_uint32 length, enabled;
15216 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15217
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015218 if (NULL == pMac )
15219 {
15220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15221 "%s: Invoked with invalid MAC context ", __func__ );
15222 VOS_ASSERT(0);
15223 return;
15224 }
15225
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015226 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15227 != eSIR_SUCCESS)
15228 {
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15230 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15231 return;
15232 }
15233
15234 if(!enabled)
15235 {
15236 WDI_DS_DeactivateTrafficStats();
15237 return;
15238 }
15239
15240 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15241
15242 if(pWdiTrafficStats != NULL)
15243 {
15244 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15245 trafficStatsIndParams.length = length;
15246 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015247 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015248 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15249 trafficStatsIndParams.pUserData = pWDA;
15250
15251 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15252
15253 if(WDI_STATUS_PENDING == wdiStatus)
15254 {
15255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15256 "Pending received for %s:%d ",__func__,__LINE__ );
15257 }
15258 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15259 {
15260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15261 "Failure in %s:%d ",__func__,__LINE__ );
15262 }
15263
15264 WDI_DS_ClearTrafficStats();
15265 }
15266 else
15267 {
15268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15269 "pWdiTrafficStats is Null");
15270 }
15271
15272 if( VOS_STATUS_SUCCESS !=
15273 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15274 {
15275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15276 "Traffic Stats Timer Start Failed ");
15277 return;
15278 }
15279}
15280
Jeff Johnson295189b2012-06-20 16:38:30 -070015281/*
15282 * BA Activity check timer handler
15283 */
15284void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15285{
15286 tANI_U8 curSta = 0 ;
15287 tANI_U8 tid = 0 ;
15288 tANI_U8 size = 0 ;
15289 tANI_U8 baCandidateCount = 0 ;
15290 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015291 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015293 tpAniSirGlobal pMac;
15294
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015295 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 {
15297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015298 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015299 VOS_ASSERT(0);
15300 return ;
15301 }
15302 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15303 {
15304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15305 "Inconsistent STA entries in WDA");
15306 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015307 }
15308 if(NULL == pWDA->pVosContext)
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15311 "%s: pVosContext is NULL",__func__);
15312 VOS_ASSERT(0);
15313 return ;
15314 }
15315 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015316 if(NULL == pMac)
15317 {
15318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15319 "%s: pMac is NULL",__func__);
15320 VOS_ASSERT(0);
15321 return ;
15322 }
15323
Abhishek Singh0644e482014-10-06 18:38:23 +053015324 if (wlan_cfgGetInt(pMac,
15325 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15326 eSIR_SUCCESS)
15327 {
15328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15329 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15330 val = 0;
15331 }
15332
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 /* walk through all STA entries and find out TX packet count */
15334 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15335 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015336 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015337#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015338 // We can only do BA on "hard" STAs.
15339 if (!(IS_HWSTA_IDX(curSta)))
15340 {
15341 continue;
15342 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015343#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015344 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15345 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015346 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 tANI_U32 txPktCount = 0 ;
15348 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015350 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15351 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015352 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15353 curSta, tid, &txPktCount)))
15354 {
15355#if 0
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15357 "************* %d:%d, %d ",curSta, txPktCount,
15358 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15359#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015360 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15361 (currentOperChan <= SIR_11B_CHANNEL_END)))
15362 {
15363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15364 "%s: BTC disabled aggregation - dont start "
15365 "TX ADDBA req",__func__);
15366 }
15367 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015368 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015369 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15370 pWDA->wdaGlobalSystemRole) && txPktCount )
15371 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15372 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 {
15374 /* get prepare for sending message to HAL */
15375 //baCandidate[baCandidateCount].staIdx = curSta ;
15376 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15377 newBaCandidate = WDA_ENABLE_BA ;
15378 }
15379 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15380 }
15381 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015382 /* fill the entry for all the sta with given TID's */
15383 if(WDA_ENABLE_BA == newBaCandidate)
15384 {
15385 /* move to next BA candidate */
15386 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15387 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15388 baCandidateCount++ ;
15389 newBaCandidate = WDA_DISABLE_BA ;
15390 }
15391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 /* prepare and send message to hal */
15393 if( 0 < baCandidateCount)
15394 {
15395 WDI_Status status = WDI_STATUS_SUCCESS ;
15396 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15397 tWDA_ReqParams *pWdaParams =
15398 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015399 if(NULL == pWdaParams)
15400 {
15401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015403 VOS_ASSERT(0) ;
15404 return;
15405 }
15406 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15407 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15408 if(NULL == wdiTriggerBaReq)
15409 {
15410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015412 VOS_ASSERT(0) ;
15413 vos_mem_free(pWdaParams);
15414 return;
15415 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015416 do
15417 {
15418 WDI_TriggerBAReqinfoType *triggerBaInfo =
15419 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15420 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15421 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15422 * for each request */
15423 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15424 triggerBaInfo->ucBASessionID = 0;
15425 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15426 } while(0) ;
15427 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015429 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015430 pWdaParams->pWdaContext = pWDA;
15431 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15432 pWdaParams->wdaMsgParam = NULL;
15433 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15434 WDA_TriggerBaReqCallback, pWdaParams) ;
15435 if(IS_WDI_STATUS_FAILURE(status))
15436 {
15437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15438 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15439 vos_mem_free(pWdaParams->wdaMsgParam) ;
15440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15441 vos_mem_free(pWdaParams) ;
15442 }
15443 }
15444 else
15445 {
15446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15447 "There is no TID for initiating BA");
15448 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015449 if( VOS_STATUS_SUCCESS !=
15450 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15451 {
15452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15453 "BA Activity Timer Stop Failed ");
15454 return ;
15455 }
15456 if( VOS_STATUS_SUCCESS !=
15457 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15458 {
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15460 "BA Activity Timer Start Failed ");
15461 return;
15462 }
15463 return ;
15464}
Jeff Johnson295189b2012-06-20 16:38:30 -070015465/*
15466 * WDA common routine to create timer used by WDA.
15467 */
15468static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15469{
Jeff Johnson295189b2012-06-20 16:38:30 -070015470 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15471 tANI_U32 val = 0 ;
15472 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15473
15474 if(NULL == pMac)
15475 {
15476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015477 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015478 VOS_ASSERT(0);
15479 return VOS_STATUS_E_FAILURE;
15480 }
15481 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15482 != eSIR_SUCCESS)
15483 {
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15485 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15486 return VOS_STATUS_E_FAILURE;
15487 }
15488 val = SYS_MS_TO_TICKS(val) ;
15489
15490 /* BA activity check timer */
15491 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15492 "BA Activity Check timer", WDA_TimerHandler,
15493 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15494 if(status != TX_SUCCESS)
15495 {
15496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15497 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015498 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015499 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015501 /* Tx Complete Timeout timer */
15502 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15503 "Tx Complete Check timer", WDA_TimerHandler,
15504 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015505 if(status != TX_SUCCESS)
15506 {
15507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15508 "Unable to create Tx Complete Timeout timer");
15509 /* Destroy timer of BA activity check timer */
15510 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15511 if(status != TX_SUCCESS)
15512 {
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15514 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015515 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015516 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015517 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015518 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015519
15520 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15521
15522 /* Traffic Stats timer */
15523 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15524 "Traffic Stats timer", WDA_TimerHandler,
15525 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15526 if(status != TX_SUCCESS)
15527 {
15528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15529 "Unable to create traffic stats timer");
15530 /* Destroy timer of BA activity check timer */
15531 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15532 if(status != TX_SUCCESS)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "Unable to Destroy BA activity timer");
15536 }
15537 /* Destroy timer of tx complete timer */
15538 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15539 if(status != TX_SUCCESS)
15540 {
15541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15542 "Unable to Tx complete timer");
15543 }
15544 return VOS_STATUS_E_FAILURE ;
15545 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015546 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015547}
Jeff Johnson295189b2012-06-20 16:38:30 -070015548/*
15549 * WDA common routine to destroy timer used by WDA.
15550 */
15551static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15552{
15553 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015554 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15555 if(status != TX_SUCCESS)
15556 {
15557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15558 "Unable to Destroy Tx Complete Timeout timer");
15559 return eSIR_FAILURE ;
15560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15562 if(status != TX_SUCCESS)
15563 {
15564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15565 "Unable to Destroy BA activity timer");
15566 return eSIR_FAILURE ;
15567 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015568 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15569 if(status != TX_SUCCESS)
15570 {
15571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15572 "Unable to Destroy traffic stats timer");
15573 return eSIR_FAILURE ;
15574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 return eSIR_SUCCESS ;
15576}
Jeff Johnson295189b2012-06-20 16:38:30 -070015577/*
15578 * WDA timer handler.
15579 */
15580void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15581{
15582 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15583 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015584 /*
15585 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15586 */
15587 wdaMsg.type = timerInfo ;
15588 wdaMsg.bodyptr = NULL;
15589 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015590 /* post the message.. */
15591 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15592 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15593 {
15594 vosStatus = VOS_STATUS_E_BADMSG;
15595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015596}
Jeff Johnson295189b2012-06-20 16:38:30 -070015597/*
15598 * WDA Tx Complete timeout Indication.
15599 */
15600void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15601{
15602 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015603 if( pWDA->pAckTxCbFunc )
15604 {
15605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015606 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 pWDA->pAckTxCbFunc( pMac, 0);
15608 pWDA->pAckTxCbFunc = NULL;
15609 }
15610 else
15611 {
15612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015613 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015615}
Jeff Johnson295189b2012-06-20 16:38:30 -070015616/*
15617 * WDA Set REG Domain to VOS NV
15618 */
Abhishek Singha306a442013-11-07 18:39:01 +053015619eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15620 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015621{
Abhishek Singha306a442013-11-07 18:39:01 +053015622 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 {
15624 return eHAL_STATUS_INVALID_PARAMETER;
15625 }
15626 return eHAL_STATUS_SUCCESS;
15627}
Jeff Johnson295189b2012-06-20 16:38:30 -070015628
Jeff Johnson295189b2012-06-20 16:38:30 -070015629#ifdef FEATURE_WLAN_SCAN_PNO
15630/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015631 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015632 *
15633 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015634void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015635{
15636 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015637 tSirPNOScanReq *pPNOScanReqParams;
15638
Jeff Johnson295189b2012-06-20 16:38:30 -070015639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015640 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015641 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015642 {
15643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015644 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015645 VOS_ASSERT(0) ;
15646 return ;
15647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015648
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015649 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15650 if(pPNOScanReqParams->statusCallback)
15651 {
15652 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15653 (status == WDI_STATUS_SUCCESS) ?
15654 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15655 }
15656
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015657 if (pPNOScanReqParams->enable == 1)
15658 {
15659 if (pPNOScanReqParams->aNetworks)
15660 vos_mem_free(pPNOScanReqParams->aNetworks);
15661 if (pPNOScanReqParams->p24GProbeTemplate)
15662 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15663 if (pPNOScanReqParams->p5GProbeTemplate)
15664 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15665 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15667 vos_mem_free(pWdaParams->wdaMsgParam);
15668 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015669
15670 return ;
15671}
Jeff Johnson295189b2012-06-20 16:38:30 -070015672/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015673 * FUNCTION: WDA_PNOScanReqCallback
15674 * Free memory.
15675 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15676 */
15677void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015678{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015680 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015681
15682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15683 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15684
15685 if(NULL == pWdaParams)
15686 {
15687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15688 "%s: pWdaParams received NULL", __func__);
15689 VOS_ASSERT(0);
15690 return;
15691 }
15692
15693 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15694 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015695 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15696 if(pPNOScanReqParams->statusCallback)
15697 {
15698 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15699 VOS_STATUS_E_FAILURE);
15700 }
15701
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015702 if (pPNOScanReqParams->enable == 1)
15703 {
15704 if (pPNOScanReqParams->aNetworks)
15705 vos_mem_free(pPNOScanReqParams->aNetworks);
15706 if (pPNOScanReqParams->p24GProbeTemplate)
15707 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15708 if (pPNOScanReqParams->p5GProbeTemplate)
15709 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15710 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15712 vos_mem_free(pWdaParams->wdaMsgParam);
15713 vos_mem_free(pWdaParams);
15714 }
15715
15716 return;
15717}
15718/*
15719 * FUNCTION: WDA_UpdateScanParamsRespCallback
15720 *
15721 */
15722void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15723{
15724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015726 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015727 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015728 {
15729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015731 VOS_ASSERT(0) ;
15732 return ;
15733 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015734
15735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15736 vos_mem_free(pWdaParams->wdaMsgParam);
15737 vos_mem_free(pWdaParams);
15738
Jeff Johnson295189b2012-06-20 16:38:30 -070015739 return ;
15740}
Jeff Johnson295189b2012-06-20 16:38:30 -070015741/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015742 * FUNCTION: WDA_UpdateScanParamsReqCallback
15743 * Free memory.
15744 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15745 */
15746void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15747{
15748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15749
15750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15751 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15752
15753 if(NULL == pWdaParams)
15754 {
15755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15756 "%s: pWdaParams received NULL", __func__);
15757 VOS_ASSERT(0);
15758 return;
15759 }
15760
15761 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15762 {
15763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15764 vos_mem_free(pWdaParams->wdaMsgParam);
15765 vos_mem_free(pWdaParams);
15766 }
15767
15768 return;
15769}
15770/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015771 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15772 * Request to WDI to set Preferred Network List.Offload
15773 */
15774VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15775 tSirPNOScanReq *pPNOScanReqParams)
15776{
Jeff Johnson43971f52012-07-17 12:26:56 -070015777 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015778 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15779 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15780 tWDA_ReqParams *pWdaParams ;
15781 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015783 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015784 if(NULL == pwdiPNOScanReqInfo)
15785 {
15786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 VOS_ASSERT(0);
15789 return VOS_STATUS_E_NOMEM;
15790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15792 if(NULL == pWdaParams)
15793 {
15794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015796 VOS_ASSERT(0);
15797 vos_mem_free(pwdiPNOScanReqInfo);
15798 return VOS_STATUS_E_NOMEM;
15799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015800 //
15801 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15802 //
15803 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15804 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015805 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15806 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15807 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015808 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15809 {
15810 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15811 &pPNOScanReqParams->aNetworks[i],
15812 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015814 /*Scan timer intervals*/
15815 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15816 &pPNOScanReqParams->scanTimers,
15817 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015818 /*Probe template for 2.4GHz band*/
15819 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15820 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15821 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15823 pPNOScanReqParams->p24GProbeTemplate,
15824 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015825 /*Probe template for 5GHz band*/
15826 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15827 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15828 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15830 pPNOScanReqParams->p5GProbeTemplate,
15831 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015832 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15833 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015834
Jeff Johnson295189b2012-06-20 16:38:30 -070015835 /* Store Params pass it to WDI */
15836 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15837 pWdaParams->pWdaContext = pWDA;
15838 /* Store param pointer as passed in by caller */
15839 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015840 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015841 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015842 if(IS_WDI_STATUS_FAILURE(status))
15843 {
15844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15845 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015846 if(pPNOScanReqParams->statusCallback)
15847 {
15848 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15849 VOS_STATUS_E_FAILURE);
15850 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015851 if (pPNOScanReqParams->enable == 1)
15852 {
15853 if (pPNOScanReqParams->aNetworks)
15854 vos_mem_free(pPNOScanReqParams->aNetworks);
15855 if (pPNOScanReqParams->p24GProbeTemplate)
15856 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15857 if (pPNOScanReqParams->p5GProbeTemplate)
15858 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15861 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015862
Jeff Johnson295189b2012-06-20 16:38:30 -070015863 pWdaParams->wdaWdiApiMsgParam = NULL;
15864 pWdaParams->wdaMsgParam = NULL;
15865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 return CONVERT_WDI2VOS_STATUS(status) ;
15867}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015868
15869#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15870
15871void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15872{
15873 /*Convert the CSR Auth types to WDI Auth types */
15874 switch (csrAuthType)
15875 {
15876 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15877 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15878 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015879#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015880 case eCSR_AUTH_TYPE_CCKM_WPA:
15881 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15882 break;
15883#endif
15884 case eCSR_AUTH_TYPE_WPA:
15885 *AuthType = eWDA_AUTH_TYPE_WPA;
15886 break;
15887 case eCSR_AUTH_TYPE_WPA_PSK:
15888 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15889 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015890#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015891 case eCSR_AUTH_TYPE_CCKM_RSN:
15892 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15893 break;
15894#endif
15895 case eCSR_AUTH_TYPE_RSN:
15896 *AuthType = eWDA_AUTH_TYPE_RSN;
15897 break;
15898 case eCSR_AUTH_TYPE_RSN_PSK:
15899 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15900 break;
15901#if defined WLAN_FEATURE_VOWIFI_11R
15902 case eCSR_AUTH_TYPE_FT_RSN:
15903 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15904 break;
15905 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15906 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15907 break;
15908#endif
15909#ifdef FEATURE_WLAN_WAPI
15910 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15911 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15912 break;
15913 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15914 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15915 break;
15916#endif /* FEATURE_WLAN_WAPI */
15917 case eCSR_AUTH_TYPE_SHARED_KEY:
15918 case eCSR_AUTH_TYPE_AUTOSWITCH:
15919 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15920 break;
15921#if 0
15922 case eCSR_AUTH_TYPE_SHARED_KEY:
15923 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15924 break;
15925 case eCSR_AUTH_TYPE_AUTOSWITCH:
15926 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15927#endif
15928 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015930 "%s: Unknown Auth Type", __func__);
15931 break;
15932 }
15933}
15934void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15935{
15936 switch (csrEncrType)
15937 {
15938 case eCSR_ENCRYPT_TYPE_NONE:
15939 *EncrType = WDI_ED_NONE;
15940 break;
15941 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15942 case eCSR_ENCRYPT_TYPE_WEP40:
15943 *EncrType = WDI_ED_WEP40;
15944 break;
15945 case eCSR_ENCRYPT_TYPE_WEP104:
15946 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15947 *EncrType = WDI_ED_WEP104;
15948 break;
15949 case eCSR_ENCRYPT_TYPE_TKIP:
15950 *EncrType = WDI_ED_TKIP;
15951 break;
15952 case eCSR_ENCRYPT_TYPE_AES:
15953 *EncrType = WDI_ED_CCMP;
15954 break;
15955#ifdef WLAN_FEATURE_11W
15956 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15957 *EncrType = WDI_ED_AES_128_CMAC;
15958 break;
15959#endif
15960#ifdef FEATURE_WLAN_WAPI
15961 case eCSR_ENCRYPT_TYPE_WPI:
15962 *EncrType = WDI_ED_WPI;
15963 break;
15964#endif
15965 case eCSR_ENCRYPT_TYPE_ANY:
15966 *EncrType = WDI_ED_ANY;
15967 break;
15968
15969 default:
15970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15971 "%s: Unknown Encryption Type", __func__);
15972 break;
15973 }
15974}
15975
15976/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015977 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015978 * Request to WDI to set Roam Offload Scan
15979 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015980VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015981 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15982{
15983 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015984 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15985 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015986 tWDA_ReqParams *pWdaParams ;
15987 v_U8_t csrAuthType;
15988 WDI_RoamNetworkType *pwdiRoamNetworkType;
15989 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15991 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015992 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015993 {
15994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15995 "%s: VOS MEM Alloc Failure", __func__);
15996 VOS_ASSERT(0);
15997 return VOS_STATUS_E_NOMEM;
15998 }
15999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16000 if (NULL == pWdaParams)
16001 {
16002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16003 "%s: VOS MEM Alloc Failure", __func__);
16004 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016005 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016006 return VOS_STATUS_E_NOMEM;
16007 }
16008
16009 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016010 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016011 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016012 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
16013 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016014 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
16015 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16016 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16017 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16018 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16019 sizeof(pwdiRoamNetworkType->currAPbssid));
16020 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16021 csrAuthType);
16022 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16023 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16024 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16025 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16026 pwdiRoamOffloadScanInfo->LookupThreshold =
16027 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016028 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16029 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016030 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16031 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016032 pwdiRoamOffloadScanInfo->MAWCEnabled =
16033 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016034 pwdiRoamOffloadScanInfo->Command =
16035 pRoamOffloadScanReqParams->Command ;
16036 pwdiRoamOffloadScanInfo->StartScanReason =
16037 pRoamOffloadScanReqParams->StartScanReason ;
16038 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16039 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16040 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16041 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16042 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16043 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16044 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16045 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16046 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16047 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016048 pwdiRoamOffloadScanInfo->IsESEEnabled =
16049 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016050 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16051 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16052 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16053 pwdiRoamNetworkType->ssId.ucLength =
16054 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16055 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16056 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16057 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16058 pwdiRoamNetworkType->ChannelCount =
16059 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16060 pwdiRoamOffloadScanInfo->ChannelCacheType =
16061 pRoamOffloadScanReqParams->ChannelCacheType;
16062 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16063 pRoamOffloadScanReqParams->ValidChannelList,
16064 pRoamOffloadScanReqParams->ValidChannelCount);
16065 pwdiRoamOffloadScanInfo->ValidChannelCount =
16066 pRoamOffloadScanReqParams->ValidChannelCount;
16067 pwdiRoamOffloadScanInfo->us24GProbeSize =
16068 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16069 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16070 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16071 pRoamOffloadScanReqParams->p24GProbeTemplate,
16072 pwdiRoamOffloadScanInfo->us24GProbeSize);
16073 pwdiRoamOffloadScanInfo->us5GProbeSize =
16074 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16075 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16076 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16077 pRoamOffloadScanReqParams->p5GProbeTemplate,
16078 pwdiRoamOffloadScanInfo->us5GProbeSize);
16079 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16080 pRoamOffloadScanReqParams->MDID.mdiePresent;
16081 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16082 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016083 pwdiRoamOffloadScanInfo->nProbes =
16084 pRoamOffloadScanReqParams->nProbes;
16085 pwdiRoamOffloadScanInfo->HomeAwayTime =
16086 pRoamOffloadScanReqParams->HomeAwayTime;
16087 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016088 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016089 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016090 pWdaParams->pWdaContext = pWDA;
16091 /* Store param pointer as passed in by caller */
16092 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016093 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016094 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16095 if(IS_WDI_STATUS_FAILURE(status))
16096 {
16097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16098 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16100 vos_mem_free(pWdaParams->wdaMsgParam);
16101 pWdaParams->wdaWdiApiMsgParam = NULL;
16102 pWdaParams->wdaMsgParam = NULL;
16103 }
16104 return CONVERT_WDI2VOS_STATUS(status) ;
16105}
16106#endif
16107
Jeff Johnson295189b2012-06-20 16:38:30 -070016108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016109 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016110 *
16111 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016112void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016113{
16114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16115
16116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016117 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016118
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016119 if(NULL == pWdaParams)
16120 {
16121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016122 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016123 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016124 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016125 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016126
Jeff Johnson295189b2012-06-20 16:38:30 -070016127 vos_mem_free(pWdaParams->wdaMsgParam) ;
16128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16129 vos_mem_free(pWdaParams) ;
16130
16131 return ;
16132}
16133/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016134 * FUNCTION: WDA_RssiFilterReqCallback
16135 * Free memory.
16136 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16137 */
16138void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16139{
16140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16141
16142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16143 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16144
16145 if(NULL == pWdaParams)
16146 {
16147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16148 "%s: pWdaParams received NULL", __func__);
16149 VOS_ASSERT(0);
16150 return;
16151 }
16152
16153 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16154 {
16155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16156 vos_mem_free(pWdaParams->wdaMsgParam);
16157 vos_mem_free(pWdaParams);
16158 }
16159
16160 return;
16161}
16162/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016163 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016164 * Request to WDI to set Preferred Network List.Offload
16165 */
16166VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16167 tSirSetRSSIFilterReq* pRssiFilterParams)
16168{
Jeff Johnson43971f52012-07-17 12:26:56 -070016169 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016170 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16171 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16172 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 if(NULL == pwdiSetRssiFilterReqInfo)
16176 {
16177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 VOS_ASSERT(0);
16180 return VOS_STATUS_E_NOMEM;
16181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16183 if(NULL == pWdaParams)
16184 {
16185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 VOS_ASSERT(0);
16188 vos_mem_free(pwdiSetRssiFilterReqInfo);
16189 return VOS_STATUS_E_NOMEM;
16190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016191 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016192 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16193 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016194
Jeff Johnson295189b2012-06-20 16:38:30 -070016195 /* Store Params pass it to WDI */
16196 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16197 pWdaParams->pWdaContext = pWDA;
16198 /* Store param pointer as passed in by caller */
16199 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016200 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016201 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016202 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016203 if(IS_WDI_STATUS_FAILURE(status))
16204 {
16205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16206 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16208 vos_mem_free(pWdaParams->wdaMsgParam);
16209 pWdaParams->wdaWdiApiMsgParam = NULL;
16210 pWdaParams->wdaMsgParam = NULL;
16211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 return CONVERT_WDI2VOS_STATUS(status) ;
16213}
16214
Jeff Johnson295189b2012-06-20 16:38:30 -070016215/*
16216 * FUNCTION: WDA_ProcessUpdateScanParams
16217 * Request to WDI to update Scan Parameters
16218 */
16219VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16220 tSirUpdateScanParams *pUpdateScanParams)
16221{
Jeff Johnson43971f52012-07-17 12:26:56 -070016222 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16224 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16225 sizeof(WDI_UpdateScanParamsInfoType)) ;
16226 tWDA_ReqParams *pWdaParams ;
16227 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016229 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016230 if(NULL == wdiUpdateScanParamsInfoType)
16231 {
16232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016234 VOS_ASSERT(0);
16235 return VOS_STATUS_E_NOMEM;
16236 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16238 if ( NULL == pWdaParams )
16239 {
16240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016242 VOS_ASSERT(0);
16243 vos_mem_free(wdiUpdateScanParamsInfoType);
16244 return VOS_STATUS_E_NOMEM;
16245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016246 //
16247 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16248 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16250 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16251 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16252 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016253 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 pUpdateScanParams->b11dEnabled,
16255 pUpdateScanParams->b11dResolved,
16256 pUpdateScanParams->ucChannelCount,
16257 pUpdateScanParams->usPassiveMinChTime,
16258 pUpdateScanParams->usPassiveMaxChTime,
16259 pUpdateScanParams->usActiveMinChTime,
16260 pUpdateScanParams->usActiveMaxChTime,
16261 sizeof(tSirUpdateScanParams),
16262 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16263
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16265 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016266 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16267 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016268 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16269 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016270 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16271 pUpdateScanParams->usActiveMaxChTime;
16272 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16273 pUpdateScanParams->usActiveMinChTime;
16274 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16275 pUpdateScanParams->usPassiveMaxChTime;
16276 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16277 pUpdateScanParams->usPassiveMinChTime;
16278
Jeff Johnson295189b2012-06-20 16:38:30 -070016279 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016280 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16281 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016282
Jeff Johnson295189b2012-06-20 16:38:30 -070016283 for ( i = 0; i <
16284 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16285 i++)
16286 {
16287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16288 "Update Scan Parameters channel: %d",
16289 pUpdateScanParams->aChannels[i]);
16290
16291 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16292 pUpdateScanParams->aChannels[i];
16293 }
16294
Yue Ma7f44bbe2013-04-12 11:47:39 -070016295 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16296 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016297
Jeff Johnson295189b2012-06-20 16:38:30 -070016298 /* Store Params pass it to WDI */
16299 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16300 pWdaParams->pWdaContext = pWDA;
16301 /* Store param pointer as passed in by caller */
16302 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016303
Jeff Johnson295189b2012-06-20 16:38:30 -070016304
16305
16306 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016307 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016308 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016309 if(IS_WDI_STATUS_FAILURE(status))
16310 {
16311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16312 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16314 vos_mem_free(pWdaParams->wdaMsgParam);
16315 vos_mem_free(pWdaParams);
16316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016317 return CONVERT_WDI2VOS_STATUS(status) ;
16318}
16319#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016320
16321#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16322/*
16323 * FUNCTION: WDA_RoamOffloadScanReqCallback
16324 *
16325 */
16326void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16327{
16328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016329 vos_msg_t vosMsg;
16330 wpt_uint8 reason = 0;
16331
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016333 "<------ %s " ,__func__);
16334 if (NULL == pWdaParams)
16335 {
16336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16337 "%s: pWdaParams received NULL", __func__);
16338 VOS_ASSERT(0) ;
16339 return ;
16340 }
16341 if ( pWdaParams != NULL )
16342 {
16343 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16344 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016345 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16347 }
16348 if ( pWdaParams->wdaMsgParam != NULL)
16349 {
16350 vos_mem_free(pWdaParams->wdaMsgParam);
16351 }
16352
16353 vos_mem_free(pWdaParams) ;
16354 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016355 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16356 vosMsg.bodyptr = NULL;
16357 if (WDI_STATUS_SUCCESS != status)
16358 {
16359 reason = 0;
16360 }
16361 vosMsg.bodyval = reason;
16362 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16363 {
16364 /* free the mem and return */
16365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016366 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016367 }
16368
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016369 return ;
16370}
16371#endif
16372
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016373/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016374 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016375 *
16376 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016377void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016378{
16379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16380
16381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16382 "<------ %s " ,__func__);
16383
16384 if(NULL == pWdaParams)
16385 {
16386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16387 "%s: pWdaParams received NULL", __func__);
16388 VOS_ASSERT(0);
16389 return;
16390 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016391
16392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16393 vos_mem_free(pWdaParams->wdaMsgParam);
16394 vos_mem_free(pWdaParams);
16395
16396 return;
16397}
16398/*
16399 * FUNCTION: WDA_SetPowerParamsReqCallback
16400 * Free memory.
16401 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16402 */
16403void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16404{
16405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16406
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16408 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16409
16410 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016411 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16413 "%s: pWdaParams received NULL", __func__);
16414 VOS_ASSERT(0);
16415 return;
16416 }
16417
16418 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16419 {
16420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16421 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016422 vos_mem_free(pWdaParams);
16423 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016424
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016425 return;
16426}
16427
Jeff Johnson295189b2012-06-20 16:38:30 -070016428#ifdef WLAN_FEATURE_PACKET_FILTERING
16429/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016430 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016431 *
16432 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016433void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016434 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16435 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016436{
16437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016440 if(NULL == pWdaParams)
16441 {
16442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016443 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016444 VOS_ASSERT(0) ;
16445 return ;
16446 }
16447
16448 vos_mem_free(pWdaParams->wdaMsgParam) ;
16449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16450 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016451 //print a msg, nothing else to do
16452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016453 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016454 return ;
16455}
Jeff Johnson295189b2012-06-20 16:38:30 -070016456/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016457 * FUNCTION: WDA_8023MulticastListReqCallback
16458 * Free memory.
16459 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16460 */
16461void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16462{
16463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16464
16465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16466 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16467
16468 if(NULL == pWdaParams)
16469 {
16470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16471 "%s: pWdaParams received NULL", __func__);
16472 VOS_ASSERT(0);
16473 return;
16474 }
16475
16476 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16477 {
16478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16479 vos_mem_free(pWdaParams->wdaMsgParam);
16480 vos_mem_free(pWdaParams);
16481 }
16482
16483 return;
16484}
16485/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016486 * FUNCTION: WDA_Process8023MulticastListReq
16487 * Request to WDI to add 8023 Multicast List
16488 */
16489VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16490 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16491{
Jeff Johnson43971f52012-07-17 12:26:56 -070016492 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016493 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16494 tWDA_ReqParams *pWdaParams ;
16495 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016497 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016498 pwdiFltPktSetMcListReqParamsType =
16499 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16500 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16501 ) ;
16502 if(NULL == pwdiFltPktSetMcListReqParamsType)
16503 {
16504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016506 return VOS_STATUS_E_NOMEM;
16507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16509 if(NULL == pWdaParams)
16510 {
16511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016513 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16514 return VOS_STATUS_E_NOMEM;
16515 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016516
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 //
16518 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16519 //
16520 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016521 pRcvFltMcAddrList->ulMulticastAddrCnt;
16522
16523 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16524 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16525 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16526 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16527
Jeff Johnson295189b2012-06-20 16:38:30 -070016528 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16529 {
16530 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16531 &(pRcvFltMcAddrList->multicastAddr[i]),
16532 sizeof(tSirMacAddr));
16533 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016534 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16535 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016536
Jeff Johnson295189b2012-06-20 16:38:30 -070016537 /* Store Params pass it to WDI */
16538 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16539 pWdaParams->pWdaContext = pWDA;
16540 /* Store param pointer as passed in by caller */
16541 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 status = WDI_8023MulticastListReq(
16543 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016544 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016545 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016546 if(IS_WDI_STATUS_FAILURE(status))
16547 {
16548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16549 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16551 vos_mem_free(pWdaParams->wdaMsgParam);
16552 vos_mem_free(pWdaParams);
16553 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016554 return CONVERT_WDI2VOS_STATUS(status) ;
16555}
Jeff Johnson295189b2012-06-20 16:38:30 -070016556/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016557 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016558 *
16559 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016560void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016561 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16562 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016563{
16564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016566 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016567 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016568 if(NULL == pWdaParams)
16569 {
16570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016572 VOS_ASSERT(0) ;
16573 return ;
16574 }
16575
16576 vos_mem_free(pWdaParams->wdaMsgParam) ;
16577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16578 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016579 //print a msg, nothing else to do
16580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016581 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016582 return ;
16583}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016584
16585/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016586 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16587 * Free memory.
16588 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016589 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016590void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016591 void* pUserData)
16592{
16593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16594
16595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16596 "<------ %s, wdiStatus: %d",
16597 __func__, wdiStatus);
16598
16599 if (NULL == pWdaParams)
16600 {
16601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16602 "%s: Invalid pWdaParams pointer", __func__);
16603 VOS_ASSERT(0);
16604 return;
16605 }
16606
16607 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16608 {
16609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16610 vos_mem_free(pWdaParams->wdaMsgParam);
16611 vos_mem_free(pWdaParams);
16612 }
16613
16614 return;
16615}
16616
Jeff Johnson295189b2012-06-20 16:38:30 -070016617/*
16618 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16619 * Request to WDI to set Receive Filters
16620 */
16621VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16622 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16623{
Jeff Johnson43971f52012-07-17 12:26:56 -070016624 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016625 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16626 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16627 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16628 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16629 tWDA_ReqParams *pWdaParams ;
16630 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016632 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16634 {
16635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016637 VOS_ASSERT(0);
16638 return VOS_STATUS_E_NOMEM;
16639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16641 if(NULL == pWdaParams)
16642 {
16643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016645 VOS_ASSERT(0);
16646 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16647 return VOS_STATUS_E_NOMEM;
16648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016649 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16650 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16651 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16652 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016653 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16654 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16655
16656 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16657 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016658
16659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16660 "FID %d FT %d NParams %d CT %d",
16661 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16662 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16663 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16664 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016665 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16666 {
16667 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16668 &pRcvPktFilterCfg->paramsData[i],
16669 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016671 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016672 pwdiSetRcvPktFilterReqParamsType->
16673 wdiPktFilterCfg.paramsData[i].protocolLayer,
16674 pwdiSetRcvPktFilterReqParamsType->
16675 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016677 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016678 pwdiSetRcvPktFilterReqParamsType->
16679 wdiPktFilterCfg.paramsData[i].dataOffset,
16680 pwdiSetRcvPktFilterReqParamsType->
16681 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016683 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 pwdiSetRcvPktFilterReqParamsType->
16685 wdiPktFilterCfg.paramsData[i].compareData[0],
16686 pwdiSetRcvPktFilterReqParamsType->
16687 wdiPktFilterCfg.paramsData[i].compareData[1],
16688 pwdiSetRcvPktFilterReqParamsType->
16689 wdiPktFilterCfg.paramsData[i].compareData[2],
16690 pwdiSetRcvPktFilterReqParamsType->
16691 wdiPktFilterCfg.paramsData[i].compareData[3],
16692 pwdiSetRcvPktFilterReqParamsType->
16693 wdiPktFilterCfg.paramsData[i].compareData[4],
16694 pwdiSetRcvPktFilterReqParamsType->
16695 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016697 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016698 pwdiSetRcvPktFilterReqParamsType->
16699 wdiPktFilterCfg.paramsData[i].dataMask[0],
16700 pwdiSetRcvPktFilterReqParamsType->
16701 wdiPktFilterCfg.paramsData[i].dataMask[1],
16702 pwdiSetRcvPktFilterReqParamsType->
16703 wdiPktFilterCfg.paramsData[i].dataMask[2],
16704 pwdiSetRcvPktFilterReqParamsType->
16705 wdiPktFilterCfg.paramsData[i].dataMask[3],
16706 pwdiSetRcvPktFilterReqParamsType->
16707 wdiPktFilterCfg.paramsData[i].dataMask[4],
16708 pwdiSetRcvPktFilterReqParamsType->
16709 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016710 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016711 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016712 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016713 /* Store Params pass it to WDI */
16714 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16715 pWdaParams->pWdaContext = pWDA;
16716 /* Store param pointer as passed in by caller */
16717 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016719 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016720 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016721 if(IS_WDI_STATUS_FAILURE(status))
16722 {
16723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16724 "Failure in SetFilter(),free all the memory,status %d ",status);
16725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16726 vos_mem_free(pWdaParams->wdaMsgParam);
16727 vos_mem_free(pWdaParams);
16728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016729 return CONVERT_WDI2VOS_STATUS(status) ;
16730}
Jeff Johnson295189b2012-06-20 16:38:30 -070016731/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016732 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016733 *
16734 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016735void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016736 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16737 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016738{
16739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16740 tWDA_CbContext *pWDA;
16741 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16742 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16743 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16744 tANI_U8 i;
16745 vos_msg_t vosMsg;
16746
16747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016748 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016749 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16750
Jeff Johnsone7245742012-09-05 17:12:55 -070016751 if(NULL == pRcvFltPktMatchCntRsp)
16752 {
16753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016754 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016755 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016756 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016757 return ;
16758 }
16759
Jeff Johnson295189b2012-06-20 16:38:30 -070016760 if(NULL == pWdaParams)
16761 {
16762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016763 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016764 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016765 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016766 return ;
16767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016768 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16769 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016770 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16771 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16772
16773 /* Message Header */
16774 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16775 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16776
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016777 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016778
16779 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16780 {
16781 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16782 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016784 /* VOS message wrapper */
16785 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16786 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16787 vosMsg.bodyval = 0;
16788 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16789 {
16790 /* free the mem and return */
16791 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16792 }
16793
16794 vos_mem_free(pWdaParams->wdaMsgParam) ;
16795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16796 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016797
16798 return;
16799}
16800/*
16801 * FUNCTION: WDA_FilterMatchCountReqCallback
16802 * Free memory and send RSP back to SME.
16803 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16804 */
16805void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16806{
16807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16808 vos_msg_t vosMsg;
16809
16810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16811 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16812
16813 if(NULL == pWdaParams)
16814 {
16815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16816 "%s: pWdaParams received NULL", __func__);
16817 VOS_ASSERT(0);
16818 return;
16819 }
16820
16821 /* VOS message wrapper */
16822 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16823 vosMsg.bodyptr = NULL;
16824 vosMsg.bodyval = 0;
16825
16826 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16827 {
16828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16829 vos_mem_free(pWdaParams->wdaMsgParam);
16830 vos_mem_free(pWdaParams);
16831 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16832 }
16833
16834 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016835}
Jeff Johnson295189b2012-06-20 16:38:30 -070016836/*
16837 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16838 * Request to WDI to get PC Filter Match Count
16839 */
16840VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16841{
Jeff Johnson43971f52012-07-17 12:26:56 -070016842 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016843 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16844 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16845 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016847 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016848 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16849 {
16850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016852 VOS_ASSERT(0);
16853 return VOS_STATUS_E_NOMEM;
16854 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16856 if(NULL == pWdaParams)
16857 {
16858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016860 VOS_ASSERT(0);
16861 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16862 return VOS_STATUS_E_NOMEM;
16863 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016864
Yue Ma7f44bbe2013-04-12 11:47:39 -070016865 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16866 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016867
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016868 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16869 pRcvFltPktMatchRsp->bssId,
16870 sizeof(wpt_macAddr));
16871
Jeff Johnson295189b2012-06-20 16:38:30 -070016872 /* Store Params pass it to WDI */
16873 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16874 pWdaParams->pWdaContext = pWDA;
16875 /* Store param pointer as passed in by caller */
16876 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016877 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016878 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016879 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016880 if(IS_WDI_STATUS_FAILURE(status))
16881 {
16882 /* failure returned by WDI API */
16883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16884 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16886 vos_mem_free(pWdaParams) ;
16887 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16888 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16889 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016890 return CONVERT_WDI2VOS_STATUS(status) ;
16891}
Jeff Johnson295189b2012-06-20 16:38:30 -070016892/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016893 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016894 *
16895 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016896void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016897 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16898 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016899{
16900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016902 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016903/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16904 if(NULL == pWdaParams)
16905 {
16906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016907 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016908 VOS_ASSERT(0) ;
16909 return ;
16910 }
16911
16912 vos_mem_free(pWdaParams->wdaMsgParam) ;
16913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16914 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016915 //print a msg, nothing else to do
16916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016917 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016918 return ;
16919}
Jeff Johnson295189b2012-06-20 16:38:30 -070016920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016921 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16922 * Free memory.
16923 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16924 */
16925void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16926{
16927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16928
16929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16931
16932 if(NULL == pWdaParams)
16933 {
16934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16935 "%s: Invalid pWdaParams pointer", __func__);
16936 VOS_ASSERT(0);
16937 return;
16938 }
16939
16940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16941 {
16942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16943 vos_mem_free(pWdaParams->wdaMsgParam);
16944 vos_mem_free(pWdaParams);
16945 }
16946
16947 return;
16948}
16949/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016950 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16951 * Request to WDI to clear Receive Filters
16952 */
16953VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16954 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16955{
Jeff Johnson43971f52012-07-17 12:26:56 -070016956 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016957 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16958 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16959 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016961 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016962 if(NULL == pwdiRcvFltPktClearReqParamsType)
16963 {
16964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016966 VOS_ASSERT(0);
16967 return VOS_STATUS_E_NOMEM;
16968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016969 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16970 if(NULL == pWdaParams)
16971 {
16972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016974 VOS_ASSERT(0);
16975 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16976 return VOS_STATUS_E_NOMEM;
16977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016978 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16979 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016980 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16981 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16982 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16983 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016984
Yue Ma7f44bbe2013-04-12 11:47:39 -070016985 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016986 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016987 /* Store Params pass it to WDI */
16988 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16989 pWdaParams->pWdaContext = pWDA;
16990 /* Store param pointer as passed in by caller */
16991 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016992 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016993 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016995 if(IS_WDI_STATUS_FAILURE(status))
16996 {
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16998 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080017000 vos_mem_free(pWdaParams->wdaMsgParam);
17001 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017003 return CONVERT_WDI2VOS_STATUS(status) ;
17004}
17005#endif // WLAN_FEATURE_PACKET_FILTERING
17006
Jeff Johnson295189b2012-06-20 16:38:30 -070017007/*
17008 * FUNCTION: WDA_ProcessSetPowerParamsReq
17009 * Request to WDI to set power params
17010 */
17011VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
17012 tSirSetPowerParamsReq *pPowerParams)
17013{
Jeff Johnson43971f52012-07-17 12:26:56 -070017014 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017015 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17016 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017020 if(NULL == pwdiSetPowerParamsReqInfo)
17021 {
17022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017024 VOS_ASSERT(0);
17025 return VOS_STATUS_E_NOMEM;
17026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17028 if(NULL == pWdaParams)
17029 {
17030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017032 VOS_ASSERT(0);
17033 vos_mem_free(pwdiSetPowerParamsReqInfo);
17034 return VOS_STATUS_E_NOMEM;
17035 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017036
Jeff Johnson295189b2012-06-20 16:38:30 -070017037
17038 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17039 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017040 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17041 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017042 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17043 pPowerParams->uListenInterval;
17044 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17045 pPowerParams->uBcastMcastFilter;
17046 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17047 pPowerParams->uEnableBET;
17048 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17049 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017050 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17051 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017052 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17053 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017054
Jeff Johnson295189b2012-06-20 16:38:30 -070017055 /* Store Params pass it to WDI */
17056 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17057 pWdaParams->pWdaContext = pWDA;
17058 /* Store param pointer as passed in by caller */
17059 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017060 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017061 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017062 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017063 if(IS_WDI_STATUS_FAILURE(status))
17064 {
17065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17066 "Failure in Set power params REQ WDI API, free all the memory " );
17067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17068 vos_mem_free(pWdaParams->wdaMsgParam);
17069 pWdaParams->wdaWdiApiMsgParam = NULL;
17070 pWdaParams->wdaMsgParam = NULL;
17071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017072 return CONVERT_WDI2VOS_STATUS(status) ;
17073}
17074
17075/*
17076 * FUNCTION: WDA_SetTmLevelRspCallback
17077 * Set TM Level response
17078 */
17079void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17080{
17081 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17082
17083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017084 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017085
17086 if(NULL == pWdaParams)
17087 {
17088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017089 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017090 VOS_ASSERT(0) ;
17091 return ;
17092 }
17093
17094 /* Dose not need to send notification to upper layer
17095 * Just free allocated resources */
17096 if( pWdaParams != NULL )
17097 {
17098 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17099 {
17100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17101 }
17102 vos_mem_free(pWdaParams->wdaMsgParam) ;
17103 vos_mem_free(pWdaParams) ;
17104 }
17105}
17106
17107/*
17108 * FUNCTION: WDA_ProcessSetTmLevelReq
17109 * Set TM Level request
17110 */
17111VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17112 tAniSetTmLevelReq *setTmLevelReq)
17113{
17114 WDI_Status status = WDI_STATUS_SUCCESS ;
17115 tWDA_ReqParams *pWdaParams ;
17116 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17117 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17118 sizeof(WDI_SetTmLevelReqType)) ;
17119 if(NULL == wdiSetTmLevelReq)
17120 {
17121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017123 VOS_ASSERT(0);
17124 return VOS_STATUS_E_NOMEM;
17125 }
17126
17127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17128 if(NULL == pWdaParams)
17129 {
17130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017132 VOS_ASSERT(0);
17133 vos_mem_free(wdiSetTmLevelReq);
17134 return VOS_STATUS_E_NOMEM;
17135 }
17136
17137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017138 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017139
17140 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17141 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17142
17143 pWdaParams->pWdaContext = pWDA;
17144 pWdaParams->wdaMsgParam = setTmLevelReq;
17145 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17146
17147 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17148 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17149
17150 if(IS_WDI_STATUS_FAILURE(status))
17151 {
17152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017153 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017154 vos_mem_free(pWdaParams->wdaMsgParam) ;
17155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17156 vos_mem_free(pWdaParams) ;
17157 }
17158
17159 return CONVERT_WDI2VOS_STATUS(status) ;
17160}
17161
17162VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17163 tpTxControlParams pTxCtrlParam)
17164{
17165 VOS_STATUS wdaStatus;
17166
17167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017168 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017169 if( pTxCtrlParam == NULL )
17170 {
17171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017172 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017173 return VOS_STATUS_E_FAILURE;
17174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017175 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17176 {
17177 wdaStatus = WDA_SuspendDataTx(pWDA);
17178 }
17179 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17180 {
17181 wdaStatus = WDA_ResumeDataTx(pWDA);
17182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017183 return wdaStatus;
17184}
17185
Mihir Shete5affadc2015-05-29 20:54:57 +053017186void WDA_FWLoggingDXEdoneInd(void)
17187{
17188 WDI_FWLoggingDXEdoneInd(NULL);
17189}
17190
Jeff Johnson295189b2012-06-20 16:38:30 -070017191 /* FUNCTION WDA_featureCapsExchange
17192 * WDA API to invoke capability exchange between host and FW.
17193 */
17194void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17195{
17196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017197 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017198 WDI_featureCapsExchangeReq( NULL, pVosContext);
17199}
17200
Yathish9f22e662012-12-10 14:21:35 -080017201/* FUNCTION WDA_disableCapablityFeature
17202 * WDA API to diable Active mode offload in host.
17203 */
17204void WDA_disableCapablityFeature(tANI_U8 feature_index)
17205{
17206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17207 "%s:enter", __func__ );
17208 WDI_disableCapablityFeature(feature_index);
17209}
17210
Jeff Johnson295189b2012-06-20 16:38:30 -070017211 /* FUNCTION WDA_getHostWlanFeatCaps
17212 * Wrapper for WDI API, that will return if the feature (enum value).passed
17213 * to this API is supported or not in Host
17214 * return value
17215 * 0 - implies feature is NOT Supported
17216 * any non zero value - implies feature is SUPPORTED
17217 */
17218tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17219{
17220 return WDI_getHostWlanFeatCaps(featEnumValue);
17221}
17222
17223 /* FUNCTION WDA_getFwWlanFeatCaps
17224 * Wrapper for WDI API, that will return if the feature (enum value).passed
17225 * to this API is supported or not in FW
17226 * return value
17227 * 0 - implies feature is NOT Supported
17228 * any non zero value - implies feature is SUPPORTED
17229 */
17230tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17231{
17232 return WDI_getFwWlanFeatCaps(featEnumValue);
17233}
17234
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017235
Jeff Johnson295189b2012-06-20 16:38:30 -070017236/*
17237 * FUNCTION: WDA_shutdown
17238 * Shutdown WDA/WDI without handshaking with Riva.
17239 * Synchronous function.
17240 */
17241VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17242{
17243 WDI_Status wdiStatus;
17244 //tANI_U8 eventIdx = 0;
17245 VOS_STATUS status = VOS_STATUS_SUCCESS;
17246 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017247 if (NULL == pWDA)
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017250 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017251 VOS_ASSERT(0);
17252 return VOS_STATUS_E_FAILURE;
17253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017254 /* FTM mode stay START_STATE */
17255 if( (WDA_READY_STATE != pWDA->wdaState) &&
17256 (WDA_INIT_STATE != pWDA->wdaState) &&
17257 (WDA_START_STATE != pWDA->wdaState) )
17258 {
17259 VOS_ASSERT(0);
17260 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017261
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017262 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17263 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017264 {
17265 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017266 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017267 }
Leo Chang9d76f622013-08-23 16:34:52 -070017268 else
17269 {
17270 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17271 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017272
Jeff Johnson295189b2012-06-20 16:38:30 -070017273 /* call WDI shutdown */
17274 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017275 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17276 {
17277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17278 "error in WDA Stop" );
17279 status = VOS_STATUS_E_FAILURE;
17280 }
17281 /* WDI stop is synchrnous, shutdown is complete when it returns */
17282 pWDA->wdaState = WDA_STOP_STATE;
17283
Jeff Johnson295189b2012-06-20 16:38:30 -070017284 /* shutdown should perform the stop & close actions. */
17285 /* Destroy the event */
17286 status = vos_event_destroy(&pWDA->txFrameEvent);
17287 if(!VOS_IS_STATUS_SUCCESS(status))
17288 {
17289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017290 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017291 status = VOS_STATUS_E_FAILURE;
17292 }
17293 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17294 if(!VOS_IS_STATUS_SUCCESS(status))
17295 {
17296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017297 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017298 status = VOS_STATUS_E_FAILURE;
17299 }
17300 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17301 if(!VOS_IS_STATUS_SUCCESS(status))
17302 {
17303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017304 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017305 status = VOS_STATUS_E_FAILURE;
17306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017307 /* free WDA context */
17308 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17309 if ( !VOS_IS_STATUS_SUCCESS(status) )
17310 {
17311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17312 "error in WDA close " );
17313 status = VOS_STATUS_E_FAILURE;
17314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017315 return status;
17316}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017317
Jeff Johnsone7245742012-09-05 17:12:55 -070017318/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017319 * FUNCTION: WDA_setNeedShutdown
17320 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017321 */
17322
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017323void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017324{
17325 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017326 if(pWDA == NULL)
17327 {
17328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17329 "Could not get the WDA Context pointer" );
17330 return;
17331 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017332 pWDA->needShutdown = TRUE;
17333}
17334/*
17335 * FUNCTION: WDA_needShutdown
17336 * WDA needs a shutdown
17337 */
17338
17339v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17340{
17341 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017342 if(pWDA == NULL)
17343 {
17344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17345 "Could not get the WDA Context pointer" );
17346 return 0;
17347 }
17348 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017349}
17350
Mohit Khanna4a70d262012-09-11 16:30:12 -070017351#ifdef WLAN_FEATURE_11AC
17352/*
17353 * FUNCTION: WDA_SetBeaconFilterReqCallback
17354 *
17355 */
17356void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17357{
17358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017360 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017361 if(NULL == pWdaParams)
17362 {
17363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017364 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017365 VOS_ASSERT(0) ;
17366 return ;
17367 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017368
Mohit Khanna4a70d262012-09-11 16:30:12 -070017369 vos_mem_free(pWdaParams->wdaMsgParam) ;
17370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17371 vos_mem_free(pWdaParams) ;
17372 /*
17373 * No respone required for SetBeaconFilter req so just free the request
17374 * param here
17375 */
17376
17377 return ;
17378}
17379
17380VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17381 tUpdateVHTOpMode *pData)
17382{
17383 WDI_Status status = WDI_STATUS_SUCCESS ;
17384 tWDA_ReqParams *pWdaParams ;
17385 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17386 sizeof(WDI_UpdateVHTOpMode)) ;
17387 if(NULL == wdiTemp)
17388 {
17389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017390 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017391 VOS_ASSERT(0);
17392 return VOS_STATUS_E_NOMEM;
17393 }
17394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17395 if(NULL == pWdaParams)
17396 {
17397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017398 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017399 VOS_ASSERT(0);
17400 vos_mem_free(wdiTemp);
17401 return VOS_STATUS_E_NOMEM;
17402 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17404 "------> %s Opmode = %d and staid = %d" ,
17405 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017406 wdiTemp->opMode = pData->opMode;
17407 wdiTemp->staId = pData->staId;
17408
17409 pWdaParams->pWdaContext = pWDA;
17410 /* Store Req pointer, as this will be used for response */
17411 pWdaParams->wdaMsgParam = (void *)pData;
17412 /* store Params pass it to WDI */
17413 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17414
17415 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17416
17417 if(IS_WDI_STATUS_FAILURE(status))
17418 {
17419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17420 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17422 vos_mem_free(pWdaParams->wdaMsgParam);
17423 vos_mem_free(pWdaParams);
17424 }
17425 return CONVERT_WDI2VOS_STATUS(status) ;
17426}
17427#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017428
17429/*==========================================================================
17430 FUNCTION WDA_TransportChannelDebug
17431
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017432 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017433 Display Transport Channel debugging information
17434 User may request to display DXE channel snapshot
17435 Or if host driver detects any abnormal stcuk may display
17436
17437 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017438 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017439 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017440 debugFlags : Enable stall detect features
17441 defined by WPAL_DeviceDebugFlags
17442 These features may effect
17443 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017444
17445 RETURN VALUE
17446 NONE
17447
17448===========================================================================*/
17449void WDA_TransportChannelDebug
17450(
schang6295e542013-03-12 15:31:23 -070017451 tpAniSirGlobal pMac,
17452 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017453 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017454)
17455{
Mihir Shete40a55652014-03-02 14:14:47 +053017456 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017457 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017458}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017459
17460/*==========================================================================
17461 FUNCTION WDA_SetEnableSSR
17462
17463 DESCRIPTION
17464 API to enable/disable SSR on WDI timeout
17465
17466 PARAMETERS
17467 enableSSR : enable/disable SSR
17468
17469 RETURN VALUE
17470 NONE
17471
17472===========================================================================*/
17473void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17474{
17475 WDI_SetEnableSSR(enableSSR);
17476}
Leo Chang9056f462013-08-01 19:21:11 -070017477
17478#ifdef FEATURE_WLAN_LPHB
17479/*
17480 * FUNCTION: WDA_LPHBconfRspCallback
17481 *
17482 */
17483void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17484{
17485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17486
17487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17488 "<------ %s " ,__func__);
17489 if (NULL == pWdaParams)
17490 {
17491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17492 "%s: pWdaParams received NULL", __func__);
17493 VOS_ASSERT(0) ;
17494 return ;
17495 }
17496
17497 /* Do not need to send notification to upper layer
17498 * Just free allocated resources */
17499 if (pWdaParams != NULL)
17500 {
17501 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17502 {
17503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17504 }
17505 vos_mem_free(pWdaParams->wdaMsgParam) ;
17506 vos_mem_free(pWdaParams) ;
17507 }
17508
17509 return;
17510}
17511
17512/*
17513 * FUNCTION: WDA_ProcessLPHBConfReq
17514 *
17515 */
17516VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17517 tSirLPHBReq *pData)
17518{
17519 WDI_Status wdiStatus;
17520 tWDA_ReqParams *pWdaParams ;
17521
17522 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17523 "------> %s " , __func__);
17524
17525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17526 if (NULL == pWdaParams)
17527 {
17528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17529 "%s: VOS MEM Alloc Failure", __func__);
17530 VOS_ASSERT(0);
17531 vos_mem_free(pData);
17532 return VOS_STATUS_E_NOMEM;
17533 }
17534
17535 pWdaParams->pWdaContext = pWDA;
17536 pWdaParams->wdaMsgParam = (void *)pData;
17537 pWdaParams->wdaWdiApiMsgParam = NULL;
17538
17539 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17540 if (WDI_STATUS_PENDING == wdiStatus)
17541 {
17542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17543 "Pending received for %s:%d ", __func__, __LINE__);
17544 }
17545 else if (WDI_STATUS_SUCCESS != wdiStatus)
17546 {
17547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17548 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17549 vos_mem_free(pWdaParams->wdaMsgParam);
17550 vos_mem_free(pWdaParams);
17551 }
17552
17553 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17554}
17555#endif /* FEATURE_WLAN_LPHB */
17556
c_hpothu92367912014-05-01 15:18:17 +053017557void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17558 void* pUserData)
17559{
17560 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17561
17562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17563 "<------ %s " ,__func__);
17564 if (NULL == pBcnMissRateInfo)
17565 {
17566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17567 "%s: pWdaParams received NULL", __func__);
17568 VOS_ASSERT(0) ;
17569 return ;
17570 }
17571 if (pBcnMissRateInfo->callback)
17572 {
17573 pBcnMissRateInfo->callback(status, bcnMissRate,
17574 pBcnMissRateInfo->data);
17575 }
17576 vos_mem_free(pUserData);
17577
17578 return;
17579}
17580
17581v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17582 tSirBcnMissRateReq *pData)
17583{
17584 WDI_Status wdiStatus;
17585 tSirBcnMissRateInfo *pBcnMissRateInfo;
17586
17587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17588 "------> %s " , __func__);
17589
17590 pBcnMissRateInfo =
17591 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17592 if (NULL == pBcnMissRateInfo)
17593 {
17594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17595 "%s: VOS MEM Alloc Failure", __func__);
17596 VOS_ASSERT(0);
17597 vos_mem_free(pData);
17598 return;
17599 }
17600
17601 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17602 pBcnMissRateInfo->data = pData->data;
17603
17604 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17605 WDA_GetBcnMissRateCallback,
17606 pData->bssid);
17607 if (WDI_STATUS_PENDING == wdiStatus)
17608 {
17609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17610 "Pending received for %s:%d ", __func__, __LINE__);
17611 }
17612 else if (WDI_STATUS_SUCCESS != wdiStatus)
17613 {
17614 if (pBcnMissRateInfo->callback)
17615 {
17616 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17617 -1, pBcnMissRateInfo->data);
17618 }
17619 }
17620 vos_mem_free(pData);
17621}
Dino Mycle41bdc942014-06-10 11:30:24 +053017622
17623#ifdef WLAN_FEATURE_EXTSCAN
17624
17625/*==========================================================================
17626 FUNCTION WDA_EXTScanStartRspCallback
17627
17628 DESCRIPTION
17629 API to send EXTScan Start Response to HDD
17630
17631 PARAMETERS
17632 pEventData: Response from FW
17633 pUserData:
17634===========================================================================*/
17635void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17636{
17637 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17638 tWDA_CbContext *pWDA = NULL;
17639 void *pCallbackContext;
17640 tpAniSirGlobal pMac;
17641
17642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17643 "%s:", __func__);
17644 if (NULL == pWdaParams)
17645 {
17646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17647 "%s: pWdaParams received NULL", __func__);
17648 VOS_ASSERT(0);
17649 return;
17650 }
17651
17652 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17653
17654 if (NULL == pWDA)
17655 {
17656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17657 "%s: pWDA received NULL", __func__);
17658 VOS_ASSERT(0);
17659 goto error;
17660 }
17661
17662 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17663 if (NULL == pMac)
17664 {
17665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17666 "%s:pMac is NULL", __func__);
17667 VOS_ASSERT(0);
17668 goto error;
17669 }
17670
17671 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17672
17673 if (pMac->sme.pEXTScanIndCb)
17674 {
17675 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17676 pEventData);
17677 }
17678 else
17679 {
17680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17681 "%s:HDD callback is null", __func__);
17682 VOS_ASSERT(0);
17683 }
17684
17685error:
17686
17687 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17688 {
17689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17690 }
17691 if (pWdaParams->wdaMsgParam != NULL)
17692 {
17693 vos_mem_free(pWdaParams->wdaMsgParam);
17694 }
17695 vos_mem_free(pWdaParams) ;
17696
17697 return;
17698}
17699
17700/*==========================================================================
17701 FUNCTION WDA_EXTScanStopRspCallback
17702
17703 DESCRIPTION
17704 API to send EXTScan Stop Response to HDD
17705
17706 PARAMETERS
17707 pEventData: Response from FW
17708 pUserData:
17709===========================================================================*/
17710void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17711{
17712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17713 tWDA_CbContext *pWDA = NULL;
17714 void *pCallbackContext;
17715 tpAniSirGlobal pMac;
17716
17717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17718 "%s:", __func__);
17719 if (NULL == pWdaParams)
17720 {
17721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17722 "%s: pWdaParams received NULL", __func__);
17723 VOS_ASSERT(0);
17724 return;
17725 }
17726
17727 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17728
17729 if (NULL == pWDA)
17730 {
17731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17732 "%s: pWDA received NULL", __func__);
17733 VOS_ASSERT(0);
17734 goto error;
17735 }
17736
17737 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17738 if (NULL == pMac)
17739 {
17740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17741 "%s:pMac is NULL", __func__);
17742 VOS_ASSERT(0);
17743 goto error;
17744 }
17745 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17746
17747 if (pMac->sme.pEXTScanIndCb)
17748 {
17749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17750 "%s:HDD call back function called", __func__);
17751 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17752 pEventData);
17753 }
17754 else
17755 {
17756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17757 "%s:HDD callback is null", __func__);
17758 VOS_ASSERT(0);
17759 }
17760
17761error:
17762
17763 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17764 {
17765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17766 }
17767 if (pWdaParams->wdaMsgParam != NULL)
17768 {
17769 vos_mem_free(pWdaParams->wdaMsgParam);
17770 }
17771 vos_mem_free(pWdaParams) ;
17772
17773
17774 return;
17775}
17776
17777/*==========================================================================
17778 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17779
17780 DESCRIPTION
17781 API to send EXTScan Get Cached Results Response to HDD
17782
17783 PARAMETERS
17784 pEventData: Response from FW
17785 pUserData:
17786===========================================================================*/
17787void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17788{
17789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17790 tWDA_CbContext *pWDA = NULL;
17791 void *pCallbackContext;
17792 tpAniSirGlobal pMac;
17793
17794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17795 "%s: ", __func__);
17796 if (NULL == pWdaParams)
17797 {
17798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17799 "%s: pWdaParams received NULL", __func__);
17800 VOS_ASSERT(0);
17801 return;
17802 }
17803
17804 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17805
17806 if (NULL == pWDA)
17807 {
17808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17809 "%s: pWDA received NULL", __func__);
17810 VOS_ASSERT(0);
17811 goto error;
17812 }
17813
17814 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17815 if (NULL == pMac)
17816 {
17817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17818 "%s:pMac is NULL", __func__);
17819 VOS_ASSERT(0);
17820 goto error;
17821 }
17822
17823 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17824
17825 if (pMac->sme.pEXTScanIndCb)
17826 {
17827 pMac->sme.pEXTScanIndCb(pCallbackContext,
17828 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17829 pEventData);
17830 }
17831 else
17832 {
17833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17834 "%s:HDD callback is null", __func__);
17835 VOS_ASSERT(0);
17836 }
17837
17838
17839error:
17840
17841 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17842 {
17843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17844 }
17845 if (pWdaParams->wdaMsgParam != NULL)
17846 {
17847 vos_mem_free(pWdaParams->wdaMsgParam);
17848 }
17849 vos_mem_free(pWdaParams) ;
17850
17851 return;
17852}
17853
17854/*==========================================================================
17855 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17856
17857 DESCRIPTION
17858 API to send EXTScan Get Capabilities Response to HDD
17859
17860 PARAMETERS
17861 pEventData: Response from FW
17862 pUserData:
17863===========================================================================*/
17864void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17865{
17866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17867 tWDA_CbContext *pWDA = NULL;
17868 void *pCallbackContext;
17869 tpAniSirGlobal pMac;
17870
17871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17872 "%s:", __func__);
17873 if (NULL == pWdaParams)
17874 {
17875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17876 "%s: pWdaParams received NULL", __func__);
17877 VOS_ASSERT(0);
17878 return;
17879 }
17880
17881 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17882
17883 if (NULL == pWDA)
17884 {
17885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17886 "%s: pWDA received NULL", __func__);
17887 VOS_ASSERT(0);
17888 goto error;
17889 }
17890
17891 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17892 if (NULL == pMac)
17893 {
17894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17895 "%s:pMac is NULL", __func__);
17896 VOS_ASSERT(0);
17897 goto error;
17898 }
17899
17900 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17901
17902 if (pMac->sme.pEXTScanIndCb)
17903 {
17904 pMac->sme.pEXTScanIndCb(pCallbackContext,
17905 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17906 pEventData);
17907 }
17908 else
17909 {
17910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17911 "%s:HDD callback is null", __func__);
17912 VOS_ASSERT(0);
17913 }
17914
17915
17916error:
17917
17918 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17919 {
17920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17921 }
17922 if (pWdaParams->wdaMsgParam != NULL)
17923 {
17924 vos_mem_free(pWdaParams->wdaMsgParam);
17925 }
17926 vos_mem_free(pWdaParams) ;
17927
17928 return;
17929}
17930
17931/*==========================================================================
17932 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17933
17934 DESCRIPTION
17935 API to send EXTScan Set BSSID Hotlist Response to HDD
17936
17937 PARAMETERS
17938 pEventData: Response from FW
17939 pUserData:
17940===========================================================================*/
17941void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17942{
17943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17944 tWDA_CbContext *pWDA = NULL;
17945 void *pCallbackContext;
17946 tpAniSirGlobal pMac;
17947
17948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17949 "%s: ", __func__);
17950 if (NULL == pWdaParams)
17951 {
17952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17953 "%s: pWdaParams received NULL", __func__);
17954 VOS_ASSERT(0) ;
17955 return;
17956 }
17957
17958 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17959
17960 if (NULL == pWDA)
17961 {
17962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17963 "%s: pWDA received NULL", __func__);
17964 VOS_ASSERT(0);
17965 goto error;
17966 }
17967
17968 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17969 if (NULL == pMac)
17970 {
17971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17972 "%s:pMac is NULL", __func__);
17973 VOS_ASSERT(0);
17974 goto error;
17975 }
17976
17977 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17978
17979 if (pMac->sme.pEXTScanIndCb)
17980 {
17981 pMac->sme.pEXTScanIndCb(pCallbackContext,
17982 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17983 pEventData);
17984 }
17985 else
17986 {
17987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17988 "%s:HDD callback is null", __func__);
17989 VOS_ASSERT(0);
17990 }
17991
17992
17993error:
17994
17995 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17996 {
17997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17998 }
17999 if (pWdaParams->wdaMsgParam != NULL)
18000 {
18001 vos_mem_free(pWdaParams->wdaMsgParam);
18002 }
18003 vos_mem_free(pWdaParams) ;
18004
18005 return;
18006}
18007
18008/*==========================================================================
18009 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
18010
18011 DESCRIPTION
18012 API to send EXTScan ReSet BSSID Hotlist Response to HDD
18013
18014 PARAMETERS
18015 pEventData: Response from FW
18016 pUserData:
18017===========================================================================*/
18018void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18019{
18020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18021 tWDA_CbContext *pWDA = NULL;
18022 void *pCallbackContext;
18023 tpAniSirGlobal pMac;
18024
18025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18026 "%s:", __func__);
18027 if (NULL == pWdaParams)
18028 {
18029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18030 "%s: pWdaParams received NULL", __func__);
18031 VOS_ASSERT(0) ;
18032 return;
18033 }
18034
18035 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18036
18037 if (NULL == pWDA)
18038 {
18039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18040 "%s: pWDA received NULL", __func__);
18041 VOS_ASSERT(0);
18042 goto error;
18043 }
18044
18045 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18046 if (NULL == pMac)
18047 {
18048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18049 "%s:pMac is NULL", __func__);
18050 VOS_ASSERT(0);
18051 goto error;
18052 }
18053
18054 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18055
18056 if (pMac->sme.pEXTScanIndCb)
18057 {
18058 pMac->sme.pEXTScanIndCb(pCallbackContext,
18059 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18060 pEventData);
18061 }
18062 else
18063 {
18064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18065 "%s:HDD callback is null", __func__);
18066 VOS_ASSERT(0);
18067 }
18068
18069
18070error:
18071
18072 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18073 {
18074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18075 }
18076 if (pWdaParams->wdaMsgParam != NULL)
18077 {
18078 vos_mem_free(pWdaParams->wdaMsgParam);
18079 }
18080 vos_mem_free(pWdaParams) ;
18081
18082 return;
18083}
18084
18085/*==========================================================================
18086 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18087
18088 DESCRIPTION
18089 API to send EXTScan Set Significant RSSI Change RSP to HDD
18090
18091 PARAMETERS
18092 pEventData: Response from FW
18093 pUserData:
18094===========================================================================*/
18095void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18096{
18097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18098 tWDA_CbContext *pWDA = NULL;
18099 void *pCallbackContext;
18100 tpAniSirGlobal pMac;
18101
18102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18103 "%s:", __func__);
18104 if (NULL == pWdaParams)
18105 {
18106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18107 "%s: pWdaParams received NULL", __func__);
18108 VOS_ASSERT(0) ;
18109 return;
18110 }
18111
18112 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18113
18114 if (NULL == pWDA)
18115 {
18116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18117 "%s: pWDA received NULL", __func__);
18118 VOS_ASSERT(0);
18119 goto error;
18120 }
18121
18122 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18123 if (NULL == pMac)
18124 {
18125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18126 "%s:pMac is NULL", __func__);
18127 VOS_ASSERT(0);
18128 goto error;
18129 }
18130
18131 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18132
18133 if (pMac->sme.pEXTScanIndCb)
18134 {
18135 pMac->sme.pEXTScanIndCb(pCallbackContext,
18136 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18137 pEventData);
18138 }
18139 else
18140 {
18141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18142 "%s:HDD callback is null", __func__);
18143 VOS_ASSERT(0);
18144 }
18145
18146
18147error:
18148
18149 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18150 {
18151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18152 }
18153 if (pWdaParams->wdaMsgParam != NULL)
18154 {
18155 vos_mem_free(pWdaParams->wdaMsgParam);
18156 }
18157 vos_mem_free(pWdaParams) ;
18158
18159 return;
18160}
18161
18162/*==========================================================================
18163 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18164
18165 DESCRIPTION
18166 API to send EXTScan Set Significant RSSI Change RSP to HDD
18167
18168 PARAMETERS
18169 pEventData: Response from FW
18170 pUserData:
18171===========================================================================*/
18172void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18173 void* pUserData)
18174{
18175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18176 tWDA_CbContext *pWDA = NULL;
18177 void *pCallbackContext;
18178 tpAniSirGlobal pMac;
18179
18180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18181 "%s:", __func__);
18182 if (NULL == pWdaParams)
18183 {
18184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18185 "%s: pWdaParams received NULL", __func__);
18186 VOS_ASSERT(0) ;
18187 return;
18188 }
18189
18190 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18191
18192 if (NULL == pWDA)
18193 {
18194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18195 "%s: pWDA received NULL", __func__);
18196 VOS_ASSERT(0);
18197 goto error;
18198 }
18199
18200 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18201 if (NULL == pMac)
18202 {
18203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18204 "%s:pMac is NULL", __func__);
18205 VOS_ASSERT(0);
18206 goto error;
18207 }
18208
18209 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18210
18211 if (pMac->sme.pEXTScanIndCb)
18212 {
18213 pMac->sme.pEXTScanIndCb(pCallbackContext,
18214 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18215 pEventData);
18216 }
18217 else
18218 {
18219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18220 "%s:HDD callback is null", __func__);
18221 VOS_ASSERT(0);
18222 }
18223
18224
18225error:
18226
18227 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18228 {
18229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18230 }
18231 if (pWdaParams->wdaMsgParam != NULL)
18232 {
18233 vos_mem_free(pWdaParams->wdaMsgParam);
18234 }
18235 vos_mem_free(pWdaParams) ;
18236
18237 return;
18238}
18239
18240/*==========================================================================
18241 FUNCTION WDA_ProcessEXTScanStartReq
18242
18243 DESCRIPTION
18244 API to send EXTScan Start Request to WDI
18245
18246 PARAMETERS
18247 pWDA: Pointer to WDA context
18248 wdaRequest: Pointer to EXTScan req parameters
18249===========================================================================*/
18250VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18251 tSirEXTScanStartReqParams *wdaRequest)
18252{
18253 WDI_Status status = WDI_STATUS_SUCCESS;
18254 tWDA_ReqParams *pWdaParams;
18255
18256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18257 "%s: ", __func__);
18258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18259 if (NULL == pWdaParams)
18260 {
18261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18262 "%s: VOS MEM Alloc Failure", __func__);
18263 VOS_ASSERT(0);
18264 return VOS_STATUS_E_NOMEM;
18265 }
18266 pWdaParams->pWdaContext = pWDA;
18267 pWdaParams->wdaMsgParam = wdaRequest;
18268 pWdaParams->wdaWdiApiMsgParam = NULL;
18269
18270 status = WDI_EXTScanStartReq((void *)wdaRequest,
18271 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18272 (void *)pWdaParams);
18273 if (IS_WDI_STATUS_FAILURE(status))
18274 {
18275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18276 "Failure to request. Free all the memory " );
18277 vos_mem_free(pWdaParams->wdaMsgParam);
18278 vos_mem_free(pWdaParams);
18279 }
18280 return CONVERT_WDI2VOS_STATUS(status);
18281}
18282
18283/*==========================================================================
18284 FUNCTION WDA_ProcessEXTScanStopReq
18285
18286 DESCRIPTION
18287 API to send EXTScan Start Request to WDI
18288
18289 PARAMETERS
18290 pWDA: Pointer to WDA context
18291 wdaRequest: Pointer to EXTScan req parameters
18292===========================================================================*/
18293VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18294 tSirEXTScanStopReqParams *wdaRequest)
18295{
18296 WDI_Status status = WDI_STATUS_SUCCESS;
18297 tWDA_ReqParams *pWdaParams;
18298
18299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18300 "%s:", __func__);
18301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18302 if (NULL == pWdaParams)
18303 {
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18305 "%s: VOS MEM Alloc Failure", __func__);
18306 VOS_ASSERT(0);
18307 return VOS_STATUS_E_NOMEM;
18308 }
18309 pWdaParams->pWdaContext = pWDA;
18310 pWdaParams->wdaMsgParam = wdaRequest;
18311 pWdaParams->wdaWdiApiMsgParam = NULL;
18312
18313 status = WDI_EXTScanStopReq((void *)wdaRequest,
18314 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18315 (void *)pWdaParams);
18316 if (IS_WDI_STATUS_FAILURE(status))
18317 {
18318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18319 "Failure to request. Free all the memory " );
18320 vos_mem_free(pWdaParams->wdaMsgParam);
18321 vos_mem_free(pWdaParams);
18322 }
18323 return CONVERT_WDI2VOS_STATUS(status);
18324}
18325
18326/*==========================================================================
18327 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18328
18329 DESCRIPTION
18330 API to send EXTScan Get Cached Results Request to WDI
18331
18332 PARAMETERS
18333 pWDA: Pointer to WDA context
18334 wdaRequest: Pointer to EXTScan req parameters
18335===========================================================================*/
18336VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18337 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18338{
18339 WDI_Status status = WDI_STATUS_SUCCESS;
18340 tWDA_ReqParams *pWdaParams;
18341
18342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18343 "%s: ", __func__);
18344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18345 if (NULL == pWdaParams)
18346 {
18347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18348 "%s: VOS MEM Alloc Failure", __func__);
18349 VOS_ASSERT(0);
18350 return VOS_STATUS_E_NOMEM;
18351 }
18352 pWdaParams->pWdaContext = pWDA;
18353 pWdaParams->wdaMsgParam = wdaRequest;
18354 pWdaParams->wdaWdiApiMsgParam = NULL;
18355
18356 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18357 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18358 (void *)pWdaParams);
18359 if (IS_WDI_STATUS_FAILURE(status))
18360 {
18361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18362 "Failure to request. Free all the memory " );
18363 vos_mem_free(pWdaParams->wdaMsgParam);
18364 vos_mem_free(pWdaParams);
18365 }
18366 return CONVERT_WDI2VOS_STATUS(status);
18367}
18368
18369/*==========================================================================
18370 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18371
18372 DESCRIPTION
18373 API to send EXTScan Get Capabilities Request to WDI
18374
18375 PARAMETERS
18376 pWDA: Pointer to WDA context
18377 wdaRequest: Pointer to EXTScan req parameters
18378===========================================================================*/
18379VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18380 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18381{
18382 WDI_Status status = WDI_STATUS_SUCCESS;
18383 tWDA_ReqParams *pWdaParams;
18384
18385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18386 "%s:", __func__);
18387 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18388 if (NULL == pWdaParams)
18389 {
18390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18391 "%s: VOS MEM Alloc Failure", __func__);
18392 VOS_ASSERT(0);
18393 return VOS_STATUS_E_NOMEM;
18394 }
18395 pWdaParams->pWdaContext = pWDA;
18396 pWdaParams->wdaMsgParam = wdaRequest;
18397 pWdaParams->wdaWdiApiMsgParam = NULL;
18398
18399 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18400 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18401 (void *)pWdaParams);
18402 if (IS_WDI_STATUS_FAILURE(status))
18403 {
18404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18405 "Failure to request. Free all the memory " );
18406 vos_mem_free(pWdaParams->wdaMsgParam);
18407 vos_mem_free(pWdaParams);
18408 }
18409 return CONVERT_WDI2VOS_STATUS(status);
18410}
18411
18412/*==========================================================================
18413 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18414
18415 DESCRIPTION
18416 API to send Set BSSID Hotlist Request to WDI
18417
18418 PARAMETERS
18419 pWDA: Pointer to WDA context
18420 wdaRequest: Pointer to EXTScan req parameters
18421===========================================================================*/
18422VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18423 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18424{
18425 WDI_Status status = WDI_STATUS_SUCCESS;
18426 tWDA_ReqParams *pWdaParams;
18427
18428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18429 "%s: ", __func__);
18430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18431 if (NULL == pWdaParams)
18432 {
18433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18434 "%s: VOS MEM Alloc Failure", __func__);
18435 VOS_ASSERT(0);
18436 return VOS_STATUS_E_NOMEM;
18437 }
18438 pWdaParams->pWdaContext = pWDA;
18439 pWdaParams->wdaMsgParam = wdaRequest;
18440 pWdaParams->wdaWdiApiMsgParam = NULL;
18441
18442 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18443 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18444 (void *)pWdaParams);
18445 if (IS_WDI_STATUS_FAILURE(status))
18446 {
18447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18448 "Failure to request. Free all the memory " );
18449 vos_mem_free(pWdaParams->wdaMsgParam);
18450 vos_mem_free(pWdaParams);
18451 }
18452 return CONVERT_WDI2VOS_STATUS(status);
18453}
18454
18455/*==========================================================================
18456 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18457
18458 DESCRIPTION
18459 API to send Reset BSSID Hotlist Request to WDI
18460
18461 PARAMETERS
18462 pWDA: Pointer to WDA context
18463 wdaRequest: Pointer to EXTScan req parameters
18464===========================================================================*/
18465VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18466 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18467{
18468 WDI_Status status = WDI_STATUS_SUCCESS;
18469 tWDA_ReqParams *pWdaParams;
18470
18471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18472 "%s:", __func__);
18473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18474 if (NULL == pWdaParams)
18475 {
18476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18477 "%s: VOS MEM Alloc Failure", __func__);
18478 VOS_ASSERT(0);
18479 return VOS_STATUS_E_NOMEM;
18480 }
18481 pWdaParams->pWdaContext = pWDA;
18482 pWdaParams->wdaMsgParam = wdaRequest;
18483 pWdaParams->wdaWdiApiMsgParam = NULL;
18484
18485 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18486 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18487 (void *)pWdaParams);
18488 if (IS_WDI_STATUS_FAILURE(status))
18489 {
18490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18491 "Failure to request. Free all the memory " );
18492 vos_mem_free(pWdaParams->wdaMsgParam);
18493 vos_mem_free(pWdaParams);
18494 }
18495 return CONVERT_WDI2VOS_STATUS(status);
18496}
18497
18498/*==========================================================================
18499 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18500
18501 DESCRIPTION
18502 API to send Set Significant RSSI Change Request to WDI
18503
18504 PARAMETERS
18505 pWDA: Pointer to WDA context
18506 wdaRequest: Pointer to EXTScan req parameters
18507===========================================================================*/
18508VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18509 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18510{
18511 WDI_Status status = WDI_STATUS_SUCCESS;
18512 tWDA_ReqParams *pWdaParams;
18513
18514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18515 "%s: ", __func__);
18516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18517 if (NULL == pWdaParams)
18518 {
18519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18520 "%s: VOS MEM Alloc Failure", __func__);
18521 VOS_ASSERT(0);
18522 return VOS_STATUS_E_NOMEM;
18523 }
18524 pWdaParams->pWdaContext = pWDA;
18525 pWdaParams->wdaMsgParam = wdaRequest;
18526 pWdaParams->wdaWdiApiMsgParam = NULL;
18527
18528 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18529 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18530 (void *)pWdaParams);
18531 if (IS_WDI_STATUS_FAILURE(status))
18532 {
18533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18534 "Failure to request. Free all the memory " );
18535 vos_mem_free(pWdaParams->wdaMsgParam);
18536 vos_mem_free(pWdaParams);
18537 }
18538 return CONVERT_WDI2VOS_STATUS(status);
18539}
18540
18541/*==========================================================================
18542 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18543
18544 DESCRIPTION
18545 API to send Reset Significant RSSI Change Request to WDI
18546
18547 PARAMETERS
18548 pWDA: Pointer to WDA context
18549 wdaRequest: Pointer to EXTScan req parameters
18550===========================================================================*/
18551VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18552 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18553{
18554 WDI_Status status = WDI_STATUS_SUCCESS;
18555 tWDA_ReqParams *pWdaParams;
18556
18557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18558 "%s:", __func__);
18559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18560 if (NULL == pWdaParams)
18561 {
18562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18563 "%s: VOS MEM Alloc Failure", __func__);
18564 VOS_ASSERT(0);
18565 return VOS_STATUS_E_NOMEM;
18566 }
18567 pWdaParams->pWdaContext = pWDA;
18568 pWdaParams->wdaMsgParam = wdaRequest;
18569 pWdaParams->wdaWdiApiMsgParam = NULL;
18570
18571 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18572 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18573 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18574 (void *)pWdaParams);
18575 if (IS_WDI_STATUS_FAILURE(status))
18576 {
18577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18578 "Failure to request. Free all the memory " );
18579 vos_mem_free(pWdaParams->wdaMsgParam);
18580 vos_mem_free(pWdaParams);
18581 }
18582 return CONVERT_WDI2VOS_STATUS(status);
18583}
18584#endif /* WLAN_FEATURE_EXTSCAN */
18585
Sunil Duttbd736ed2014-05-26 21:19:41 +053018586#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18587
18588/*==========================================================================
18589 FUNCTION WDA_LLStatsSetRspCallback
18590
18591 DESCRIPTION
18592 API to process set link layer statistics response from FW
18593
18594 PARAMETERS
18595 pRsp: Pointer to set link layer statistics response
18596 pUserData: Pointer to user data
18597
18598 RETURN VALUE
18599 NONE
18600
18601===========================================================================*/
18602void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18603{
18604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18605
18606
18607 if (NULL == pWdaParams)
18608 {
18609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18610 "%s: pWdaParams received NULL", __func__);
18611 VOS_ASSERT(0) ;
18612 return ;
18613 }
18614
18615 /* Do not need to send notification to upper layer
18616 * Just free allocated resources */
18617 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18618 {
18619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18620 }
18621 if (pWdaParams->wdaMsgParam != NULL)
18622 {
18623 vos_mem_free(pWdaParams->wdaMsgParam);
18624 }
18625 vos_mem_free(pWdaParams) ;
18626
18627 return;
18628}
18629
18630/*==========================================================================
18631 FUNCTION WDA_ProcessLLStatsSetReq
18632
18633 DESCRIPTION
18634 API to send Set Link Layer Stats request to WDI
18635
18636 PARAMETERS
18637 pWDA: Pointer to WDA context
18638 wdaRequest: Pointer to set Link Layer Stats req parameters
18639===========================================================================*/
18640VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18641 tSirLLStatsSetReq *wdaRequest)
18642{
18643 WDI_Status status = WDI_STATUS_SUCCESS;
18644 tWDA_ReqParams *pWdaParams;
18645
18646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18647 if (NULL == pWdaParams)
18648 {
18649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18650 "%s: VOS MEM Alloc Failure", __func__);
18651 VOS_ASSERT(0);
18652 return VOS_STATUS_E_NOMEM;
18653 }
18654 pWdaParams->pWdaContext = pWDA;
18655 pWdaParams->wdaMsgParam = wdaRequest;
18656 pWdaParams->wdaWdiApiMsgParam = NULL;
18657
18658 status = WDI_LLStatsSetReq((void *)wdaRequest,
18659 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18660 (void *)pWdaParams);
18661 if (IS_WDI_STATUS_FAILURE(status))
18662 {
18663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18664 "Failure to request. Free all the memory " );
18665 vos_mem_free(pWdaParams->wdaMsgParam);
18666 vos_mem_free(pWdaParams);
18667 }
18668 return CONVERT_WDI2VOS_STATUS(status);
18669}
18670
18671/*==========================================================================
18672 FUNCTION WDA_LLStatsGetRspCallback
18673
18674 DESCRIPTION
18675 API to process get link layer statistics response from FW
18676
18677 PARAMETERS
18678 pRsp: Pointer to get link layer statistics response
18679 pUserData: Pointer to user data
18680
18681 RETURN VALUE
18682 NONE
18683
18684===========================================================================*/
18685void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18686{
18687 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18688
18689 if (NULL == pWdaParams)
18690 {
18691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18692 "%s: pWdaParams received NULL", __func__);
18693 VOS_ASSERT(0) ;
18694 return ;
18695 }
18696
18697 /* Do not need to send notification to upper layer
18698 * Just free allocated resources */
18699 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18700 {
18701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18702 }
18703 if (pWdaParams->wdaMsgParam != NULL)
18704 {
18705 vos_mem_free(pWdaParams->wdaMsgParam);
18706 }
18707 vos_mem_free(pWdaParams) ;
18708
18709 return;
18710}
18711
18712/*==========================================================================
18713 FUNCTION WDA_ProcessLLStatsGetReq
18714
18715 DESCRIPTION
18716 API to send Get Link Layer Stats request to WDI
18717
18718 PARAMETERS
18719 pWDA: Pointer to WDA context
18720 wdaRequest: Pointer to get Link Layer Stats req parameters
18721===========================================================================*/
18722VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18723 tSirLLStatsGetReq *wdaRequest)
18724{
18725 WDI_Status status = WDI_STATUS_SUCCESS;
18726 tWDA_ReqParams *pWdaParams;
18727
18728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18729 if (NULL == pWdaParams)
18730 {
18731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18732 "%s: VOS MEM Alloc Failure", __func__);
18733 VOS_ASSERT(0);
18734 return VOS_STATUS_E_NOMEM;
18735 }
18736 pWdaParams->pWdaContext = pWDA;
18737 pWdaParams->wdaMsgParam = wdaRequest;
18738 pWdaParams->wdaWdiApiMsgParam = NULL;
18739
18740 status = WDI_LLStatsGetReq((void *) wdaRequest,
18741 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18742 (void *)pWdaParams);
18743 if (IS_WDI_STATUS_FAILURE(status))
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 "Failure to request. Free all the memory " );
18747 vos_mem_free(pWdaParams->wdaMsgParam);
18748 vos_mem_free(pWdaParams);
18749 }
18750 return CONVERT_WDI2VOS_STATUS(status);
18751}
18752
18753/*==========================================================================
18754 FUNCTION WDA_LLStatsClearRspCallback
18755
18756 DESCRIPTION
18757 API to process clear link layer statistics response from FW
18758
18759 PARAMETERS
18760 pRsp: Pointer to clear link layer statistics response
18761 pUserData: Pointer to user data
18762
18763 RETURN VALUE
18764 NONE
18765
18766===========================================================================*/
18767void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18768{
18769 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18770
18771
18772 if (NULL == pWdaParams)
18773 {
18774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18775 "%s: pWdaParams received NULL", __func__);
18776 VOS_ASSERT(0) ;
18777 return ;
18778 }
18779 /* Do not need to send notification to upper layer
18780 * Just free allocated resources */
18781 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18782 {
18783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18784 }
18785 if (pWdaParams->wdaMsgParam != NULL)
18786 {
18787 vos_mem_free(pWdaParams->wdaMsgParam);
18788 }
18789 vos_mem_free(pWdaParams) ;
18790 return;
18791}
18792
18793/*==========================================================================
18794 FUNCTION WDA_ProcessLLStatsClearReq
18795
18796 DESCRIPTION
18797 API to send Clear Link Layer Stats request to WDI
18798
18799 PARAMETERS
18800 pWDA: Pointer to WDA context
18801 wdaRequest: Pointer to earLink Layer Stats req
18802===========================================================================*/
18803VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18804 tSirLLStatsClearReq *wdaRequest)
18805{
18806 WDI_Status status = WDI_STATUS_SUCCESS;
18807 tWDA_ReqParams *pWdaParams;
18808
18809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18810 if (NULL == pWdaParams)
18811 {
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18813 "%s: VOS MEM Alloc Failure", __func__);
18814 VOS_ASSERT(0);
18815 return VOS_STATUS_E_NOMEM;
18816 }
18817 pWdaParams->pWdaContext = pWDA;
18818 pWdaParams->wdaMsgParam = wdaRequest;
18819 pWdaParams->wdaWdiApiMsgParam = NULL;
18820
18821 status = WDI_LLStatsClearReq((void *) wdaRequest,
18822 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18823 (void *)pWdaParams);
18824 if (IS_WDI_STATUS_FAILURE(status))
18825 {
18826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18827 "Failure to request. Free all the memory " );
18828 vos_mem_free(pWdaParams->wdaMsgParam);
18829 vos_mem_free(pWdaParams);
18830 }
18831 return CONVERT_WDI2VOS_STATUS(status);
18832}
18833
18834#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018835
Abhishek Singh85b74712014-10-08 11:38:19 +053018836void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18837{
18838 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18839
18840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18841 "<------ %s " ,__func__);
18842 if (NULL == fwStatsinfo)
18843 {
18844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18845 "%s: pWdaParams received NULL", __func__);
18846 VOS_ASSERT(0);
18847 return;
18848 }
18849
18850 if(fwStatsinfo->callback)
18851 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18852
18853 vos_mem_free(pUserData);
18854 return;
18855}
18856
18857
18858v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18859 tSirFWStatsGetReq *pData)
18860{
18861
18862 WDI_Status wdiStatus;
18863 tSirFWStatsInfo *fwStatsinfo;
18864
18865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18866 "------> %s" , __func__);
18867
18868 fwStatsinfo =
18869 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18870 if (NULL == fwStatsinfo)
18871 {
18872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18873 "%s: VOS MEM Alloc Failure", __func__);
18874 VOS_ASSERT(0);
18875 vos_mem_free(pData);
18876 return;
18877 }
18878
18879 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18880 fwStatsinfo->data = pData->data;
18881
18882 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18883 WDA_FWStatsGetRspCallback,
18884 pData->stats);
18885 if (WDI_STATUS_PENDING == wdiStatus)
18886 {
18887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18888 "Pending received for %s:%d ", __func__, __LINE__);
18889 }
18890 else if (WDI_STATUS_SUCCESS != wdiStatus)
18891 {
18892 if (fwStatsinfo->callback)
18893 {
18894 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18895 }
18896 vos_mem_free(fwStatsinfo);
18897 }
18898 vos_mem_free(pData);
18899}
18900
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018901/*==========================================================================
18902 FUNCTION WDA_EncryptMsgRspCallback
18903
18904 DESCRIPTION
18905 API to send Encrypt message response to HDD
18906
18907 PARAMETERS
18908 pEventData: Response from FW
18909 pUserData: Data sent to firmware as part of request
18910===========================================================================*/
18911void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18912 void* pUserData)
18913{
18914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18915 tWDA_CbContext *pWDA = NULL;
18916 tpAniSirGlobal pMac;
18917 vos_msg_t vosMsg;
18918 tpSirEncryptedDataRspParams pEncRspParams;
18919 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18920
18921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18922 FL("%s:"), __func__);
18923 if (NULL == pWdaParams)
18924 {
18925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18926 FL("%s: pWdaParams received NULL"), __func__);
18927 VOS_ASSERT(0);
18928 return;
18929 }
18930
18931 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18932
18933 if (NULL == pWDA)
18934 {
18935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18936 FL("%s: pWDA received NULL"), __func__);
18937 VOS_ASSERT(0);
18938 goto error;
18939 }
18940
18941 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18942 if (NULL == pMac)
18943 {
18944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18945 FL("%s:pMac is NULL"), __func__);
18946 VOS_ASSERT(0);
18947 goto error;
18948 }
18949
18950 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18951
18952 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18953 if (NULL == pEncRspParams)
18954 {
18955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18956 FL("%s: VOS MEM Alloc Failure"), __func__);
18957 VOS_ASSERT(0);
18958 goto error;
18959 }
18960
18961 /* Message Header */
18962 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18963 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18964 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18965 pEncryptedDataRsp->encryptedPayload.length;
18966 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18967 pEncryptedDataRsp->encryptedPayload.data,
18968 pEncryptedDataRsp->encryptedPayload.length);
18969
18970 /* VOS message wrapper */
18971 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18972 vosMsg.bodyptr = (void *)pEncRspParams;
18973 vosMsg.bodyval = 0;
18974
18975 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18976 {
18977 /* free the mem */
18978 vos_mem_free((v_VOID_t *) pEncRspParams);
18979 }
18980
18981error:
18982
18983 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18984 {
18985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18986 }
18987 if (pWdaParams->wdaMsgParam != NULL)
18988 {
18989 vos_mem_free(pWdaParams->wdaMsgParam);
18990 }
18991 vos_mem_free(pWdaParams) ;
18992
18993 return;
18994}
18995/*==========================================================================
18996 FUNCTION WDA_ProcessEncryptMsgReq
18997
18998 DESCRIPTION
18999 API to send Encrypt message Request to WDI
19000
19001 PARAMETERS
19002 pWDA: Pointer to WDA context
19003 wdaRequest: Pointer to Encrypt_msg req parameters
19004===========================================================================*/
19005VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
19006 u8 *wdaRequest)
19007{
19008 WDI_Status status = WDI_STATUS_SUCCESS;
19009 tWDA_ReqParams *pWdaParams;
19010
19011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19012 FL("%s: "), __func__);
19013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19014 if (NULL == pWdaParams)
19015 {
19016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19017 FL("%s: VOS MEM Alloc Failure"), __func__);
19018 VOS_ASSERT(0);
19019 return VOS_STATUS_E_NOMEM;
19020 }
19021 pWdaParams->pWdaContext = pWDA;
19022 pWdaParams->wdaMsgParam = wdaRequest;
19023 pWdaParams->wdaWdiApiMsgParam = NULL;
19024
19025 status = WDI_EncryptMsgReq((void *)wdaRequest,
19026 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19027 (void *)pWdaParams);
19028 if (IS_WDI_STATUS_FAILURE(status))
19029 {
19030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19031 FL("Failure to request. Free all the memory " ));
19032 vos_mem_free(pWdaParams->wdaMsgParam);
19033 vos_mem_free(pWdaParams);
19034 }
19035 return CONVERT_WDI2VOS_STATUS(status);
19036}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019037/*==========================================================================
19038 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19039
19040 DESCRIPTION
19041 API to enable/disable RTS/CTS for different modes.
19042
19043 PARAMETERS
19044 pWDA: Pointer to WDA context
19045 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19046===========================================================================*/
19047
19048VOS_STATUS
19049WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19050 tANI_U32 rtsCtsVal)
19051{
19052 WDI_Status status;
19053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19054 FL("---> %s"), __func__);
19055 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19056 if (WDI_STATUS_PENDING == status)
19057 {
19058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19059 FL("pending status received "));
19060 }
19061 else if (WDI_STATUS_SUCCESS_SYNC != status)
19062 {
19063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19064 FL("Failure status %d"), status);
19065 }
19066 return CONVERT_WDI2VOS_STATUS(status) ;
19067}
Katya Nigamf0511f62015-05-05 16:40:57 +053019068void WDA_MonStartRspCallback(void *pEventData, void* pUserData)
19069{
19070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19071
19072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19073 "<------ %s " ,__func__);
19074 if (NULL == pWdaParams)
19075 {
19076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19077 "%s: pWdaParams received NULL", __func__);
19078 VOS_ASSERT(0) ;
19079 return ;
19080 }
19081
19082 vos_mem_free(pWdaParams) ;
19083
19084 return;
19085}
19086
19087
19088VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest)
19089{
19090
19091 WDI_Status status = WDI_STATUS_SUCCESS;
19092 tWDA_ReqParams *pWdaParams;
19093
19094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19095 FL("%s: "), __func__);
19096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19097 if (NULL == pWdaParams)
19098 {
19099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19100 FL("%s: VOS MEM Alloc Failure"), __func__);
19101 VOS_ASSERT(0);
19102 return VOS_STATUS_E_NOMEM;
19103 }
19104 pWdaParams->pWdaContext = pWDA;
19105 pWdaParams->wdaMsgParam = wdaRequest;
19106 pWdaParams->wdaWdiApiMsgParam = NULL;
19107
19108 status = WDI_MonStartReq((void *)wdaRequest,
19109 (WDI_MonStartRspCb)WDA_MonStartRspCallback,
19110 (void *)pWdaParams);
19111 if (IS_WDI_STATUS_FAILURE(status))
19112 {
19113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19114 "Failure to request. Free all the memory " );
19115 vos_mem_free(pWdaParams->wdaMsgParam);
19116 vos_mem_free(pWdaParams);
19117 }
19118 return CONVERT_WDI2VOS_STATUS(status);
19119}
19120
19121void WDA_MonStopRspCallback(void* pUserData)
19122{
19123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19124
19125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19126 "<------ %s " ,__func__);
19127 if (NULL == pWdaParams)
19128 {
19129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19130 "%s: pWdaParams received NULL", __func__);
19131 VOS_ASSERT(0) ;
19132 return ;
19133 }
19134
19135 vos_mem_free(pWdaParams) ;
19136
19137 return;
19138}
19139
19140VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
19141{
19142
19143 WDI_Status status = WDI_STATUS_SUCCESS;
19144 tWDA_ReqParams *pWdaParams;
19145
19146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19147 FL("%s: "), __func__);
19148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19149 if (NULL == pWdaParams)
19150 {
19151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19152 FL("%s: VOS MEM Alloc Failure"), __func__);
19153 VOS_ASSERT(0);
19154 return VOS_STATUS_E_NOMEM;
19155 }
19156 pWdaParams->pWdaContext = pWDA;
19157 pWdaParams->wdaMsgParam = wdaRequest;
19158 pWdaParams->wdaWdiApiMsgParam = NULL;
19159
19160 status = WDI_MonStopReq((WDI_MonStopRspCb)WDA_MonStopRspCallback,
19161 (void *)pWdaParams);
19162
19163 if (IS_WDI_STATUS_FAILURE(status))
19164 {
19165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19166 "Failure to request. Free all the memory " );
19167 vos_mem_free(pWdaParams->wdaMsgParam);
19168 vos_mem_free(pWdaParams);
19169 }
19170 return CONVERT_WDI2VOS_STATUS(status);
19171}