blob: ed501754169b7c1a25f9d31322192271191f90c9 [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);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530236VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
237 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
239 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530240VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
241 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#endif /* WLAN_FEATURE_EXTSCAN */
243
Sunil Duttbd736ed2014-05-26 21:19:41 +0530244#ifdef WLAN_FEATURE_LINK_LAYER_STATS
245VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
246 tSirLLStatsSetReq *wdaRequest);
247
248VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
249 tSirLLStatsGetReq *wdaRequest);
250
251VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
252 tSirLLStatsClearReq *wdaRequest);
253#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530254
255v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
256 tSirFWStatsGetReq *wdaRequest);
257
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530258VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
259 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530260VOS_STATUS
261WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
262 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530263
c_manjeecfd1efb2015-09-25 19:32:34 +0530264VOS_STATUS
265WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
266 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530267
Katya Nigamf0511f62015-05-05 16:40:57 +0530268VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
269VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530270VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530271
272VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
273 tSetWifiConfigParams *pwdaWificonfig);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530274/*
275 * FUNCTION: WDA_ProcessNanRequest
276 * Process NAN request
277 */
278VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
279 tNanRequest *wdaRequest)
280{
281 WDI_Status status = WDI_STATUS_SUCCESS;
282 tWDA_ReqParams *pWdaParams;
283 WDI_NanRequestType *wdiRequest = NULL;
284 size_t wdiReqLength = sizeof(WDI_NanRequestType)
285 - sizeof(wdiRequest->request_data)
286 + wdaRequest->request_data_len;
287
288 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
289
290 if (NULL == wdiRequest)
291 {
292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
293 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
294 wdiReqLength);
295 vos_mem_free(wdaRequest);
296 return VOS_STATUS_E_NOMEM;
297 }
298
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
300 "WDA: Process Nan Request length: %zu", wdiReqLength);
301
302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
303 if (NULL == pWdaParams)
304 {
305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
306 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
307 VOS_ASSERT(0);
308 vos_mem_free(wdaRequest);
309 vos_mem_free(wdiRequest);
310 return VOS_STATUS_E_NOMEM;
311 }
312
313 wdiRequest->request_data_len = wdaRequest->request_data_len;
314
315 vos_mem_copy( wdiRequest->request_data,
316 wdaRequest->request_data,
317 wdaRequest->request_data_len);
318
319 vos_mem_free(wdaRequest);
320
321 pWdaParams->pWdaContext = pWDA;
322 pWdaParams->wdaMsgParam = NULL;
323 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
324
325 status = WDI_NanRequest(wdiRequest, pWdaParams);
326
327 if (IS_WDI_STATUS_FAILURE(status))
328 {
329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
330 "Failure to request. Free all the memory " );
331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
332 vos_mem_free(pWdaParams);
333 }
334
335 return CONVERT_WDI2VOS_STATUS(status) ;
336}
337
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530338/**
339 * wda_state_info_dump() - prints state information of wda layer
340 */
341static void wda_state_info_dump(void)
342{
343 v_CONTEXT_t vos_ctx_ptr = NULL;
344 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530345
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
347 "<------ %s " ,__func__);
348
349 /* Get the Global VOSS Context */
350 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
351
352 if (NULL != vos_ctx_ptr)
353 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
354 vos_ctx_ptr );
355 else {
356 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
357 "%s: Invalid Global VOSS Context", __func__);
358 VOS_ASSERT(0);
359 return;
360 }
361
362 if (NULL != wda)
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
364 "wdaState: %d linkState: %d", wda->wdaState,
365 wda->linkState);
366 else {
367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
368 "%s: Invalid WDA Context", __func__);
369 VOS_ASSERT(0);
370 }
371}
372
373/**
374 * wda_register_debug_callback() - registration function for wda layer
375 * to print wda state information
376 */
377static void wda_register_debug_callback(void)
378{
379 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
380}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530381
Jeff Johnson295189b2012-06-20 16:38:30 -0700382/*
383 * FUNCTION: WDA_open
384 * Allocate the WDA context
385 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530386VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 tMacOpenParameters *pMacParams )
388{
389 tWDA_CbContext *wdaContext;
390 VOS_STATUS status;
391 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530393 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
395 if(!VOS_IS_STATUS_SUCCESS(status))
396 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
398 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 return VOS_STATUS_E_NOMEM;
400 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700401 /*__asm int 3;*/
402 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
403
404 /* Initialize data structures */
405 wdaContext->pVosContext = pVosContext;
406 wdaContext->wdaState = WDA_INIT_STATE;
407 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
408
409 /* Initialize WDA-WDI synchronization event */
410 status = vos_event_init(&wdaContext->wdaWdiEvent);
411 if(!VOS_IS_STATUS_SUCCESS(status))
412 {
413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800414 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800415 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 /* Init Frame transfer event */
418 status = vos_event_init(&wdaContext->txFrameEvent);
419 if(!VOS_IS_STATUS_SUCCESS(status))
420 {
421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800422 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800423 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 status = vos_event_init(&wdaContext->suspendDataTxEvent);
426 if(!VOS_IS_STATUS_SUCCESS(status))
427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800429 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800430 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
433 if(!VOS_IS_STATUS_SUCCESS(status))
434 {
435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800436 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800437 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530441 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 &wdiDevCapability, pMacParams->driverType))
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
445 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800446 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 }
448 else
449 {
450 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
451 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
452 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 /* update max STA in WDA used for BA */
454 wdaContext->wdaMaxSta = pMacParams->maxStation;
455 /* store the frameTransRequired flag in wdaContext, to send this to HAL
456 * in WDA_Start
457 */
458 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
459 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530460
461 wda_register_debug_callback();
462
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800464
465error:
466 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
467 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468}
469
Jeff Johnson295189b2012-06-20 16:38:30 -0700470/*
471 * FUNCTION: WDA_preStart
472 * Trigger DAL-AL to start CFG download
473 */
474VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
475{
476 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
477 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /*
479 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
480 */
481 wdaMsg.type = WNI_CFG_DNLD_REQ ;
482 wdaMsg.bodyptr = NULL;
483 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* post the message.. */
485 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
486 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
487 {
488 vosStatus = VOS_STATUS_E_BADMSG;
489 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700490 return( vosStatus );
491}
Jeff Johnson295189b2012-06-20 16:38:30 -0700492/*
493 * FUNCTION: WDA_wdiStartCallback
494 * Once WDI_Start is finished, WDI start callback will be called by WDI
495 * to indicate completion of WDI_Start.
496 */
497void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
498 void *pVosContext)
499{
500 tWDA_CbContext *wdaContext;
501 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700502 if (NULL == pVosContext)
503 {
504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700505 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 return;
507 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
509 if (NULL == wdaContext)
510 {
511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700512 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 return;
514 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
516 {
517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700518 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 }
520 else
521 {
522 wdaContext->wdaState = WDA_START_STATE;
523 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 /* extract and save version information from the Start Response */
525 wdaContext->wcnssWlanCompiledVersion.major =
526 wdiRspParams->wlanCompiledVersion.major;
527 wdaContext->wcnssWlanCompiledVersion.minor =
528 wdiRspParams->wlanCompiledVersion.minor;
529 wdaContext->wcnssWlanCompiledVersion.version =
530 wdiRspParams->wlanCompiledVersion.version;
531 wdaContext->wcnssWlanCompiledVersion.revision =
532 wdiRspParams->wlanCompiledVersion.revision;
533 wdaContext->wcnssWlanReportedVersion.major =
534 wdiRspParams->wlanReportedVersion.major;
535 wdaContext->wcnssWlanReportedVersion.minor =
536 wdiRspParams->wlanReportedVersion.minor;
537 wdaContext->wcnssWlanReportedVersion.version =
538 wdiRspParams->wlanReportedVersion.version;
539 wdaContext->wcnssWlanReportedVersion.revision =
540 wdiRspParams->wlanReportedVersion.revision;
541 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
542 wdiRspParams->wcnssSoftwareVersion,
543 sizeof(wdaContext->wcnssSoftwareVersionString));
544 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
545 wdiRspParams->wcnssHardwareVersion,
546 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 /* Notify WDA_start that WDI_Start has completed */
548 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700549 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 {
551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700552 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 return;
555}
556
Jeff Johnson295189b2012-06-20 16:38:30 -0700557/*
558 * FUNCTION: WDA_start
559 * Prepare TLV configuration and call WDI_Start.
560 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700561VOS_STATUS WDA_start(v_PVOID_t pVosContext)
562{
563 tWDA_CbContext *wdaContext;
564 VOS_STATUS status;
565 WDI_Status wdiStatus;
566 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 if (NULL == pVosContext)
568 {
569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700570 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 return VOS_STATUS_E_FAILURE;
572 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
574 if (NULL == wdaContext)
575 {
576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700577 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 return VOS_STATUS_E_FAILURE;
579 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 /* Non-FTM mode, WDA status for START must be INIT
581 * FTM mode, WDA Status for START can be INIT or STOP */
582 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
583 (WDA_STOP_STATE != wdaContext->wdaState) )
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700587 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 return VOS_STATUS_E_FAILURE;
589 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 /* initialize the wdiStartParam. Note that we can create this on
591 the stack since we won't exit until WDI_Start() completes or
592 times out */
593 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 /* prepare the config TLV for the WDI */
596 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
597 if ( !VOS_IS_STATUS_SUCCESS(status) )
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700600 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 return VOS_STATUS_E_FAILURE;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 /* note from here onwards if an error occurs we must
604 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
606 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
607 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 /* initialize the WDA-WDI synchronization event */
609 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* call WDI start */
611 wdiStatus = WDI_Start(&wdiStartParam,
612 (WDI_StartRspCb)WDA_wdiStartCallback,
613 (v_VOID_t *)pVosContext);
614 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
615 {
616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 vos_mem_free(wdiStartParam.pConfigBuffer);
619 return VOS_STATUS_E_FAILURE;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 /* wait for WDI start to invoke our callback */
622 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
623 WDA_WDI_START_TIMEOUT );
624 if ( !VOS_IS_STATUS_SUCCESS(status) )
625 {
626 if ( VOS_STATUS_E_TIMEOUT == status )
627 {
628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700629 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 }
631 else
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
634 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700635 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 }
637 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530638 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700641 /* we no longer need the config TLV */
642 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 /* if we are not in the START state then WDI_Start() failed */
644 if (WDA_START_STATE != wdaContext->wdaState)
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700647 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 return VOS_STATUS_E_FAILURE;
649 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 /* FTM mode does not need to monitor BA activity */
651 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
652 {
653 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800654 if(VOS_STATUS_SUCCESS == status)
655 {
656 wdaContext->wdaTimersCreated = VOS_TRUE;
657 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530658 else
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
661 FL("wda create timers failed"));
662 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 }
Leo Chang9d76f622013-08-23 16:34:52 -0700664 else
665 {
666 vos_event_init(&wdaContext->ftmStopDoneEvent);
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 return status;
669}
670
Jeff Johnson295189b2012-06-20 16:38:30 -0700671/*
672 * FUNCTION: WDA_prepareConfigTLV
673 * Function to prepare CFG for DAL(WDA)
674 */
675VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
676 WDI_StartReqParamsType *wdiStartParams )
677{
678 /* get pMac to acess CFG data base */
679 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
680 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
681 tHalCfg *tlvStruct = NULL ;
682 tANI_U8 *tlvStructStart = NULL ;
683 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
684 v_PVOID_t *configParam;
685 tANI_U32 configParamSize;
686 tANI_U32 *configDataValue;
687 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700688 tANI_U8 i;
689
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 if ((NULL == pMac)||(NULL == wdaContext))
691 {
692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700693 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 VOS_ASSERT(0);
695 return VOS_STATUS_E_FAILURE;
696 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
698 WNI_CFG_STA_ID_LEN +
699 WNI_CFG_EDCA_WME_ACBK_LEN +
700 WNI_CFG_EDCA_WME_ACBE_LEN +
701 WNI_CFG_EDCA_WME_ACVI_LEN +
702 WNI_CFG_EDCA_WME_ACVO_LEN +
703 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 /* malloc memory for all configs in one shot */
705 configParam = vos_mem_malloc(configParamSize);
706
707 if(NULL == configParam )
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700710 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 VOS_ASSERT(0) ;
712 return VOS_STATUS_E_NOMEM;
713 }
714 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700715 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 tlvStruct = (tHalCfg *)configParam;
717 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 /* TODO: Remove Later */
719 /* QWLAN_HAL_CFG_STA_ID */
720 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
721 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
722 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
723 eSIR_SUCCESS)
724 {
725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
726 "Failed to get value for WNI_CFG_STA_ID");
727 goto handle_failure;
728 }
729 tlvStruct->length = strLength ;
730 /* calculate the pad bytes to have the CFG in aligned format */
731 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
732 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
736 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
740 != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
749 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
762 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
763 tlvStruct->length = sizeof(tANI_U32);
764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
765 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
766 != eSIR_SUCCESS)
767 {
768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
769 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
770 goto handle_failure;
771 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700772 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
773 + sizeof(tHalCfg) + tlvStruct->length)) ;
774
775 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
776 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_CAL_PERIOD */
789 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
793 != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_CAL_PERIOD");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 /* QWLAN_HAL_CFG_CAL_CONTROL */
802 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
803 tlvStruct->length = sizeof(tANI_U32);
804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
805 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
806 != eSIR_SUCCESS)
807 {
808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
809 "Failed to get value for WNI_CFG_CAL_CONTROL");
810 goto handle_failure;
811 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
813 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 /* QWLAN_HAL_CFG_PROXIMITY */
815 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_PROXIMITY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
828 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
829 tlvStruct->length = sizeof(tANI_U32);
830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
831 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
832 != eSIR_SUCCESS)
833 {
834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
835 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
836 goto handle_failure;
837 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
839 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
841 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
842 tlvStruct->length = sizeof(tANI_U32);
843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
844 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
845 eSIR_SUCCESS)
846 {
847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
848 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
849 goto handle_failure;
850 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
852 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
854 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
855 tlvStruct->length = sizeof(tANI_U32);
856 configDataValue = (tANI_U32 *)(tlvStruct + 1);
857 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
858 configDataValue ) != eSIR_SUCCESS)
859 {
860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
861 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
862 goto handle_failure;
863 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
865 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
867 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
868 tlvStruct->length = sizeof(tANI_U32);
869 configDataValue = (tANI_U32 *)(tlvStruct + 1);
870 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
871 eSIR_SUCCESS)
872 {
873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
874 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
875 goto handle_failure;
876 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700877 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
878 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
880 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
881 tlvStruct->length = sizeof(tANI_U32);
882 configDataValue = (tANI_U32 *)(tlvStruct + 1);
883 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
884 eSIR_SUCCESS)
885 {
886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
887 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
888 goto handle_failure;
889 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700890 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
891 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700892 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
893 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
894 tlvStruct->length = sizeof(tANI_U32);
895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
896 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
897 eSIR_SUCCESS)
898 {
899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
900 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
901 goto handle_failure;
902 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
904 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
906 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
907 tlvStruct->length = sizeof(tANI_U32);
908 configDataValue = (tANI_U32 *)(tlvStruct + 1);
909 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
910 configDataValue ) != eSIR_SUCCESS)
911 {
912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
913 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
914 goto handle_failure;
915 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
917 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
919 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
920 tlvStruct->length = sizeof(tANI_U32);
921 configDataValue = (tANI_U32 *)(tlvStruct + 1);
922 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
923 configDataValue ) != eSIR_SUCCESS)
924 {
925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
926 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
927 goto handle_failure;
928 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700929 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
930 + sizeof(tHalCfg) + tlvStruct->length));
931
932 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
933 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
934 tlvStruct->length = sizeof(tANI_U32);
935 configDataValue = (tANI_U32 *)(tlvStruct + 1);
936 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
937 configDataValue ) != eSIR_SUCCESS)
938 {
939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
940 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
941 goto handle_failure;
942 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
944 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700945 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
946 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
947 tlvStruct->length = sizeof(tANI_U32);
948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
949 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
950 configDataValue ) != eSIR_SUCCESS)
951 {
952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
953 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
954 goto handle_failure;
955 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
957 + sizeof(tHalCfg) + tlvStruct->length));
958
959 /* QWLAN_HAL_CFG_FIXED_RATE */
960 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
961 tlvStruct->length = sizeof(tANI_U32);
962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
963 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
964 != eSIR_SUCCESS)
965 {
966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
967 "Failed to get value for WNI_CFG_FIXED_RATE");
968 goto handle_failure;
969 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
971 + sizeof(tHalCfg) + tlvStruct->length));
972
973 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
974 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
978 != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length));
986
987 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
988 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
992 configDataValue ) != eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1001 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1002 tlvStruct->length = sizeof(tANI_U32);
1003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1004 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1005 configDataValue ) != eSIR_SUCCESS)
1006 {
1007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1008 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1009 goto handle_failure;
1010 }
1011 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1014 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1018 configDataValue ) != eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1022 goto handle_failure;
1023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1025 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1027 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1028 tlvStruct->length = sizeof(tANI_U32);
1029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1030 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1031 configDataValue ) != eSIR_SUCCESS)
1032 {
1033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1034 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1035 goto handle_failure;
1036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1038 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1040 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1041 tlvStruct->length = sizeof(tANI_U32);
1042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1043 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1044 configDataValue ) != eSIR_SUCCESS)
1045 {
1046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1047 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1048 goto handle_failure;
1049 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1051 + sizeof(tHalCfg) + tlvStruct->length);
1052
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1054 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1055 tlvStruct->length = sizeof(tANI_U32);
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1058 configDataValue ) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1062 goto handle_failure;
1063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1065 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1067 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1068 tlvStruct->length = sizeof(tANI_U32);
1069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1070 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1071 configDataValue ) != eSIR_SUCCESS)
1072 {
1073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1074 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1075 goto handle_failure;
1076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1078 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1080 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1081 tlvStruct->length = sizeof(tANI_U32);
1082 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1083 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1084 eSIR_SUCCESS)
1085 {
1086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1087 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1088 goto handle_failure;
1089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1091 + sizeof(tHalCfg) + tlvStruct->length);
1092
1093 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1094 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1098 configDataValue ) != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1107 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1111 configDataValue ) != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1120 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1124 configDataValue ) != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1133 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1137 configDataValue ) != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1141 goto handle_failure;
1142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length);
1145
1146 /* QWLAN_HAL_CFG_STATS_PERIOD */
1147 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1151 eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_STATS_PERIOD");
1155 goto handle_failure;
1156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1160 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1164 eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1168 goto handle_failure;
1169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1173 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1174 tlvStruct->length = sizeof(tANI_U32);
1175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1176 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1177 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1179 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1181 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1182 tlvStruct->length = sizeof(tANI_U32);
1183 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1184 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1185 != eSIR_SUCCESS)
1186 {
1187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1188 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1189 goto handle_failure;
1190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001191 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1192 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001193 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1194 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1195 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1197 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1198 &strLength) != eSIR_SUCCESS)
1199 {
1200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1201 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1202 goto handle_failure;
1203 }
1204 tlvStruct->length = strLength;
1205 /* calculate the pad bytes to have the CFG in aligned format */
1206 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1207 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1211 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1212 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1215 &strLength) != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1219 goto handle_failure;
1220 }
1221 tlvStruct->length = strLength;
1222 /* calculate the pad bytes to have the CFG in aligned format */
1223 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1224 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1226 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001227 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1228 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1229 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1231 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1232 &strLength) != eSIR_SUCCESS)
1233 {
1234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1235 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1236 goto handle_failure;
1237 }
1238 tlvStruct->length = strLength;
1239 /* calculate the pad bytes to have the CFG in aligned format */
1240 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1241 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1243 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1245 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1246 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1248 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1249 &strLength) != eSIR_SUCCESS)
1250 {
1251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1252 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1253 goto handle_failure;
1254 }
1255 tlvStruct->length = strLength;
1256 /* calculate the pad bytes to have the CFG in aligned format */
1257 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1258 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1262 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1270 goto handle_failure;
1271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1275 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1276 tlvStruct->length = sizeof(tANI_U32);
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1279 != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1283 goto handle_failure;
1284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1288 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1289 tlvStruct->length = sizeof(tANI_U32);
1290 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1291 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1292 != eSIR_SUCCESS)
1293 {
1294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1295 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1296 goto handle_failure;
1297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001300 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1301 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1302 tlvStruct->length = sizeof(tANI_U32);
1303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1304 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1305 != eSIR_SUCCESS)
1306 {
1307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1308 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1309 goto handle_failure;
1310 }
1311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1312 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001313 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1314 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1315 tlvStruct->length = sizeof(tANI_U32);
1316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1317 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1318 != eSIR_SUCCESS)
1319 {
1320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1321 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1322 goto handle_failure;
1323 }
1324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1325 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001326 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1327 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1331 != eSIR_SUCCESS)
1332 {
1333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1334 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1335 goto handle_failure;
1336 }
1337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1338 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001339 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1340 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1344 != eSIR_SUCCESS)
1345 {
1346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1347 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1348 goto handle_failure;
1349 }
1350 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1351 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001352 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1353 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1357 != eSIR_SUCCESS)
1358 {
1359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1360 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1361 goto handle_failure;
1362 }
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001365 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1366 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1370 != eSIR_SUCCESS)
1371 {
1372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1373 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1374 goto handle_failure;
1375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001376 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1377 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001378 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1379 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1383 != eSIR_SUCCESS)
1384 {
1385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1386 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1387 goto handle_failure;
1388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001391 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1392 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1396 != eSIR_SUCCESS)
1397 {
1398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1399 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1400 goto handle_failure;
1401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001402 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1403 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001404 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1405 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1406 * into FW, so the parameters are added here.
1407 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1409 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001415 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1416 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1420 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1421 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001422 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1423 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1424 tlvStruct->length = sizeof(tANI_U32);
1425 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1426 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001429 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1430 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
1437 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1438 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
1444
1445 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
1452
1453 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1454 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1455 tlvStruct->length = sizeof(tANI_U32);
1456 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1457 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1459 + sizeof(tHalCfg) + tlvStruct->length) ;
1460
1461 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1462 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1463 tlvStruct->length = sizeof(tANI_U32);
1464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1465 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
1469 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1470 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1471 tlvStruct->length = sizeof(tANI_U32);
1472 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1473 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
1477 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1478 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1482 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1483 + sizeof(tHalCfg) + tlvStruct->length) ;
1484
1485 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1486 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1487 tlvStruct->length = sizeof(tANI_U32);
1488 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1489 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1490 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1491 + sizeof(tHalCfg) + tlvStruct->length) ;
1492
1493 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1494 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1495 tlvStruct->length = sizeof(tANI_U32);
1496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1497 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1498 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1499 + sizeof(tHalCfg) + tlvStruct->length) ;
1500
1501 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1502 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1503 tlvStruct->length = sizeof(tANI_U32);
1504 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1505 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
1508
1509 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1510 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1514 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1515 + sizeof(tHalCfg) + tlvStruct->length) ;
1516
1517 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1518 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1519 tlvStruct->length = sizeof(tANI_U32);
1520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1521 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1522 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1523 + sizeof(tHalCfg) + tlvStruct->length) ;
1524
1525 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1526 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1527 tlvStruct->length = sizeof(tANI_U32);
1528 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1529 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1530 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1531 + sizeof(tHalCfg) + tlvStruct->length) ;
1532
Wilson Tsaof8b37942013-09-06 10:49:00 -07001533 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1534 {
1535 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1536 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1540 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1541 + sizeof(tHalCfg) + tlvStruct->length) ;
1542
1543 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1544 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1545 tlvStruct->length = sizeof(tANI_U32);
1546 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1547 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1548 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1549 + sizeof(tHalCfg) + tlvStruct->length) ;
1550
1551 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1552 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1553 tlvStruct->length = sizeof(tANI_U32);
1554 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1555 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1556 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1557 + sizeof(tHalCfg) + tlvStruct->length) ;
1558
1559 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1560 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1561 tlvStruct->length = sizeof(tANI_U32);
1562 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1563 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1564 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1565 + sizeof(tHalCfg) + tlvStruct->length) ;
1566 }
1567
1568 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1569 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1570 tlvStruct->length = sizeof(tANI_U32);
1571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1572 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1573 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1574 + sizeof(tHalCfg) + tlvStruct->length) ;
1575
1576 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1577 {
1578 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1579 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1580 tlvStruct->length = sizeof(tANI_U32);
1581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1582 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585 }
1586
1587 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1588 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1589 tlvStruct->length = sizeof(tANI_U32);
1590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1591 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1592 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1593 + sizeof(tHalCfg) + tlvStruct->length) ;
1594
Jeff Johnson32d95a32012-09-10 13:15:23 -07001595 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1600 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1601 wcnssCompiledApiVersion.minor,
1602 wcnssCompiledApiVersion.version,
1603 wcnssCompiledApiVersion.revision);
1604 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1605 + sizeof(tHalCfg) + tlvStruct->length) ;
1606
Jeff Johnsond13512a2012-07-17 11:42:19 -07001607 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1608 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1609 tlvStruct->length = sizeof(tANI_U32);
1610 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1611 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1612 configDataValue ) != eSIR_SUCCESS)
1613 {
1614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1615 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1616 goto handle_failure;
1617 }
1618
1619 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1620 + sizeof(tHalCfg) + tlvStruct->length) ;
1621 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1622 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1623 tlvStruct->length = sizeof(tANI_U32);
1624 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1625 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1626 configDataValue ) != eSIR_SUCCESS)
1627 {
1628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1629 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1630 goto handle_failure;
1631 }
1632
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
1635
1636 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1637 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1638 tlvStruct->length = sizeof(tANI_U32);
1639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1640 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1641 != eSIR_SUCCESS)
1642 {
1643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1644 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1645 goto handle_failure;
1646 }
1647
1648 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1649 + sizeof(tHalCfg) + tlvStruct->length) ;
1650
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001651 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1656 != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001665#ifdef WLAN_SOFTAP_VSTA_FEATURE
1666 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1667 tlvStruct->length = sizeof(tANI_U32);
1668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1669 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1670 != eSIR_SUCCESS)
1671 {
1672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1673 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1674 goto handle_failure;
1675 }
1676
1677 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1678 + sizeof(tHalCfg) + tlvStruct->length) ;
1679#endif
1680
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001681 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1682 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1683 tlvStruct->length = sizeof(tANI_U32);
1684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1685
1686 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1687 != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1691 goto handle_failure;
1692 }
1693
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301697/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1698 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1706 goto handle_failure;
1707 }
1708
1709 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1710 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301711#ifdef FEATURE_WLAN_TDLS
1712 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1713 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1714 tlvStruct->length = sizeof(tANI_U32);
1715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1716 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1717 configDataValue ) != eSIR_SUCCESS)
1718 {
1719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1720 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1721 goto handle_failure;
1722 }
1723 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1724 + sizeof(tHalCfg) + tlvStruct->length) ;
1725
1726 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1727 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1728 tlvStruct->length = sizeof(tANI_U32);
1729 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1730 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1731 configDataValue ) != eSIR_SUCCESS)
1732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1735 goto handle_failure;
1736 }
1737 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1738 + sizeof(tHalCfg) + tlvStruct->length) ;
1739 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1740 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1753 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1754 tlvStruct->length = sizeof(tANI_U32);
1755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1756 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1757 configDataValue ) != eSIR_SUCCESS)
1758 {
1759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1760 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1761 goto handle_failure;
1762 }
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301765 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1766 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1767 tlvStruct->length = sizeof(tANI_U32);
1768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1769 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1770 configDataValue ) != eSIR_SUCCESS)
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1774 goto handle_failure;
1775 }
1776 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1777 + sizeof(tHalCfg) + tlvStruct->length) ;
1778
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301779#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301780
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001781 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1782 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1790 goto handle_failure;
1791 }
1792
1793 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1794 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001795
1796 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1797 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1798 tlvStruct->length = sizeof(tANI_U32);
1799 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1800 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1801 != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1805 goto handle_failure;
1806 }
1807 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1808 + sizeof(tHalCfg) + tlvStruct->length));
1809
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301810 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1811 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1812 tlvStruct->length = sizeof(tANI_U32);
1813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1814 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1815 configDataValue ) != eSIR_SUCCESS)
1816 {
1817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1818 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1819 goto handle_failure;
1820 }
1821
1822 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1823 + sizeof(tHalCfg) + tlvStruct->length) ;
1824
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301825 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1826 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1827 tlvStruct->length = sizeof(tANI_U32);
1828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1829 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1830 configDataValue ) != eSIR_SUCCESS)
1831 {
1832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1833 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1834 goto handle_failure;
1835 }
1836 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1837 + sizeof(tHalCfg) + tlvStruct->length) ;
1838
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301839 /* QWLAN_HAL_CFG_ATH_DISABLE */
1840 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1841 tlvStruct->length = sizeof(tANI_U32);
1842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1843 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1844 configDataValue ) != eSIR_SUCCESS)
1845 {
1846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1847 "Failed to get value for WNI_CFG_ATH_DISABLE");
1848 goto handle_failure;
1849 }
1850 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1851 + sizeof(tHalCfg) + tlvStruct->length) ;
1852
c_hpothu6d7dc922013-12-02 12:36:41 +05301853 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1854 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1855 tlvStruct->length = sizeof(tANI_U32);
1856 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1857 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1858 configDataValue ) != eSIR_SUCCESS)
1859 {
1860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1861 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1862 goto handle_failure;
1863 }
1864 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1865 + sizeof(tHalCfg) + tlvStruct->length) ;
1866
1867 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1868 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1869 tlvStruct->length = sizeof(tANI_U32);
1870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1871 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1872 configDataValue ) != eSIR_SUCCESS)
1873 {
1874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1875 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1876 goto handle_failure;
1877 }
1878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1879 + sizeof(tHalCfg) + tlvStruct->length) ;
1880
1881 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1882 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1883 tlvStruct->length = sizeof(tANI_U32);
1884 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1885 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1886 configDataValue ) != eSIR_SUCCESS)
1887 {
1888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1889 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1890 goto handle_failure;
1891 }
1892 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1893 + sizeof(tHalCfg) + tlvStruct->length) ;
1894
1895 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1896 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1897 tlvStruct->length = sizeof(tANI_U32);
1898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1899 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1900 configDataValue ) != eSIR_SUCCESS)
1901 {
1902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1903 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1904 goto handle_failure;
1905 }
1906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1907 + sizeof(tHalCfg) + tlvStruct->length) ;
1908
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301909 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1910 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1911 tlvStruct->length = sizeof(tANI_U32);
1912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1913 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1914 configDataValue ) != eSIR_SUCCESS)
1915 {
1916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1917 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1918 goto handle_failure;
1919 }
1920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1921 + sizeof(tHalCfg) + tlvStruct->length) ;
1922
1923 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1924 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1925 tlvStruct->length = sizeof(tANI_U32);
1926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1927 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1928 configDataValue ) != eSIR_SUCCESS)
1929 {
1930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1931 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1932 goto handle_failure;
1933 }
1934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1935 + sizeof(tHalCfg) + tlvStruct->length) ;
1936
1937 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1938 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1939 tlvStruct->length = sizeof(tANI_U32);
1940 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1941 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1942 configDataValue ) != eSIR_SUCCESS)
1943 {
1944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1945 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1946 goto handle_failure;
1947 }
1948 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1949 + sizeof(tHalCfg) + tlvStruct->length) ;
1950
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001951 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1952 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1953 tlvStruct->length = sizeof(tANI_U32);
1954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1955 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1956 configDataValue ) != eSIR_SUCCESS)
1957 {
1958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1959 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1960 goto handle_failure;
1961 }
1962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1963 + sizeof(tHalCfg) + tlvStruct->length) ;
1964
c_hpothu5bd1ae42014-03-07 20:28:22 +05301965 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1966 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1967 tlvStruct->length = sizeof(tANI_U32);
1968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1969
1970 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1971 configDataValue ) != eSIR_SUCCESS)
1972 {
1973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1974 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1975 goto handle_failure;
1976 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301977 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1978 + sizeof(tHalCfg) + tlvStruct->length) ;
1979
1980 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1981 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1982 tlvStruct->length = sizeof(tANI_U32);
1983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1984
1985 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1986 configDataValue ) != eSIR_SUCCESS)
1987 {
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1989 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1990 goto handle_failure;
1991 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301992 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1993 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301994
c_hpothu2d0f1c42014-04-01 18:38:51 +05301995 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1996 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1997 tlvStruct->length = sizeof(tANI_U32);
1998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1999
2000 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2001 configDataValue ) != eSIR_SUCCESS)
2002 {
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2004 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2005 goto handle_failure;
2006 }
2007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2008 + sizeof(tHalCfg) + tlvStruct->length) ;
2009
2010 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2011 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2012 tlvStruct->length = sizeof(tANI_U32);
2013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2014
2015 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2016 configDataValue ) != eSIR_SUCCESS)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2019 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2020 goto handle_failure;
2021 }
2022 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2023 + sizeof(tHalCfg) + tlvStruct->length) ;
2024
2025 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2026 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2027 tlvStruct->length = sizeof(tANI_U32);
2028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2029
2030 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2031 configDataValue ) != eSIR_SUCCESS)
2032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2034 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2035 goto handle_failure;
2036 }
2037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2038 + sizeof(tHalCfg) + tlvStruct->length) ;
2039
2040 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2041 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2042 tlvStruct->length = sizeof(tANI_U32);
2043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2044
2045 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2046 configDataValue ) != eSIR_SUCCESS)
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2050 goto handle_failure;
2051 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2053 + sizeof(tHalCfg) + tlvStruct->length) ;
2054
Mihir Shetec34258c2014-07-30 17:50:27 +05302055 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2056 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2057 tlvStruct->length = sizeof(tANI_U32);
2058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2059
2060 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2061 configDataValue ) != eSIR_SUCCESS)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2065 goto handle_failure;
2066 }
2067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2068 + sizeof(tHalCfg) + tlvStruct->length) ;
2069
2070 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2071 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2072 tlvStruct->length = sizeof(tANI_U32);
2073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2074
2075 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2076 configDataValue ) != eSIR_SUCCESS)
2077 {
2078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2079 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2080 goto handle_failure;
2081 }
2082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2083 + sizeof(tHalCfg) + tlvStruct->length) ;
2084
2085 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2086 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2087 tlvStruct->length = sizeof(tANI_U32);
2088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2089
2090 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2091 configDataValue ) != eSIR_SUCCESS)
2092 {
2093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2094 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2095 goto handle_failure;
2096 }
2097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2098 + sizeof(tHalCfg) + tlvStruct->length) ;
2099
2100 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2101 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2102 tlvStruct->length = sizeof(tANI_U32);
2103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2104
2105 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2106 configDataValue ) != eSIR_SUCCESS)
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2109 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2110 goto handle_failure;
2111 }
2112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2113 + sizeof(tHalCfg) + tlvStruct->length) ;
2114
2115 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2116 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2117 tlvStruct->length = sizeof(tANI_U32);
2118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2119
2120 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2121 configDataValue ) != eSIR_SUCCESS)
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2124 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2125 goto handle_failure;
2126 }
2127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2128 + sizeof(tHalCfg) + tlvStruct->length) ;
2129
2130 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2131 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2132 tlvStruct->length = sizeof(tANI_U32);
2133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2134
2135 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2136 configDataValue ) != eSIR_SUCCESS)
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2140 goto handle_failure;
2141 }
2142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2143 + sizeof(tHalCfg) + tlvStruct->length) ;
2144
2145 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2146 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2147 tlvStruct->length = sizeof(tANI_U32);
2148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2149
2150 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2151 configDataValue ) != eSIR_SUCCESS)
2152 {
2153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2154 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2155 goto handle_failure;
2156 }
2157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2158 + sizeof(tHalCfg) + tlvStruct->length) ;
2159
2160 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2161 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2162 tlvStruct->length = sizeof(tANI_U32);
2163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2164
2165 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2166 configDataValue ) != eSIR_SUCCESS)
2167 {
2168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2169 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2170 goto handle_failure;
2171 }
2172 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2173 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302174
2175 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2176 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2177 tlvStruct->length = sizeof(tANI_U32);
2178 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2179
2180 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2181 configDataValue ) != eSIR_SUCCESS)
2182 {
2183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2184 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2185 goto handle_failure;
2186 }
2187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2188 + sizeof(tHalCfg) + tlvStruct->length) ;
2189
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302190 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2191 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2192 tlvStruct->length = sizeof(tANI_U32);
2193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2194
2195 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2196 configDataValue ) != eSIR_SUCCESS)
2197 {
2198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2199 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2200 goto handle_failure;
2201 }
2202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2203 + sizeof(tHalCfg) + tlvStruct->length) ;
2204
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302205 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2206 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2207 tlvStruct->length = sizeof(tANI_U32);
2208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2209
2210 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2211 configDataValue ) != eSIR_SUCCESS)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2214 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2215 goto handle_failure;
2216 }
2217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2218 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302219
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302220 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2221 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2222 tlvStruct->length = sizeof(tANI_U32);
2223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2224
2225 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2226 configDataValue ) != eSIR_SUCCESS)
2227 {
2228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2229 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2230 goto handle_failure;
2231 }
2232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2233 + sizeof(tHalCfg) + tlvStruct->length) ;
2234
Sachin Ahuja41b61902015-06-18 18:32:15 +05302235
2236 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2237 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2238 tlvStruct->length = sizeof(tANI_U32);
2239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2240
2241 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2242 configDataValue ) != eSIR_SUCCESS)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2246 goto handle_failure;
2247 }
2248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2249 + sizeof(tHalCfg) + tlvStruct->length) ;
2250
2251 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2252 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2257 configDataValue ) != eSIR_SUCCESS)
2258 {
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2260 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2261 goto handle_failure;
2262 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302266 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2267 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2268 tlvStruct->length = sizeof(tANI_U32);
2269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2270
2271 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2272 configDataValue ) != eSIR_SUCCESS)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2275 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2276 goto handle_failure;
2277 }
2278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2279 + sizeof(tHalCfg) + tlvStruct->length) ;
2280
2281 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2282 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2283 tlvStruct->length = sizeof(tANI_U32);
2284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2285
2286 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2287 configDataValue ) != eSIR_SUCCESS)
2288 {
2289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2290 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2291 goto handle_failure;
2292 }
2293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2294 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302295
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302296 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2297 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2298 tlvStruct->length = sizeof(tANI_U32);
2299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2300
2301 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2302 configDataValue ) != eSIR_SUCCESS)
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2306 goto handle_failure;
2307 }
2308 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2309 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302310 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2311 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2312 tlvStruct->length = sizeof(tANI_U32);
2313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2314 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2315 configDataValue ) != eSIR_SUCCESS)
2316 {
2317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2318 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2319 goto handle_failure;
2320 }
2321 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2322 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302323
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302324 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2325 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2326 tlvStruct->length = sizeof(tANI_U32);
2327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2328
2329 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2330 configDataValue ) != eSIR_SUCCESS)
2331 {
2332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2333 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2334 goto handle_failure;
2335 }
2336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2337 + sizeof(tHalCfg) + tlvStruct->length) ;
2338
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002340#ifdef WLAN_DEBUG
2341 {
2342 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2344 "****** Dumping CFG TLV ***** ");
2345 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2346 {
2347 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2348 "%02x %02x %02x %02x %02x %02x %02x %02x",
2349 tlvStructStart[i],
2350 tlvStructStart[i+1],
2351 tlvStructStart[i+2],
2352 tlvStructStart[i+3],
2353 tlvStructStart[i+4],
2354 tlvStructStart[i+5],
2355 tlvStructStart[i+6],
2356 tlvStructStart[i+7]);
2357 }
2358 /* Dump the bytes in the last line*/
2359 for (; i < wdiStartParams->usConfigBufferLen; i++)
2360 {
2361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2362 "%02x ",tlvStructStart[i]);
2363 }
2364 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2365 "**************************** ");
2366 }
2367#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002369handle_failure:
2370 vos_mem_free(configParam);
2371 return VOS_STATUS_E_FAILURE;
2372}
Jeff Johnson295189b2012-06-20 16:38:30 -07002373/*
2374 * FUNCTION: WDA_wdiCompleteCB
2375 * call the voss call back function
2376 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002377void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002378{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2380 tWDA_CbContext *wdaContext;
2381
2382 if(NULL == pWdaParams)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002386 VOS_ASSERT(0) ;
2387 return ;
2388 }
2389
2390 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2391
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 if (NULL == wdaContext)
2393 {
2394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002395 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 return ;
2397 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002398
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002400 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002404 vos_mem_free(pWdaParams);
2405
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 if(WDI_STATUS_SUCCESS != status)
2407 {
2408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2409 "WDI stop callback returned failure" );
2410 VOS_ASSERT(0) ;
2411 }
2412 else
2413 {
2414 wdaContext->wdaState = WDA_STOP_STATE;
2415 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002416
Leo Chang9d76f622013-08-23 16:34:52 -07002417 /* FTM Driver stop procedure should be synced.
2418 * Stop and Close will happen on same context */
2419 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2420 {
2421 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2422 {
2423 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2424 "%s: FTM Stop Event Set Fail", __func__);
2425 VOS_ASSERT(0);
2426 }
2427 }
2428
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002430 vos_WDAComplete_cback(wdaContext->pVosContext);
2431
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 return ;
2433}
Jeff Johnson295189b2012-06-20 16:38:30 -07002434/*
2435 * FUNCTION: WDA_stop
2436 * call WDI_stop
2437 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002438VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2439{
2440 WDI_Status wdiStatus;
2441 VOS_STATUS status = VOS_STATUS_SUCCESS;
2442 WDI_StopReqParamsType *wdiStopReq;
2443 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002444 tWDA_ReqParams *pWdaParams ;
2445
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 if (NULL == pWDA)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 VOS_ASSERT(0);
2451 return VOS_STATUS_E_FAILURE;
2452 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002453 if (pWDA->wdiFailed == true)
2454 {
2455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002456 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002457 return VOS_STATUS_E_ALREADY;
2458 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002459
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 /* FTM mode stay START_STATE */
2461 if( (WDA_READY_STATE != pWDA->wdaState) &&
2462 (WDA_INIT_STATE != pWDA->wdaState) &&
2463 (WDA_START_STATE != pWDA->wdaState) )
2464 {
2465 VOS_ASSERT(0);
2466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 wdiStopReq = (WDI_StopReqParamsType *)
2468 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2469 if(NULL == wdiStopReq)
2470 {
2471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_ASSERT(0);
2474 return VOS_STATUS_E_NOMEM;
2475 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002476
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 wdiStopReq->wdiStopReason = reason;
2478 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302479
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2481 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 {
2483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_ASSERT(0);
2486 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002487 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002489
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002490 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2491 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 {
2493 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002494 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002496
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002497 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2498 pWdaParams->wdaMsgParam = NULL;
2499 pWdaParams->pWdaContext = pWDA;
2500
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 /* call WDI stop */
2502 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002503 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2504
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2506 {
2507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2508 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2510 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 status = VOS_STATUS_E_FAILURE;
2512 }
Leo Chang9d76f622013-08-23 16:34:52 -07002513
2514 /* FTM Driver stop procedure should be synced.
2515 * Stop and Close will happen on same context */
2516 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2517 {
2518 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2519 WDI_RESPONSE_TIMEOUT);
2520 if (status != VOS_STATUS_SUCCESS)
2521 {
2522 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2523 "%s: FTM Stop Timepoout", __func__);
2524 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002525 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302526 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 return status;
2529}
Jeff Johnson295189b2012-06-20 16:38:30 -07002530/*
2531 * FUNCTION: WDA_close
2532 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302533 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002534VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2535{
Jeff Johnson43971f52012-07-17 12:26:56 -07002536 VOS_STATUS status = VOS_STATUS_SUCCESS;
2537 WDI_Status wstatus;
2538 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 if (NULL == wdaContext)
2541 {
2542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002543 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 return VOS_STATUS_E_FAILURE;
2545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2547 (WDA_STOP_STATE != wdaContext->wdaState))
2548 {
2549 VOS_ASSERT(0);
2550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002552 wstatus = WDI_Close();
2553 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 {
2555 status = VOS_STATUS_E_FAILURE;
2556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002559 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2560 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 {
2562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002563 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 status = VOS_STATUS_E_FAILURE;
2565 }
2566
Jeff Johnson43971f52012-07-17 12:26:56 -07002567 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002568 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 {
2570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002571 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 status = VOS_STATUS_E_FAILURE;
2573 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002574 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002575 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 {
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002578 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 status = VOS_STATUS_E_FAILURE;
2580 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002581 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002582 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 {
2584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002585 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 status = VOS_STATUS_E_FAILURE;
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002589 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002590 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2593 "error in WDA close " );
2594 status = VOS_STATUS_E_FAILURE;
2595 }
2596 return status;
2597}
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/*
2599 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2600 * returns 1 if the compiled version is greater than or equal to the input version
2601 */
2602
2603uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2604{
2605 VOS_STATUS status = VOS_STATUS_SUCCESS;
2606 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2607 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2610 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2611 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2612 (compiledVersion.revision >= revision)))
2613 return 1;
2614 else
2615 return 0;
2616}
Jeff Johnson295189b2012-06-20 16:38:30 -07002617/*
2618 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2619 * returns 1 if the compiled version is greater than or equal to the input version
2620 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002621uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2622{
2623 VOS_STATUS status = VOS_STATUS_SUCCESS;
2624 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2625 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2628 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2629 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2630 (reportedVersion.revision >= revision)))
2631 return 1;
2632 else
2633 return 0;
2634}
Jeff Johnson295189b2012-06-20 16:38:30 -07002635/*
2636 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2637 * Returns the version of the WCNSS WLAN API with which the HOST
2638 * device driver was compiled
2639 */
2640VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2641 tSirVersionType *pVersion)
2642{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302643 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 if ((NULL == pvosGCtx) || (NULL == pVersion))
2645 {
2646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002647 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 VOS_ASSERT(0);
2649 return VOS_STATUS_E_FAILURE;
2650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2652 if (NULL == pWDA )
2653 {
2654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002655 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_ASSERT(0);
2657 return VOS_STATUS_E_FAILURE;
2658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 *pVersion = pWDA->wcnssWlanCompiledVersion;
2660 return VOS_STATUS_SUCCESS;
2661}
Jeff Johnson295189b2012-06-20 16:38:30 -07002662/*
2663 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2664 * Returns the version of the WCNSS WLAN API with which the WCNSS
2665 * device driver was compiled
2666 */
2667VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2668 tSirVersionType *pVersion)
2669{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302670 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 if ((NULL == pvosGCtx) || (NULL == pVersion))
2672 {
2673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002674 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 VOS_ASSERT(0);
2676 return VOS_STATUS_E_FAILURE;
2677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2679 if (NULL == pWDA )
2680 {
2681 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002682 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 VOS_ASSERT(0);
2684 return VOS_STATUS_E_FAILURE;
2685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 *pVersion = pWDA->wcnssWlanReportedVersion;
2687 return VOS_STATUS_SUCCESS;
2688}
Jeff Johnson295189b2012-06-20 16:38:30 -07002689/*
2690 * FUNCTION: WDA_GetWcnssSoftwareVersion
2691 * Returns the WCNSS Software version string
2692 */
2693VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2694 tANI_U8 *pVersion,
2695 tANI_U32 versionBufferSize)
2696{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302697 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 if ((NULL == pvosGCtx) || (NULL == pVersion))
2701 {
2702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_ASSERT(0);
2705 return VOS_STATUS_E_FAILURE;
2706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2708 if (NULL == pWDA )
2709 {
2710 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 return VOS_STATUS_E_FAILURE;
2714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2716 return VOS_STATUS_SUCCESS;
2717}
Jeff Johnson295189b2012-06-20 16:38:30 -07002718/*
2719 * FUNCTION: WDA_GetWcnssHardwareVersion
2720 * Returns the WCNSS Hardware version string
2721 */
2722VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2723 tANI_U8 *pVersion,
2724 tANI_U32 versionBufferSize)
2725{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302726 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002728 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 if ((NULL == pvosGCtx) || (NULL == pVersion))
2730 {
2731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 VOS_ASSERT(0);
2734 return VOS_STATUS_E_FAILURE;
2735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2737 if (NULL == pWDA )
2738 {
2739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 VOS_ASSERT(0);
2742 return VOS_STATUS_E_FAILURE;
2743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2745 return VOS_STATUS_SUCCESS;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_WniCfgDnld
2749 * Trigger CFG Download
2750 */
2751VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2752{
2753 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302754 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002755
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 if (NULL == pMac )
2757 {
2758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002759 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 VOS_ASSERT(0);
2761 return VOS_STATUS_E_FAILURE;
2762 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302763 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 return vosStatus;
2765}
Jeff Johnson295189b2012-06-20 16:38:30 -07002766/* -----------------------------------------------------------------
2767 * WDI interface
2768 * -----------------------------------------------------------------
2769 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_suspendDataTxCallback
2772 * call back function called from TL after suspend Transmission
2773 */
2774VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2775 v_U8_t* ucSTAId,
2776 VOS_STATUS vosStatus)
2777{
2778 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 if (NULL == pWDA )
2782 {
2783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002784 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 VOS_ASSERT(0);
2786 return VOS_STATUS_E_FAILURE;
2787 }
2788 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2789 {
2790 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2791 }
2792 else
2793 {
2794 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 /* Trigger the event to bring the WDA TL suspend function to come
2797 * out of wait*/
2798 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2799 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002802 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002804 /* If TL suspended had timedout before this callback was called, resume back
2805 * TL.*/
2806 if (pWDA->txSuspendTimedOut)
2807 {
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002809 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 WDA_ResumeDataTx(pWDA);
2811 pWDA->txSuspendTimedOut = FALSE;
2812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 return VOS_STATUS_SUCCESS;
2814}
Jeff Johnson295189b2012-06-20 16:38:30 -07002815/*
2816 * FUNCTION: WDA_suspendDataTx
2817 * Update TL to suspend the data Transmission
2818 */
2819VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2820{
2821 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2822 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002823
2824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002825 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 if (pWDA->txSuspendTimedOut)
2828 {
2829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002830 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 return status;
2832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 /* Reset the event to be not signalled */
2834 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2835 if(!VOS_IS_STATUS_SUCCESS(status))
2836 {
2837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002838 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 return VOS_STATUS_E_FAILURE;
2840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002842 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 WDA_SuspendDataTxCallback);
2844 if(status != VOS_STATUS_SUCCESS)
2845 {
2846 return status;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Wait for the event to be set by the TL, to get the response of
2849 * suspending the TX queues, this event should be set by the Callback
2850 * function called by TL*/
2851 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2852 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2853 if(!VOS_IS_STATUS_SUCCESS(status))
2854 {
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2856 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002857 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 /* Set this flag to true when TL suspend times out, so that when TL
2859 * suspend eventually happens and calls the callback, TL can be resumed
2860 * right away by looking at this flag when true.*/
2861 pWDA->txSuspendTimedOut = TRUE;
2862 }
2863 else
2864 {
2865 pWDA->txSuspendTimedOut = FALSE;
2866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2868 {
2869 status = VOS_STATUS_SUCCESS;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return status;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_resumeDataTx
2875 * Update TL to resume the data Transmission
2876 */
2877VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2878{
2879 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002880
2881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002882 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002883
2884 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 return status;
2886}
Jeff Johnson295189b2012-06-20 16:38:30 -07002887/*
2888 * FUNCTION: WDA_InitScanReqCallback
2889 * Trigger Init SCAN callback
2890 */
2891void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2892{
2893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2894 tWDA_CbContext *pWDA;
2895 tInitScanParams *pWDA_ScanParam ;
2896 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 if(NULL == pWdaParams)
2900 {
2901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 VOS_ASSERT(0) ;
2904 return ;
2905 }
2906 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2907 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 if(NULL == pWDA_ScanParam)
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002912 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2914 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 return ;
2916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 if(WDI_STATUS_SUCCESS != wdiStatus)
2918 {
2919 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 if(VOS_STATUS_SUCCESS != status)
2921 {
2922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002923 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 }
2925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 /* free WDI command buffer */
2927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302929
2930
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002932 /* without converting the Status to Failure or Success Just
2933 pass the same status to lim */
2934 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 /* send SCAN RSP message back to PE */
2936 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return ;
2938}
2939
2940/*
2941 * FUNCTION: WDA_ProcessInitScanReq
2942 * Trigger Init SCAN in DAL
2943 */
2944VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2945 tInitScanParams *initScanParams)
2946{
2947 WDI_Status status = WDI_STATUS_SUCCESS ;
2948 WDI_InitScanReqParamsType *wdiInitScanParam =
2949 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2950 sizeof(WDI_InitScanReqParamsType)) ;
2951 tWDA_ReqParams *pWdaParams;
2952 tANI_U8 i = 0;
2953
2954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 if(NULL == wdiInitScanParam)
2957 {
2958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002959 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 VOS_ASSERT(0);
2961 return VOS_STATUS_E_NOMEM;
2962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2964 if(NULL == pWdaParams)
2965 {
2966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 VOS_ASSERT(0);
2969 vos_mem_free(wdiInitScanParam);
2970 return VOS_STATUS_E_NOMEM;
2971 }
2972
2973 /* Copy init Scan params to WDI structure */
2974 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2975 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2976 sizeof(tSirMacAddr)) ;
2977 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2978 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2979 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2981 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2983 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2985 {
2986 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2987 initScanParams->scanEntry.bssIdx[i] ;
2988 }
2989
2990 /* if Frame length, copy macMgmtHdr or WDI structure */
2991 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2992 {
2993 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2994 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2995 }
2996 wdiInitScanParam->wdiReqStatusCB = NULL ;
2997
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 /* Store Init Req pointer, as this will be used for response */
2999 pWdaParams->pWdaContext = pWDA;
3000 pWdaParams->wdaMsgParam = initScanParams;
3001 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 /* first try to suspend TX */
3003 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 if(WDI_STATUS_SUCCESS != status)
3005 {
3006 goto handleWdiFailure;
3007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 /* call DAL API to pass init scan request to DAL */
3009 status = WDI_InitScanReq(wdiInitScanParam,
3010 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 if(IS_WDI_STATUS_FAILURE(status))
3012 {
3013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3014 "error in WDA Init Scan, Resume Tx " );
3015 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 VOS_ASSERT(0) ;
3017
3018 goto handleWdiFailure;
3019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021handleWdiFailure:
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3023 "Failure in WDI Api, free all the memory " );
3024 /* free WDI command buffer */
3025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3026 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 /* send Failure to PE */
3028 initScanParams->status = eSIR_FAILURE ;
3029 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 return CONVERT_WDI2VOS_STATUS(status) ;
3031}
3032
Jeff Johnson295189b2012-06-20 16:38:30 -07003033/*
3034 * FUNCTION: WDA_StartScanReqCallback
3035 * send Start SCAN RSP back to PE
3036 */
3037void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3038 void* pUserData)
3039{
3040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3041 tWDA_CbContext *pWDA;
3042 tStartScanParams *pWDA_ScanParam;
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == pWdaParams)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0) ;
3050 return ;
3051 }
3052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3053 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(NULL == pWDA_ScanParam)
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 return ;
3061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3063 {
3064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003067 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 return ;
3069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3071 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003072
Jeff Johnson295189b2012-06-20 16:38:30 -07003073
3074 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003075 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 /* send SCAN RSP message back to PE */
3077 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 return ;
3079}
3080
Jeff Johnson295189b2012-06-20 16:38:30 -07003081/*
3082 * FUNCTION: WDA_ProcessStartScanReq
3083 * Trigger start SCAN in WDI
3084 */
3085VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3086 tStartScanParams *startScanParams)
3087{
3088 WDI_Status status = WDI_STATUS_SUCCESS;
3089 WDI_StartScanReqParamsType *wdiStartScanParams =
3090 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3091 sizeof(WDI_StartScanReqParamsType)) ;
3092 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 if(NULL == wdiStartScanParams)
3096 {
3097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 VOS_ASSERT(0);
3100 return VOS_STATUS_E_NOMEM;
3101 }
3102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3103 if(NULL == pWdaParams)
3104 {
3105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 VOS_ASSERT(0);
3108 vos_mem_free(wdiStartScanParams);
3109 return VOS_STATUS_E_NOMEM;
3110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 /* Copy init Scan params to WDI structure */
3112 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3113 wdiStartScanParams->wdiReqStatusCB = NULL ;
3114
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 /* Store Init Req pointer, as this will be used for response */
3116 /* store Params pass it to WDI */
3117 pWdaParams->pWdaContext = pWDA;
3118 pWdaParams->wdaMsgParam = startScanParams;
3119 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 /* call DAL API to pass init scan request to DAL */
3121 status = WDI_StartScanReq(wdiStartScanParams,
3122 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* failure returned by WDI API */
3124 if(IS_WDI_STATUS_FAILURE(status))
3125 {
3126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3127 "Failure in Start Scan WDI API, free all the memory "
3128 "It should be due to previous abort scan." );
3129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3130 vos_mem_free(pWdaParams) ;
3131 startScanParams->status = eSIR_FAILURE ;
3132 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 return CONVERT_WDI2VOS_STATUS(status) ;
3135}
Jeff Johnson295189b2012-06-20 16:38:30 -07003136/*
3137 * FUNCTION: WDA_EndScanReqCallback
3138 * END SCAN callback
3139 */
3140void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3141{
3142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3143 tWDA_CbContext *pWDA;
3144 tEndScanParams *endScanParam;
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 if(NULL == pWdaParams)
3148 {
3149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003150 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 VOS_ASSERT(0) ;
3152 return ;
3153 }
3154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3155 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if(NULL == endScanParam)
3157 {
3158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3162 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 return ;
3164 }
3165
3166 /* Free WDI command buffer */
3167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3168 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003170 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 /* send response back to PE */
3172 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3173 return ;
3174}
3175
Jeff Johnson295189b2012-06-20 16:38:30 -07003176/*
3177 * FUNCTION: WDA_ProcessEndScanReq
3178 * Trigger END SCAN in WDI
3179 */
3180VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3181 tEndScanParams *endScanParams)
3182{
3183 WDI_Status status = WDI_STATUS_SUCCESS;
3184 WDI_EndScanReqParamsType *wdiEndScanParams =
3185 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3186 sizeof(WDI_EndScanReqParamsType)) ;
3187 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 if(NULL == wdiEndScanParams)
3191 {
3192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 VOS_ASSERT(0);
3195 return VOS_STATUS_E_NOMEM;
3196 }
3197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3198 if(NULL == pWdaParams)
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0);
3203 vos_mem_free(wdiEndScanParams);
3204 return VOS_STATUS_E_NOMEM;
3205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 /* Copy init Scan params to WDI structure */
3207 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3208 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 /* Store Init Req pointer, as this will be used for response */
3210 /* store Params pass it to WDI */
3211 pWdaParams->pWdaContext = pWDA;
3212 pWdaParams->wdaMsgParam = endScanParams;
3213 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 /* call DAL API to pass init scan request to DAL */
3215 status = WDI_EndScanReq(wdiEndScanParams,
3216 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 if(IS_WDI_STATUS_FAILURE(status))
3218 {
3219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3220 "Failure in End Scan WDI API, free all the memory "
3221 "It should be due to previous abort scan." );
3222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3223 vos_mem_free(pWdaParams) ;
3224 endScanParams->status = eSIR_FAILURE ;
3225 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 return CONVERT_WDI2VOS_STATUS(status) ;
3228}
Jeff Johnson295189b2012-06-20 16:38:30 -07003229/*
3230 * FUNCTION: WDA_FinishScanReqCallback
3231 * Trigger Finish SCAN callback
3232 */
3233void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3234{
3235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3236 tWDA_CbContext *pWDA;
3237 tFinishScanParams *finishScanParam;
3238 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 if(NULL == pWdaParams)
3242 {
3243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 VOS_ASSERT(0) ;
3246 return ;
3247 }
3248
3249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3250 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(NULL == finishScanParam)
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003254 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 return ;
3259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3261 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 /*
3263 * Now Resume TX, if we reached here means, TX is already suspended, we
3264 * have to resume it unconditionaly
3265 */
3266 status = WDA_ResumeDataTx(pWDA) ;
3267
3268 if(VOS_STATUS_SUCCESS != status)
3269 {
3270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003271 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003273 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3275 return ;
3276}
Jeff Johnson295189b2012-06-20 16:38:30 -07003277/*
3278 * FUNCTION: WDA_ProcessFinshScanReq
3279 * Trigger Finish SCAN in WDI
3280 */
3281VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3282 tFinishScanParams *finishScanParams)
3283{
3284 WDI_Status status = WDI_STATUS_SUCCESS;
3285 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3286 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3287 sizeof(WDI_FinishScanReqParamsType)) ;
3288 tWDA_ReqParams *pWdaParams ;
3289 tANI_U8 i = 0;
3290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 if(NULL == wdiFinishScanParams)
3293 {
3294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 VOS_ASSERT(0);
3297 return VOS_STATUS_E_NOMEM;
3298 }
3299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3300 if(NULL == pWdaParams)
3301 {
3302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 VOS_ASSERT(0);
3305 vos_mem_free(wdiFinishScanParams);
3306 return VOS_STATUS_E_NOMEM;
3307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 /* Copy init Scan params to WDI structure */
3309 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3310 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3311 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3313 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3314 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3315 finishScanParams->frameLength ;
3316 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3317 finishScanParams->currentOperChannel ;
3318 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3319 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3320 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3322 {
3323 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3324 finishScanParams->scanEntry.bssIdx[i] ;
3325 }
3326
3327
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 /* if Frame length, copy macMgmtHdr ro WDI structure */
3329 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3330 {
3331 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3332 &finishScanParams->macMgmtHdr,
3333 sizeof(WDI_MacMgmtHdr)) ;
3334 }
3335 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 /* Store Init Req pointer, as this will be used for response */
3337 /* store Params pass it to WDI */
3338 pWdaParams->pWdaContext = pWDA;
3339 pWdaParams->wdaMsgParam = finishScanParams;
3340 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 /* call DAL API to pass init scan request to DAL */
3342 status = WDI_FinishScanReq(wdiFinishScanParams,
3343 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003344
Jeff Johnson295189b2012-06-20 16:38:30 -07003345
3346 /*
3347 * WDI API returns failure..
3348 */
3349 if(IS_WDI_STATUS_FAILURE( status))
3350 {
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3352 "Failure in Finish Scan WDI API, free all the memory " );
3353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3354 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 finishScanParams->status = eSIR_FAILURE ;
3356 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 return CONVERT_WDI2VOS_STATUS(status) ;
3359}
Jeff Johnson295189b2012-06-20 16:38:30 -07003360/*---------------------------------------------------------------------
3361 * ASSOC API's
3362 *---------------------------------------------------------------------
3363 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003364/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303365 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 * Trigger Init SCAN callback
3367 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303368void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3371 tWDA_CbContext *pWDA;
3372 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003374 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 if(NULL == pWdaParams)
3376 {
3377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 VOS_ASSERT(0) ;
3380 return ;
3381 }
3382 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3383 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3385 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 /* reset macBSSID */
3387 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 /* reset macSTASelf */
3389 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003390 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 return ;
3393}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303394
3395/*
3396 * FUNCTION: WDA_JoinReqCallback
3397 * Free memory and send SWITCH CHANNEL RSP back to PE.
3398 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3399 */
3400void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3401{
3402 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3403 tWDA_CbContext *pWDA;
3404 tSwitchChannelParams *joinReqParam;
3405
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3407 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3408
3409 if(NULL == pWdaParams)
3410 {
3411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3412 "%s: pWdaParams received NULL", __func__);
3413 VOS_ASSERT(0);
3414 return;
3415 }
3416
3417 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3418 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3419 joinReqParam->status = wdiStatus;
3420
3421 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3422 {
3423 /* reset macBSSID */
3424 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3425 /* reset macSTASelf */
3426 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3427
3428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3429 vos_mem_free(pWdaParams);
3430 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3431 }
3432
3433 return;
3434}
3435
Jeff Johnson295189b2012-06-20 16:38:30 -07003436/*
3437 * FUNCTION: WDA_ProcessJoinReq
3438 * Trigger Join REQ in WDI
3439 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003440VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3441 tSwitchChannelParams* joinReqParam)
3442{
3443 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 WDI_JoinReqParamsType *wdiJoinReqParam =
3445 (WDI_JoinReqParamsType *)vos_mem_malloc(
3446 sizeof(WDI_JoinReqParamsType)) ;
3447 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003449 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 if(NULL == wdiJoinReqParam)
3451 {
3452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003455 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 return VOS_STATUS_E_NOMEM;
3457 }
3458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3459 if(NULL == pWdaParams)
3460 {
3461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 VOS_ASSERT(0);
3464 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003465 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 return VOS_STATUS_E_NOMEM;
3467 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003468
3469 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3470 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3471 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3472 {
3473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3474 "%s: received join request when BSSID or self-STA is NULL "
3475 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003476 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003477 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3478 VOS_ASSERT(0);
3479 vos_mem_free(wdiJoinReqParam);
3480 vos_mem_free(pWdaParams);
3481 joinReqParam->status = eSIR_FAILURE ;
3482 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3483 return VOS_STATUS_E_INVAL;
3484 }
3485
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 /* copy the BSSID for pWDA */
3487 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3488 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3490 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3492 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003493#ifdef WLAN_FEATURE_VOWIFI
3494 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3495 joinReqParam->maxTxPower ;
3496#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3498 joinReqParam->localPowerConstraint ;
3499#endif
3500 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3501 joinReqParam->secondaryChannelOffset ;
3502 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3503
Sachin Ahuja935eda782014-07-30 14:57:41 +05303504 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3505 wdiJoinReqParam->pUserData = pWdaParams;
3506
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 /* Store Init Req pointer, as this will be used for response */
3508 /* store Params pass it to WDI */
3509 pWdaParams->pWdaContext = pWDA;
3510 pWdaParams->wdaMsgParam = joinReqParam;
3511 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303513 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 if(IS_WDI_STATUS_FAILURE(status))
3515 {
3516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3517 "Failure in Join WDI API, free all the memory " );
3518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3519 vos_mem_free(pWdaParams) ;
3520 joinReqParam->status = eSIR_FAILURE ;
3521 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003523 return CONVERT_WDI2VOS_STATUS(status) ;
3524}
Jeff Johnson295189b2012-06-20 16:38:30 -07003525/*
3526 * FUNCTION: WDA_SwitchChannelReqCallback
3527 * send Switch channel RSP back to PE
3528 */
3529void WDA_SwitchChannelReqCallback(
3530 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3531{
3532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3533 tWDA_CbContext *pWDA;
3534 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003536 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 if(NULL == pWdaParams)
3538 {
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 VOS_ASSERT(0) ;
3542 return ;
3543 }
3544 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3545 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3546
3547#ifdef WLAN_FEATURE_VOWIFI
3548 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3549#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3551 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003553 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 return ;
3556}
Jeff Johnson295189b2012-06-20 16:38:30 -07003557/*
3558 * FUNCTION: WDA_ProcessChannelSwitchReq
3559 * Request to WDI to switch channel REQ params.
3560 */
3561VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3562 tSwitchChannelParams *pSwitchChanParams)
3563{
3564 WDI_Status status = WDI_STATUS_SUCCESS ;
3565 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3566 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3567 sizeof(WDI_SwitchChReqParamsType)) ;
3568 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003570 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 if(NULL == wdiSwitchChanParam)
3572 {
3573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 VOS_ASSERT(0);
3576 return VOS_STATUS_E_NOMEM;
3577 }
3578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3579 if(NULL == pWdaParams)
3580 {
3581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 VOS_ASSERT(0);
3584 vos_mem_free(wdiSwitchChanParam);
3585 return VOS_STATUS_E_NOMEM;
3586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3588#ifndef WLAN_FEATURE_VOWIFI
3589 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3590 pSwitchChanParams->localPowerConstraint;
3591#endif
3592 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3593 pSwitchChanParams->secondaryChannelOffset;
3594 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 /* Store req pointer, as this will be used for response */
3596 /* store Params pass it to WDI */
3597 pWdaParams->pWdaContext = pWDA;
3598 pWdaParams->wdaMsgParam = pSwitchChanParams;
3599 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600#ifdef WLAN_FEATURE_VOWIFI
3601 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3602 = pSwitchChanParams->maxTxPower;
3603 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3604 pSwitchChanParams ->selfStaMacAddr,
3605 sizeof(tSirMacAddr));
3606#endif
3607 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3608 pSwitchChanParams->bssId,
3609 sizeof(tSirMacAddr));
3610
3611 status = WDI_SwitchChReq(wdiSwitchChanParam,
3612 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 if(IS_WDI_STATUS_FAILURE(status))
3614 {
3615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3616 "Failure in process channel switch Req WDI API, free all the memory " );
3617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3618 vos_mem_free(pWdaParams) ;
3619 pSwitchChanParams->status = eSIR_FAILURE ;
3620 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 return CONVERT_WDI2VOS_STATUS(status) ;
3623}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003624
3625/*
3626 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3627 * send Switch channel RSP back to PE
3628 */
3629void WDA_SwitchChannelReqCallback_V1(
3630 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3631 void* pUserData)
3632{
3633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3634 tWDA_CbContext *pWDA;
3635 tSwitchChannelParams *pSwitchChanParams;
3636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3637 "<------ %s " ,__func__);
3638
3639 if (NULL == pWdaParams)
3640 {
3641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3642 "%s: pWdaParams received NULL", __func__);
3643 VOS_ASSERT(0);
3644 return ;
3645 }
3646 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3647 pSwitchChanParams =
3648 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3649 pSwitchChanParams->channelSwitchSrc =
3650 wdiSwitchChanRsp->channelSwitchSrc;
3651#ifdef WLAN_FEATURE_VOWIFI
3652 pSwitchChanParams->txMgmtPower =
3653 wdiSwitchChanRsp->ucTxMgmtPower;
3654#endif
3655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3656 vos_mem_free(pWdaParams);
3657 pSwitchChanParams->status =
3658 wdiSwitchChanRsp->wdiStatus ;
3659 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3660 (void *)pSwitchChanParams , 0);
3661 return;
3662}
3663
3664/*
3665 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3666 * Request to WDI to switch channel REQ params.
3667 */
3668VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3669 tSwitchChannelParams *pSwitchChanParams)
3670{
3671 WDI_Status status = WDI_STATUS_SUCCESS ;
3672 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3673 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3674 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3675 tWDA_ReqParams *pWdaParams ;
3676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3677 "------> %s " ,__func__);
3678 if (NULL == wdiSwitchChanParam)
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3681 "%s: VOS MEM Alloc Failure", __func__);
3682 VOS_ASSERT(0);
3683 return VOS_STATUS_E_NOMEM;
3684 }
3685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3686 if (NULL == pWdaParams)
3687 {
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3689 "%s: VOS MEM Alloc Failure", __func__);
3690 VOS_ASSERT(0);
3691 vos_mem_free(wdiSwitchChanParam);
3692 return VOS_STATUS_E_NOMEM;
3693 }
3694 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3695 pSwitchChanParams->channelSwitchSrc;
3696
3697 wdiSwitchChanParam->wdiChInfo.ucChannel =
3698 pSwitchChanParams->channelNumber;
3699#ifndef WLAN_FEATURE_VOWIFI
3700 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3701 pSwitchChanParams->localPowerConstraint;
3702#endif
3703 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3704 pSwitchChanParams->secondaryChannelOffset;
3705 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3706 /* Store req pointer, as this will be used for response */
3707 /* store Params pass it to WDI */
3708 pWdaParams->pWdaContext = pWDA;
3709 pWdaParams->wdaMsgParam = pSwitchChanParams;
3710 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3711#ifdef WLAN_FEATURE_VOWIFI
3712 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3713 pSwitchChanParams->maxTxPower;
3714 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3715 pSwitchChanParams ->selfStaMacAddr,
3716 sizeof(tSirMacAddr));
3717#endif
3718 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3719 pSwitchChanParams->bssId,
3720 sizeof(tSirMacAddr));
3721
3722 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3723 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3724 pWdaParams);
3725 if (IS_WDI_STATUS_FAILURE(status))
3726 {
3727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3728 "Failure in process channel switch Req WDI "
3729 "API, free all the memory " );
3730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3731 vos_mem_free(pWdaParams) ;
3732 pSwitchChanParams->status = eSIR_FAILURE ;
3733 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3734 (void *)pSwitchChanParams, 0) ;
3735 }
3736 return CONVERT_WDI2VOS_STATUS(status) ;
3737}
3738
Jeff Johnson295189b2012-06-20 16:38:30 -07003739/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303740 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 * config BSS Req Callback, called by WDI
3742 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303743void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 ,void* pUserData)
3745{
3746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3747 tWDA_CbContext *pWDA;
3748 tAddBssParams *configBssReqParam;
3749 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003751 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 if(NULL == pWdaParams)
3753 {
3754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003755 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 VOS_ASSERT(0) ;
3757 return ;
3758 }
3759 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3760 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3761 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003763 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3765 {
3766 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3767 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3769 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3770 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3771
3772 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3773 {
3774 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3775 {
3776 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3777 staConfigBssParam->staType = STA_ENTRY_BSSID;
3778 }
3779 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3780 (staConfigBssParam->staType == STA_ENTRY_SELF))
3781 {
3782 /* This is the 1st add BSS Req for the BTAMP STA */
3783 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3784 staConfigBssParam->staType = STA_ENTRY_BSSID;
3785 }
3786 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3787 (staConfigBssParam->staType == STA_ENTRY_PEER))
3788 {
3789 /* This is the 2nd ADD BSS Request that is sent
3790 * on the BTAMP STA side. The Sta type is
3791 * set to STA_ENTRY_PEER here.*/
3792 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3793 }
3794 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3795 (staConfigBssParam->staType == STA_ENTRY_SELF))
3796 {
3797 /* statype is already set by PE.
3798 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3799 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3800 staConfigBssParam->staType = STA_ENTRY_BSSID;
3801 }
3802 else
3803 {
3804 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3805 staConfigBssParam->staType = STA_ENTRY_PEER;
3806 }
3807 }
3808 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3809 {
3810 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3811 staConfigBssParam->staType = STA_ENTRY_SELF;
3812 }
3813 else
3814 {
3815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3816 "Invalid operation mode specified");
3817 VOS_ASSERT(0);
3818 }
3819
3820 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3825 sizeof(tSirMacAddr));
3826 staConfigBssParam->txChannelWidthSet =
3827 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3829 staConfigBssParam->htCapable)
3830 {
3831 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3832 wdiConfigBssRsp->ucBSSIdx;
3833 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3834 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303835 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3836 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3839 wdiConfigBssRsp->ucBSSIdx,
3840 wdiConfigBssRsp->ucSTAIdx))
3841 {
3842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003843 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 VOS_ASSERT(0) ;
3845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3847 {
3848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003849 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003850 VOS_ASSERT(0) ;
3851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003852#ifdef WLAN_FEATURE_VOWIFI
3853 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3854#endif
3855 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303856 else
3857 {
3858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3859 "%s: Failure with status %d", __func__,
3860 wdiConfigBssRsp->wdiStatus);
3861 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3862 WLAN_LOG_INDICATOR_HOST_DRIVER,
3863 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3864 FALSE, TRUE);
3865 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303866 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3867 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 return ;
3872}
Jeff Johnson295189b2012-06-20 16:38:30 -07003873/*
3874 * FUNCTION: WDA_UpdateEdcaParamsForAC
3875 * Update WDI EDCA params with PE edca params
3876 */
3877void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3878 WDI_EdcaParamRecord *wdiEdcaParam,
3879 tSirMacEdcaParamRecord *macEdcaParam)
3880{
3881 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3882 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3883 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3884 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3885 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3886 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3887}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303888void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3889 void* pUserData)
3890{
3891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3892 tWDA_CbContext *pWDA;
3893 tAddBssParams *addBssParams;
3894
3895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3896 "<------ %s, wdiStatus: %d",
3897 __func__, wdiStatus);
3898
3899 if (NULL == pWdaParams)
3900 {
3901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3902 "%s: Invalid pWdaParams pointer", __func__);
3903 VOS_ASSERT(0);
3904 return;
3905 }
3906
3907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3908 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3909
3910 addBssParams->status = wdiStatus;
3911
3912 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3913 {
3914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3915 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303916 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3917 WLAN_LOG_INDICATOR_HOST_DRIVER,
3918 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3919 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303920 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3921 }
3922
3923 return ;
3924}
3925
Jeff Johnson295189b2012-06-20 16:38:30 -07003926/*
3927 * FUNCTION: WDA_ProcessConfigBssReq
3928 * Configure BSS before starting Assoc with AP
3929 */
3930VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3931 tAddBssParams* configBssReqParam)
3932{
3933 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303934 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003937 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303938 if (NULL == configBssReqParam)
3939 {
3940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3941 "%s: configBssReqParam is NULL", __func__);
3942 return VOS_STATUS_E_INVAL;
3943 }
3944
3945 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3946 sizeof(WDI_ConfigBSSReqParamsType)) ;
3947
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 if(NULL == wdiConfigBssReqParam)
3949 {
3950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 VOS_ASSERT(0);
3953 return VOS_STATUS_E_NOMEM;
3954 }
3955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3956 if(NULL == pWdaParams)
3957 {
3958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 VOS_ASSERT(0);
3961 vos_mem_free(wdiConfigBssReqParam);
3962 return VOS_STATUS_E_NOMEM;
3963 }
Kiran4a17ebe2013-01-31 10:43:43 -08003964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3965 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3968 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303969 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
3970 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 /* Store Init Req pointer, as this will be used for response */
3972 /* store Params pass it to WDI */
3973 pWdaParams->pWdaContext = pWDA;
3974 pWdaParams->wdaMsgParam = configBssReqParam;
3975 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303977 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 if(IS_WDI_STATUS_FAILURE(status))
3979 {
3980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3981 "Failure in Config BSS WDI API, free all the memory " );
3982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3983 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 return CONVERT_WDI2VOS_STATUS(status) ;
3988}
Jeff Johnson295189b2012-06-20 16:38:30 -07003989#ifdef ENABLE_HAL_COMBINED_MESSAGES
3990/*
3991 * FUNCTION: WDA_PostAssocReqCallback
3992 * Post ASSOC req callback, send RSP back to PE
3993 */
3994void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3995 void* pUserData)
3996{
3997 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3998 tPostAssocParams *postAssocReqParam =
3999 (tPostAssocParams *)pWDA->wdaMsgParam ;
4000 /*STA context within the BSS Params*/
4001 tAddStaParams *staPostAssocParam =
4002 &postAssocReqParam->addBssParams.staContext ;
4003 /*STA Params for self STA*/
4004 tAddStaParams *selfStaPostAssocParam =
4005 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004009 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4011 {
4012 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4013 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4014 sizeof(tSirMacAddr)) ;
4015 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4016 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4017 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4019 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304020 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4022 pWDA->wdaWdiApiMsgParam = NULL;
4023 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 return ;
4026}
Jeff Johnson295189b2012-06-20 16:38:30 -07004027/*
4028 * FUNCTION: WDA_ProcessPostAssocReq
4029 * Trigger POST ASSOC processing in WDI
4030 */
4031VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4032 tPostAssocParams *postAssocReqParam)
4033{
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 WDI_Status status = WDI_STATUS_SUCCESS ;
4035
4036 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4037 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4038 sizeof(WDI_PostAssocReqParamsType)) ;
4039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004041
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 if(NULL == wdiPostAssocReqParam)
4043 {
4044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 VOS_ASSERT(0);
4047 return VOS_STATUS_E_NOMEM;
4048 }
4049
4050 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4051 {
4052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004053 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 VOS_ASSERT(0);
4055 return VOS_STATUS_E_FAILURE;
4056 }
4057
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 /* update BSS params into WDI structure */
4059 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4060 &postAssocReqParam->addBssParams) ;
4061 /* update STA params into WDI structure */
4062 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4063 &postAssocReqParam->addStaParams) ;
4064
4065 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4066 postAssocReqParam->addBssParams.highPerformance;
4067 WDA_UpdateEdcaParamsForAC(pWDA,
4068 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4069 &postAssocReqParam->addBssParams.acbe);
4070 WDA_UpdateEdcaParamsForAC(pWDA,
4071 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4072 &postAssocReqParam->addBssParams.acbk);
4073 WDA_UpdateEdcaParamsForAC(pWDA,
4074 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4075 &postAssocReqParam->addBssParams.acvi);
4076 WDA_UpdateEdcaParamsForAC(pWDA,
4077 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4078 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 /* Store Init Req pointer, as this will be used for response */
4080 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 /* store Params pass it to WDI */
4082 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4084 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 if(IS_WDI_STATUS_FAILURE(status))
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4088 "Failure in Post Assoc WDI API, free all the memory " );
4089 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4090 pWDA->wdaWdiApiMsgParam = NULL;
4091 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 return CONVERT_WDI2VOS_STATUS(status) ;
4096}
4097#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004098/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304099 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 * ADD STA req callback, send RSP back to PE
4101 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304102void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 void* pUserData)
4104{
4105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4106 tWDA_CbContext *pWDA;
4107 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 if(NULL == pWdaParams)
4111 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 VOS_ASSERT(0) ;
4114 return ;
4115 }
4116 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4117 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004119 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4121 {
4122 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4123 /*TODO: UMAC structure doesn't have these fields*/
4124 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4125 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4126 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4127 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4128 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4129 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004130#ifdef FEATURE_WLAN_TDLS
4131 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4132 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4133#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004135#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 {
4137 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4138 wdiConfigStaRsp->ucBssIdx;
4139 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4140 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304141 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4142 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 }
4144 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4145 {
4146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 VOS_ASSERT(0) ;
4149 return ;
4150 }
4151 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304152 else
4153 {
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4155 "%s: Failure with status %d", __func__,
4156 wdiConfigStaRsp->wdiStatus);
4157 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4158 WLAN_LOG_INDICATOR_HOST_DRIVER,
4159 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4160 FALSE, TRUE);
4161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4163 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 return ;
4166}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304167void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4168 void* pUserData)
4169{
4170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4171 tWDA_CbContext *pWDA;
4172 tAddStaParams *addStaParams;
4173
4174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4175 "<------ %s, wdiStatus: %d",
4176 __func__, wdiStatus);
4177
4178 if (NULL == pWdaParams)
4179 {
4180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4181 "%s: Invalid pWdaParams pointer", __func__);
4182 VOS_ASSERT(0);
4183 return;
4184 }
4185
4186 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4187 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4188
4189 addStaParams->status = wdiStatus;
4190
4191 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4192 {
4193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4194 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304195 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4196 WLAN_LOG_INDICATOR_HOST_DRIVER,
4197 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4198 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304199 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4200 }
4201
4202 return ;
4203}
4204
Jeff Johnson295189b2012-06-20 16:38:30 -07004205/*
4206 * FUNCTION: WDA_ConfigStaReq
4207 * Trigger Config STA processing in WDI
4208 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304209VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 tAddStaParams *addStaReqParam)
4211{
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4214 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4215 sizeof(WDI_ConfigSTAReqParamsType)) ;
4216 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if(NULL == wdiConfigStaReqParam)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 return VOS_STATUS_E_NOMEM;
4225 }
4226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4227 if(NULL == pWdaParams)
4228 {
4229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004231 VOS_ASSERT(0);
4232 vos_mem_free(wdiConfigStaReqParam);
4233 return VOS_STATUS_E_NOMEM;
4234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 /* update STA params into WDI structure */
4237 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4238 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304239 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4240 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 /* Store Init Req pointer, as this will be used for response */
4242 /* store Params pass it to WDI */
4243 pWdaParams->pWdaContext = pWDA;
4244 pWdaParams->wdaMsgParam = addStaReqParam;
4245 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304246
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304248 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 if(IS_WDI_STATUS_FAILURE(status))
4250 {
4251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4252 "Failure in Config STA WDI API, free all the memory " );
4253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4254 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 return CONVERT_WDI2VOS_STATUS(status) ;
4259}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304260
Jeff Johnson295189b2012-06-20 16:38:30 -07004261/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304262 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304264 */
4265void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 void* pUserData)
4267{
4268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4269 tWDA_CbContext *pWDA;
4270 tDeleteBssParams *delBssReqParam;
4271 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 if(NULL == pWdaParams)
4275 {
4276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_ASSERT(0) ;
4279 return ;
4280 }
4281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4282 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004283 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4285 {
4286 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4287 sizeof(tSirMacAddr)) ;
4288 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304289 else
4290 {
4291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4292 "%s: Failure with status %d", __func__,
4293 wdiDelBssRsp->wdiStatus);
4294 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4295 WLAN_LOG_INDICATOR_HOST_DRIVER,
4296 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4297 FALSE, TRUE);
4298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4300 {
4301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 VOS_ASSERT(0) ;
4304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4306 {
4307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004308 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 VOS_ASSERT(0) ;
4310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4312 {
4313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004314 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 VOS_ASSERT(0) ;
4316 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304317
4318 WLANTL_StartForwarding(staIdx,0,0);
4319
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4321 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 /* reset the the system role*/
4323 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4324
4325 /* Reset the BA related information */
4326 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4327 {
4328 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4329 {
4330 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4331 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304332 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 /* Reset framesTxed counters here */
4334 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4335 {
4336 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4337 }
4338 }
4339 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304340
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 return ;
4343}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304344void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4345 void* pUserData)
4346{
4347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4348 tWDA_CbContext *pWDA;
4349 tDeleteBssParams *delbssParams;
4350
4351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4352 "<------ %s, wdiStatus: %d",
4353 __func__, wdiStatus);
4354
4355 if (NULL == pWdaParams)
4356 {
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4358 "%s: Invalid pWdaParams pointer", __func__);
4359 VOS_ASSERT(0);
4360 return;
4361 }
4362
4363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4364 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4365
4366 delbssParams->status = wdiStatus ;
4367
4368 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4369 {
4370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4371 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304372 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4373 WLAN_LOG_INDICATOR_HOST_DRIVER,
4374 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4375 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304376 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4377 }
4378
4379 return ;
4380}
Jeff Johnson295189b2012-06-20 16:38:30 -07004381
Jeff Johnson295189b2012-06-20 16:38:30 -07004382/*
4383 * FUNCTION: WDA_ProcessDelBssReq
4384 * Init DEL BSS req with WDI
4385 */
4386VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4387 tDeleteBssParams *delBssParam)
4388{
4389 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4391 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4392 sizeof(WDI_DelBSSReqParamsType)) ;
4393 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004395 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 if(NULL == wdiDelBssReqParam)
4397 {
4398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304399 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 VOS_ASSERT(0);
4401 return VOS_STATUS_E_NOMEM;
4402 }
4403 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4404 if(NULL == pWdaParams)
4405 {
4406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 VOS_ASSERT(0);
4409 vos_mem_free(wdiDelBssReqParam);
4410 return VOS_STATUS_E_NOMEM;
4411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304413 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4414 wdiDelBssReqParam->pUserData = pWdaParams;
4415
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 /* Store Init Req pointer, as this will be used for response */
4417 /* store Params pass it to WDI */
4418 pWdaParams->pWdaContext = pWDA;
4419 pWdaParams->wdaMsgParam = delBssParam;
4420 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304421
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304423 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 if(IS_WDI_STATUS_FAILURE(status))
4425 {
4426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4427 "Failure in Del BSS WDI API, free all the memory " );
4428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4429 vos_mem_free(pWdaParams) ;
4430 delBssParam->status = eSIR_FAILURE ;
4431 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 return CONVERT_WDI2VOS_STATUS(status) ;
4434}
Jeff Johnson295189b2012-06-20 16:38:30 -07004435/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304436 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304438 */
4439void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 void* pUserData)
4441{
4442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4443 tWDA_CbContext *pWDA;
4444 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 if(NULL == pWdaParams)
4448 {
4449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004450 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304451 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 return ;
4453 }
4454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4455 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004456 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4458 {
4459 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4460 {
4461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004462 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 VOS_ASSERT(0) ;
4464 }
4465 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304466 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304468 else
4469 {
4470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4471 "%s: Failure with status %d", __func__,
4472 wdiDelStaRsp->wdiStatus);
4473 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4474 WLAN_LOG_INDICATOR_HOST_DRIVER,
4475 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4476 FALSE, TRUE);
4477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4479 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 /*Reset the BA information corresponding to this STAIdx */
4481 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4482 WDA_INVALID_STA_INDEX;
4483 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304484 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 return ;
4487}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304488void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4489 void* pUserData)
4490{
4491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4492 tWDA_CbContext *pWDA;
4493 tDeleteStaParams *delStaParams;
4494
4495 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4496 "<------ %s, wdiStatus: %d",
4497 __func__, wdiStatus);
4498
4499 if (NULL == pWdaParams)
4500 {
4501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4502 "%s: Invalid pWdaParams pointer", __func__);
4503 VOS_ASSERT(0);
4504 return;
4505 }
4506
4507 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4508 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4509
4510 delStaParams->status = wdiStatus ;
4511
4512 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4513 {
4514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4515 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304516 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4517 WLAN_LOG_INDICATOR_HOST_DRIVER,
4518 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4519 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304520 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4521 }
4522
4523 return ;
4524}
4525
Jeff Johnson295189b2012-06-20 16:38:30 -07004526/*
4527 * FUNCTION: WDA_ProcessDelStaReq
4528 * Init DEL STA req with WDI
4529 */
4530VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4531 tDeleteStaParams *delStaParam)
4532{
4533 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4535 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4536 sizeof(WDI_DelSTAReqParamsType)) ;
4537 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004539 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 if(NULL == wdiDelStaReqParam)
4541 {
4542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 VOS_ASSERT(0);
4545 return VOS_STATUS_E_NOMEM;
4546 }
4547 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4548 if(NULL == pWdaParams)
4549 {
4550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 VOS_ASSERT(0);
4553 vos_mem_free(wdiDelStaReqParam);
4554 return VOS_STATUS_E_NOMEM;
4555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304557 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4558 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 /* Store Init Req pointer, as this will be used for response */
4560 /* store Params pass it to WDI */
4561 pWdaParams->pWdaContext = pWDA;
4562 pWdaParams->wdaMsgParam = delStaParam;
4563 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304564
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304566 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 if(IS_WDI_STATUS_FAILURE(status))
4568 {
4569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4570 "Failure in Del STA WDI API, free all the memory status = %d",
4571 status );
4572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4573 vos_mem_free(pWdaParams) ;
4574 delStaParam->status = eSIR_FAILURE ;
4575 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 return CONVERT_WDI2VOS_STATUS(status) ;
4578}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304579void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004580{
4581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4582 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304583 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004585 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 if(NULL == pWdaParams)
4587 {
4588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_ASSERT(0) ;
4591 return ;
4592 }
4593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4594 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4596 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4598 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4599 pwdiAddSTASelfRsp->macSelfSta,
4600 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304601 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4602 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4603 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4604 {
4605 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4606 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4608 "%s: Failure with status %d failcnter %d", __func__,
4609 pwdiAddSTASelfRsp->wdiStatus,
4610 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4611 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4612 WLAN_LOG_INDICATOR_HOST_DRIVER,
4613 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4614 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 return ;
4618}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304619void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4620 void* pUserData)
4621{
4622 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4623 tWDA_CbContext *pWDA;
4624 tAddStaSelfParams *addStaSelfParams;
4625
4626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4627 "<------ %s, wdiStatus: %d",
4628 __func__, wdiStatus);
4629
4630 if (NULL == pWdaParams)
4631 {
4632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4633 "%s: Invalid pWdaParams pointer", __func__);
4634 VOS_ASSERT(0);
4635 return;
4636 }
4637
4638 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4639 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4640
4641 addStaSelfParams->status = wdiStatus ;
4642
4643 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4644 {
4645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4646 vos_mem_free(pWdaParams) ;
4647 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4648 = WDA_ADDSTA_REQ_WDI_FAIL;
4649 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4651 "%s: Failure with status %d failcnter %d", __func__,
4652 wdiStatus,
4653 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4654 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4655 WLAN_LOG_INDICATOR_HOST_DRIVER,
4656 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4657 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304658 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4659 }
4660
4661 return ;
4662}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304663
Jeff Johnson295189b2012-06-20 16:38:30 -07004664/*
4665 * FUNCTION: WDA_ProcessAddStaSelfReq
4666 *
4667 */
4668VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4669{
4670 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004671 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4673 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4674 sizeof(WDI_AddSTASelfReqParamsType)) ;
4675 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004677 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304678 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 if( NULL == wdiAddStaSelfReq )
4680 {
4681 VOS_ASSERT( 0 );
4682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004683 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304684 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4685 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 return( VOS_STATUS_E_NOMEM );
4687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 if( NULL == pWdaParams )
4690 {
4691 VOS_ASSERT( 0 );
4692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004693 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304694 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4695 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004696 vos_mem_free(wdiAddStaSelfReq) ;
4697 return( VOS_STATUS_E_NOMEM );
4698 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304699 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4700 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004702 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 /* Store Init Req pointer, as this will be used for response */
4704 /* store Params pass it to WDI */
4705 pWdaParams->pWdaContext = pWDA;
4706 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304707 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4708
4709 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4710 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004711
Jeff Johnson43971f52012-07-17 12:26:56 -07004712 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 {
4714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4715 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004716 wstatus );
4717 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4719 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304720 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4721 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 pAddStaSelfReq->status = eSIR_FAILURE ;
4723 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4724 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004725 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004726}
Jeff Johnson295189b2012-06-20 16:38:30 -07004727/*
4728 * FUNCTION: WDA_DelSTASelfRespCallback
4729 *
4730 */
4731void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4732 wdiDelStaSelfRspParams , void* pUserData)
4733{
4734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4735 tWDA_CbContext *pWDA;
4736 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 if (NULL == pWdaParams)
4740 {
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004742 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 VOS_ASSERT(0);
4744 return;
4745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4747 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004749 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750
4751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4752 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304753 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
4754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4755 "%s: Failure with status %d", __func__,
4756 wdiDelStaSelfRspParams->wdiStatus);
4757 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4758 WLAN_LOG_INDICATOR_HOST_DRIVER,
4759 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4760 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 return ;
4763}
Jeff Johnson295189b2012-06-20 16:38:30 -07004764/*
4765 * FUNCTION: WDA_DelSTASelfReqCallback
4766 *
4767 */
4768void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4769 void* pUserData)
4770{
4771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4772 tWDA_CbContext *pWDA;
4773 tDelStaSelfParams *delStaSelfParams;
4774
4775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304776 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004777 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778
4779 if (NULL == pWdaParams)
4780 {
4781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004782 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 VOS_ASSERT(0);
4784 return;
4785 }
4786
4787 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4788 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4789
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004790 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004791
4792 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4793 {
4794 VOS_ASSERT(0);
4795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4796 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304797 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4798 WLAN_LOG_INDICATOR_HOST_DRIVER,
4799 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4800 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4802 }
4803
4804 return ;
4805}
4806
4807/*
4808 * FUNCTION: WDA_DelSTASelfReq
4809 * Trigger Config STA processing in WDI
4810 */
4811VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4812 tDelStaSelfParams* pDelStaSelfReqParam)
4813{
4814 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004815 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 tWDA_ReqParams *pWdaParams = NULL;
4817 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4818 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4819 sizeof(WDI_DelSTASelfReqParamsType)) ;
4820
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 if( NULL == wdiDelStaSelfReq )
4824 {
4825 VOS_ASSERT( 0 );
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 return( VOS_STATUS_E_NOMEM );
4829 }
4830
4831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4832 if( NULL == pWdaParams )
4833 {
4834 VOS_ASSERT( 0 );
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 vos_mem_free(wdiDelStaSelfReq) ;
4838 return( VOS_STATUS_E_NOMEM );
4839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 pWdaParams->pWdaContext = pWDA;
4841 /* Store param pointer as passed in by caller */
4842 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4843 /* store Params pass it to WDI */
4844 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4846 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4847
4848 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4849 wdiDelStaSelfReq->pUserData = pWdaParams;
4850
Jeff Johnson43971f52012-07-17 12:26:56 -07004851 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4853
Jeff Johnson43971f52012-07-17 12:26:56 -07004854 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 {
4856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4857 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4858 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004859 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4861 vos_mem_free(pWdaParams) ;
4862 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4863 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4864 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004865 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004866}
4867
Jeff Johnson295189b2012-06-20 16:38:30 -07004868/*
4869 * FUNCTION: WDA_SendMsg
4870 * Send Message back to PE
4871 */
4872void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4873 void *pBodyptr, tANI_U32 bodyVal)
4874{
4875 tSirMsgQ msg = {0} ;
4876 tANI_U32 status = VOS_STATUS_SUCCESS ;
4877 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 msg.type = msgType;
4879 msg.bodyval = bodyVal;
4880 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 if (VOS_STATUS_SUCCESS != status)
4883 {
4884 if(NULL != pBodyptr)
4885 {
4886 vos_mem_free(pBodyptr);
4887 }
4888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004889 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 VOS_ASSERT(0) ;
4891 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 return ;
4893}
Jeff Johnson295189b2012-06-20 16:38:30 -07004894/*
4895 * FUNCTION: WDA_UpdateBSSParams
4896 * Translated WDA/PE BSS info into WDI BSS info..
4897 */
4898void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4899 WDI_ConfigBSSReqInfoType *wdiBssParams,
4900 tAddBssParams *wdaBssParams)
4901{
4902 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304903 v_U8_t i = 0;
4904
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 /* copy bssReq Params to WDI structure */
4906 vos_mem_copy(wdiBssParams->macBSSID,
4907 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4908 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4909 sizeof(tSirMacAddr)) ;
4910 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4911 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4912 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 wdiBssParams->ucShortSlotTimeSupported =
4914 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4916 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4917 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4918 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4919 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4920
4921 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4922 wdiBssParams->ucTXOPProtectionFullSupport =
4923 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4925 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4928 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4929 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4930 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4931
Chet Lanctot186b5732013-03-18 10:26:30 -07004932 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4933
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 /* copy SSID into WDI structure */
4935 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4936 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4937 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4939 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004941#ifdef WLAN_FEATURE_VOWIFI
4942 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4943#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004946#ifdef WLAN_FEATURE_VOWIFI_11R
4947 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 if(wdiBssParams->bExtSetStaKeyParamValid)
4949 {
4950 /* copy set STA key params to WDI structure */
4951 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4952 wdaBssParams->extSetStaKeyParam.staIdx;
4953 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4954 wdaBssParams->extSetStaKeyParam.encType;
4955 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4956 wdaBssParams->extSetStaKeyParam.wepType;
4957 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4958 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4960 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004961 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4963 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4964 {
4965 WDA_GetWepKeysFromCfg( pWDA,
4966 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4967 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4968 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4969 }
4970 else
4971 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4973 keyIndex++)
4974 {
4975 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4976 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4977 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4978 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4979 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4980 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304981
4982 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4983 {
4984 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4985 {
4986 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4987 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4988 }
4989
4990 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4991 {
4992 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4993 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4994 }
4995 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4996 FL("%s: Negated Keys"), __func__);
4997 }
4998 else
4999 {
5000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5001 FL("%s: No change in Keys "), __func__);
5002 vos_mem_copy(
5003 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5004 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5005 WLAN_MAX_KEY_RSC_LEN);
5006 vos_mem_copy(
5007 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5008 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5009 SIR_MAC_MAX_KEY_LENGTH);
5010 }
5011
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5013 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5014 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5015 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305017 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 }
5020 }
5021 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5022 }
5023 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5024 {
5025 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5026 sizeof(wdaBssParams->extSetStaKeyParam) );
5027 }
5028#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005029#ifdef WLAN_FEATURE_11AC
5030 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5031 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5032#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005033
5034 return ;
5035}
Jeff Johnson295189b2012-06-20 16:38:30 -07005036/*
5037 * FUNCTION: WDA_UpdateSTAParams
5038 * Translated WDA/PE BSS info into WDI BSS info..
5039 */
5040void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5041 WDI_ConfigStaReqInfoType *wdiStaParams,
5042 tAddStaParams *wdaStaParams)
5043{
5044 tANI_U8 i = 0;
5045 /* Update STA params */
5046 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5047 sizeof(tSirMacAddr)) ;
5048 wdiStaParams->usAssocId = wdaStaParams->assocId;
5049 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005050 wdiStaParams->staIdx = wdaStaParams->staIdx;
5051
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 wdiStaParams->ucShortPreambleSupported =
5053 wdaStaParams->shortPreambleSupported;
5054 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5055 sizeof(tSirMacAddr)) ;
5056 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5057
5058 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5059
5060 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5061 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5062 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5063 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5064 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5065 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5066 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5067
5068 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5069 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 wdiStaParams->wdiSupportedRates.opRateMode =
5071 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5073 {
5074 wdiStaParams->wdiSupportedRates.llbRates[i] =
5075 wdaStaParams->supportedRates.llbRates[i];
5076 }
5077 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5078 {
5079 wdiStaParams->wdiSupportedRates.llaRates[i] =
5080 wdaStaParams->supportedRates.llaRates[i];
5081 }
5082 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5083 {
5084 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5085 wdaStaParams->supportedRates.aniLegacyRates[i];
5086 }
5087 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5088 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005089#ifdef WLAN_FEATURE_11AC
5090 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5091 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5092 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5093 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5094#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5096 {
5097 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5098 wdaStaParams->supportedRates.supportedMCSSet[i];
5099 }
5100 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5101 wdaStaParams->supportedRates.rxHighestDataRate;
5102
5103 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5104
5105 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5106
5107 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5108 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5109 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5110
5111 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5112 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5113 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5114 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005116#ifdef WLAN_FEATURE_11AC
5117 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5118 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005119 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305120 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5121 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5122 * must be set by default */
5123 if ( wdiStaParams->vhtTxMUBformeeCapable )
5124 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005125#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005126 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5127 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 return ;
5129}
Jeff Johnson295189b2012-06-20 16:38:30 -07005130/*
5131 * -------------------------------------------------------------------------
5132 * CFG update to WDI
5133 * -------------------------------------------------------------------------
5134 */
5135
5136 /*
5137 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5138 * Convert the WNI CFG ID to HAL CFG ID
5139 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005140static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005141{
5142 switch(wniCfgId)
5143 {
5144 case WNI_CFG_STA_ID:
5145 return QWLAN_HAL_CFG_STA_ID;
5146 case WNI_CFG_CURRENT_TX_ANTENNA:
5147 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5148 case WNI_CFG_CURRENT_RX_ANTENNA:
5149 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5150 case WNI_CFG_LOW_GAIN_OVERRIDE:
5151 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5152 case WNI_CFG_POWER_STATE_PER_CHAIN:
5153 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5154 case WNI_CFG_CAL_PERIOD:
5155 return QWLAN_HAL_CFG_CAL_PERIOD;
5156 case WNI_CFG_CAL_CONTROL:
5157 return QWLAN_HAL_CFG_CAL_CONTROL;
5158 case WNI_CFG_PROXIMITY:
5159 return QWLAN_HAL_CFG_PROXIMITY;
5160 case WNI_CFG_NETWORK_DENSITY:
5161 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5162 case WNI_CFG_MAX_MEDIUM_TIME:
5163 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5164 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5165 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5166 case WNI_CFG_RTS_THRESHOLD:
5167 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5168 case WNI_CFG_SHORT_RETRY_LIMIT:
5169 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5170 case WNI_CFG_LONG_RETRY_LIMIT:
5171 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5172 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5173 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5174 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5175 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5176 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5177 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5178 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5179 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5180 case WNI_CFG_FIXED_RATE:
5181 return QWLAN_HAL_CFG_FIXED_RATE;
5182 case WNI_CFG_RETRYRATE_POLICY:
5183 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5184 case WNI_CFG_RETRYRATE_SECONDARY:
5185 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5186 case WNI_CFG_RETRYRATE_TERTIARY:
5187 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5188 case WNI_CFG_FORCE_POLICY_PROTECTION:
5189 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5190 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5191 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5192 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5193 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5194 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5195 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5196 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5197 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5198 case WNI_CFG_MAX_BA_SESSIONS:
5199 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5200 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5201 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5202 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5203 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5204 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5205 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5206 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5207 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5208 case WNI_CFG_STATS_PERIOD:
5209 return QWLAN_HAL_CFG_STATS_PERIOD;
5210 case WNI_CFG_CFP_MAX_DURATION:
5211 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5212#if 0 /*This is not part of CFG*/
5213 case WNI_CFG_FRAME_TRANS_ENABLED:
5214 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5215#endif
5216 case WNI_CFG_DTIM_PERIOD:
5217 return QWLAN_HAL_CFG_DTIM_PERIOD;
5218 case WNI_CFG_EDCA_WME_ACBK:
5219 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5220 case WNI_CFG_EDCA_WME_ACBE:
5221 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5222 case WNI_CFG_EDCA_WME_ACVI:
5223 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5224 case WNI_CFG_EDCA_WME_ACVO:
5225 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5226#if 0
5227 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5228 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5229 case WNI_CFG_TELE_BCN_TRANS_LI:
5230 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5231 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5232 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5233 case WNI_CFG_TELE_BCN_MAX_LI:
5234 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5235 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5236 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5237#endif
5238 case WNI_CFG_ENABLE_CLOSE_LOOP:
5239 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005240 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5241 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305242 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5243 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 default:
5245 {
5246 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005247 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 wniCfgId);
5249 return VOS_STATUS_E_INVAL;
5250 }
5251 }
5252}
Jeff Johnson295189b2012-06-20 16:38:30 -07005253/*
5254 * FUNCTION: WDA_UpdateCfgCallback
5255 *
5256 */
5257void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5258{
5259 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5260 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5261 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005263 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /*
5265 * currently there is no response message is expected between PE and
5266 * WDA, Failure return from WDI is a ASSERT condition
5267 */
5268 if(WDI_STATUS_SUCCESS != wdiStatus)
5269 {
5270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005271 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5273 }
5274
5275 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5276 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5277 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 return ;
5279}
Jeff Johnson295189b2012-06-20 16:38:30 -07005280/*
5281 * FUNCTION: WDA_UpdateCfg
5282 *
5283 */
5284VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5285{
5286
5287 WDI_Status status = WDI_STATUS_SUCCESS ;
5288 tANI_U32 val =0;
5289 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5290 tHalCfg *configData;
5291 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5292 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005294 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 if (NULL == pMac )
5296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005298 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 return VOS_STATUS_E_FAILURE;
5300 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 if(WDA_START_STATE != pWDA->wdaState)
5302 {
5303 return VOS_STATUS_E_FAILURE;
5304 }
5305
5306 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5307 {
5308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005309 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 VOS_ASSERT(0);
5311 return VOS_STATUS_E_FAILURE;
5312 }
5313
5314 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5315 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 if(NULL == wdiCfgReqParam)
5317 {
5318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 VOS_ASSERT(0);
5321 return VOS_STATUS_E_NOMEM;
5322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5324 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 if(NULL == wdiCfgReqParam->pConfigBuffer)
5326 {
5327 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 vos_mem_free(wdiCfgReqParam);
5330 VOS_ASSERT(0);
5331 return VOS_STATUS_E_NOMEM;
5332 }
5333
5334 /*convert the WNI CFG Id to HAL CFG Id*/
5335 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5336 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5337
5338 /*TODO: revisit this for handling string parameters */
5339 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5340 &val) != eSIR_SUCCESS)
5341 {
5342 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005343 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5345 vos_mem_free(wdiCfgReqParam);
5346 return eSIR_FAILURE;
5347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5349 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5350 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5351 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5352 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5353
5354 /* store Params pass it to WDI */
5355 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5357 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5358 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 if(IS_WDI_STATUS_FAILURE(status))
5360 {
5361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5362 "Failure in Update CFG WDI API, free all the memory " );
5363 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5364 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5365 pWDA->wdaWdiCfgApiMsgParam = NULL;
5366 /* Failure is not expected */
5367 VOS_ASSERT(0) ;
5368 }
5369#else
5370 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5371 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5372 pWDA->wdaWdiCfgApiMsgParam = NULL;
5373#endif
5374 return CONVERT_WDI2VOS_STATUS(status) ;
5375}
5376
Jeff Johnson295189b2012-06-20 16:38:30 -07005377VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5378 v_U8_t *pDefaultKeyId,
5379 v_U8_t *pNumKeys,
5380 WDI_KeysType *pWdiKeys )
5381{
5382 v_U32_t i, j, defKeyId = 0;
5383 v_U32_t val = SIR_MAC_KEY_LENGTH;
5384 VOS_STATUS status = WDI_STATUS_SUCCESS;
5385 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 if (NULL == pMac )
5387 {
5388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005389 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 return VOS_STATUS_E_FAILURE;
5391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5393 &defKeyId ))
5394 {
5395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5396 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5397 }
5398
5399 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 /* Need to extract ALL of the configured WEP Keys */
5401 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5402 {
5403 val = SIR_MAC_KEY_LENGTH;
5404 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5405 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5406 pWdiKeys[j].key,
5407 &val ))
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005410 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 }
5412 else
5413 {
5414 pWdiKeys[j].keyId = (tANI_U8) i;
5415 /*
5416 * Actually, a DC (Don't Care) because
5417 * this is determined (and set) by PE/MLME
5418 */
5419 pWdiKeys[j].unicast = 0;
5420 /*
5421 * Another DC (Don't Care)
5422 */
5423 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5424 /* Another DC (Don't Care). Unused for WEP */
5425 pWdiKeys[j].paeRole = 0;
5426 /* Determined from wlan_cfgGetStr() above.*/
5427 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 j++;
5429 *pNumKeys = (tANI_U8) j;
5430 }
5431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 return status;
5433}
Jeff Johnson295189b2012-06-20 16:38:30 -07005434/*
5435 * FUNCTION: WDA_SetBssKeyReqCallback
5436 * send SET BSS key RSP back to PE
5437 */
5438void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5439{
5440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5441 tWDA_CbContext *pWDA;
5442 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 if(NULL == pWdaParams)
5446 {
5447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 VOS_ASSERT(0) ;
5450 return ;
5451 }
5452 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5453 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305454 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5455 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5457 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005458 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 return ;
5461}
Jeff Johnson295189b2012-06-20 16:38:30 -07005462/*
5463 * FUNCTION: WDA_ProcessSetBssKeyReq
5464 * Request to WDI for programming the BSS key( key for
5465 * broadcast/multicast frames Encryption)
5466 */
5467VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5468 tSetBssKeyParams *setBssKeyParams )
5469{
5470 WDI_Status status = WDI_STATUS_SUCCESS ;
5471 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5472 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5473 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5474 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005477 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 if(NULL == wdiSetBssKeyParam)
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 VOS_ASSERT(0);
5483 return VOS_STATUS_E_NOMEM;
5484 }
5485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5486 if(NULL == pWdaParams)
5487 {
5488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 VOS_ASSERT(0);
5491 vos_mem_free(wdiSetBssKeyParam);
5492 return VOS_STATUS_E_NOMEM;
5493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 /* copy set BSS params to WDI structure */
5496 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5497 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5498 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 if(setBssKeyParams->encType != eSIR_ED_NONE)
5500 {
5501 if( setBssKeyParams->numKeys == 0 &&
5502 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5503 setBssKeyParams->encType == eSIR_ED_WEP104))
5504 {
5505 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5507 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5508 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5509 }
5510 else
5511 {
5512 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5513 {
5514 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5515 setBssKeyParams->key[keyIndex].keyId;
5516 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5517 setBssKeyParams->key[keyIndex].unicast;
5518 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5519 setBssKeyParams->key[keyIndex].keyDirection;
5520 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5521 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5522 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5523 setBssKeyParams->key[keyIndex].paeRole;
5524 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5525 setBssKeyParams->key[keyIndex].keyLength;
5526 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5527 setBssKeyParams->key[keyIndex].key,
5528 SIR_MAC_MAX_KEY_LENGTH);
5529 }
5530 }
5531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5533 setBssKeyParams->singleTidRc;
5534 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 /* Store set key pointer, as this will be used for response */
5536 /* store Params pass it to WDI */
5537 pWdaParams->pWdaContext = pWDA;
5538 pWdaParams->wdaMsgParam = setBssKeyParams;
5539 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5541 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5542
5543 if(IS_WDI_STATUS_FAILURE(status))
5544 {
5545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5546 "Failure in Set BSS Key Req WDI API, free all the memory " );
5547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5548 vos_mem_free(pWdaParams) ;
5549 setBssKeyParams->status = eSIR_FAILURE ;
5550 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 return CONVERT_WDI2VOS_STATUS(status) ;
5553}
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_RemoveBssKeyReqCallback
5556 * send SET BSS key RSP back to PE
5557 */
5558void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5559{
5560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5561 tWDA_CbContext *pWDA;
5562 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(NULL == pWdaParams)
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0) ;
5570 return ;
5571 }
5572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5573 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5575 vos_mem_free(pWdaParams) ;
5576
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005577 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 return ;
5580}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305581
5582/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305583 * FUNCTION: WDA_GetFrameLogRspCallback
5584 * recieves get frame log response from FW
5585 */
5586void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5587 void* pUserData)
5588{
5589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5590 tWDA_CbContext *pWDA = NULL;
5591 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5592
5593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5594 "<------ Entering: %s " ,__func__);
5595 if(NULL == pWdaParams)
5596 {
5597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5598 "%s: pWdaParams received NULL", __func__);
5599 VOS_ASSERT(0) ;
5600 return ;
5601 }
5602
5603 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5604 if (NULL == pWDA)
5605 {
5606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5607 "%s:pWDA is NULL", __func__);
5608 VOS_ASSERT(0);
5609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5610 vos_mem_free(pWdaParams);
5611 return ;
5612 }
5613
5614 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5615 if(NULL == pGetFrameLogReqParams)
5616 {
5617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5618 "%s: pGetFrameLogReqParams received NULL", __func__);
5619 VOS_ASSERT(0);
5620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5621 vos_mem_free(pWdaParams);
5622 return;
5623 }
5624
Siddharth Bhal64246172015-02-27 01:04:37 +05305625 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305627 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5628 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305629 }
5630
5631 /* free WDI command buffer only */
5632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5633 vos_mem_free(pWdaParams->wdaMsgParam);
5634 vos_mem_free(pWdaParams);
5635
5636 return ;
5637
5638}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305639
5640/*
5641 * FUNCTION: WDA_RssiMonitorStopRspCallback
5642 * recieves Rssi Monitor stop response from FW
5643 */
5644void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5645 void* pUserData)
5646{
5647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5648 tSirRssiMonitorReq *pRssiMonitorReqParams;
5649
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5651 "<------ %s " ,__func__);
5652
5653 if(NULL == pWdaParams)
5654 {
5655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5656 "%s: pWdaParams received NULL", __func__);
5657 VOS_ASSERT(0);
5658 return ;
5659 }
5660
5661 if(NULL == pWdaParams->wdaMsgParam)
5662 {
5663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5664 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5665 VOS_ASSERT(0);
5666 vos_mem_free(pWdaParams);
5667 return ;
5668 }
5669
5670 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5671
5672 if(pRssiMonitorReqParams->rssiMonitorCallback)
5673 {
5674 pRssiMonitorReqParams->rssiMonitorCallback(
5675 pRssiMonitorReqParams->rssiMonitorCbContext,
5676 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5677 }
5678 else
5679 {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5681 "%s: pFWLoggingInitParams callback is NULL", __func__);
5682 }
5683
5684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5685 vos_mem_free(pWdaParams->wdaMsgParam);
5686 vos_mem_free(pWdaParams);
5687
5688 return;
5689}
5690
5691/*
5692 * FUNCTION: WDA_RssiMonitorStartRspCallback
5693 * recieves Rssi Monitor start response from FW
5694 */
5695void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5696 void* pUserData)
5697{
5698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5699 tSirRssiMonitorReq *pRssiMonitorReqParams;
5700
5701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5702 "<------ %s " ,__func__);
5703
5704 if(NULL == pWdaParams)
5705 {
5706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5707 "%s: pWdaParams received NULL", __func__);
5708 VOS_ASSERT(0);
5709 return ;
5710 }
5711
5712 if(NULL == pWdaParams->wdaMsgParam)
5713 {
5714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5715 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5716 VOS_ASSERT(0);
5717 vos_mem_free(pWdaParams);
5718 return ;
5719 }
5720
5721 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5722
5723 if(pRssiMonitorReqParams->rssiMonitorCallback)
5724 {
5725 pRssiMonitorReqParams->rssiMonitorCallback(
5726 pRssiMonitorReqParams->rssiMonitorCbContext,
5727 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5728 }
5729 else
5730 {
5731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5732 "%s: pFWLoggingInitParams callback is NULL", __func__);
5733 }
5734
5735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5736 vos_mem_free(pWdaParams->wdaMsgParam);
5737 vos_mem_free(pWdaParams);
5738
5739 return;
5740}
5741
Siddharth Bhal64246172015-02-27 01:04:37 +05305742/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305743 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305744 * recieves Mgmt Logging init response from FW
5745 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305746void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305747 void* pUserData)
5748{
5749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305750 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305751 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305752
5753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5754 "<------ %s " ,__func__);
5755
5756 if(NULL == pWdaParams)
5757 {
5758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5759 "%s: pWdaParams received NULL", __func__);
5760 VOS_ASSERT(0);
5761 return ;
5762 }
5763
5764 if(NULL == pWdaParams->wdaMsgParam)
5765 {
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5767 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5768 VOS_ASSERT(0);
5769 vos_mem_free(pWdaParams);
5770 return ;
5771 }
5772
c_manjeecfd1efb2015-09-25 19:32:34 +05305773 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5774 if(NULL == pWdaParams)
5775 {
5776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5777 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5778 VOS_ASSERT(0);
5779 vos_mem_free(pWdaParams);
5780 return;
5781 }
5782
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305783 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305784 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305785
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305786 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305787 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305788 pFWLoggingInitParams->fwlogInitCallback(
5789 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305790 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305791 }
5792 else
5793 {
5794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305795 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305796 }
5797
c_manjeecfd1efb2015-09-25 19:32:34 +05305798 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5800 vos_mem_free(pWdaParams->wdaMsgParam);
5801 vos_mem_free(pWdaParams);
5802
5803 return;
5804}
5805
5806/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305807 * FUNCTION: WDA_SpoofMacAddrRspCallback
5808 * recieves spoof mac addr response from FW
5809 */
5810void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5811{
5812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5813 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305814
Siddharth Bhal171788a2014-09-29 21:02:40 +05305815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5816 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305817
Siddharth Bhal171788a2014-09-29 21:02:40 +05305818 if(NULL == pWdaParams)
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5821 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305822 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305823 return ;
5824 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305825 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305826
Siddharth Bhal029d6732014-10-09 21:31:23 +05305827 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305829 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305830 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305831 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5832 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305833
Siddharth Bhal171788a2014-09-29 21:02:40 +05305834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305835 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305836 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305837
5838 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305839}
5840
Jeff Johnson295189b2012-06-20 16:38:30 -07005841/*
5842 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5843 * Request to WDI to remove the BSS key( key for broadcast/multicast
5844 * frames Encryption)
5845 */
5846VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5847 tRemoveBssKeyParams *removeBssKeyParams )
5848{
5849 WDI_Status status = WDI_STATUS_SUCCESS ;
5850 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5851 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5852 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5853 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 if(NULL == wdiRemoveBssKeyParam)
5857 {
5858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 VOS_ASSERT(0);
5861 return VOS_STATUS_E_NOMEM;
5862 }
5863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5864 if(NULL == pWdaParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 VOS_ASSERT(0);
5869 vos_mem_free(wdiRemoveBssKeyParam);
5870 return VOS_STATUS_E_NOMEM;
5871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 /* copy Remove BSS key params to WDI structure*/
5873 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5874 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5875 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5876 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5877 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 /* Store remove key pointer, as this will be used for response */
5879 /* store Params pass it to WDI */
5880 pWdaParams->pWdaContext = pWDA;
5881 pWdaParams->wdaMsgParam = removeBssKeyParams;
5882 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005883 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5884 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 if(IS_WDI_STATUS_FAILURE(status))
5886 {
5887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5888 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5890 vos_mem_free(pWdaParams) ;
5891 removeBssKeyParams->status = eSIR_FAILURE ;
5892 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 return CONVERT_WDI2VOS_STATUS(status) ;
5895}
Jeff Johnson295189b2012-06-20 16:38:30 -07005896/*
5897 * FUNCTION: WDA_SetBssKeyReqCallback
5898 * send SET BSS key RSP back to PE
5899 */
5900void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5901{
5902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5903 tWDA_CbContext *pWDA;
5904 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 if(NULL == pWdaParams)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_ASSERT(0) ;
5912 return ;
5913 }
5914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5915 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305916 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5917 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5919 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005920 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 return ;
5923}
Jeff Johnson295189b2012-06-20 16:38:30 -07005924/*
5925 * FUNCTION: WDA_ProcessSetStaKeyReq
5926 * Request to WDI for programming the STA key( key for Unicast frames
5927 * Encryption)
5928 */
5929VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5930 tSetStaKeyParams *setStaKeyParams )
5931{
5932 WDI_Status status = WDI_STATUS_SUCCESS ;
5933 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5934 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5935 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5936 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 if(NULL == wdiSetStaKeyParam)
5941 {
5942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 VOS_ASSERT(0);
5945 return VOS_STATUS_E_NOMEM;
5946 }
5947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5948 if(NULL == pWdaParams)
5949 {
5950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 VOS_ASSERT(0);
5953 vos_mem_free(wdiSetStaKeyParam);
5954 return VOS_STATUS_E_NOMEM;
5955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 /* copy set STA key params to WDI structure */
5959 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5960 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5961 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5962 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 if(setStaKeyParams->encType != eSIR_ED_NONE)
5964 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005965 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5967 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5968 {
5969 WDA_GetWepKeysFromCfg( pWDA,
5970 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5971 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5972 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5973 }
5974 else
5975 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5977 keyIndex++)
5978 {
5979 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5980 setStaKeyParams->key[keyIndex].keyId;
5981 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5982 setStaKeyParams->key[keyIndex].unicast;
5983 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5984 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5986 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5987 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5988 setStaKeyParams->key[keyIndex].paeRole;
5989 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5990 setStaKeyParams->key[keyIndex].keyLength;
5991 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5992 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5993 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5994 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5995 {
5996 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5997 }
5998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6000 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 }
6002 }
6003 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6004 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 /* Store set key pointer, as this will be used for response */
6006 /* store Params pass it to WDI */
6007 pWdaParams->pWdaContext = pWDA;
6008 pWdaParams->wdaMsgParam = setStaKeyParams;
6009 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6011 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 if(IS_WDI_STATUS_FAILURE(status))
6013 {
6014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6015 "Failure in set STA Key Req WDI API, free all the memory " );
6016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6017 vos_mem_free(pWdaParams) ;
6018 setStaKeyParams->status = eSIR_FAILURE ;
6019 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 return CONVERT_WDI2VOS_STATUS(status) ;
6022}
Jeff Johnson295189b2012-06-20 16:38:30 -07006023/*
6024 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6025 * send SET Bcast STA key RSP back to PE
6026 */
6027void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6028{
6029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6030 tWDA_CbContext *pWDA;
6031 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006033 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 if(NULL == pWdaParams)
6035 {
6036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006037 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 VOS_ASSERT(0) ;
6039 return ;
6040 }
6041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6042 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6044 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006045 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 return ;
6048}
6049
Jeff Johnson295189b2012-06-20 16:38:30 -07006050/*
6051 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6052 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6053 * Encryption)
6054 */
6055VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6056 tSetStaKeyParams *setStaKeyParams )
6057{
6058 WDI_Status status = WDI_STATUS_SUCCESS ;
6059 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6060 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6061 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6062 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006065 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 if(NULL == wdiSetStaKeyParam)
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 VOS_ASSERT(0);
6071 return VOS_STATUS_E_NOMEM;
6072 }
6073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6074 if(NULL == pWdaParams)
6075 {
6076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 VOS_ASSERT(0);
6079 vos_mem_free(wdiSetStaKeyParam);
6080 return VOS_STATUS_E_NOMEM;
6081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 /* copy set STA key params to WDI structure */
6085 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6086 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6087 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6088 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 if(setStaKeyParams->encType != eSIR_ED_NONE)
6090 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6092 keyIndex++)
6093 {
6094 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6095 setStaKeyParams->key[keyIndex].keyId;
6096 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6097 setStaKeyParams->key[keyIndex].unicast;
6098 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6099 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6101 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6102 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6103 setStaKeyParams->key[keyIndex].paeRole;
6104 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6105 setStaKeyParams->key[keyIndex].keyLength;
6106 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6107 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6110 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 }
6112 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 /* Store set key pointer, as this will be used for response */
6114 /* store Params pass it to WDI */
6115 pWdaParams->pWdaContext = pWDA;
6116 pWdaParams->wdaMsgParam = setStaKeyParams;
6117 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6119 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 if(IS_WDI_STATUS_FAILURE(status))
6121 {
6122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6123 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6125 vos_mem_free(pWdaParams) ;
6126 setStaKeyParams->status = eSIR_FAILURE ;
6127 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 return CONVERT_WDI2VOS_STATUS(status) ;
6130}
Jeff Johnson295189b2012-06-20 16:38:30 -07006131/*
6132 * FUNCTION: WDA_RemoveStaKeyReqCallback
6133 * send SET BSS key RSP back to PE
6134 */
6135void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6136{
6137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6138 tWDA_CbContext *pWDA;
6139 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006141 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 if(NULL == pWdaParams)
6143 {
6144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006145 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 VOS_ASSERT(0) ;
6147 return ;
6148 }
6149 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6150 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6152 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006153 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 return ;
6156}
6157
Jeff Johnson295189b2012-06-20 16:38:30 -07006158/*
6159 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6160 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6161 */
6162VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6163 tRemoveStaKeyParams *removeStaKeyParams )
6164{
6165 WDI_Status status = WDI_STATUS_SUCCESS ;
6166 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6167 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6168 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 if(NULL == wdiRemoveStaKeyParam)
6173 {
6174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 VOS_ASSERT(0);
6177 return VOS_STATUS_E_NOMEM;
6178 }
6179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6180 if(NULL == pWdaParams)
6181 {
6182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006184 VOS_ASSERT(0);
6185 vos_mem_free(wdiRemoveStaKeyParam);
6186 return VOS_STATUS_E_NOMEM;
6187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 /* copy remove STA key params to WDI structure*/
6189 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6190 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6191 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6192 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6193 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 /* Store remove key pointer, as this will be used for response */
6195 /* store Params pass it to WDI */
6196 pWdaParams->pWdaContext = pWDA;
6197 pWdaParams->wdaMsgParam = removeStaKeyParams;
6198 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6200 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 if(IS_WDI_STATUS_FAILURE(status))
6202 {
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6204 "Failure in remove STA Key Req WDI API, free all the memory " );
6205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6206 vos_mem_free(pWdaParams) ;
6207 removeStaKeyParams->status = eSIR_FAILURE ;
6208 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 return CONVERT_WDI2VOS_STATUS(status) ;
6211}
Jeff Johnson295189b2012-06-20 16:38:30 -07006212/*
6213 * FUNCTION: WDA_IsHandleSetLinkStateReq
6214 * Update the WDA state and return the status to handle this message or not
6215 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006216WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6217 tWDA_CbContext *pWDA,
6218 tLinkStateParams *linkStateParams)
6219{
6220 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 switch(linkStateParams->state)
6222 {
6223 case eSIR_LINK_PREASSOC_STATE:
6224 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6225 /*
6226 * set the WDA state to PRE ASSOC
6227 * copy the BSSID into pWDA to use it in join request and return,
6228 * No need to handle these messages.
6229 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006230 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6231 {
6232 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006234 }
6235 else
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006238 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006239 VOS_ASSERT(0);
6240 }
6241
6242 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6243 {
6244 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006246 }
6247 else
6248 {
6249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006250 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006251 VOS_ASSERT(0);
6252 }
6253
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6255 *channel and after ) so reset the WDA state to ready when the second
6256 * time UMAC issue the link state with PREASSOC
6257 */
6258 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6259 {
6260 /* RESET WDA state back to WDA_READY_STATE */
6261 pWDA->wdaState = WDA_READY_STATE;
6262 }
6263 else
6264 {
6265 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6266 }
6267 //populate linkState info in WDACbCtxt
6268 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 default:
6271 if(pWDA->wdaState != WDA_READY_STATE)
6272 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006273 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6274 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6275 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6276 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6277 *the ASSERT in WDA_Stop during module unload.*/
6278 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6279 {
6280 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006281 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006282 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006283 else
6284 {
6285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006286 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006287 status = WDA_IGNORE_SET_LINK_STATE;
6288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 }
6290 break;
6291 }
6292
6293 return status;
6294}
Jeff Johnson295189b2012-06-20 16:38:30 -07006295/*
6296 * FUNCTION: WDA_SetLinkStateCallback
6297 * call back function for set link state from WDI
6298 */
6299void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6300{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306301 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 tLinkStateParams *linkStateParams;
6303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006305 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306306 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 {
6308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006309 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 VOS_ASSERT(0) ;
6311 return ;
6312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306314 if (NULL == pWDA)
6315 {
6316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6317 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6319 vos_mem_free(pWdaParams->wdaMsgParam);
6320 vos_mem_free(pWdaParams);
6321
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306322 VOS_ASSERT(0);
6323 return ;
6324 }
6325
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 /*
6328 * In STA mode start the BA activity check timer after association
6329 * and in AP mode start BA activity check timer after BSS start */
6330 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6331 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006332 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6333 ((status == WDI_STATUS_SUCCESS) &&
6334 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 {
6336 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 /*
6340 * No respone required for WDA_SET_LINK_STATE so free the request
6341 * param here
6342 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6344 vos_mem_free(pWdaParams);
6345
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 return ;
6347}
Jeff Johnson295189b2012-06-20 16:38:30 -07006348/*
6349 * FUNCTION: WDA_ProcessSetLinkState
6350 * Request to WDI to set the link status.
6351 */
6352VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6353 tLinkStateParams *linkStateParams)
6354{
6355 WDI_Status status = WDI_STATUS_SUCCESS ;
6356 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6357 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6358 sizeof(WDI_SetLinkReqParamsType)) ;
6359 tWDA_ReqParams *pWdaParams ;
6360 tpAniSirGlobal pMac;
6361 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6362
6363 if(NULL == pMac)
6364 {
6365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006368 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 return VOS_STATUS_E_FAILURE;
6370 }
6371
6372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006373 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 if(NULL == wdiSetLinkStateParam)
6375 {
6376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 VOS_ASSERT(0);
6379 return VOS_STATUS_E_NOMEM;
6380 }
6381 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6382 if(NULL == pWdaParams)
6383 {
6384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_ASSERT(0);
6387 vos_mem_free(wdiSetLinkStateParam);
6388 return VOS_STATUS_E_NOMEM;
6389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 if(WDA_IGNORE_SET_LINK_STATE ==
6391 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6392 {
6393 status = WDI_STATUS_E_FAILURE;
6394 }
6395 else
6396 {
6397 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6398 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6400 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6402 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 pWdaParams->pWdaContext = pWDA;
6404 /* Store remove key pointer, as this will be used for response */
6405 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 /* store Params pass it to WDI */
6407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6408 /* Stop Timer only other than GO role and concurrent session */
6409 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006410 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6412 {
6413 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6416 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 if(IS_WDI_STATUS_FAILURE(status))
6418 {
6419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6420 "Failure in set link state Req WDI API, free all the memory " );
6421 }
6422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 if(IS_WDI_STATUS_FAILURE(status))
6424 {
6425 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006426 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 vos_mem_free(pWdaParams);
6428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 return CONVERT_WDI2VOS_STATUS(status) ;
6430}
Jeff Johnson295189b2012-06-20 16:38:30 -07006431/*
6432 * FUNCTION: WDA_GetStatsReqParamsCallback
6433 * send the response to PE with Stats received from WDI
6434 */
6435void WDA_GetStatsReqParamsCallback(
6436 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6437 void* pUserData)
6438{
6439 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
6440 tAniGetPEStatsRsp *pGetPEStatsRspParams;
6441
6442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006443 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006444 pGetPEStatsRspParams =
6445 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6446 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6447
6448 if(NULL == pGetPEStatsRspParams)
6449 {
6450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 VOS_ASSERT(0);
6453 return;
6454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
6456 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
6457 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6458 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006459
6460 //Fill the Session Id Properly in PE
6461 pGetPEStatsRspParams->sessionId = 0;
6462 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006463 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6465 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 vos_mem_copy( pGetPEStatsRspParams + 1,
6467 wdiGetStatsRsp + 1,
6468 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 /* send response to UMAC*/
6470 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
6471
6472 return;
6473}
6474
Jeff Johnson295189b2012-06-20 16:38:30 -07006475/*
6476 * FUNCTION: WDA_ProcessGetStatsReq
6477 * Request to WDI to get the statistics
6478 */
6479VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6480 tAniGetPEStatsReq *pGetStatsParams)
6481{
6482 WDI_Status status = WDI_STATUS_SUCCESS ;
6483 WDI_GetStatsReqParamsType wdiGetStatsParam;
6484 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6488 pGetStatsParams->staId;
6489 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6490 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006491 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 status = WDI_GetStatsReq(&wdiGetStatsParam,
6493 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 if(IS_WDI_STATUS_FAILURE(status))
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6497 "Failure in Get Stats Req WDI API, free all the memory " );
6498 pGetPEStatsRspParams =
6499 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6500 if(NULL == pGetPEStatsRspParams)
6501 {
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006505 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 return VOS_STATUS_E_NOMEM;
6507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
6509 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6510 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6511 pGetPEStatsRspParams->rc = eSIR_FAILURE;
6512 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
6513 (void *)pGetPEStatsRspParams, 0) ;
6514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 /* Free the request message */
6516 vos_mem_free(pGetStatsParams);
6517 return CONVERT_WDI2VOS_STATUS(status);
6518}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006519
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006520#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006521/*
6522 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6523 * send the response to PE with roam Rssi received from WDI
6524 */
6525void WDA_GetRoamRssiReqParamsCallback(
6526 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6527 void* pUserData)
6528{
6529 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6530 tWDA_CbContext *pWDA = NULL;
6531 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6532 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6534 "<------ %s " ,__func__);
6535 if(NULL == pWdaParams)
6536 {
6537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6538 "%s: pWdaParams received NULL", __func__);
6539 VOS_ASSERT(0) ;
6540 return ;
6541 }
6542 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6543 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6544
6545 if(NULL == pGetRoamRssiReqParams)
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6548 "%s: pGetRoamRssiReqParams received NULL", __func__);
6549 VOS_ASSERT(0);
6550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6551 vos_mem_free(pWdaParams);
6552 return ;
6553 }
6554 pGetRoamRssiRspParams =
6555 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6556
6557 if(NULL == pGetRoamRssiRspParams)
6558 {
6559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6560 "%s: VOS MEM Alloc Failure", __func__);
6561 VOS_ASSERT(0);
6562 return;
6563 }
6564 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6565 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006566 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006567 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6568 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6569
6570 /* Assign get roam rssi req (backup) in to the response */
6571 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6572
6573 /* free WDI command buffer */
6574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6575 vos_mem_free(pWdaParams) ;
6576
6577 /* send response to UMAC*/
6578 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6579
6580 return;
6581}
6582
6583
6584
6585/*
6586 * FUNCTION: WDA_ProcessGetRoamRssiReq
6587 * Request to WDI to get the statistics
6588 */
6589VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6590 tAniGetRssiReq *pGetRoamRssiParams)
6591{
6592 WDI_Status status = WDI_STATUS_SUCCESS ;
6593 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6594 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6595 tWDA_ReqParams *pWdaParams = NULL;
6596
6597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6598 "------> %s " ,__func__);
6599 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6600 pGetRoamRssiParams->staId;
6601 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6602
6603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6604 if(NULL == pWdaParams)
6605 {
6606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6607 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306608 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006609 VOS_ASSERT(0);
6610 return VOS_STATUS_E_NOMEM;
6611 }
6612
6613 /* Store Init Req pointer, as this will be used for response */
6614 pWdaParams->pWdaContext = pWDA;
6615
6616 /* Take Get roam Rssi req backup as it stores the callback to be called after
6617 receiving the response */
6618 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6619 pWdaParams->wdaWdiApiMsgParam = NULL;
6620
6621 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6622 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6623 if(IS_WDI_STATUS_FAILURE(status))
6624 {
6625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6626 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6627 pGetRoamRssiRspParams =
6628 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6629 if(NULL == pGetRoamRssiRspParams)
6630 {
6631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6632 "%s: VOS MEM Alloc Failure", __func__);
6633 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306634 vos_mem_free(pGetRoamRssiParams);
6635 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006636 return VOS_STATUS_E_NOMEM;
6637 }
6638 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6639 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6640 pGetRoamRssiRspParams->rssi = 0;
6641 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6642 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6643 (void *)pGetRoamRssiRspParams, 0) ;
6644 }
6645 return CONVERT_WDI2VOS_STATUS(status);
6646}
6647#endif
6648
6649
Jeff Johnson295189b2012-06-20 16:38:30 -07006650/*
6651 * FUNCTION: WDA_UpdateEDCAParamCallback
6652 * call back function for Update EDCA params from WDI
6653 */
6654void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6655{
6656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6657 tEdcaParams *pEdcaParams;
6658
6659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006660 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 if(NULL == pWdaParams)
6662 {
6663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006664 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 VOS_ASSERT(0) ;
6666 return ;
6667 }
6668 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6670 vos_mem_free(pWdaParams);
6671 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 return ;
6673}
Jeff Johnson295189b2012-06-20 16:38:30 -07006674/*
6675 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6676 * Request to WDI to Update the EDCA params.
6677 */
6678VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6679 tEdcaParams *pEdcaParams)
6680{
6681 WDI_Status status = WDI_STATUS_SUCCESS ;
6682 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6683 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6684 sizeof(WDI_UpdateEDCAParamsType)) ;
6685 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 if(NULL == wdiEdcaParam)
6689 {
6690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006692 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006693 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 return VOS_STATUS_E_NOMEM;
6695 }
6696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6697 if(NULL == pWdaParams)
6698 {
6699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 VOS_ASSERT(0);
6702 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006703 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 return VOS_STATUS_E_NOMEM;
6705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006707 /*
6708 Since firmware is not using highperformance flag, we have removed
6709 this flag from wdiEDCAInfo structure to match sizeof the structure
6710 between host and firmware.In future if we are planning to use
6711 highperformance flag then Please define this flag in wdiEDCAInfo
6712 structure, update it here and send it to firmware. i.e.
6713 Following is the original line which we removed as part of the fix
6714 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6715 pEdcaParams->highPerformance;
6716 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6718 &pEdcaParams->acbe);
6719 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6720 &pEdcaParams->acbk);
6721 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6722 &pEdcaParams->acvi);
6723 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6724 &pEdcaParams->acvo);
6725 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 pWdaParams->pWdaContext = pWDA;
6727 /* Store remove key pointer, as this will be used for response */
6728 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 /* store Params pass it to WDI */
6730 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6732 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 if(IS_WDI_STATUS_FAILURE(status))
6734 {
6735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6736 "Failure in Update EDCA Params WDI API, free all the memory " );
6737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6738 vos_mem_free(pWdaParams);
6739 vos_mem_free(pEdcaParams);
6740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 return CONVERT_WDI2VOS_STATUS(status) ;
6742}
Jeff Johnson295189b2012-06-20 16:38:30 -07006743/*
6744 * FUNCTION: WDA_AddBAReqCallback
6745 * send ADD BA RSP back to PE
6746 */
6747void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6748 void* pUserData)
6749{
6750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6751 tWDA_CbContext *pWDA;
6752 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006754 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306755 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 {
6757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 VOS_ASSERT(0) ;
6760 return ;
6761 }
6762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306763 if (NULL == pWDA)
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6766 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6768 vos_mem_free(pWdaParams->wdaMsgParam);
6769 vos_mem_free(pWdaParams);
6770
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306771 VOS_ASSERT(0);
6772 return ;
6773 }
6774
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6777 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006778 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 return ;
6781}
6782
Jeff Johnson295189b2012-06-20 16:38:30 -07006783/*
6784 * FUNCTION: WDA_ProcessAddBAReq
6785 * Request to WDI to Update the ADDBA REQ params.
6786 */
6787VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306788 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006789{
Jeff Johnson43971f52012-07-17 12:26:56 -07006790 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6792 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6793 sizeof(WDI_AddBAReqParamsType)) ;
6794 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 if(NULL == wdiAddBAReqParam)
6798 {
6799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 VOS_ASSERT(0);
6802 return VOS_STATUS_E_NOMEM;
6803 }
6804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6805 if(NULL == pWdaParams)
6806 {
6807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 VOS_ASSERT(0);
6810 vos_mem_free(wdiAddBAReqParam);
6811 return VOS_STATUS_E_NOMEM;
6812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 do
6814 {
6815 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 wdiAddBaInfo->ucSTAIdx = staIdx ;
6817 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306818 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 } while(0) ;
6820 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 pWdaParams->pWdaContext = pWDA;
6822 /* store Params pass it to WDI */
6823 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6824 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006825 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6826 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827
Jeff Johnson43971f52012-07-17 12:26:56 -07006828 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 {
6830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006831 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6832 status = CONVERT_WDI2VOS_STATUS(wstatus);
6833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 vos_mem_free(pWdaParams);
6835 pAddBAReqParams->status = eSIR_FAILURE;
6836 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6837 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006838 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839}
Jeff Johnson295189b2012-06-20 16:38:30 -07006840/*
6841 * FUNCTION: WDA_AddBASessionReqCallback
6842 * send ADD BA SESSION RSP back to PE/(or TL)
6843 */
6844void WDA_AddBASessionReqCallback(
6845 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6846{
6847 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306849 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006852 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 if(NULL == pWdaParams)
6854 {
6855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006856 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 VOS_ASSERT(0) ;
6858 return ;
6859 }
6860 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306861 if (NULL == pWDA)
6862 {
6863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6864 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6866 vos_mem_free(pWdaParams->wdaMsgParam);
6867 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306868 VOS_ASSERT(0);
6869 return ;
6870 }
6871
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if( NULL == pAddBAReqParams )
6874 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6879 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 return ;
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6883 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306885 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 * another request to HAL(/WDI) (ADD_BA_REQ)
6887 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 if((VOS_STATUS_SUCCESS ==
6889 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306890 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 {
6892 /* Update TL with BA info received from HAL/WDI */
6893 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6894 wdiAddBaSession->usBaSessionID,
6895 wdiAddBaSession->ucSTAIdx,
6896 wdiAddBaSession->ucBaTID,
6897 wdiAddBaSession->ucBaBufferSize,
6898 wdiAddBaSession->ucWinSize,
6899 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006900 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306901 wdiAddBaSession->ucSTAIdx,
6902 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 }
6904 else
6905 {
6906 pAddBAReqParams->status =
6907 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6908
6909 /* Setting Flag to indicate that Set BA is success */
6910 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6911 {
6912 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6913 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6914 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 /*Reset the WDA state to READY */
6919 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 return ;
6921}
6922
Jeff Johnson295189b2012-06-20 16:38:30 -07006923/*
6924 * FUNCTION: WDA_ProcessAddBASessionReq
6925 * Request to WDI to Update the ADDBA REQ params.
6926 */
6927VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6928 tAddBAParams *pAddBAReqParams)
6929{
6930 WDI_Status status = WDI_STATUS_SUCCESS ;
6931 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6932 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6933 sizeof(WDI_AddBASessionReqParamsType)) ;
6934 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006935 WLANTL_STAStateType tlSTAState = 0;
6936
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006938 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 if(NULL == wdiAddBASessionReqParam)
6940 {
6941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 VOS_ASSERT(0);
6944 return VOS_STATUS_E_NOMEM;
6945 }
6946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6947 if(NULL == pWdaParams)
6948 {
6949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 VOS_ASSERT(0);
6952 vos_mem_free(wdiAddBASessionReqParam);
6953 return VOS_STATUS_E_NOMEM;
6954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 /*
6956 * Populate ADD BA parameters and pass these paarmeters to WDI.
6957 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6958 * the state to track if these is BA recipient case or BA initiator
6959 * case.
6960 */
6961 do
6962 {
6963 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6964 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6965 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6966 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6967 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6968 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6969 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006970 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6972 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6973 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6974 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6975 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306976
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 }while(0) ;
6978 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 pWdaParams->pWdaContext = pWDA;
6980 /* Store ADD BA pointer, as this will be used for response */
6981 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6982 /* store Params pass it to WDI */
6983 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006984
6985 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6986 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6987 */
6988 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6989 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6990 {
6991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006992 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006993 status = WDI_STATUS_E_NOT_ALLOWED;
6994 pAddBAReqParams->status =
6995 CONVERT_WDI2SIR_STATUS(status) ;
6996 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6997 /*Reset the WDA state to READY */
6998 pWDA->wdaState = WDA_READY_STATE;
6999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7000 vos_mem_free(pWdaParams);
7001
7002 return CONVERT_WDI2VOS_STATUS(status) ;
7003 }
7004
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7006 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 if(IS_WDI_STATUS_FAILURE(status))
7008 {
7009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007010 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007012 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007013 pAddBAReqParams->status =
7014 CONVERT_WDI2SIR_STATUS(status) ;
7015 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007016 /*Reset the WDA state to READY */
7017 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 vos_mem_free(pWdaParams);
7020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022}
Jeff Johnson295189b2012-06-20 16:38:30 -07007023/*
7024 * FUNCTION: WDA_DelBANotifyTL
7025 * send DEL BA IND to TL
7026 */
7027void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7028 tDelBAParams *pDelBAReqParams)
7029{
7030 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7031 //tSirMsgQ msg;
7032 vos_msg_t vosMsg;
7033 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 if(NULL == pDelBAInd)
7035 {
7036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007037 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 VOS_ASSERT(0) ;
7039 return;
7040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7042 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7043 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7044 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007045
Jeff Johnson295189b2012-06-20 16:38:30 -07007046
7047 vosMsg.type = WDA_DELETEBA_IND;
7048 vosMsg.bodyptr = pDelBAInd;
7049 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7050 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7051 {
7052 vosStatus = VOS_STATUS_E_BADMSG;
7053 }
7054}
Jeff Johnson295189b2012-06-20 16:38:30 -07007055/*
7056 * FUNCTION: WDA_DelBAReqCallback
7057 * send DEL BA RSP back to PE
7058 */
7059void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7060{
7061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7062 tWDA_CbContext *pWDA;
7063 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 if(NULL == pWdaParams)
7067 {
7068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 VOS_ASSERT(0) ;
7071 return ;
7072 }
7073 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307074
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 /* Notify TL about DEL BA in case of recipinet */
7077 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7078 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7079 {
7080 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 /*
7083 * No respone required for WDA_DELBA_IND so just free the request
7084 * param here
7085 */
7086 vos_mem_free(pDelBAReqParams);
7087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7088 vos_mem_free(pWdaParams);
7089 return ;
7090}
7091
Jeff Johnson295189b2012-06-20 16:38:30 -07007092/*
7093 * FUNCTION: WDA_ProcessDelBAReq
7094 * Request to WDI to Update the DELBA REQ params.
7095 */
7096VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7097 tDelBAParams *pDelBAReqParams)
7098{
7099 WDI_Status status = WDI_STATUS_SUCCESS ;
7100 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7101 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7102 sizeof(WDI_DelBAReqParamsType)) ;
7103 tWDA_ReqParams *pWdaParams ;
7104 tANI_U16 staIdx = 0;
7105 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007107 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 if(NULL == wdiDelBAReqParam)
7109 {
7110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007111 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 VOS_ASSERT(0);
7113 return VOS_STATUS_E_NOMEM;
7114 }
7115 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7116 if(NULL == pWdaParams)
7117 {
7118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 VOS_ASSERT(0);
7121 vos_mem_free(wdiDelBAReqParam);
7122 return VOS_STATUS_E_NOMEM;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7125 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7126 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7127 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 pWdaParams->pWdaContext = pWDA;
7129 /* Store DEL BA pointer, as this will be used for response */
7130 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 /* store Params pass it to WDI */
7132 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7134 * maintained in WDA, so that WDA can retry for another BA session
7135 */
7136 staIdx = pDelBAReqParams->staIdx;
7137 tid = pDelBAReqParams->baTID;
7138 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 status = WDI_DelBAReq(wdiDelBAReqParam,
7140 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 if(IS_WDI_STATUS_FAILURE(status))
7142 {
7143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7144 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7146 vos_mem_free(pWdaParams->wdaMsgParam);
7147 vos_mem_free(pWdaParams);
7148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007150}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007151
7152/*
7153 * FUNCTION: WDA_UpdateChReqCallback
7154 *
7155 */
7156void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7157{
Siddharth Bhala006c122014-05-03 12:13:27 +05307158 tWDA_ReqParams *pWdaParams;
7159 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7160 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7161 WDI_UpdateChannelReqinfoType *pChanInfoType;
7162 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007163
7164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7165 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307166 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007167 {
7168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307169 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007170 VOS_ASSERT(0);
7171 return;
7172 }
7173
Siddharth Bhala006c122014-05-03 12:13:27 +05307174 pWdaParams = (tWDA_ReqParams *)pUserData;
7175 pwdiUpdateChReqParam =
7176 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7177 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7178 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7179 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007180 /*
7181 * currently there is no response message is expected between PE and
7182 * WDA, Failure return from WDI is a ASSERT condition
7183 */
7184 vos_mem_free(pChanInfoType);
7185 vos_mem_free(pChanList);
7186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7187 vos_mem_free(pWdaParams);
7188
7189 return;
7190}
7191
7192/*
7193 * FUNCTION: WDA_ProcessUpdateChannelList
7194 * Request to WDI to Update the ChannelList params.
7195 */
7196VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7197 tSirUpdateChanList *pChanList)
7198{
7199 WDI_Status status = WDI_STATUS_SUCCESS;
7200 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7201 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7202 WDI_UpdateChannelReqinfoType *pChanInfoType;
7203 tWDA_ReqParams *pWdaParams;
7204 wpt_uint8 i;
7205
7206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7207 "------> %s " ,__func__);
7208 if(NULL == pChanList)
7209 {
7210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7211 "%s: NULL pChanList", __func__);
7212 VOS_ASSERT(0);
7213 return VOS_STATUS_E_INVAL;
7214 }
7215
7216 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7217 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307218 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007219 "Update channel list capability Not Supported");
7220 vos_mem_free(pChanList);
7221 return VOS_STATUS_E_INVAL;
7222 }
7223
7224 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7225 sizeof(WDI_UpdateChReqParamsType));
7226 if(NULL == pwdiUpdateChReqParam)
7227 {
7228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7229 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7230 __func__);
7231 VOS_ASSERT(0);
7232 vos_mem_free(pChanList);
7233 return VOS_STATUS_E_NOMEM;
7234 }
7235 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7236 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7237 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7238 pChanList->numChan);
7239 if(NULL == pChanInfoType)
7240 {
7241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7242 "%s: VOS MEM Alloc Failure", __func__);
7243 VOS_ASSERT(0);
7244 vos_mem_free(pChanList);
7245 vos_mem_free(pwdiUpdateChReqParam);
7246 return VOS_STATUS_E_NOMEM;
7247 }
7248 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7249 * pChanList->numChan);
7250 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7251
7252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7253 if(NULL == pWdaParams)
7254 {
7255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7256 "%s: VOS MEM Alloc Failure", __func__);
7257 VOS_ASSERT(0);
7258 vos_mem_free(pChanList);
7259 vos_mem_free(pChanInfoType);
7260 vos_mem_free(pwdiUpdateChReqParam);
7261 return VOS_STATUS_E_NOMEM;
7262 }
7263 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7264
7265 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7266 {
7267 pChanInfoType->mhz =
7268 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7269
7270 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7271 pChanInfoType->band_center_freq2 = 0;
7272
7273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7274 "chan[%d] = %u", i, pChanInfoType->mhz);
7275 if (pChanList->chanParam[i].dfsSet)
7276 {
7277 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7279 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7280 pChanList->chanParam[i].dfsSet);
7281 }
7282
7283 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7284 {
7285 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7286 }
7287 else
7288 {
7289 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7290 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7291 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7292 }
7293
7294 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7295 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307296 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007297 pChanInfoType++;
7298 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007299 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7300 pWdaParams->pWdaContext = pWDA;
7301 pWdaParams->wdaMsgParam = (void *)pChanList;
7302 /* store Params pass it to WDI */
7303 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7304 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7305 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7306 if(IS_WDI_STATUS_FAILURE(status))
7307 {
7308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "Failure in Update Channel REQ Params WDI API, free all the memory");
7310 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7311 vos_mem_free(pwdiUpdateChReqParam);
7312 vos_mem_free(pWdaParams->wdaMsgParam);
7313 vos_mem_free(pWdaParams);
7314 }
7315 return CONVERT_WDI2VOS_STATUS(status);
7316}
7317
Jeff Johnson295189b2012-06-20 16:38:30 -07007318/*
7319 * FUNCTION: WDA_AddTSReqCallback
7320 * send ADD TS RSP back to PE
7321 */
7322void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7323{
7324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307325 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 tAddTsParams *pAddTsReqParams;
7327
7328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007329 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 if(NULL == pWdaParams)
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007333 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 VOS_ASSERT(0) ;
7335 return ;
7336 }
7337 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307338 if (NULL == pWDA)
7339 {
7340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7341 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7343 vos_mem_free(pWdaParams->wdaMsgParam);
7344 vos_mem_free(pWdaParams);
7345
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307346 VOS_ASSERT(0);
7347 return ;
7348 }
7349
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7352 vos_mem_free(pWdaParams);
7353
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007354 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007356 return ;
7357}
7358
Jeff Johnson295189b2012-06-20 16:38:30 -07007359/*
7360 * FUNCTION: WDA_ProcessAddTSReq
7361 * Request to WDI to Update the ADD TS REQ params.
7362 */
7363VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7364 tAddTsParams *pAddTsReqParams)
7365{
7366 WDI_Status status = WDI_STATUS_SUCCESS ;
7367 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7368 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7369 sizeof(WDI_AddTSReqParamsType)) ;
7370 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007372 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 if(NULL == wdiAddTSReqParam)
7374 {
7375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 VOS_ASSERT(0);
7378 return VOS_STATUS_E_NOMEM;
7379 }
7380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7381 if(NULL == pWdaParams)
7382 {
7383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 VOS_ASSERT(0);
7386 vos_mem_free(wdiAddTSReqParam);
7387 return VOS_STATUS_E_NOMEM;
7388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7390 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 //TS IE
7392 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7393 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7394 pAddTsReqParams->tspec.length;
7395
7396 //TS IE : TS INFO : TRAFFIC
7397 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7398 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7399 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7400 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7401 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7402 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7403 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7404 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7405 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7406 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7407 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7408 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7409 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7410 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7411 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7412 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7413
7414 //TS IE : TS INFO : SCHEDULE
7415 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7416 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7417 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7418 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 //TS IE
7420 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7421 pAddTsReqParams->tspec.nomMsduSz;
7422 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7423 pAddTsReqParams->tspec.maxMsduSz;
7424 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7425 pAddTsReqParams->tspec.minSvcInterval;
7426 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7427 pAddTsReqParams->tspec.maxSvcInterval;
7428 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7429 pAddTsReqParams->tspec.inactInterval;
7430 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7431 pAddTsReqParams->tspec.suspendInterval;
7432 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7433 pAddTsReqParams->tspec.svcStartTime;
7434 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7435 pAddTsReqParams->tspec.minDataRate;
7436 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7437 pAddTsReqParams->tspec.meanDataRate;
7438 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7439 pAddTsReqParams->tspec.peakDataRate;
7440 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7441 pAddTsReqParams->tspec.maxBurstSz;
7442 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7443 pAddTsReqParams->tspec.delayBound;
7444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7445 pAddTsReqParams->tspec.minPhyRate;
7446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7447 pAddTsReqParams->tspec.surplusBw;
7448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7449 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 /* TODO: tAddTsParams doesn't have the following fields */
7451#if 0
7452 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7453 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7454 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7455 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7456#endif
7457 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7458
7459 pWdaParams->pWdaContext = pWDA;
7460 /* Store ADD TS pointer, as this will be used for response */
7461 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 /* store Params pass it to WDI */
7463 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 status = WDI_AddTSReq(wdiAddTSReqParam,
7465 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 if(IS_WDI_STATUS_FAILURE(status))
7467 {
7468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7469 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7471 vos_mem_free(pWdaParams);
7472 pAddTsReqParams->status = eSIR_FAILURE ;
7473 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476}
7477
Jeff Johnson295189b2012-06-20 16:38:30 -07007478/*
7479 * FUNCTION: WDA_DelTSReqCallback
7480 * send DEL TS RSP back to PE
7481 */
7482void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7483{
7484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007486 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7488 vos_mem_free(pWdaParams->wdaMsgParam) ;
7489 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 /*
7491 * No respone required for WDA_DEL_TS_REQ so just free the request
7492 * param here
7493 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 return ;
7495}
7496
Jeff Johnson295189b2012-06-20 16:38:30 -07007497/*
7498 * FUNCTION: WDA_ProcessDelTSReq
7499 * Request to WDI to Update the DELTS REQ params.
7500 */
7501VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7502 tDelTsParams *pDelTSReqParams)
7503{
7504 WDI_Status status = WDI_STATUS_SUCCESS ;
7505 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7506 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7507 sizeof(WDI_DelTSReqParamsType)) ;
7508 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 if(NULL == wdiDelTSReqParam)
7512 {
7513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 VOS_ASSERT(0);
7516 return VOS_STATUS_E_NOMEM;
7517 }
7518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7519 if(NULL == pWdaParams)
7520 {
7521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 VOS_ASSERT(0);
7524 vos_mem_free(wdiDelTSReqParam);
7525 return VOS_STATUS_E_NOMEM;
7526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7528 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7529 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7530 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7531 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 pWdaParams->pWdaContext = pWDA;
7533 /* Store DEL TS pointer, as this will be used for response */
7534 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 /* store Params pass it to WDI */
7536 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007537 status = WDI_DelTSReq(wdiDelTSReqParam,
7538 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 if(IS_WDI_STATUS_FAILURE(status))
7540 {
7541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7542 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7544 vos_mem_free(pWdaParams->wdaMsgParam);
7545 vos_mem_free(pWdaParams);
7546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007548}
Jeff Johnson295189b2012-06-20 16:38:30 -07007549/*
7550 * FUNCTION: WDA_UpdateBeaconParamsCallback
7551 * Free the memory. No need to send any response to PE in this case
7552 */
7553void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7554{
7555 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007557 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 if(NULL == pWdaParams)
7559 {
7560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007561 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 VOS_ASSERT(0) ;
7563 return ;
7564 }
7565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7566 vos_mem_free(pWdaParams->wdaMsgParam) ;
7567 vos_mem_free(pWdaParams);
7568 /*
7569 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7570 * param here
7571 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 return ;
7573}
Jeff Johnson295189b2012-06-20 16:38:30 -07007574/*
7575 * FUNCTION: WDA_ProcessUpdateBeaconParams
7576 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7577 */
7578VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7579 tUpdateBeaconParams *pUpdateBeaconParams)
7580{
7581 WDI_Status status = WDI_STATUS_SUCCESS ;
7582 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7583 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7584 sizeof(WDI_UpdateBeaconParamsType)) ;
7585 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 if(NULL == wdiUpdateBeaconParams)
7589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_ASSERT(0);
7593 return VOS_STATUS_E_NOMEM;
7594 }
7595 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7596 if(NULL == pWdaParams)
7597 {
7598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 VOS_ASSERT(0);
7601 vos_mem_free(wdiUpdateBeaconParams);
7602 return VOS_STATUS_E_NOMEM;
7603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007604 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7605 pUpdateBeaconParams->bssIdx;
7606 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7607 pUpdateBeaconParams->fShortPreamble;
7608 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7609 pUpdateBeaconParams->fShortSlotTime;
7610 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7611 pUpdateBeaconParams->beaconInterval;
7612 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7613 pUpdateBeaconParams->llaCoexist;
7614 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7615 pUpdateBeaconParams->llbCoexist;
7616 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7617 pUpdateBeaconParams->llgCoexist;
7618 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7619 pUpdateBeaconParams->ht20MhzCoexist;
7620 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7621 pUpdateBeaconParams->llnNonGFCoexist;
7622 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7623 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7624 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7625 pUpdateBeaconParams->fRIFSMode;
7626 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7627 pUpdateBeaconParams->paramChangeBitmap;
7628 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7629
7630 pWdaParams->pWdaContext = pWDA;
7631 /* Store UpdateBeacon Req pointer, as this will be used for response */
7632 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 /* store Params pass it to WDI */
7634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7636 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7637 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007638 if(IS_WDI_STATUS_FAILURE(status))
7639 {
7640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7641 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7643 vos_mem_free(pWdaParams->wdaMsgParam);
7644 vos_mem_free(pWdaParams);
7645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007647}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007648#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007649/*
7650 * FUNCTION: WDA_TSMStatsReqCallback
7651 * send TSM Stats RSP back to PE
7652 */
7653void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7654{
7655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7656 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007657 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7658 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007659
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007661 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 if(NULL == pWdaParams)
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 VOS_ASSERT(0) ;
7667 return ;
7668 }
7669 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307670 if (NULL == pWDA)
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7673 "%s:pWDA is NULL", __func__);
7674 VOS_ASSERT(0);
7675 return ;
7676 }
7677
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007678 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7679
7680 if(NULL == pGetTsmStatsReqParams)
7681 {
7682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7683 "%s: pGetTsmStatsReqParams received NULL", __func__);
7684 VOS_ASSERT(0);
7685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7686 vos_mem_free(pWdaParams);
7687 return;
7688 }
7689
7690 pTsmRspParams =
7691 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 if( NULL == pTsmRspParams )
7693 {
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007695 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 VOS_ASSERT( 0 );
7697 return ;
7698 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007699 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7700 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7701 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7702
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7704 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7705 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7706 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7707 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7708 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7709 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7710 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7711 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7712 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007713
7714 /* Assign get tsm stats req req (backup) in to the response */
7715 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7716
7717 /* free WDI command buffer */
7718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7719 vos_mem_free(pWdaParams);
7720
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 return ;
7723}
7724
7725
Jeff Johnson295189b2012-06-20 16:38:30 -07007726/*
7727 * FUNCTION: WDA_ProcessTsmStatsReq
7728 * Request to WDI to get the TSM Stats params.
7729 */
7730VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007731 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007732{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007733 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007735 tWDA_ReqParams *pWdaParams = NULL;
7736 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7737
Jeff Johnson295189b2012-06-20 16:38:30 -07007738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7741 sizeof(WDI_TSMStatsReqParamsType));
7742 if(NULL == wdiTSMReqParam)
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 VOS_ASSERT(0);
7747 return VOS_STATUS_E_NOMEM;
7748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7750 if(NULL == pWdaParams)
7751 {
7752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 VOS_ASSERT(0);
7755 vos_mem_free(wdiTSMReqParam);
7756 return VOS_STATUS_E_NOMEM;
7757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7759 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7760 pTsmStats->bssId,
7761 sizeof(wpt_macAddr));
7762 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7763
7764 pWdaParams->pWdaContext = pWDA;
7765 /* Store TSM Stats pointer, as this will be used for response */
7766 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007767 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 status = WDI_TSMStatsReq(wdiTSMReqParam,
7769 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 if(IS_WDI_STATUS_FAILURE(status))
7771 {
7772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7773 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007774 vos_mem_free(pWdaParams);
7775
7776 pGetTsmStatsRspParams =
7777 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7778 if(NULL == pGetTsmStatsRspParams)
7779 {
7780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7781 "%s: VOS MEM Alloc Failure", __func__);
7782 VOS_ASSERT(0);
7783 vos_mem_free(pTsmStats);
7784 return VOS_STATUS_E_NOMEM;
7785 }
7786 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7787 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7788 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7789
7790 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 return CONVERT_WDI2VOS_STATUS(status) ;
7793}
7794#endif
7795/*
7796 * FUNCTION: WDA_SendBeaconParamsCallback
7797 * No need to send any response to PE in this case
7798 */
7799void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7800{
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007803 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 return ;
7805}
Jeff Johnson295189b2012-06-20 16:38:30 -07007806/*
7807 * FUNCTION: WDA_ProcessSendBeacon
7808 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7809 * start beacon trasmission
7810 */
7811VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7812 tSendbeaconParams *pSendbeaconParams)
7813{
7814 WDI_Status status = WDI_STATUS_SUCCESS ;
7815 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7819 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7820 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7821 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7823 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307824 /* p2pIeOffset should be atleast greater than timIeOffset */
7825 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7826 (pSendbeaconParams->p2pIeOffset <
7827 pSendbeaconParams->timIeOffset))
7828 {
7829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7830 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307831 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307832 VOS_ASSERT( 0 );
7833 return WDI_STATUS_E_FAILURE;
7834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7836 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 /* Copy the beacon template to local buffer */
7838 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7839 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7840 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7841
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7843 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 if(IS_WDI_STATUS_FAILURE(status))
7845 {
7846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7847 "Failure in SEND BEACON REQ Params WDI API" );
7848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 vos_mem_free(pSendbeaconParams);
7850 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007851}
Jeff Johnson295189b2012-06-20 16:38:30 -07007852/*
7853 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7854 * No need to send any response to PE in this case
7855 */
7856void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7857{
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 return ;
7861}
7862
Jeff Johnson295189b2012-06-20 16:38:30 -07007863/*
7864 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7865 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7866 * send probe response
7867 */
7868VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7869 tSendProbeRespParams *pSendProbeRspParams)
7870{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007871 WDI_Status status = WDI_STATUS_SUCCESS;
7872 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7873 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007875 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007876
7877 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307878 {
7879 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007880 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307881 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007882
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007884 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007886 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 /* Copy the Probe Response template to local buffer */
7889 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007890 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 pSendProbeRspParams->pProbeRespTemplate,
7892 pSendProbeRspParams->probeRespTemplateLen);
7893 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007894 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7896 WDI_PROBE_REQ_BITMAP_IE_LEN);
7897
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007898 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007900 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 if(IS_WDI_STATUS_FAILURE(status))
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7905 "Failure in SEND Probe RSP Params WDI API" );
7906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007908 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007910}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007911#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007912/*
7913 * FUNCTION: WDA_SetMaxTxPowerCallBack
7914 * send the response to PE with power value received from WDI
7915 */
7916void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7917 void* pUserData)
7918{
7919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7920 tWDA_CbContext *pWDA = NULL;
7921 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7922
7923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 if(NULL == pWdaParams)
7926 {
7927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 VOS_ASSERT(0) ;
7930 return ;
7931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307933 if (NULL == pWDA)
7934 {
7935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7936 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7938 vos_mem_free(pWdaParams->wdaMsgParam);
7939 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307940 VOS_ASSERT(0);
7941 return ;
7942 }
7943
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 if( NULL == pMaxTxPowerParams )
7946 {
7947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007948 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007949 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7951 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 return ;
7953 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007954
Jeff Johnson295189b2012-06-20 16:38:30 -07007955
7956 /*need to free memory for the pointers used in the
7957 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7959 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007961
Jeff Johnson295189b2012-06-20 16:38:30 -07007962
7963 /* send response to UMAC*/
7964 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7965
7966 return;
7967}
Jeff Johnson295189b2012-06-20 16:38:30 -07007968/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007969 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 * Request to WDI to send set Max Tx Power Request
7971 */
7972 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7973 tMaxTxPowerParams *MaxTxPowerParams)
7974{
7975 WDI_Status status = WDI_STATUS_SUCCESS;
7976 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7977 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007978
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007980 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007981
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7983 sizeof(WDI_SetMaxTxPowerParamsType));
7984 if(NULL == wdiSetMaxTxPowerParams)
7985 {
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 VOS_ASSERT(0);
7989 return VOS_STATUS_E_NOMEM;
7990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7992 if(NULL == pWdaParams)
7993 {
7994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 vos_mem_free(wdiSetMaxTxPowerParams);
7997 VOS_ASSERT(0);
7998 return VOS_STATUS_E_NOMEM;
7999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 /* Copy.Max.Tx.Power Params to WDI structure */
8001 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8002 MaxTxPowerParams->bssId,
8003 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8005 MaxTxPowerParams->selfStaMacAddr,
8006 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8008 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 pWdaParams->pWdaContext = pWDA;
8011 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 /* store Params pass it to WDI */
8013 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8015 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 if(IS_WDI_STATUS_FAILURE(status))
8017 {
8018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8019 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8021 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008022 /* send response to UMAC*/
8023 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 }
8025 return CONVERT_WDI2VOS_STATUS(status);
8026
8027}
Jeff Johnson295189b2012-06-20 16:38:30 -07008028#endif
schang86c22c42013-03-13 18:41:24 -07008029
8030/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008031 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8032 * send the response to PE with power value received from WDI
8033 */
8034void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8035 *pwdiSetMaxTxPowerPerBandRsp,
8036 void* pUserData)
8037{
8038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8039 tWDA_CbContext *pWDA = NULL;
8040 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8041
8042 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8043 "<------ %s ", __func__);
8044 if (NULL == pWdaParams)
8045 {
8046 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8047 "%s: pWdaParams received NULL", __func__);
8048 VOS_ASSERT(0);
8049 return ;
8050 }
8051 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308052 if (NULL == pWDA)
8053 {
8054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8055 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8057 vos_mem_free(pWdaParams->wdaMsgParam);
8058 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308059 VOS_ASSERT(0);
8060 return ;
8061 }
8062
Arif Hussaina5ebce02013-08-09 15:09:58 -07008063 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8064 if ( NULL == pMxTxPwrPerBandParams )
8065 {
8066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8067 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8068 VOS_ASSERT(0);
8069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8070 vos_mem_free(pWdaParams);
8071 return;
8072 }
8073
8074 /*need to free memory for the pointers used in the
8075 WDA Process.Set Max Tx Power Req function*/
8076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8077 vos_mem_free(pWdaParams);
8078 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8079
8080 /* send response to UMAC*/
8081 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8082 pMxTxPwrPerBandParams, 0);
8083
8084 return;
8085}
8086
8087/*
8088 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8089 * Request to WDI to send set Max Tx Power Per band Request
8090 */
8091 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8092 tMaxTxPowerPerBandParams
8093 *MaxTxPowerPerBandParams)
8094{
8095 WDI_Status status = WDI_STATUS_SUCCESS;
8096 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8097 tWDA_ReqParams *pWdaParams = NULL;
8098
8099 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8100 "------> %s ", __func__);
8101
8102 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8103 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8104
8105 if (NULL == wdiSetMxTxPwrPerBandParams)
8106 {
8107 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8108 "%s: VOS MEM Alloc Failure", __func__);
8109 VOS_ASSERT(0);
8110 return VOS_STATUS_E_NOMEM;
8111 }
8112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8113 if (NULL == pWdaParams)
8114 {
8115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8116 "%s: VOS MEM Alloc Failure", __func__);
8117 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8118 VOS_ASSERT(0);
8119 return VOS_STATUS_E_NOMEM;
8120 }
8121 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8122 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8123 MaxTxPowerPerBandParams->bandInfo;
8124 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8125 MaxTxPowerPerBandParams->power;
8126 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8127 pWdaParams->pWdaContext = pWDA;
8128 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8129 /* store Params pass it to WDI */
8130 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8131 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8132 WDA_SetMaxTxPowerPerBandCallBack,
8133 pWdaParams);
8134 if (IS_WDI_STATUS_FAILURE(status))
8135 {
8136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8137 "Failure in SET MAX TX Power REQ Params WDI API,"
8138 " free all the memory");
8139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8140 vos_mem_free(pWdaParams);
8141 /* send response to UMAC*/
8142 WDA_SendMsg(pWDA,
8143 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8144 MaxTxPowerPerBandParams, 0);
8145 }
8146 return CONVERT_WDI2VOS_STATUS(status);
8147}
8148
8149/*
schang86c22c42013-03-13 18:41:24 -07008150 * FUNCTION: WDA_SetTxPowerCallBack
8151 * send the response to PE with power value received from WDI
8152 */
8153void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8154 void* pUserData)
8155{
8156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8157 tWDA_CbContext *pWDA = NULL;
8158 tSirSetTxPowerReq *pTxPowerParams = NULL;
8159
8160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8161 "<------ %s ", __func__);
8162 if(NULL == pWdaParams)
8163 {
8164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8165 "%s: pWdaParams received NULL", __func__);
8166 VOS_ASSERT(0) ;
8167 return ;
8168 }
8169 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308170 if (NULL == pWDA)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8173 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8175 vos_mem_free(pWdaParams->wdaMsgParam);
8176 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308177 VOS_ASSERT(0);
8178 return ;
8179 }
8180
schang86c22c42013-03-13 18:41:24 -07008181 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8182 if(NULL == pTxPowerParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8185 "%s: pTxPowerParams received NULL " ,__func__);
8186 VOS_ASSERT(0);
8187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8188 vos_mem_free(pWdaParams);
8189 return ;
8190 }
8191
8192 /*need to free memory for the pointers used in the
8193 WDA Process.Set Max Tx Power Req function*/
8194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8195 vos_mem_free(pWdaParams);
8196
8197 /* send response to UMAC*/
8198 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8199 return;
8200}
8201
8202/*
8203 * FUNCTION: WDA_ProcessSetTxPowerReq
8204 * Request to WDI to send set Tx Power Request
8205 */
8206 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8207 tSirSetTxPowerReq *txPowerParams)
8208{
8209 WDI_Status status = WDI_STATUS_SUCCESS;
8210 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8211 tWDA_ReqParams *pWdaParams = NULL;
8212
8213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8214 "------> %s ", __func__);
8215
8216 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8217 sizeof(WDI_SetTxPowerParamsType));
8218 if(NULL == wdiSetTxPowerParams)
8219 {
8220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8221 "%s: VOS MEM Alloc Failure", __func__);
8222 VOS_ASSERT(0);
8223 return VOS_STATUS_E_NOMEM;
8224 }
8225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8226 if(NULL == pWdaParams)
8227 {
8228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8229 "%s: VOS MEM Alloc Failure", __func__);
8230 vos_mem_free(wdiSetTxPowerParams);
8231 VOS_ASSERT(0);
8232 return VOS_STATUS_E_NOMEM;
8233 }
8234 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8235 txPowerParams->bssIdx;
8236 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8237 txPowerParams->mwPower;
8238 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8239 pWdaParams->pWdaContext = pWDA;
8240 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8241 /* store Params pass it to WDI */
8242 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8243 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8244 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8245 if(IS_WDI_STATUS_FAILURE(status))
8246 {
8247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8248 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8250 vos_mem_free(pWdaParams);
8251 /* send response to UMAC*/
8252 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8253 }
8254 return CONVERT_WDI2VOS_STATUS(status);
8255}
8256
Jeff Johnson295189b2012-06-20 16:38:30 -07008257/*
8258 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8259 * Free the memory. No need to send any response to PE in this case
8260 */
8261void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8262{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008263 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8264
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008267
8268 if(NULL == pWdaParams)
8269 {
8270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008271 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008272 VOS_ASSERT(0) ;
8273 return ;
8274 }
8275
8276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8277 vos_mem_free(pWdaParams->wdaMsgParam) ;
8278 vos_mem_free(pWdaParams);
8279
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 /*
8281 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8282 * so just free the request param here
8283 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 return ;
8285}
8286
Jeff Johnson295189b2012-06-20 16:38:30 -07008287/*
8288 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8289 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8290 */
8291VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8292 tP2pPsParams *pP2pPsConfigParams)
8293{
8294 WDI_Status status = WDI_STATUS_SUCCESS ;
8295 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8296 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8297 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008298 tWDA_ReqParams *pWdaParams = NULL;
8299
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 if(NULL == wdiSetP2PGONOAReqParam)
8303 {
8304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008305 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308306 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 VOS_ASSERT(0);
8308 return VOS_STATUS_E_NOMEM;
8309 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008310
8311 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8312 if(NULL == pWdaParams)
8313 {
8314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008315 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008316 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008317 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008318 VOS_ASSERT(0);
8319 return VOS_STATUS_E_NOMEM;
8320 }
8321
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8323 pP2pPsConfigParams->opp_ps;
8324 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8325 pP2pPsConfigParams->ctWindow;
8326 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8327 pP2pPsConfigParams->count;
8328 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8329 pP2pPsConfigParams->duration;
8330 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8331 pP2pPsConfigParams->interval;
8332 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8333 pP2pPsConfigParams->single_noa_duration;
8334 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8335 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008336
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8338 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008339 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8340
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008342 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8343 pWdaParams->pWdaContext = pWDA;
8344
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008346 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 if(IS_WDI_STATUS_FAILURE(status))
8349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8351 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8353 vos_mem_free(pWdaParams->wdaMsgParam);
8354 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 return CONVERT_WDI2VOS_STATUS(status);
8357
Jeff Johnson295189b2012-06-20 16:38:30 -07008358}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308359
8360#ifdef FEATURE_WLAN_TDLS
8361/*
8362 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8363 * Free the memory. No need to send any response to PE in this case
8364 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308365void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8366 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308367{
8368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8369 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308370 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308371
8372
8373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8374 "<------ %s " ,__func__);
8375 if(NULL == pWdaParams)
8376 {
8377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8378 "%s: pWdaParams received NULL", __func__);
8379 VOS_ASSERT(0) ;
8380 return ;
8381 }
8382 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8383
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308384 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308385 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8387 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8389 vos_mem_free(pWdaParams->wdaMsgParam);
8390 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308391 VOS_ASSERT(0);
8392 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308393 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308394
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308395 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8396 if( NULL == pTdlsLinkEstablishParams )
8397 {
8398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8399 "%s: pTdlsLinkEstablishParams "
8400 "received NULL " ,__func__);
8401 VOS_ASSERT(0);
8402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8403 vos_mem_free(pWdaParams);
8404 return ;
8405 }
8406 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8407 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308409 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308410 /* send response to UMAC*/
8411 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8412
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308413 return ;
8414}
8415
8416VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8417 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8418{
8419 WDI_Status status = WDI_STATUS_SUCCESS ;
8420 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8421 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8422 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8423 tWDA_ReqParams *pWdaParams = NULL;
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8425 "------> %s " ,__func__);
8426 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8429 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308430 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308431 VOS_ASSERT(0);
8432 return VOS_STATUS_E_NOMEM;
8433 }
8434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8438 "%s: VOS MEM Alloc Failure", __func__);
8439 vos_mem_free(pTdlsLinkEstablishParams);
8440 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8441 VOS_ASSERT(0);
8442 return VOS_STATUS_E_NOMEM;
8443 }
8444 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308445 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308446 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308447 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308448 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308449 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308450 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308451 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308452 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308453 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308454 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8455 pTdlsLinkEstablishParams->isOffChannelSupported;
8456
8457 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8458 pTdlsLinkEstablishParams->validChannels,
8459 pTdlsLinkEstablishParams->validChannelsLen);
8460
8461 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8462 pTdlsLinkEstablishParams->validChannelsLen;
8463
8464 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8465 pTdlsLinkEstablishParams->validOperClasses,
8466 pTdlsLinkEstablishParams->validOperClassesLen);
8467 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8468 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308469
8470 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8471 /* Store msg pointer from PE, as this will be used for response */
8472 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8473 /* store Params pass it to WDI */
8474 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8475 pWdaParams->pWdaContext = pWDA;
8476
8477 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8478 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8479 WDA_SetTDLSLinkEstablishReqParamsCallback,
8480 pWdaParams);
8481 if(IS_WDI_STATUS_FAILURE(status))
8482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8484 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8486 vos_mem_free(pWdaParams->wdaMsgParam);
8487 vos_mem_free(pWdaParams);
8488 }
8489 return CONVERT_WDI2VOS_STATUS(status);
8490}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308491
8492// tdlsoffchan
8493void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8494 void* pUserData)
8495{
8496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8497 tWDA_CbContext *pWDA = NULL;
8498 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8499
8500
8501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8502 "<------ %s " ,__func__);
8503 if(NULL == pWdaParams)
8504 {
8505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8506 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308507 VOS_ASSERT(0) ;
8508 return ;
8509 }
8510 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8511
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308512 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308513 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8515 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8517 vos_mem_free(pWdaParams->wdaMsgParam);
8518 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308519 VOS_ASSERT(0);
8520 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308521 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308522
Atul Mittalc0f739f2014-07-31 13:47:47 +05308523 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308524 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308525 {
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8527 "%s: pTdlsChanSwitchParams "
8528 "received NULL " ,__func__);
8529 VOS_ASSERT(0);
8530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8531 vos_mem_free(pWdaParams);
8532 return ;
8533 }
8534 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8535 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8537 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308538 /* send response to UMAC*/
8539 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308540
8541 return ;
8542}
8543VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8544 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8545{
8546 WDI_Status status = WDI_STATUS_SUCCESS ;
8547 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8548 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8549 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8550 tWDA_ReqParams *pWdaParams = NULL;
8551
8552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8553 "Enter: %s ",__func__);
8554 if(NULL == wdiSetTDLSChanSwitchReqParam)
8555 {
8556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8557 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308558 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308559 VOS_ASSERT(0);
8560 return VOS_STATUS_E_NOMEM;
8561 }
8562
8563 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8564 if(NULL == pWdaParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "%s: VOS MEM Alloc Failure", __func__);
8568 vos_mem_free(pTdlsChanSwitchParams);
8569 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8570 VOS_ASSERT(0);
8571 return VOS_STATUS_E_NOMEM;
8572 }
8573 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8574 pTdlsChanSwitchParams->staIdx;
8575 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8576 pTdlsChanSwitchParams->tdlsSwMode;
8577 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8578 pTdlsChanSwitchParams->operClass;
8579 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8580 pTdlsChanSwitchParams->tdlsOffCh;
8581 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8582 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8583
8584
8585 /* Store msg pointer from PE, as this will be used for response */
8586 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8587 /* store Params pass it to WDI */
8588 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8589 pWdaParams->pWdaContext = pWDA;
8590 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8591 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8592 WDA_SetTDLSChanSwitchReqParamsCallback,
8593 pWdaParams);
8594 if(IS_WDI_STATUS_FAILURE(status))
8595 {
8596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8597 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8599 vos_mem_free(pWdaParams->wdaMsgParam);
8600 vos_mem_free(pWdaParams);
8601 }
8602 return CONVERT_WDI2VOS_STATUS(status);
8603}
8604#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308605
8606
Jeff Johnson295189b2012-06-20 16:38:30 -07008607#ifdef WLAN_FEATURE_VOWIFI_11R
8608/*
8609 * FUNCTION: WDA_AggrAddTSReqCallback
8610 * send ADD AGGREGATED TS RSP back to PE
8611 */
8612void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8613{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308615 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008616 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008619 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008620 if(NULL == pWdaParams)
8621 {
8622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008623 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008624 VOS_ASSERT(0) ;
8625 return ;
8626 }
8627
8628 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308629 if (NULL == pWDA)
8630 {
8631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8632 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8634 vos_mem_free(pWdaParams->wdaMsgParam);
8635 vos_mem_free(pWdaParams);
8636
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308637 VOS_ASSERT(0);
8638 return ;
8639 }
8640
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008641 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642
8643 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8644 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008645 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008648
8649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8650 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 return ;
8652}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008653/*
8654 * FUNCTION: WDA_ProcessAddTSReq
8655 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8656 */
8657VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8658 tAggrAddTsParams *pAggrAddTsReqParams)
8659{
8660 WDI_Status status = WDI_STATUS_SUCCESS ;
8661 int i;
8662 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008663 tWDA_ReqParams *pWdaParams = NULL;
8664
8665
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008667 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8669 sizeof(WDI_AggrAddTSReqParamsType)) ;
8670 if(NULL == wdiAggrAddTSReqParam)
8671 {
8672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008673 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308674 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 VOS_ASSERT(0);
8676 return VOS_STATUS_E_NOMEM;
8677 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008678
8679
8680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8681 if(NULL == pWdaParams)
8682 {
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008684 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008686 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008687 VOS_ASSERT(0);
8688 return VOS_STATUS_E_NOMEM;
8689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8691 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8692 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8694 {
8695 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8696 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8697 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8699 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8700 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8701 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8702 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8703 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8704 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8705 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8706 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8707 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8708 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8709 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8710 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8711 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8712 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8713 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8715 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8717 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8718 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8719 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8720 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8721 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8722 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8723 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8724 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8725 pAggrAddTsReqParams->tspec[i].inactInterval;
8726 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8727 pAggrAddTsReqParams->tspec[i].suspendInterval;
8728 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8729 pAggrAddTsReqParams->tspec[i].svcStartTime;
8730 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8731 pAggrAddTsReqParams->tspec[i].minDataRate;
8732 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8733 pAggrAddTsReqParams->tspec[i].meanDataRate;
8734 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8735 pAggrAddTsReqParams->tspec[i].peakDataRate;
8736 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8737 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8738 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8739 pAggrAddTsReqParams->tspec[i].delayBound;
8740 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8741 pAggrAddTsReqParams->tspec[i].minPhyRate;
8742 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8743 pAggrAddTsReqParams->tspec[i].surplusBw;
8744 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8745 pAggrAddTsReqParams->tspec[i].mediumTime;
8746 }
8747
8748 /* TODO: tAggrAddTsParams doesn't have the following fields */
8749#if 0
8750 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8751 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8752 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8753 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8754#endif
8755 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8756
8757 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008758 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008760 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8761
8762 pWdaParams->pWdaContext = pWDA;
8763
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008765 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8766
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 if(IS_WDI_STATUS_FAILURE(status))
8768 {
8769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8770 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8772 vos_mem_free(pWdaParams);
8773
8774 /* send the failure response back to PE*/
8775 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8776 {
8777 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8778 }
8779
8780 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8781 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 return CONVERT_WDI2VOS_STATUS(status) ;
8784}
8785#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008786/*
Mihir Shetea4306052014-03-25 00:02:54 +05308787 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 * send Enter IMPS RSP back to PE
8789 */
Mihir Shetea4306052014-03-25 00:02:54 +05308790void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008791{
Mihir Shetea4306052014-03-25 00:02:54 +05308792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308793 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308794
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308796 "<------ %s status=%d" ,__func__,status);
8797 if(NULL == pWdaParams)
8798 {
8799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8800 "%s: pWdaParams received NULL", __func__);
8801 VOS_ASSERT(0);
8802 return;
8803 }
8804
8805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308806 if (NULL == pWDA)
8807 {
8808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8809 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8811 vos_mem_free(pWdaParams->wdaMsgParam);
8812 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308813 VOS_ASSERT(0);
8814 return ;
8815 }
Mihir Shetea4306052014-03-25 00:02:54 +05308816
8817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8818 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308819 if (WDI_STATUS_SUCCESS != status)
8820 {
8821 pWDA->failureCounts.enterImpsFailureCount++;
8822 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8823 pWDA->failureCounts.enterImpsFailureCount)
8824 {
8825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8826 "%s: Status %d fail count %d", __func__, status,
8827 pWDA->failureCounts.enterImpsFailureCount);
8828 pWDA->failureCounts.enterImpsFailureCount = 0;
8829 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8830 WLAN_LOG_INDICATOR_HOST_DRIVER,
8831 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8832 FALSE, TRUE);
8833 }
8834 }
8835 else
8836 {
8837 pWDA->failureCounts.enterImpsFailureCount = 0;
8838 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008839 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 return ;
8841}
Mihir Shetea4306052014-03-25 00:02:54 +05308842
8843
8844/*
8845 * FUNCTION: WDA_EnterImpsReqCallback
8846 * Free memory and send Enter IMPS RSP back to PE.
8847 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8848 */
8849void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8850{
8851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308852 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308853
8854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8855 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8856
8857 if(NULL == pWdaParams)
8858 {
8859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8860 "%s: pWdaParams received NULL", __func__);
8861 VOS_ASSERT(0);
8862 return;
8863 }
8864
8865 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308866 if (NULL == pWDA)
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8871 vos_mem_free(pWdaParams->wdaMsgParam);
8872 vos_mem_free(pWdaParams);
8873
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308874 VOS_ASSERT(0);
8875 return ;
8876 }
8877
Mihir Shetea4306052014-03-25 00:02:54 +05308878
8879 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8880 {
8881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8882 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308883 pWDA->failureCounts.enterImpsFailureCount++;
8884 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8885 pWDA->failureCounts.enterImpsFailureCount)
8886 {
8887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8888 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8889 pWDA->failureCounts.enterImpsFailureCount);
8890 pWDA->failureCounts.enterImpsFailureCount = 0;
8891 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8892 WLAN_LOG_INDICATOR_HOST_DRIVER,
8893 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8894 FALSE, TRUE);
8895 }
Mihir Shetea4306052014-03-25 00:02:54 +05308896 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8897 CONVERT_WDI2SIR_STATUS(wdiStatus));
8898 }
8899
8900 return;
8901}
Jeff Johnson295189b2012-06-20 16:38:30 -07008902/*
8903 * FUNCTION: WDA_ProcessEnterImpsReq
8904 * Request to WDI to Enter IMPS power state.
8905 */
8906VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8907{
8908 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308909 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8910 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308911 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008913 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308914
8915
8916 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8917 if (NULL == wdiEnterImpsReqParams)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8920 "%s: VOS MEM Alloc Failure", __func__);
8921 VOS_ASSERT(0);
8922 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8923 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8924 return VOS_STATUS_E_NOMEM;
8925 }
8926
8927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8928 if (NULL == pWdaParams)
8929 {
8930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8931 "%s: VOS MEM Alloc Failure", __func__);
8932 VOS_ASSERT(0);
8933 vos_mem_free(wdiEnterImpsReqParams);
8934 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8935 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8936 return VOS_STATUS_E_NOMEM;
8937 }
8938
8939 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8940 wdiEnterImpsReqParams->pUserData = pWdaParams;
8941
8942 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8943 pWdaParams->wdaMsgParam = NULL;
8944 pWdaParams->pWdaContext = pWDA;
8945
8946 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8947 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8948 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 if(IS_WDI_STATUS_FAILURE(status))
8950 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308951 if (! (failcnt & 0xF))
8952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8953 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8954 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308955 vos_mem_free(wdiEnterImpsReqParams);
8956 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008957 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 return CONVERT_WDI2VOS_STATUS(status) ;
8960}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308961
8962/*
8963 * FUNCTION: WDA_ExitImpsRespCallback
8964 * send Exit IMPS RSP back to PE
8965 */
8966void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8967{
8968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8969 tWDA_CbContext *pWDA;
8970
8971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8972 "<------ %s " ,__func__);
8973
8974 if (NULL == pWdaParams)
8975 {
8976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8977 "%s: pWdaParams received NULL", __func__);
8978 VOS_ASSERT(0);
8979 return;
8980 }
8981 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8982
8983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308985 if (WDI_STATUS_SUCCESS != status)
8986 {
8987 pWDA->failureCounts.exitImpsFailureCount++;
8988 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8989 pWDA->failureCounts.exitImpsFailureCount)
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8992 "%s: Status %d fail count %d", __func__,
8993 status,
8994 pWDA->failureCounts.exitImpsFailureCount);
8995 pWDA->failureCounts.exitImpsFailureCount = 0;
8996 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8997 WLAN_LOG_INDICATOR_HOST_DRIVER,
8998 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
8999 FALSE, TRUE);
9000 }
9001 }
9002 else
9003 {
9004 pWDA->failureCounts.exitImpsFailureCount = 0;
9005 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309006
9007 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9008 return;
9009}
9010
Jeff Johnson295189b2012-06-20 16:38:30 -07009011/*
9012 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 */
9014void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9015{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309017 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009019 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309020 if(NULL == pWdaParams)
9021 {
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9023 "%s: pWdaParams received NULL", __func__);
9024 VOS_ASSERT(0);
9025 return;
9026 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309027 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309028 if (IS_WDI_STATUS_FAILURE(status))
9029 {
9030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9031 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309032
9033 pWDA->failureCounts.exitImpsFailureCount++;
9034 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9035 pWDA->failureCounts.exitImpsFailureCount)
9036 {
9037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9038 "%s: wdiStatus %d fail count %d", __func__,
9039 status,
9040 pWDA->failureCounts.exitImpsFailureCount);
9041 pWDA->failureCounts.exitImpsFailureCount = 0;
9042 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9043 WLAN_LOG_INDICATOR_HOST_DRIVER,
9044 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9045 FALSE, TRUE);
9046 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309047 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9048 {
9049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9050 FL("reload wlan driver"));
9051 wpalWlanReload();
9052 }
9053 }
9054 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009055}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309056
Jeff Johnson295189b2012-06-20 16:38:30 -07009057/*
9058 * FUNCTION: WDA_ProcessExitImpsReq
9059 * Request to WDI to Exit IMPS power state.
9060 */
9061VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9062{
9063 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309064 tWDA_ReqParams *pWdaParams;
9065 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9066
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009068 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309069 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9070 sizeof(WDI_ExitImpsReqParamsType));
9071 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009072 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9074 "%s: VOS MEM Alloc Failure", __func__);
9075 VOS_ASSERT(0);
9076 return VOS_STATUS_E_NOMEM;
9077 }
9078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9079 if(NULL == pWdaParams)
9080 {
9081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9082 "%s: VOS MEM Alloc Failure", __func__);
9083 VOS_ASSERT(0);
9084 vos_mem_free(wdiExitImpsReqParams);
9085 return VOS_STATUS_E_NOMEM;
9086 }
9087 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9088 wdiExitImpsReqParams->pUserData = pWdaParams;
9089
9090 /* Store param pointer as passed in by caller */
9091 /* store Params pass it to WDI */
9092 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9093 pWdaParams->pWdaContext = pWDA;
9094 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9095 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9096 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9097 pWdaParams);
9098 if (IS_WDI_STATUS_FAILURE(status))
9099 {
9100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9101 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9103 vos_mem_free(pWdaParams);
9104 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 return CONVERT_WDI2VOS_STATUS(status) ;
9107}
Jeff Johnson295189b2012-06-20 16:38:30 -07009108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009109 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 * send Enter BMPS RSP back to PE
9111 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009112void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009113{
9114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309115 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009116 tEnterBmpsParams *pEnterBmpsRspParams;
9117
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 if(NULL == pWdaParams)
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009123 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 VOS_ASSERT(0) ;
9125 return ;
9126 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009127
9128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309129 if (NULL == pWDA)
9130 {
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9132 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309133
9134 if(pWdaParams->wdaWdiApiMsgParam)
9135 {
9136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9137 }
9138 vos_mem_free(pWdaParams);
9139
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309140 VOS_ASSERT(0);
9141 return ;
9142 }
9143
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009144 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9145
9146 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009147 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009148
9149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309151 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9152 {
9153 pWDA->failureCounts.enterBmpsFailureCount++;
9154 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9155 pWDA->failureCounts.enterBmpsFailureCount)
9156 {
9157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9158 "%s: wdiStatus %d fail count %d", __func__,
9159 pwdiEnterBmpsRsp->wdiStatus,
9160 pWDA->failureCounts.enterBmpsFailureCount);
9161 pWDA->failureCounts.enterBmpsFailureCount = 0;
9162 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9163 WLAN_LOG_INDICATOR_HOST_DRIVER,
9164 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9165 FALSE, TRUE);
9166 }
9167 }
9168 else
9169 {
9170 pWDA->failureCounts.enterBmpsFailureCount = 0;
9171 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009172 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9173
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 return ;
9175}
Jeff Johnson295189b2012-06-20 16:38:30 -07009176/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009177 * FUNCTION: WDA_EnterBmpsReqCallback
9178 * Free memory and send Enter BMPS RSP back to PE.
9179 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9180 */
9181void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9182{
9183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309184 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009185 tEnterBmpsParams *pEnterBmpsRspParams;
9186
9187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9188 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9189
9190 if(NULL == pWdaParams)
9191 {
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9193 "%s: pWdaParams received NULL", __func__);
9194 VOS_ASSERT(0);
9195 return;
9196 }
9197
9198 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309199 if (NULL == pWDA)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9202 "%s:pWDA is NULL", __func__);
9203 VOS_ASSERT(0);
9204 return ;
9205 }
9206
Yue Ma7f44bbe2013-04-12 11:47:39 -07009207 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9208 pEnterBmpsRspParams->status = wdiStatus;
9209
9210 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9211 {
9212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9213 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309214 pWDA->failureCounts.enterBmpsFailureCount++;
9215 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9216 pWDA->failureCounts.enterBmpsFailureCount)
9217 {
9218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9219 "%s: wdiStatus %d fail count %d", __func__,
9220 wdiStatus,
9221 pWDA->failureCounts.enterBmpsFailureCount);
9222 pWDA->failureCounts.enterBmpsFailureCount = 0;
9223 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9224 WLAN_LOG_INDICATOR_HOST_DRIVER,
9225 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9226 FALSE, TRUE);
9227 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009228 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9229 }
9230
9231 return;
9232}
9233/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 * FUNCTION: WDA_ProcessEnterBmpsReq
9235 * Request to WDI to Enter BMPS power state.
9236 */
9237VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9238 tEnterBmpsParams *pEnterBmpsReqParams)
9239{
9240 WDI_Status status = WDI_STATUS_SUCCESS;
9241 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9242 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009244 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9246 {
9247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009248 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 VOS_ASSERT(0);
9250 return VOS_STATUS_E_FAILURE;
9251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9253 if (NULL == wdiEnterBmpsReqParams)
9254 {
9255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009258 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9259 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 return VOS_STATUS_E_NOMEM;
9261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9263 if (NULL == pWdaParams)
9264 {
9265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 VOS_ASSERT(0);
9268 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009269 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9270 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009271 return VOS_STATUS_E_NOMEM;
9272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9274 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9275 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9276 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009277 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9279 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9280 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009281 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9282 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009283
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 /* Store param pointer as passed in by caller */
9285 /* store Params pass it to WDI */
9286 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009287 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009290 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 if (IS_WDI_STATUS_FAILURE(status))
9292 {
9293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9294 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009296 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009298 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 return CONVERT_WDI2VOS_STATUS(status);
9301}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009302
9303
9304static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9305 WDI_Status wdiStatus,
9306 tExitBmpsParams *pExitBmpsReqParams)
9307{
9308 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9309
9310 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9311}
9312
9313
Jeff Johnson295189b2012-06-20 16:38:30 -07009314/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009315 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 * send Exit BMPS RSP back to PE
9317 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009318void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009319{
9320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309321 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009322 tExitBmpsParams *pExitBmpsRspParams;
9323
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 if(NULL == pWdaParams)
9327 {
9328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 VOS_ASSERT(0) ;
9331 return ;
9332 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009333
9334 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309335 if (NULL == pWDA)
9336 {
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9338 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309339
9340 if(pWdaParams->wdaWdiApiMsgParam)
9341 {
9342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9343 }
9344 vos_mem_free(pWdaParams);
9345
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309346 VOS_ASSERT(0);
9347 return ;
9348 }
9349
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009350 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9351
9352 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009353 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354
Jeff Johnson295189b2012-06-20 16:38:30 -07009355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309356 vos_mem_free(pWdaParams);
9357
9358 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9359 {
9360 pWDA->failureCounts.exitBmpsFailureCount++;
9361 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9362 pWDA->failureCounts.exitBmpsFailureCount)
9363 {
9364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9365 "%s: Status %d fail count %d", __func__,
9366 pExitBmpsRspParams->status,
9367 pWDA->failureCounts.exitBmpsFailureCount);
9368 pWDA->failureCounts.exitBmpsFailureCount = 0;
9369 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9370 WLAN_LOG_INDICATOR_HOST_DRIVER,
9371 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9372 FALSE, TRUE);
9373 }
9374 }
9375 else
9376 {
9377 pWDA->failureCounts.exitBmpsFailureCount = 0;
9378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009379
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009380 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 return ;
9382}
Jeff Johnson295189b2012-06-20 16:38:30 -07009383/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009384 * FUNCTION: WDA_ExitBmpsReqCallback
9385 * Free memory and send Exit BMPS RSP back to PE.
9386 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9387 */
9388void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9389{
9390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309391 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009392 tExitBmpsParams *pExitBmpsRspParams;
9393
9394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9395 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9396
9397 if(NULL == pWdaParams)
9398 {
9399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9400 "%s: pWdaParams received NULL", __func__);
9401 VOS_ASSERT(0);
9402 return;
9403 }
9404
9405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309406 if (NULL == pWDA)
9407 {
9408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9409 "%s:pWDA is NULL", __func__);
9410 VOS_ASSERT(0);
9411 return ;
9412 }
9413
Yue Ma7f44bbe2013-04-12 11:47:39 -07009414 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9415 pExitBmpsRspParams->status = wdiStatus;
9416
9417 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9418 {
9419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9420 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309421 pWDA->failureCounts.exitBmpsFailureCount++;
9422 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9423 pWDA->failureCounts.exitBmpsFailureCount)
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9426 "%s: wdiStatus %d fail count %d", __func__,
9427 wdiStatus,
9428 pWDA->failureCounts.exitBmpsFailureCount);
9429 pWDA->failureCounts.exitBmpsFailureCount = 0;
9430 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9431 WLAN_LOG_INDICATOR_HOST_DRIVER,
9432 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9433 FALSE, TRUE);
9434 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009435 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9436 }
9437
9438 return;
9439}
9440/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 * FUNCTION: WDA_ProcessExitBmpsReq
9442 * Request to WDI to Exit BMPS power state.
9443 */
9444VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9445 tExitBmpsParams *pExitBmpsReqParams)
9446{
9447 WDI_Status status = WDI_STATUS_SUCCESS ;
9448 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9449 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9450 sizeof(WDI_ExitBmpsReqParamsType)) ;
9451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 if(NULL == wdiExitBmpsReqParams)
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009459 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 return VOS_STATUS_E_NOMEM;
9461 }
9462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9463 if(NULL == pWdaParams)
9464 {
9465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 VOS_ASSERT(0);
9468 vos_mem_free(wdiExitBmpsReqParams);
9469 return VOS_STATUS_E_NOMEM;
9470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009472
9473 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9474
Yue Ma7f44bbe2013-04-12 11:47:39 -07009475 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9476 wdiExitBmpsReqParams->pUserData = pWdaParams;
9477
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 /* Store param pointer as passed in by caller */
9479 /* store Params pass it to WDI */
9480 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9481 pWdaParams->pWdaContext = pWDA;
9482 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009484 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 if(IS_WDI_STATUS_FAILURE(status))
9486 {
9487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9488 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9490 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009491 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 return CONVERT_WDI2VOS_STATUS(status) ;
9494}
Jeff Johnson295189b2012-06-20 16:38:30 -07009495/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009496 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009497 * send Enter UAPSD RSP back to PE
9498 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009500{
9501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309502 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009503 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009505 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 if(NULL == pWdaParams)
9507 {
9508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009509 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 VOS_ASSERT(0) ;
9511 return ;
9512 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009513
9514 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309515 if (NULL == pWDA)
9516 {
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9518 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309519
9520 if(pWdaParams->wdaWdiApiMsgParam)
9521 {
9522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9523 }
9524 vos_mem_free(pWdaParams);
9525
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309526 VOS_ASSERT(0);
9527 return ;
9528 }
9529
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009530 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9531
9532 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009533 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009534
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9536 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009537 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 return ;
9539}
Jeff Johnson295189b2012-06-20 16:38:30 -07009540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009541 * FUNCTION: WDA_EnterUapsdReqCallback
9542 * Free memory and send Enter UAPSD RSP back to PE.
9543 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9544 */
9545void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9546{
9547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9548 tWDA_CbContext *pWDA;
9549 tUapsdParams *pEnterUapsdRsqParams;
9550
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9553
9554 if(NULL == pWdaParams)
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9557 "%s: pWdaParams received NULL", __func__);
9558 VOS_ASSERT(0);
9559 return;
9560 }
9561
9562 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309563 if (NULL == pWDA)
9564 {
9565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9566 "%s:pWDA is NULL", __func__);
9567 VOS_ASSERT(0);
9568 return ;
9569 }
9570
Yue Ma7f44bbe2013-04-12 11:47:39 -07009571 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9572 pEnterUapsdRsqParams->status = wdiStatus;
9573
9574 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9575 {
9576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9577 vos_mem_free(pWdaParams);
9578 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9579 }
9580
9581 return;
9582}
9583/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 * FUNCTION: WDA_ProcessEnterUapsdReq
9585 * Request to WDI to Enter UAPSD power state.
9586 */
9587VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9588 tUapsdParams *pEnterUapsdReqParams)
9589{
9590 WDI_Status status = WDI_STATUS_SUCCESS ;
9591 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9592 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9593 sizeof(WDI_EnterUapsdReqParamsType)) ;
9594 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009596 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009597 if(NULL == wdiEnterUapsdReqParams)
9598 {
9599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 VOS_ASSERT(0);
9602 return VOS_STATUS_E_NOMEM;
9603 }
9604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9605 if(NULL == pWdaParams)
9606 {
9607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 VOS_ASSERT(0);
9610 vos_mem_free(wdiEnterUapsdReqParams);
9611 return VOS_STATUS_E_NOMEM;
9612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9614 pEnterUapsdReqParams->beDeliveryEnabled;
9615 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9616 pEnterUapsdReqParams->beTriggerEnabled;
9617 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9618 pEnterUapsdReqParams->bkDeliveryEnabled;
9619 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9620 pEnterUapsdReqParams->bkTriggerEnabled;
9621 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9622 pEnterUapsdReqParams->viDeliveryEnabled;
9623 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9624 pEnterUapsdReqParams->viTriggerEnabled;
9625 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9626 pEnterUapsdReqParams->voDeliveryEnabled;
9627 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9628 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009629 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009630
Yue Ma7f44bbe2013-04-12 11:47:39 -07009631 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9632 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009633
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 /* Store param pointer as passed in by caller */
9635 /* store Params pass it to WDI */
9636 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9637 pWdaParams->pWdaContext = pWDA;
9638 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009640 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 if(IS_WDI_STATUS_FAILURE(status))
9642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9644 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9645 vos_mem_free(pWdaParams->wdaMsgParam) ;
9646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9647 vos_mem_free(pWdaParams) ;
9648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 return CONVERT_WDI2VOS_STATUS(status) ;
9650}
Jeff Johnson295189b2012-06-20 16:38:30 -07009651/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009652 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 * send Exit UAPSD RSP back to PE
9654 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009655void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009656{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009657
9658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9659 tWDA_CbContext *pWDA;
9660 tExitUapsdParams *pExitUapsdRspParams;
9661
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009663 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009664 if(NULL == pWdaParams)
9665 {
9666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009667 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009668 VOS_ASSERT(0);
9669 return;
9670 }
9671
9672 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9673 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9674
9675 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009676 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009677
9678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9679 vos_mem_free(pWdaParams) ;
9680
9681 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 return ;
9683}
Jeff Johnson295189b2012-06-20 16:38:30 -07009684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009685 * FUNCTION: WDA_ExitUapsdReqCallback
9686 * Free memory and send Exit UAPSD RSP back to PE.
9687 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9688 */
9689void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9690{
9691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309692 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009693 tExitUapsdParams *pExitUapsdRspParams;
9694
9695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9696 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9697
9698 if(NULL == pWdaParams)
9699 {
9700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9701 "%s: pWdaParams received NULL", __func__);
9702 VOS_ASSERT(0);
9703 return;
9704 }
9705
9706 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309707 if (NULL == pWDA)
9708 {
9709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9710 "%s:pWDA is NULL", __func__);
9711 VOS_ASSERT(0);
9712 return ;
9713 }
9714
Yue Ma7f44bbe2013-04-12 11:47:39 -07009715 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9716 pExitUapsdRspParams->status = wdiStatus;
9717
9718 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9719 {
9720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9721 vos_mem_free(pWdaParams);
9722 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9723 }
9724
9725 return;
9726}
9727/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009728 * FUNCTION: WDA_ProcessExitUapsdReq
9729 * Request to WDI to Exit UAPSD power state.
9730 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009731VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9732 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009733{
9734 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009735 tWDA_ReqParams *pWdaParams ;
9736 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9737 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9738 sizeof(WDI_ExitUapsdReqParamsType)) ;
9739
Jeff Johnson295189b2012-06-20 16:38:30 -07009740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009742
9743 if(NULL == wdiExitUapsdReqParams)
9744 {
9745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009746 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009747 VOS_ASSERT(0);
9748 return VOS_STATUS_E_NOMEM;
9749 }
9750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9751 if(NULL == pWdaParams)
9752 {
9753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009754 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009755 VOS_ASSERT(0);
9756 vos_mem_free(wdiExitUapsdReqParams);
9757 return VOS_STATUS_E_NOMEM;
9758 }
9759
9760 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009761 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9762 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009763
9764 /* Store param pointer as passed in by caller */
9765 /* store Params pass it to WDI */
9766 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9767 pWdaParams->pWdaContext = pWDA;
9768 pWdaParams->wdaMsgParam = pExitUapsdParams;
9769
Yue Ma7f44bbe2013-04-12 11:47:39 -07009770 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 if(IS_WDI_STATUS_FAILURE(status))
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9774 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009775 vos_mem_free(pWdaParams->wdaMsgParam) ;
9776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9777 vos_mem_free(pWdaParams) ;
9778
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009780 return CONVERT_WDI2VOS_STATUS(status) ;
9781}
9782
Jeff Johnson295189b2012-06-20 16:38:30 -07009783/*
9784 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9785 *
9786 */
9787void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9788{
9789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009791 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009792 if(NULL == pWdaParams)
9793 {
9794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009795 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 VOS_ASSERT(0) ;
9797 return ;
9798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 if( pWdaParams != NULL )
9800 {
9801 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9802 {
9803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9804 }
9805 if( pWdaParams->wdaMsgParam != NULL )
9806 {
9807 vos_mem_free(pWdaParams->wdaMsgParam) ;
9808 }
9809 vos_mem_free(pWdaParams) ;
9810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 return ;
9812}
Jeff Johnson295189b2012-06-20 16:38:30 -07009813/*
9814 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9815 * Request to WDI to set the power save params at start.
9816 */
9817VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9818 tSirPowerSaveCfg *pPowerSaveCfg)
9819{
9820 WDI_Status status = WDI_STATUS_SUCCESS ;
9821 tHalCfg *tlvStruct = NULL ;
9822 tANI_U8 *tlvStructStart = NULL ;
9823 v_PVOID_t *configParam;
9824 tANI_U32 configParamSize;
9825 tANI_U32 *configDataValue;
9826 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9827 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009829 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9831 {
9832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009833 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009835 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009836 return VOS_STATUS_E_FAILURE;
9837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9839 if (NULL == wdiPowerSaveCfg)
9840 {
9841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009844 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 return VOS_STATUS_E_NOMEM;
9846 }
9847 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9848 if(NULL == pWdaParams)
9849 {
9850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 VOS_ASSERT(0);
9853 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009854 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009855 return VOS_STATUS_E_NOMEM;
9856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009857 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9858 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 if(NULL == configParam)
9860 {
9861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009862 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009863 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 vos_mem_free(pWdaParams);
9865 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009866 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009867 return VOS_STATUS_E_NOMEM;
9868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 vos_mem_set(configParam, configParamSize, 0);
9870 wdiPowerSaveCfg->pConfigBuffer = configParam;
9871 tlvStruct = (tHalCfg *)configParam;
9872 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9874 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9875 tlvStruct->length = sizeof(tANI_U32);
9876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9877 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9879 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9881 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9882 tlvStruct->length = sizeof(tANI_U32);
9883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9884 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9886 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9888 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9889 tlvStruct->length = sizeof(tANI_U32);
9890 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9891 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9893 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9895 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9896 tlvStruct->length = sizeof(tANI_U32);
9897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9898 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9900 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9902 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9903 tlvStruct->length = sizeof(tANI_U32);
9904 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9905 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9907 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9909 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9910 tlvStruct->length = sizeof(tANI_U32);
9911 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9912 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9914 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9916 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9917 tlvStruct->length = sizeof(tANI_U32);
9918 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9919 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9923 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9924 tlvStruct->length = sizeof(tANI_U32);
9925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9926 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9927 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9928 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9930 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9931 tlvStruct->length = sizeof(tANI_U32);
9932 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9933 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9934 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9935 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9937 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9938 tlvStruct->length = sizeof(tANI_U32);
9939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9940 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9942 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9944 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9945 tlvStruct->length = sizeof(tANI_U32);
9946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9947 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9949 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 /* store Params pass it to WDI */
9953 pWdaParams->wdaMsgParam = configParam;
9954 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9955 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9957 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 if(IS_WDI_STATUS_FAILURE(status))
9959 {
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9961 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9962 vos_mem_free(pWdaParams->wdaMsgParam);
9963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9964 vos_mem_free(pWdaParams);
9965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 return CONVERT_WDI2VOS_STATUS(status);
9968}
Jeff Johnson295189b2012-06-20 16:38:30 -07009969/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009970 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 *
9972 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009973void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009974{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9976
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009978 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009979
9980 if(NULL == pWdaParams)
9981 {
9982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9983 "%s: pWdaParams received NULL", __func__);
9984 VOS_ASSERT(0);
9985 return ;
9986 }
9987
9988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 vos_mem_free(pWdaParams);
9990
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 return ;
9992}
Jeff Johnson295189b2012-06-20 16:38:30 -07009993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009994 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9995 * Free memory.
9996 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9997 */
9998void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9999{
10000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10001
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10003 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10004
10005 if(NULL == pWdaParams)
10006 {
10007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10008 "%s: pWdaParams received NULL", __func__);
10009 VOS_ASSERT(0);
10010 return;
10011 }
10012
10013 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10014 {
10015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10016 vos_mem_free(pWdaParams);
10017 }
10018
10019 return;
10020}
10021/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 * FUNCTION: WDA_SetUapsdAcParamsReq
10023 * Request to WDI to set the UAPSD params for an ac (sta mode).
10024 */
10025VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10026 tUapsdInfo *pUapsdInfo)
10027{
10028 WDI_Status status = WDI_STATUS_SUCCESS;
10029 tWDA_CbContext *pWDA = NULL ;
10030 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10031 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10032 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10033 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 if(NULL == wdiUapsdParams)
10037 {
10038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 VOS_ASSERT(0);
10041 return VOS_STATUS_E_NOMEM;
10042 }
10043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10044 if(NULL == pWdaParams)
10045 {
10046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 VOS_ASSERT(0);
10049 vos_mem_free(wdiUapsdParams);
10050 return VOS_STATUS_E_NOMEM;
10051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10053 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10054 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10055 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10056 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10057 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010058 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10059 wdiUapsdParams->pUserData = pWdaParams;
10060
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 pWdaParams->pWdaContext = pWDA;
10063 /* Store param pointer as passed in by caller */
10064 pWdaParams->wdaMsgParam = pUapsdInfo;
10065 /* store Params pass it to WDI */
10066 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010067 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010068 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 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 UAPSD params REQ WDI API, free all the memory " );
10074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10075 vos_mem_free(pWdaParams);
10076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10078 return VOS_STATUS_SUCCESS;
10079 else
10080 return VOS_STATUS_E_FAILURE;
10081
Jeff Johnson295189b2012-06-20 16:38:30 -070010082}
10083/*
10084 * FUNCTION: WDA_ClearUapsdAcParamsReq
10085 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10086 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10087 * and again enter the UPASD with the modified params. Hence the disable
10088 * function was kept empty.
10089 *
10090 */
10091VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10092{
10093 /* do nothing */
10094 return VOS_STATUS_SUCCESS;
10095}
Jeff Johnson295189b2012-06-20 16:38:30 -070010096/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010097 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 *
10099 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010100void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010101{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010102 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10103
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010105 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010106
10107 if(NULL == pWdaParams)
10108 {
10109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010110 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010111 VOS_ASSERT(0) ;
10112 return ;
10113 }
10114
10115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10116 vos_mem_free(pWdaParams->wdaMsgParam);
10117 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010118
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 //print a msg, nothing else to do
10120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 return ;
10123}
Jeff Johnson295189b2012-06-20 16:38:30 -070010124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010125 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10126 * Free memory.
10127 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10128 */
10129void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10130{
10131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10132
10133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10134 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10135
10136 if(NULL == pWdaParams)
10137 {
10138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10139 "%s: pWdaParams received NULL", __func__);
10140 VOS_ASSERT(0);
10141 return;
10142 }
10143
10144 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10145 {
10146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10147 vos_mem_free(pWdaParams->wdaMsgParam);
10148 vos_mem_free(pWdaParams);
10149 }
10150
10151 return;
10152}
10153/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 * FUNCTION: WDA_UpdateUapsdParamsReq
10155 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10156 */
10157VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10158 tUpdateUapsdParams* pUpdateUapsdInfo)
10159{
10160 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010161 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10163 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10164 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010165 tWDA_ReqParams *pWdaParams = NULL;
10166
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010168 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 if(NULL == wdiUpdateUapsdParams)
10170 {
10171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 VOS_ASSERT(0);
10174 return VOS_STATUS_E_NOMEM;
10175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10177 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10178 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010179 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10180 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010181
10182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10183 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010188 vos_mem_free(pUpdateUapsdInfo);
10189 vos_mem_free(wdiUpdateUapsdParams);
10190 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010193 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010195 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10196 pWdaParams->pWdaContext = pWDA;
10197
Jeff Johnson43971f52012-07-17 12:26:56 -070010198 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010199 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010200 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010201
Jeff Johnson43971f52012-07-17 12:26:56 -070010202 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10205 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010206 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10208 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010209 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010211 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010212}
Jeff Johnson295189b2012-06-20 16:38:30 -070010213/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010214 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 *
10216 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010217void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010218{
10219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010221 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 if(WDI_STATUS_SUCCESS != wdiStatus)
10223 {
10224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010225 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 if(NULL == pWdaParams)
10228 {
10229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 VOS_ASSERT(0) ;
10232 return ;
10233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10235 vos_mem_free(pWdaParams->wdaMsgParam);
10236 vos_mem_free(pWdaParams);
10237 return ;
10238}
Jeff Johnson295189b2012-06-20 16:38:30 -070010239/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010240 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10241 * Free memory.
10242 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10243 */
10244void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10245{
10246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10247
10248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10249 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10250
10251 if(NULL == pWdaParams)
10252 {
10253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10254 "%s: pWdaParams received NULL", __func__);
10255 VOS_ASSERT(0);
10256 return;
10257 }
10258
10259 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10260 {
10261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10262 vos_mem_free(pWdaParams->wdaMsgParam);
10263 vos_mem_free(pWdaParams);
10264 }
10265
10266 return;
10267}
10268/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10270 *
10271 */
10272VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10273 tSirWlanSetRxpFilters *pWlanSuspendParam)
10274{
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010276 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010277 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010279 /* Sanity Check
10280 * This is very unlikely and add assert to collect more info next time */
10281 if(NULL == pWlanSuspendParam)
10282 {
10283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10284 "%s: pWlanSuspendParam received NULL", __func__);
10285 VOS_ASSERT(0) ;
10286 return VOS_STATUS_E_FAULT;
10287 }
10288 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10289 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 if(NULL == wdiRxpFilterParams)
10293 {
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 VOS_ASSERT(0);
10297 vos_mem_free(pWlanSuspendParam);
10298 return VOS_STATUS_E_NOMEM;
10299 }
10300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0);
10306 vos_mem_free(wdiRxpFilterParams);
10307 vos_mem_free(pWlanSuspendParam);
10308 return VOS_STATUS_E_NOMEM;
10309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10311 pWlanSuspendParam->setMcstBcstFilter;
10312 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10313 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10314
Yue Ma7f44bbe2013-04-12 11:47:39 -070010315 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10316 wdiRxpFilterParams->pUserData = pWdaParams;
10317
Jeff Johnson295189b2012-06-20 16:38:30 -070010318 pWdaParams->pWdaContext = pWDA;
10319 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10320 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010321 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010322 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010324 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 {
10326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10327 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010328 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10330 vos_mem_free(pWdaParams->wdaMsgParam);
10331 vos_mem_free(pWdaParams);
10332 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010333 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010335
10336/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010337 * FUNCTION: WDA_ProcessGetFrameLogReq
10338 * Request to WDI to get the Frame Log.
10339 */
10340VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10341 tAniGetFrameLogReq *pGetFrameLog)
10342{
10343 VOS_STATUS status = VOS_STATUS_SUCCESS;
10344 WDI_Status wstatus;
10345 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10346 tWDA_ReqParams *pWdaParams ;
10347
10348 /* Sanity Check*/
10349 if(NULL == pGetFrameLog)
10350 {
10351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010352 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010353 VOS_ASSERT(0) ;
10354 return VOS_STATUS_E_FAULT;
10355 }
10356
10357 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10358 sizeof(WDI_GetFrameLogReqInfoType));
10359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10360 "------> %s " ,__func__);
10361
10362 if(NULL == wdiGetFrameLogInfo)
10363 {
10364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10365 "%s: VOS MEM Alloc Failure", __func__);
10366 VOS_ASSERT(0);
10367 vos_mem_free(pGetFrameLog);
10368 return VOS_STATUS_E_NOMEM;
10369 }
10370
10371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10372 if(NULL == pWdaParams)
10373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10375 "%s: VOS MEM Alloc Failure", __func__);
10376 VOS_ASSERT(0);
10377 vos_mem_free(wdiGetFrameLogInfo);
10378 vos_mem_free(pGetFrameLog);
10379 return VOS_STATUS_E_NOMEM;
10380 }
10381
10382 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10383
10384 pWdaParams->pWdaContext = pWDA;
10385 pWdaParams->wdaMsgParam = pGetFrameLog;
10386 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10387
10388 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10389 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10390 pWdaParams);
10391 if(IS_WDI_STATUS_FAILURE(wstatus))
10392 {
10393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10394 "Failure in get frame log REQ WDI API, free all the memory" );
10395 status = CONVERT_WDI2VOS_STATUS(wstatus);
10396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10397 vos_mem_free(pWdaParams->wdaMsgParam);
10398 vos_mem_free(pWdaParams);
10399 }
10400 return status;
10401}
10402
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010403
10404/*
10405 * FUNCTION: WDA_FatalEventLogsRspCallback
10406 * recieves Flush Logs response from FW
10407 */
10408
10409void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10410 void* pUserData)
10411{
10412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10413
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10415 "<------ %s,wdiStatus:%d " ,
10416 __func__, wdiRsp->wdiStatus);
10417 if(NULL == pWdaParams)
10418 {
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10420 "%s: pWdaParams received NULL", __func__);
10421 VOS_ASSERT(0);
10422 return ;
10423 }
10424
10425 if(NULL == pWdaParams->wdaMsgParam)
10426 {
10427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10428 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10429 VOS_ASSERT(0);
10430 vos_mem_free(pWdaParams);
10431 return ;
10432 }
10433
10434 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10435 {
10436 /*
10437 * If it is failure, it means JOb is already posted by FW
10438 * for logging, so for failure scenario also we will get the
10439 * done indication
10440 */
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10442 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10443 __func__, wdiRsp->wdiStatus);
10444 }
10445
10446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10447 vos_mem_free(pWdaParams->wdaMsgParam);
10448 vos_mem_free(pWdaParams);
10449
10450 return;
10451
10452}
10453
10454/*
10455 * FUNCTION: WDA_ProcessFatalEventLogsReq
10456 * Request to WDI to send the fatal Event Logs Req.
10457 */
10458
10459VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10460 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10461{
10462 VOS_STATUS status = VOS_STATUS_SUCCESS;
10463 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10464 tWDA_ReqParams *pWdaParams ;
10465 WDI_Status wstatus;
10466
10467
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10469 "------> %s " ,__func__);
10470 if (NULL == pFatalEventLogsReqParam)
10471 {
10472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10473 "%s: pMgmtLoggingInitParam received NULL", __func__);
10474 VOS_ASSERT(0) ;
10475 return VOS_STATUS_E_FAULT;
10476 }
10477 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10478 sizeof(WDI_FatalEventLogsReqInfoType));
10479 if(NULL == wdiFatalEventLogsReqInfo)
10480 {
10481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10482 "%s: VOS MEM Alloc Failure", __func__);
10483 VOS_ASSERT(0);
10484 vos_mem_free(pFatalEventLogsReqParam);
10485 return VOS_STATUS_E_NOMEM;
10486 }
10487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10488 if(NULL == pWdaParams)
10489 {
10490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10491 "%s: VOS MEM Alloc Failure", __func__);
10492 VOS_ASSERT(0);
10493 vos_mem_free(wdiFatalEventLogsReqInfo);
10494 vos_mem_free(pFatalEventLogsReqParam);
10495 return VOS_STATUS_E_NOMEM;
10496 }
10497 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10498 pWdaParams->pWdaContext = pWDA;
10499 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10500 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10501
10502 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10503 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10504 pWdaParams);
10505 if(IS_WDI_STATUS_FAILURE(wstatus))
10506 {
10507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10508 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10509 status = CONVERT_WDI2VOS_STATUS(wstatus);
10510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10511 vos_mem_free(pWdaParams->wdaMsgParam);
10512 vos_mem_free(pWdaParams);
10513 }
10514
10515 return status;
10516
10517}
10518
Siddharth Bhal64246172015-02-27 01:04:37 +053010519/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010520 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010521 *
10522 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010523VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10524 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010525{
10526 VOS_STATUS status = VOS_STATUS_SUCCESS;
10527 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010528 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010529 tWDA_ReqParams *pWdaParams ;
10530
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10532 "------> %s " ,__func__);
10533
10534 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010535 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010536 {
10537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010538 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010539 VOS_ASSERT(0) ;
10540 return VOS_STATUS_E_FAULT;
10541 }
10542
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010543 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10544 sizeof(WDI_FWLoggingInitReqInfoType));
10545 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010546 {
10547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10548 "%s: VOS MEM Alloc Failure", __func__);
10549 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010550 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010551 return VOS_STATUS_E_NOMEM;
10552 }
10553
10554 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10555 if(NULL == pWdaParams)
10556 {
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10558 "%s: VOS MEM Alloc Failure", __func__);
10559 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010560 vos_mem_free(wdiFWLoggingInitInfo);
10561 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010562 return VOS_STATUS_E_NOMEM;
10563 }
10564
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010565 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10566 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10567 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10568 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10569 wdiFWLoggingInitInfo->continuousFrameLogging =
10570 pFWLoggingInitParam->continuousFrameLogging;
10571 wdiFWLoggingInitInfo->minLogBufferSize=
10572 pFWLoggingInitParam->minLogBufferSize;
10573 wdiFWLoggingInitInfo->maxLogBufferSize=
10574 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010575
10576 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010577 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10578 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010579
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010580 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10581 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010582 pWdaParams);
10583 if(IS_WDI_STATUS_FAILURE(wstatus))
10584 {
10585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10586 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10587 status = CONVERT_WDI2VOS_STATUS(wstatus);
10588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10589 vos_mem_free(pWdaParams->wdaMsgParam);
10590 vos_mem_free(pWdaParams);
10591 }
10592
10593 return status;
10594}
10595
Jeff Johnson295189b2012-06-20 16:38:30 -070010596/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010597 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10598 *
10599 */
10600VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10601 tSirRssiMonitorReq *pRssiMonitorReqParam)
10602{
10603 VOS_STATUS status = VOS_STATUS_SUCCESS;
10604 WDI_Status wstatus;
10605 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10606 tWDA_ReqParams *pWdaParams ;
10607
10608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10609 "------> %s " ,__func__);
10610
10611 /* Sanity Check*/
10612 if(NULL == pRssiMonitorReqParam)
10613 {
10614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10615 "%s: pRssiMonitorReqParam received NULL", __func__);
10616 VOS_ASSERT(0) ;
10617 return VOS_STATUS_E_FAULT;
10618 }
10619
10620 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10621 sizeof(WDI_RssiMonitorReqInfoType));
10622 if(NULL == wdiRssiMonitorInfo)
10623 {
10624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "%s: VOS MEM Alloc Failure", __func__);
10626 VOS_ASSERT(0);
10627 vos_mem_free(pRssiMonitorReqParam);
10628 return VOS_STATUS_E_NOMEM;
10629 }
10630
10631 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10632 if(NULL == pWdaParams)
10633 {
10634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10635 "%s: VOS MEM Alloc Failure", __func__);
10636 VOS_ASSERT(0);
10637 vos_mem_free(wdiRssiMonitorInfo);
10638 vos_mem_free(pRssiMonitorReqParam);
10639 return VOS_STATUS_E_NOMEM;
10640 }
10641
10642 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10643 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10644 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10645 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10646 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10647
10648 pWdaParams->pWdaContext = pWDA;
10649 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10650 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10651
10652 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10653 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10654 pWdaParams);
10655 if(IS_WDI_STATUS_FAILURE(wstatus))
10656 {
10657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10658 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10659 status = CONVERT_WDI2VOS_STATUS(wstatus);
10660 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10661 vos_mem_free(pWdaParams->wdaMsgParam);
10662 vos_mem_free(pWdaParams);
10663 }
10664
10665 return status;
10666}
10667
10668/*
10669 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10670 *
10671 */
10672VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10673 tSirRssiMonitorReq *pRssiMonitorReqParam)
10674{
10675 VOS_STATUS status = VOS_STATUS_SUCCESS;
10676 WDI_Status wstatus;
10677 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10678 tWDA_ReqParams *pWdaParams ;
10679
10680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10681 "------> %s " ,__func__);
10682
10683 /* Sanity Check*/
10684 if(NULL == pRssiMonitorReqParam)
10685 {
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10687 "%s: pRssiMonitorReqParam received NULL", __func__);
10688 VOS_ASSERT(0) ;
10689 return VOS_STATUS_E_FAULT;
10690 }
10691
10692 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10693 sizeof(WDI_RssiMonitorReqInfoType));
10694 if(NULL == wdiRssiMonitorInfo)
10695 {
10696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10697 "%s: VOS MEM Alloc Failure", __func__);
10698 VOS_ASSERT(0);
10699 vos_mem_free(pRssiMonitorReqParam);
10700 return VOS_STATUS_E_NOMEM;
10701 }
10702
10703 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10704 if(NULL == pWdaParams)
10705 {
10706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10707 "%s: VOS MEM Alloc Failure", __func__);
10708 VOS_ASSERT(0);
10709 vos_mem_free(wdiRssiMonitorInfo);
10710 vos_mem_free(pRssiMonitorReqParam);
10711 return VOS_STATUS_E_NOMEM;
10712 }
10713
10714 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10715 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10716 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10717
10718 pWdaParams->pWdaContext = pWDA;
10719 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10720 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10721
10722 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10723 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10724 pWdaParams);
10725 if(IS_WDI_STATUS_FAILURE(wstatus))
10726 {
10727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10728 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10729 status = CONVERT_WDI2VOS_STATUS(wstatus);
10730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10731 vos_mem_free(pWdaParams->wdaMsgParam);
10732 vos_mem_free(pWdaParams);
10733 }
10734
10735 return status;
10736}
10737
10738
10739/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 * FUNCTION: WDA_WdiIndicationCallback
10741 *
10742 */
10743void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10744 void* pUserData)
10745{
10746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010747 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010748}
Jeff Johnson295189b2012-06-20 16:38:30 -070010749/*
10750 * FUNCTION: WDA_ProcessWlanSuspendInd
10751 *
10752 */
10753VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10754 tSirWlanSuspendParam *pWlanSuspendParam)
10755{
10756 WDI_Status wdiStatus;
10757 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010760 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10761 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10762 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10763 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10766 if(WDI_STATUS_PENDING == wdiStatus)
10767 {
10768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010769 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 }
10771 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10772 {
10773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010774 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 vos_mem_free(pWlanSuspendParam);
10777 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10778}
10779
Chet Lanctot186b5732013-03-18 10:26:30 -070010780#ifdef WLAN_FEATURE_11W
10781/*
10782 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10783 *
10784 */
10785VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10786 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10787{
10788 WDI_Status wdiStatus;
10789 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10791 "------> %s ", __func__);
10792
10793 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10794 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10795 sizeof(tSirMacAddr));
10796
10797 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10798 wdiExclUnencryptParams.pUserData = pWDA;
10799
10800 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10801 if(WDI_STATUS_PENDING == wdiStatus)
10802 {
10803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10804 "Pending received for %s:%d ", __func__, __LINE__ );
10805 }
10806 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10807 {
10808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10809 "Failure in %s:%d ", __func__, __LINE__ );
10810 }
10811 vos_mem_free(pExclUnencryptParam);
10812 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10813}
10814#endif
10815
Jeff Johnson295189b2012-06-20 16:38:30 -070010816/*
10817 * FUNCTION: WDA_ProcessWlanResumeCallback
10818 *
10819 */
10820void WDA_ProcessWlanResumeCallback(
10821 WDI_SuspendResumeRspParamsType *resumeRspParams,
10822 void* pUserData)
10823{
10824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 if(NULL == pWdaParams)
10828 {
10829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 VOS_ASSERT(0) ;
10832 return ;
10833 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10835 {
10836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010837 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10840 vos_mem_free(pWdaParams->wdaMsgParam);
10841 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 return ;
10843}
Jeff Johnson295189b2012-06-20 16:38:30 -070010844/*
10845 * FUNCTION: WDA_ProcessWlanResumeReq
10846 *
10847 */
10848VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10849 tSirWlanResumeParam *pWlanResumeParam)
10850{
10851 WDI_Status wdiStatus;
10852 WDI_ResumeParamsType *wdiResumeParams =
10853 (WDI_ResumeParamsType *)vos_mem_malloc(
10854 sizeof(WDI_ResumeParamsType) ) ;
10855 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 if(NULL == wdiResumeParams)
10859 {
10860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 VOS_ASSERT(0);
10863 return VOS_STATUS_E_NOMEM;
10864 }
10865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10866 if(NULL == pWdaParams)
10867 {
10868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 VOS_ASSERT(0);
10871 vos_mem_free(wdiResumeParams);
10872 return VOS_STATUS_E_NOMEM;
10873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10875 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 wdiResumeParams->wdiReqStatusCB = NULL;
10878 pWdaParams->wdaMsgParam = pWlanResumeParam;
10879 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10880 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010881 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10882 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10883 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10885 {
10886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10887 "Failure in Host Resume REQ WDI API, free all the memory " );
10888 VOS_ASSERT(0);
10889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10890 vos_mem_free(pWdaParams->wdaMsgParam);
10891 vos_mem_free(pWdaParams);
10892 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010893 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10894}
10895
Jeff Johnson295189b2012-06-20 16:38:30 -070010896/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010897 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 *
10899 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010900void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010901{
10902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010904 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 if(NULL == pWdaParams)
10906 {
10907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010908 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 VOS_ASSERT(0) ;
10910 return ;
10911 }
10912
10913 vos_mem_free(pWdaParams->wdaMsgParam) ;
10914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10915 vos_mem_free(pWdaParams) ;
10916 /*
10917 * No respone required for SetBeaconFilter req so just free the request
10918 * param here
10919 */
10920
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 return ;
10922}
Jeff Johnson295189b2012-06-20 16:38:30 -070010923/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010924 * FUNCTION: WDA_SetBeaconFilterReqCallback
10925 * Free memory.
10926 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10927 */
10928void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10929{
10930 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10931
10932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10933 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10934
10935 if(NULL == pWdaParams)
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10938 "%s: pWdaParams received NULL", __func__);
10939 VOS_ASSERT(0);
10940 return;
10941 }
10942
10943 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10944 {
10945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10946 vos_mem_free(pWdaParams->wdaMsgParam);
10947 vos_mem_free(pWdaParams);
10948 }
10949
10950 return;
10951}
10952/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 * FUNCTION: WDA_SetBeaconFilterReq
10954 * Request to WDI to send the beacon filtering related information.
10955 */
10956VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10957 tBeaconFilterMsg* pBeaconFilterInfo)
10958{
10959 WDI_Status status = WDI_STATUS_SUCCESS;
10960 tANI_U8 *dstPtr, *srcPtr;
10961 tANI_U8 filterLength;
10962 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10963 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10964 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10965 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 if(NULL == wdiBeaconFilterInfo)
10969 {
10970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 VOS_ASSERT(0);
10973 return VOS_STATUS_E_NOMEM;
10974 }
10975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10976 if(NULL == pWdaParams)
10977 {
10978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010980 VOS_ASSERT(0);
10981 vos_mem_free(wdiBeaconFilterInfo);
10982 return VOS_STATUS_E_NOMEM;
10983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10985 pBeaconFilterInfo->beaconInterval;
10986 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10987 pBeaconFilterInfo->capabilityInfo;
10988 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10989 pBeaconFilterInfo->capabilityMask;
10990 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010991
10992 //Fill the BssIdx
10993 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10994
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 //Fill structure with info contained in the beaconFilterTable
10996 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10997 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10998 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10999 if(WDI_BEACON_FILTER_LEN < filterLength)
11000 {
11001 filterLength = WDI_BEACON_FILTER_LEN;
11002 }
11003 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011004 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11005 wdiBeaconFilterInfo->pUserData = pWdaParams;
11006
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 /* Store param pointer as passed in by caller */
11008 /* store Params pass it to WDI */
11009 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11010 pWdaParams->pWdaContext = pWDA;
11011 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11012
Jeff Johnson295189b2012-06-20 16:38:30 -070011013 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011014 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 if(IS_WDI_STATUS_FAILURE(status))
11016 {
11017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11018 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11019 vos_mem_free(pWdaParams->wdaMsgParam) ;
11020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11021 vos_mem_free(pWdaParams) ;
11022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 return CONVERT_WDI2VOS_STATUS(status) ;
11024}
Jeff Johnson295189b2012-06-20 16:38:30 -070011025/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011026 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 *
11028 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011029void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011030{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011031 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11032
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011034 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011035
11036 if(NULL == pWdaParams)
11037 {
11038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011039 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011040 VOS_ASSERT(0) ;
11041 return ;
11042 }
11043
11044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11045 vos_mem_free(pWdaParams->wdaMsgParam);
11046 vos_mem_free(pWdaParams);
11047
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 //print a msg, nothing else to do
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011050 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 return ;
11052}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011053/*
11054 * FUNCTION: WDA_RemBeaconFilterReqCallback
11055 * Free memory.
11056 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11057 */
11058void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11059{
11060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11061
11062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11063 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11064
11065 if(NULL == pWdaParams)
11066 {
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11068 "%s: pWdaParams received NULL", __func__);
11069 VOS_ASSERT(0);
11070 return;
11071 }
11072
11073 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11074 {
11075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11076 vos_mem_free(pWdaParams->wdaMsgParam);
11077 vos_mem_free(pWdaParams);
11078 }
11079
11080 return;
11081}
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 // TODO: PE does not have this feature for now implemented,
11083 // but the support for removing beacon filter exists between
11084 // HAL and FW. This function can be called whenever PE defines
11085 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011086/*
11087 * FUNCTION: WDA_RemBeaconFilterReq
11088 * Request to WDI to send the removal of beacon filtering related information.
11089 */
11090VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11091 tRemBeaconFilterMsg* pBeaconFilterInfo)
11092{
11093 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011094 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11096 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11097 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011098 tWDA_ReqParams *pWdaParams ;
11099
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011101 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 if(NULL == wdiBeaconFilterInfo)
11103 {
11104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 VOS_ASSERT(0);
11107 return VOS_STATUS_E_NOMEM;
11108 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011109 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11110 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011115 vos_mem_free(wdiBeaconFilterInfo);
11116 vos_mem_free(pBeaconFilterInfo);
11117 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011119
11120 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11121 pBeaconFilterInfo->ucIeCount;
11122 //Fill structure with info contained in the ucRemIeId
11123 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11124 pBeaconFilterInfo->ucRemIeId,
11125 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11126 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11127 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011128
11129 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011130 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011132 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11133
11134 pWdaParams->pWdaContext = pWDA;
11135
Jeff Johnson43971f52012-07-17 12:26:56 -070011136 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011137 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011138 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 {
11140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11141 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011142 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11144 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011145 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011147 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011148}
Jeff Johnson295189b2012-06-20 16:38:30 -070011149/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011150 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 *
11152 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011153void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011154{
11155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011157 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011158 if(NULL == pWdaParams)
11159 {
11160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011161 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 VOS_ASSERT(0) ;
11163 return ;
11164 }
11165
11166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11167 vos_mem_free(pWdaParams) ;
11168
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 return ;
11170}
Jeff Johnson295189b2012-06-20 16:38:30 -070011171/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011172 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11173 * Free memory.
11174 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11175 */
11176void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11177{
11178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11179
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11181 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11182
11183 if(NULL == pWdaParams)
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11186 "%s: pWdaParams received NULL", __func__);
11187 VOS_ASSERT(0);
11188 return;
11189 }
11190
11191 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11192 {
11193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11194 vos_mem_free(pWdaParams);
11195 }
11196
11197 return;
11198}
11199/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 * FUNCTION: WDA_SetRSSIThresholdsReq
11201 * Request to WDI to set the RSSI thresholds (sta mode).
11202 */
11203VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11204{
11205 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011206 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 tWDA_CbContext *pWDA = NULL ;
11208 v_PVOID_t pVosContext = NULL;
11209 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11210 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11211 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11212 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011214 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 if(NULL == wdiRSSIThresholdsInfo)
11216 {
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 VOS_ASSERT(0);
11220 return VOS_STATUS_E_NOMEM;
11221 }
11222 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11223 if(NULL == pWdaParams)
11224 {
11225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 VOS_ASSERT(0);
11228 vos_mem_free(wdiRSSIThresholdsInfo);
11229 return VOS_STATUS_E_NOMEM;
11230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11233 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11234 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11236 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11237 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11239 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11240 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011241 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11242 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11244 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11245
Jeff Johnson295189b2012-06-20 16:38:30 -070011246 /* Store param pointer as passed in by caller */
11247 /* store Params pass it to WDI */
11248 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11249 pWdaParams->pWdaContext = pWDA;
11250 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011251 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011252 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011253 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 {
11255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011257 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11259 vos_mem_free(pWdaParams) ;
11260 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011261 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011262
11263}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011264/*
Yue Madb90ac12013-04-04 13:39:13 -070011265 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 *
11267 */
Yue Madb90ac12013-04-04 13:39:13 -070011268void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011269{
11270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11271
11272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 if(NULL == pWdaParams)
11275 {
11276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 VOS_ASSERT(0) ;
11279 return ;
11280 }
11281
11282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11283 vos_mem_free(pWdaParams->wdaMsgParam);
11284 vos_mem_free(pWdaParams) ;
11285
11286 //print a msg, nothing else to do
11287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011288 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 return ;
11290}
Jeff Johnson295189b2012-06-20 16:38:30 -070011291/*
Yue Madb90ac12013-04-04 13:39:13 -070011292 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011293 * Free memory.
11294 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011295 */
11296void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11297{
11298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11299
11300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11301 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11302
11303 if(NULL == pWdaParams)
11304 {
11305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11306 "%s: Invalid pWdaParams pointer", __func__);
11307 VOS_ASSERT(0);
11308 return;
11309 }
11310
11311 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11312 {
11313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11314 vos_mem_free(pWdaParams->wdaMsgParam);
11315 vos_mem_free(pWdaParams);
11316 }
11317
11318 return;
11319}
11320/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 * FUNCTION: WDA_ProcessHostOffloadReq
11322 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11323 * to broadcast traffic (sta mode).
11324 */
11325VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11326 tSirHostOffloadReq *pHostOffloadParams)
11327{
11328 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011329 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11331 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11332 sizeof(WDI_HostOffloadReqParamsType)) ;
11333 tWDA_ReqParams *pWdaParams ;
11334
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011336 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011337
11338 if(NULL == wdiHostOffloadInfo)
11339 {
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 VOS_ASSERT(0);
11343 return VOS_STATUS_E_NOMEM;
11344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11346 if(NULL == pWdaParams)
11347 {
11348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 VOS_ASSERT(0);
11351 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011352 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 return VOS_STATUS_E_NOMEM;
11354 }
11355
11356 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11357 pHostOffloadParams->offloadType;
11358 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11359 pHostOffloadParams->enableOrDisable;
11360
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011361 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11362 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11363
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11365 {
11366 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11367 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11368 pHostOffloadParams->params.hostIpv4Addr,
11369 4);
11370 break;
11371 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11372 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11373 pHostOffloadParams->params.hostIpv6Addr,
11374 16);
11375 break;
11376 case SIR_IPV6_NS_OFFLOAD:
11377 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11378 pHostOffloadParams->params.hostIpv6Addr,
11379 16);
11380
11381#ifdef WLAN_NS_OFFLOAD
11382 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11383 {
11384 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11385 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11386 16);
11387 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11388 }
11389 else
11390 {
11391 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11392 }
11393
11394 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11395 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11396 16);
11397 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11398 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11399 6);
11400
11401 //Only two are supported so let's go through them without a loop
11402 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11403 {
11404 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11405 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11406 16);
11407 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11408 }
11409 else
11410 {
11411 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11412 }
11413
11414 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11415 {
11416 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11417 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11418 16);
11419 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11420 }
11421 else
11422 {
11423 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11424 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011425 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11426 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 break;
11428#endif //WLAN_NS_OFFLOAD
11429 default:
11430 {
11431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11432 "No Handling for Offload Type %x in WDA "
11433 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11434 //WDA_VOS_ASSERT(0) ;
11435 }
11436 }
Yue Madb90ac12013-04-04 13:39:13 -070011437 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11438 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011439
Jeff Johnson295189b2012-06-20 16:38:30 -070011440 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011441 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 /* store Params pass it to WDI */
11443 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11444 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011445
Jeff Johnson295189b2012-06-20 16:38:30 -070011446
Jeff Johnson43971f52012-07-17 12:26:56 -070011447 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011448 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011449
Jeff Johnson43971f52012-07-17 12:26:56 -070011450 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 {
11452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011453 "Failure in host offload REQ WDI API, free all the memory %d",
11454 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011455 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11457 vos_mem_free(pWdaParams->wdaMsgParam);
11458 vos_mem_free(pWdaParams) ;
11459 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011460 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011461
11462}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011463/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011464 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 *
11466 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011467void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011468{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11470
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011472 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011473
11474 if(NULL == pWdaParams)
11475 {
11476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011477 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011478 VOS_ASSERT(0) ;
11479 return ;
11480 }
11481
11482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11483 vos_mem_free(pWdaParams->wdaMsgParam);
11484 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011485
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 //print a msg, nothing else to do
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011488 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 return ;
11490}
Jeff Johnson295189b2012-06-20 16:38:30 -070011491/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011492 * FUNCTION: WDA_KeepAliveReqCallback
11493 * Free memory.
11494 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11495 */
11496void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11497{
11498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11499
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11501 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11502
11503 if(NULL == pWdaParams)
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11506 "%s: pWdaParams received NULL", __func__);
11507 VOS_ASSERT(0);
11508 return;
11509 }
11510
11511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11512 {
11513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11514 vos_mem_free(pWdaParams->wdaMsgParam);
11515 vos_mem_free(pWdaParams);
11516 }
11517
11518 return;
11519}
11520/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 * FUNCTION: WDA_ProcessKeepAliveReq
11522 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11523 * wakeup due to broadcast traffic (sta mode).
11524 */
11525VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11526 tSirKeepAliveReq *pKeepAliveParams)
11527{
11528 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011529 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11531 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11532 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011533 tWDA_ReqParams *pWdaParams;
11534
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 if(NULL == wdiKeepAliveInfo)
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011542 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 return VOS_STATUS_E_NOMEM;
11544 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011545
11546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11547 if(NULL == pWdaParams)
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011550 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011551 VOS_ASSERT(0);
11552 vos_mem_free(wdiKeepAliveInfo);
11553 vos_mem_free(pKeepAliveParams);
11554 return VOS_STATUS_E_NOMEM;
11555 }
11556
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11558 pKeepAliveParams->packetType;
11559 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11560 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011561
11562 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11563 pKeepAliveParams->bssId,
11564 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011565
11566 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11567 {
11568 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11569 pKeepAliveParams->hostIpv4Addr,
11570 SIR_IPV4_ADDR_LEN);
11571 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11572 pKeepAliveParams->destIpv4Addr,
11573 SIR_IPV4_ADDR_LEN);
11574 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11575 pKeepAliveParams->destMacAddr,
11576 SIR_MAC_ADDR_LEN);
11577 }
11578 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11579 {
11580 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11581 SIR_IPV4_ADDR_LEN,
11582 0);
11583 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11584 SIR_IPV4_ADDR_LEN,
11585 0);
11586 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11587 SIR_MAC_ADDR_LEN,
11588 0);
11589 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011590 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11591 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011592
Jeff Johnson295189b2012-06-20 16:38:30 -070011593 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011594 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011596 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11597 pWdaParams->pWdaContext = pWDA;
11598
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11600 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11601 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11602 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11603 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11605 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11606 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11607 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11608 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11610 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11611 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11612 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11613 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11614 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11615 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11616 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11618 "TimePeriod %d PacketType %d",
11619 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11620 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011621 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011622 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011623
Jeff Johnson43971f52012-07-17 12:26:56 -070011624 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 {
11626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11627 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011628 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11630 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011631 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011632 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011633 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011634
11635}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011636/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011637 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 *
11639 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011640void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011641 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11642 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011643{
11644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011646 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 if(NULL == pWdaParams)
11648 {
11649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011650 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 VOS_ASSERT(0) ;
11652 return ;
11653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11655 vos_mem_free(pWdaParams->wdaMsgParam);
11656 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 return ;
11658}
Jeff Johnson295189b2012-06-20 16:38:30 -070011659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011660 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11661 * Free memory.
11662 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11663 */
11664void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11665{
11666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11667
11668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11669 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11670
11671 if(NULL == pWdaParams)
11672 {
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11674 "%s: pWdaParams received NULL", __func__);
11675 VOS_ASSERT(0);
11676 return;
11677 }
11678
11679 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11680 {
11681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11682 vos_mem_free(pWdaParams->wdaMsgParam);
11683 vos_mem_free(pWdaParams);
11684 }
11685
11686 return;
11687}
11688
11689/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11691 * Request to WDI to add WOWL Bcast pattern
11692 */
11693VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11694 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11695{
11696 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011697 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11699 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11700 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11701 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011703 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 if(NULL == wdiWowlAddBcPtrnInfo)
11705 {
11706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 VOS_ASSERT(0);
11709 return VOS_STATUS_E_NOMEM;
11710 }
11711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11712 if(NULL == pWdaParams)
11713 {
11714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011716 VOS_ASSERT(0);
11717 vos_mem_free(wdiWowlAddBcPtrnInfo);
11718 return VOS_STATUS_E_NOMEM;
11719 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011720 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11721 pWowlAddBcPtrnParams->ucPatternId;
11722 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11723 pWowlAddBcPtrnParams->ucPatternByteOffset;
11724 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11725 pWowlAddBcPtrnParams->ucPatternMaskSize;
11726 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11727 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11729 {
11730 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11731 pWowlAddBcPtrnParams->ucPattern,
11732 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11733 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11734 pWowlAddBcPtrnParams->ucPatternMask,
11735 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11736 }
11737 else
11738 {
11739 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11740 pWowlAddBcPtrnParams->ucPattern,
11741 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11742 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11743 pWowlAddBcPtrnParams->ucPatternMask,
11744 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11745
11746 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11747 pWowlAddBcPtrnParams->ucPatternExt,
11748 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11749 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11750 pWowlAddBcPtrnParams->ucPatternMaskExt,
11751 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11752 }
11753
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011754 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11755 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11756
Yue Ma7f44bbe2013-04-12 11:47:39 -070011757 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11758 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 /* Store param pointer as passed in by caller */
11760 /* store Params pass it to WDI */
11761 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11762 pWdaParams->pWdaContext = pWDA;
11763 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011764 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011765 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011766 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 {
11768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11769 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011770 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011771 vos_mem_free(pWdaParams->wdaMsgParam) ;
11772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11773 vos_mem_free(pWdaParams) ;
11774 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011775 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011776
11777}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011778/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011779 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 *
11781 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011782void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011783 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11784 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011785{
11786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011788 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 if(NULL == pWdaParams)
11790 {
11791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011792 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 VOS_ASSERT(0) ;
11794 return ;
11795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11797 vos_mem_free(pWdaParams->wdaMsgParam);
11798 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 return ;
11800}
Jeff Johnson295189b2012-06-20 16:38:30 -070011801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011802 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11803 * Free memory.
11804 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11805 */
11806void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11807{
11808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11809
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11811 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11812
11813 if(NULL == pWdaParams)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11816 "%s: pWdaParams received NULL", __func__);
11817 VOS_ASSERT(0);
11818 return;
11819 }
11820
11821 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11822 {
11823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11824 vos_mem_free(pWdaParams->wdaMsgParam);
11825 vos_mem_free(pWdaParams);
11826 }
11827
11828 return;
11829}
11830/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011831 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11832 * Request to WDI to delete WOWL Bcast pattern
11833 */
11834VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11835 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11836{
11837 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011838 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11840 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11841 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11842 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011844 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 if(NULL == wdiWowlDelBcPtrnInfo)
11846 {
11847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011848 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 VOS_ASSERT(0);
11850 return VOS_STATUS_E_NOMEM;
11851 }
11852 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11853 if(NULL == pWdaParams)
11854 {
11855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 VOS_ASSERT(0);
11858 vos_mem_free(wdiWowlDelBcPtrnInfo);
11859 return VOS_STATUS_E_NOMEM;
11860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11862 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011863
11864 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11865 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11866
Yue Ma7f44bbe2013-04-12 11:47:39 -070011867 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11868 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 /* Store param pointer as passed in by caller */
11870 /* store Params pass it to WDI */
11871 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11872 pWdaParams->pWdaContext = pWDA;
11873 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011874 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011875 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011876 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011877 {
11878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11879 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011880 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011881 vos_mem_free(pWdaParams->wdaMsgParam) ;
11882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11883 vos_mem_free(pWdaParams) ;
11884 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011885 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011886
11887}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011888/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011889 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 *
11891 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011892void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011893{
11894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011895 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011899 if(NULL == pWdaParams)
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 VOS_ASSERT(0) ;
11904 return ;
11905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011907 if (NULL == pWDA)
11908 {
11909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11910 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011911
11912 if(pWdaParams->wdaWdiApiMsgParam)
11913 {
11914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11915 }
11916 vos_mem_free(pWdaParams);
11917
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011918 VOS_ASSERT(0);
11919 return ;
11920 }
11921
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11923
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011924 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11925
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11927 vos_mem_free(pWdaParams) ;
11928
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011929 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011930 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 return ;
11933}
Jeff Johnson295189b2012-06-20 16:38:30 -070011934/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011935 * FUNCTION: WDA_WowlEnterReqCallback
11936 * Free memory and send WOWL Enter RSP back to PE.
11937 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11938 */
11939void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11940{
11941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011942 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011943 tSirHalWowlEnterParams *pWowlEnterParams;
11944
11945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11946 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11947
11948 if(NULL == pWdaParams)
11949 {
11950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11951 "%s: pWdaParams received NULL", __func__);
11952 VOS_ASSERT(0);
11953 return;
11954 }
11955
11956 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011957 if (NULL == pWDA)
11958 {
11959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11960 "%s:pWDA is NULL", __func__);
11961 VOS_ASSERT(0);
11962 return ;
11963 }
11964
Yue Ma7f44bbe2013-04-12 11:47:39 -070011965 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11966 pWowlEnterParams->status = wdiStatus;
11967
11968 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11969 {
11970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11971 vos_mem_free(pWdaParams);
11972 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11973 }
11974
11975 return;
11976}
11977/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 * FUNCTION: WDA_ProcessWowlEnterReq
11979 * Request to WDI to enter WOWL
11980 */
11981VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11982 tSirHalWowlEnterParams *pWowlEnterParams)
11983{
11984 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011985 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11987 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11988 sizeof(WDI_WowlEnterReqParamsType)) ;
11989 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 if(NULL == wdiWowlEnterInfo)
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 VOS_ASSERT(0);
11997 return VOS_STATUS_E_NOMEM;
11998 }
11999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12000 if(NULL == pWdaParams)
12001 {
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012004 VOS_ASSERT(0);
12005 vos_mem_free(wdiWowlEnterInfo);
12006 return VOS_STATUS_E_NOMEM;
12007 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012008
12009 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12010
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12012 pWowlEnterParams->magicPtrn,
12013 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12015 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12017 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012018 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12019 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012020 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12021 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012022 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12023 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012024 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12025 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12027 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12029 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012030#ifdef WLAN_WAKEUP_EVENTS
12031 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12032 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12033
12034 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12035 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12036
12037 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12038 pWowlEnterParams->ucWowNetScanOffloadMatch;
12039
12040 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12041 pWowlEnterParams->ucWowGTKRekeyError;
12042
12043 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12044 pWowlEnterParams->ucWoWBSSConnLoss;
12045#endif // WLAN_WAKEUP_EVENTS
12046
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012047 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12048 pWowlEnterParams->bssIdx;
12049
Yue Ma7f44bbe2013-04-12 11:47:39 -070012050 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12051 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012052 /* Store param pointer as passed in by caller */
12053 /* store Params pass it to WDI */
12054 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12055 pWdaParams->pWdaContext = pWDA;
12056 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012057 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012058 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012059 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012063 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 vos_mem_free(pWdaParams->wdaMsgParam) ;
12065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12066 vos_mem_free(pWdaParams) ;
12067 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012068 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069
12070}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012071/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012072 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 *
12074 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012075void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012076{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012077 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012078 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012079 tSirHalWowlExitParams *pWowlExitParams;
12080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012081 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012082 if(NULL == pWdaParams)
12083 {
12084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012085 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012086 VOS_ASSERT(0) ;
12087 return ;
12088 }
12089 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012090 if (NULL == pWDA)
12091 {
12092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12093 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012094
12095 if(pWdaParams->wdaWdiApiMsgParam)
12096 {
12097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12098 }
12099 vos_mem_free(pWdaParams);
12100
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012101 VOS_ASSERT(0);
12102 return ;
12103 }
12104
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012105 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12106
12107 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012108 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012109
12110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12111 vos_mem_free(pWdaParams) ;
12112
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012114 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012115 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012116 return ;
12117}
Jeff Johnson295189b2012-06-20 16:38:30 -070012118/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012119 * FUNCTION: WDA_WowlExitReqCallback
12120 * Free memory and send WOWL Exit RSP back to PE.
12121 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12122 */
12123void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12124{
12125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012126 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012127 tSirHalWowlExitParams *pWowlExitParams;
12128
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12130 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12131
12132 if(NULL == pWdaParams)
12133 {
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12135 "%s: pWdaParams received NULL", __func__);
12136 VOS_ASSERT(0);
12137 return;
12138 }
12139
12140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012141 if (NULL == pWDA)
12142 {
12143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12144 "%s:pWDA is NULL", __func__);
12145 VOS_ASSERT(0);
12146 return ;
12147 }
12148
Yue Ma7f44bbe2013-04-12 11:47:39 -070012149 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12150 pWowlExitParams->status = wdiStatus;
12151
12152 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12153 {
12154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12155 vos_mem_free(pWdaParams);
12156 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12157 }
12158
12159 return;
12160}
12161/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012162 * FUNCTION: WDA_ProcessWowlExitReq
12163 * Request to WDI to add WOWL Bcast pattern
12164 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012165VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12166 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012167{
12168 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012169 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012170 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12171 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12172 sizeof(WDI_WowlExitReqParamsType)) ;
12173 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012176 if(NULL == wdiWowlExitInfo)
12177 {
12178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012179 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012180 VOS_ASSERT(0);
12181 return VOS_STATUS_E_NOMEM;
12182 }
12183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12184 if(NULL == pWdaParams)
12185 {
12186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012187 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012188 VOS_ASSERT(0);
12189 vos_mem_free(wdiWowlExitInfo);
12190 return VOS_STATUS_E_NOMEM;
12191 }
12192
12193 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12194 pWowlExitParams->bssIdx;
12195
Yue Ma7f44bbe2013-04-12 11:47:39 -070012196 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12197 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012198
12199 /* Store param pointer as passed in by caller */
12200 /* store Params pass it to WDI */
12201 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12202 pWdaParams->pWdaContext = pWDA;
12203 pWdaParams->wdaMsgParam = pWowlExitParams;
12204
12205 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012206 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012207
Jeff Johnson43971f52012-07-17 12:26:56 -070012208 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12211 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012212 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12214 vos_mem_free(pWdaParams->wdaMsgParam);
12215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012216 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012217 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012218}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012219/*
12220 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12221 * Request to WDI to determine whether a given station is capable of
12222 * using HW-based frame translation
12223 */
12224v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12225 tANI_U8 staIdx)
12226{
12227 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12228}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012229
12230/*
12231 * FUNCTION: WDA_IsSelfSTA
12232 * Request to WDI to determine whether a given STAID is self station
12233 * index.
12234 */
12235v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12236{
12237
12238 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12239
Girish Gowli05cf44e2014-06-12 21:53:37 +053012240 if (NULL != pWDA)
12241 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12242 else
12243 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012244}
Jeff Johnson295189b2012-06-20 16:38:30 -070012245/*
12246 * FUNCTION: WDA_NvDownloadReqCallback
12247 * send NV Download RSP back to PE
12248 */
12249void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12250 void* pUserData)
12251{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012252
12253 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012254 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012255
Jeff Johnson295189b2012-06-20 16:38:30 -070012256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012257 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012258
12259 if(NULL == pWdaParams)
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012262 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012263 VOS_ASSERT(0) ;
12264 return ;
12265 }
12266
12267 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012268 if (NULL == pWDA)
12269 {
12270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12271 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012272
12273 if(pWdaParams->wdaWdiApiMsgParam)
12274 {
12275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12276 }
12277 vos_mem_free(pWdaParams);
12278
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012279 VOS_ASSERT(0);
12280 return ;
12281 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012282
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12285 vos_mem_free(pWdaParams);
12286
Jeff Johnson295189b2012-06-20 16:38:30 -070012287 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012288 return ;
12289}
Jeff Johnson295189b2012-06-20 16:38:30 -070012290/*
12291 * FUNCTION: WDA_ProcessNvDownloadReq
12292 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12293 */
12294VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12295{
12296 /* Initialize the local Variables*/
12297 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12298 v_VOID_t *pNvBuffer=NULL;
12299 v_SIZE_t bufferSize = 0;
12300 WDI_Status status = WDI_STATUS_E_FAILURE;
12301 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012302 tWDA_ReqParams *pWdaParams ;
12303
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012305 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012306 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 {
12308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012309 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012310 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 return VOS_STATUS_E_FAILURE;
12312 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012313
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012315 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12316
Jeff Johnson295189b2012-06-20 16:38:30 -070012317 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12318 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 if(NULL == wdiNvDownloadReqParam)
12320 {
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 VOS_ASSERT(0);
12324 return VOS_STATUS_E_NOMEM;
12325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 /* Copy Params to wdiNvDownloadReqParam*/
12327 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12328 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012329
12330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12331 if(NULL == pWdaParams)
12332 {
12333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012334 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012335 VOS_ASSERT(0);
12336 vos_mem_free(wdiNvDownloadReqParam);
12337 return VOS_STATUS_E_NOMEM;
12338 }
12339
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012341 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12342 pWdaParams->wdaMsgParam = NULL;
12343 pWdaParams->pWdaContext = pWDA;
12344
12345
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012347
Jeff Johnson295189b2012-06-20 16:38:30 -070012348 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012349 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12350
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 if(IS_WDI_STATUS_FAILURE(status))
12352 {
12353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12354 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12356 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012359}
12360/*
12361 * FUNCTION: WDA_FlushAcReqCallback
12362 * send Flush AC RSP back to TL
12363 */
12364void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12365{
12366 vos_msg_t wdaMsg = {0} ;
12367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12368 tFlushACReq *pFlushACReqParams;
12369 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 if(NULL == pWdaParams)
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012376 VOS_ASSERT(0) ;
12377 return ;
12378 }
12379
12380 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12381 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12382 if(NULL == pFlushACRspParams)
12383 {
12384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012387 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 return ;
12389 }
12390 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12391 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12392 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12393 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12394 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012395 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 vos_mem_free(pWdaParams->wdaMsgParam) ;
12397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12398 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12400 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12401 // POST message to TL
12402 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12403
Jeff Johnson295189b2012-06-20 16:38:30 -070012404 return ;
12405}
Jeff Johnson295189b2012-06-20 16:38:30 -070012406/*
12407 * FUNCTION: WDA_ProcessFlushAcReq
12408 * Request to WDI to Update the DELBA REQ params.
12409 */
12410VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12411 tFlushACReq *pFlushAcReqParams)
12412{
12413 WDI_Status status = WDI_STATUS_SUCCESS ;
12414 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12415 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12416 sizeof(WDI_FlushAcReqParamsType)) ;
12417 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012418 if(NULL == wdiFlushAcReqParam)
12419 {
12420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 VOS_ASSERT(0);
12423 return VOS_STATUS_E_NOMEM;
12424 }
12425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12426 if(NULL == pWdaParams)
12427 {
12428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012430 VOS_ASSERT(0);
12431 vos_mem_free(wdiFlushAcReqParam);
12432 return VOS_STATUS_E_NOMEM;
12433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12437 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12438 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12439 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012440 /* Store Flush AC pointer, as this will be used for response */
12441 /* store Params pass it to WDI */
12442 pWdaParams->pWdaContext = pWDA;
12443 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12444 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012445 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12446 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012447 if(IS_WDI_STATUS_FAILURE(status))
12448 {
12449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12450 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12451 vos_mem_free(pWdaParams->wdaMsgParam) ;
12452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12453 vos_mem_free(pWdaParams) ;
12454 //TODO: respond to TL with failure
12455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012457}
Jeff Johnson295189b2012-06-20 16:38:30 -070012458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012459 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 *
12461 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012462void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012463{
12464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012465 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012466 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012467
12468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012469 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012470 if(NULL == pWdaParams)
12471 {
12472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012473 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012474 VOS_ASSERT(0) ;
12475 return ;
12476 }
12477 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012478 if (NULL == pWDA)
12479 {
12480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12481 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012482 vos_mem_free(pWdaParams->wdaMsgParam) ;
12483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12484 vos_mem_free(pWdaParams) ;
12485
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012486 VOS_ASSERT(0);
12487 return ;
12488 }
12489
Jeff Johnson295189b2012-06-20 16:38:30 -070012490 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12491 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12492 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12493 {
12494 pWDA->wdaAmpSessionOn = VOS_FALSE;
12495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 vos_mem_free(pWdaParams->wdaMsgParam) ;
12497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12498 vos_mem_free(pWdaParams) ;
12499 /*
12500 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12501 * param here
12502 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012503 return ;
12504}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012505/*
12506 * FUNCTION: WDA_BtAmpEventReqCallback
12507 * Free memory.
12508 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12509 */
12510void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12511{
12512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012513 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012514 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012515
Yue Ma7f44bbe2013-04-12 11:47:39 -070012516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12517 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12518
12519 if(NULL == pWdaParams)
12520 {
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12522 "%s: pWdaParams received NULL", __func__);
12523 VOS_ASSERT(0);
12524 return;
12525 }
12526
12527 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012528 if (NULL == pWDA)
12529 {
12530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12531 "%s:pWDA is NULL", __func__);
12532 VOS_ASSERT(0);
12533 return ;
12534 }
12535
Yue Ma7f44bbe2013-04-12 11:47:39 -070012536 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12537
12538 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12539 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12540 {
12541 pWDA->wdaAmpSessionOn = VOS_FALSE;
12542 }
12543
12544 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12545 {
12546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12547 vos_mem_free(pWdaParams->wdaMsgParam);
12548 vos_mem_free(pWdaParams);
12549 }
12550
12551 return;
12552}
Jeff Johnson295189b2012-06-20 16:38:30 -070012553/*
12554 * FUNCTION: WDA_ProcessBtAmpEventReq
12555 * Request to WDI to Update with BT AMP events.
12556 */
12557VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12558 tSmeBtAmpEvent *pBtAmpEventParams)
12559{
12560 WDI_Status status = WDI_STATUS_SUCCESS ;
12561 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12562 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12563 sizeof(WDI_BtAmpEventParamsType)) ;
12564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 if(NULL == wdiBtAmpEventParam)
12568 {
12569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012571 VOS_ASSERT(0);
12572 return VOS_STATUS_E_NOMEM;
12573 }
12574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12575 if(NULL == pWdaParams)
12576 {
12577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 VOS_ASSERT(0);
12580 vos_mem_free(wdiBtAmpEventParam);
12581 return VOS_STATUS_E_NOMEM;
12582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012583 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12584 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012585 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12586 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 /* Store BT AMP event pointer, as this will be used for response */
12588 /* store Params pass it to WDI */
12589 pWdaParams->pWdaContext = pWDA;
12590 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12591 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012592 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012593 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012594 if(IS_WDI_STATUS_FAILURE(status))
12595 {
12596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12597 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12598 vos_mem_free(pWdaParams->wdaMsgParam) ;
12599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12600 vos_mem_free(pWdaParams) ;
12601 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012602 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12603 {
12604 pWDA->wdaAmpSessionOn = VOS_TRUE;
12605 }
12606 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012607}
12608
Jeff Johnson295189b2012-06-20 16:38:30 -070012609/*
12610 * FUNCTION: WDA_FTMCommandReqCallback
12611 * Handle FTM CMD response came from HAL
12612 * Route responce to HDD FTM
12613 */
12614void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12615 void *usrData)
12616{
12617 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12619 {
12620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012621 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 return;
12623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012624 /* Release Current FTM Command Request */
12625 vos_mem_free(pWDA->wdaFTMCmdReq);
12626 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 /* Post FTM Responce to HDD FTM */
12628 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 return;
12630}
Jeff Johnson295189b2012-06-20 16:38:30 -070012631/*
12632 * FUNCTION: WDA_ProcessFTMCommand
12633 * Send FTM command to WDI
12634 */
12635VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12636 tPttMsgbuffer *pPTTFtmCmd)
12637{
12638 WDI_Status status = WDI_STATUS_SUCCESS;
12639 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 ftmCMDReq = (WDI_FTMCommandReqType *)
12641 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12642 if(NULL == ftmCMDReq)
12643 {
12644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12645 "WDA FTM Command buffer alloc fail");
12646 return VOS_STATUS_E_NOMEM;
12647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12649 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012651 /* Send command to WDI */
12652 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 return status;
12654}
Jeff Johnsone7245742012-09-05 17:12:55 -070012655#ifdef FEATURE_OEM_DATA_SUPPORT
12656/*
12657 * FUNCTION: WDA_StartOemDataReqCallback
12658 *
12659 */
12660void WDA_StartOemDataReqCallback(
12661 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12662 void* pUserData)
12663{
12664 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012666 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012667 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012668
Jeff Johnsone7245742012-09-05 17:12:55 -070012669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012670 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012671
12672 if(NULL == pWdaParams)
12673 {
12674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012675 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012676 VOS_ASSERT(0) ;
12677 return ;
12678 }
12679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12680
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012681 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012682 {
12683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012684 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012685 VOS_ASSERT(0);
12686 return ;
12687 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012688
Jeff Johnsone7245742012-09-05 17:12:55 -070012689 /*
12690 * Allocate memory for response params sent to PE
12691 */
12692 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12693
12694 // Check if memory is allocated for OemdataMeasRsp Params.
12695 if(NULL == pOemDataRspParams)
12696 {
12697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12698 "OEM DATA WDA callback alloc fail");
12699 VOS_ASSERT(0) ;
12700 return;
12701 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012702
Jeff Johnsone7245742012-09-05 17:12:55 -070012703 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12705 vos_mem_free(pWdaParams->wdaMsgParam);
12706 vos_mem_free(pWdaParams) ;
12707
Jeff Johnsone7245742012-09-05 17:12:55 -070012708 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012709 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012710 * Also, here success always means that we have atleast one BSSID.
12711 */
12712 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12713
12714 //enable Tx
12715 status = WDA_ResumeDataTx(pWDA);
12716 if(status != VOS_STATUS_SUCCESS)
12717 {
12718 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12719 }
12720 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12721 return ;
12722}
12723/*
12724 * FUNCTION: WDA_ProcessStartOemDataReq
12725 * Send Start Oem Data Req to WDI
12726 */
12727VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12728 tStartOemDataReq *pOemDataReqParams)
12729{
12730 WDI_Status status = WDI_STATUS_SUCCESS;
12731 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012732 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012733
12734 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12735
12736 if(NULL == wdiOemDataReqParams)
12737 {
12738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012740 VOS_ASSERT(0);
12741 return VOS_STATUS_E_NOMEM;
12742 }
12743
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012744 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12745 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12746 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12747 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012748
12749 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12750
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012751 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12752 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012753 {
12754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012756 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012757 vos_mem_free(pOemDataReqParams);
12758 VOS_ASSERT(0);
12759 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012760 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012761
Bernald44a1ae2013-01-09 08:30:39 -080012762 pWdaParams->pWdaContext = (void*)pWDA;
12763 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12764 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012765
12766 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12767 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012768
12769 if(IS_WDI_STATUS_FAILURE(status))
12770 {
12771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12772 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12774 vos_mem_free(pWdaParams->wdaMsgParam);
12775 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012776 }
12777 return CONVERT_WDI2VOS_STATUS(status) ;
12778}
12779#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012780/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012781 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012782 *
12783 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012784void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012785{
12786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012788 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012789 if(NULL == pWdaParams)
12790 {
12791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012792 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012793 VOS_ASSERT(0) ;
12794 return ;
12795 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012796
12797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12798 vos_mem_free(pWdaParams->wdaMsgParam);
12799 vos_mem_free(pWdaParams);
12800
12801 return ;
12802}
12803/*
12804 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12805 * Free memory.
12806 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12807 */
12808void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12809{
12810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12811
12812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12813 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12814
12815 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12818 "%s: pWdaParams received NULL", __func__);
12819 VOS_ASSERT(0);
12820 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012821 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012822
12823 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 {
12825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012826 vos_mem_free(pWdaParams->wdaMsgParam);
12827 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012828 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012829
12830 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012831}
Jeff Johnson295189b2012-06-20 16:38:30 -070012832#ifdef WLAN_FEATURE_GTK_OFFLOAD
12833/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012834 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012835 *
12836 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012837void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012838 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012839{
12840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12841
12842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012843 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012844 if(NULL == pWdaParams)
12845 {
12846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12847 "%s: pWdaParams received NULL", __func__);
12848 VOS_ASSERT(0);
12849 return;
12850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012851
Jeff Johnson295189b2012-06-20 16:38:30 -070012852 vos_mem_free(pWdaParams->wdaMsgParam) ;
12853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12854 vos_mem_free(pWdaParams) ;
12855
12856 //print a msg, nothing else to do
12857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012858 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012859
12860 return ;
12861}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012862/*
12863 * FUNCTION: WDA_GTKOffloadReqCallback
12864 * Free memory.
12865 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12866 */
12867void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12868{
12869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012870
Yue Ma7f44bbe2013-04-12 11:47:39 -070012871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12872 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12873
12874 if(NULL == pWdaParams)
12875 {
12876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12877 "%s: pWdaParams received NULL", __func__);
12878 VOS_ASSERT(0);
12879 return;
12880 }
12881
12882 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12883 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012884 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12885 sizeof(WDI_GtkOffloadReqMsg));
12886 vos_mem_zero(pWdaParams->wdaMsgParam,
12887 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12889 vos_mem_free(pWdaParams->wdaMsgParam);
12890 vos_mem_free(pWdaParams);
12891 }
12892
12893 return;
12894}
Jeff Johnson295189b2012-06-20 16:38:30 -070012895/*
12896 * FUNCTION: WDA_ProcessGTKOffloadReq
12897 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12898 * to broadcast traffic (sta mode).
12899 */
12900VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12901 tpSirGtkOffloadParams pGtkOffloadParams)
12902{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012903 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012904 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12905 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12906 sizeof(WDI_GtkOffloadReqMsg)) ;
12907 tWDA_ReqParams *pWdaParams ;
12908
12909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012911
12912 if(NULL == wdiGtkOffloadReqMsg)
12913 {
12914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012916 VOS_ASSERT(0);
12917 return VOS_STATUS_E_NOMEM;
12918 }
12919
12920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12921 if(NULL == pWdaParams)
12922 {
12923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012925 VOS_ASSERT(0);
12926 vos_mem_free(wdiGtkOffloadReqMsg);
12927 return VOS_STATUS_E_NOMEM;
12928 }
12929
12930 //
12931 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12932 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012933
12934 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012935 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012936
Jeff Johnson295189b2012-06-20 16:38:30 -070012937 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12938 // Copy KCK
12939 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12940 // Copy KEK
12941 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12942 // Copy KeyReplayCounter
12943 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12944 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12945
Yue Ma7f44bbe2013-04-12 11:47:39 -070012946 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12947 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012948
Jeff Johnson295189b2012-06-20 16:38:30 -070012949
12950 /* Store Params pass it to WDI */
12951 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12952 pWdaParams->pWdaContext = pWDA;
12953 /* Store param pointer as passed in by caller */
12954 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12955
Yue Ma7f44bbe2013-04-12 11:47:39 -070012956 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012957
12958 if(IS_WDI_STATUS_FAILURE(status))
12959 {
12960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12961 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012962 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12963 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12965 vos_mem_free(pWdaParams->wdaMsgParam);
12966 vos_mem_free(pWdaParams);
12967 }
12968
12969 return CONVERT_WDI2VOS_STATUS(status) ;
12970}
12971
12972/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012973 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012974 *
12975 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012976void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012977 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012978{
12979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12980 tWDA_CbContext *pWDA;
12981 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012982 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 vos_msg_t vosMsg;
12984
12985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012986 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012987
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012988 if(NULL == pWdaParams)
12989 {
12990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12991 "%s: pWdaParams received NULL", __func__);
12992 VOS_ASSERT(0);
12993 return;
12994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012995
Nirav Shah374de6e2014-02-13 16:40:01 +053012996 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12997 if(NULL == pGtkOffloadGetInfoRsp)
12998 {
12999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13000 "%s: vos_mem_malloc failed ", __func__);
13001 VOS_ASSERT(0);
13002 return;
13003 }
13004
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13006 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13007
13008 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13009 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13010
13011 /* Message Header */
13012 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013013 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013014
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013015 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13016 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13017 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13018 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13019 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013020
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013021 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13022 pwdiGtkOffloadGetInfoRsparams->bssId,
13023 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013024 /* VOS message wrapper */
13025 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13026 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13027 vosMsg.bodyval = 0;
13028
13029 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13030 {
13031 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013032 vos_mem_zero(pGtkOffloadGetInfoRsp,
13033 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013034 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13035 }
13036
13037 vos_mem_free(pWdaParams->wdaMsgParam) ;
13038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13039 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013040
13041 return;
13042}
13043/*
13044 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13045 * Free memory and send RSP back to SME.
13046 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13047 */
13048void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13049{
13050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13051 vos_msg_t vosMsg;
13052
13053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13054 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13055
13056 if(NULL == pWdaParams)
13057 {
13058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13059 "%s: pWdaParams received NULL", __func__);
13060 VOS_ASSERT(0);
13061 return;
13062 }
13063
13064 /* VOS message wrapper */
13065 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13066 vosMsg.bodyptr = NULL;
13067 vosMsg.bodyval = 0;
13068
13069 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13070 {
13071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13072 vos_mem_free(pWdaParams->wdaMsgParam);
13073 vos_mem_free(pWdaParams);
13074 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13075 }
13076
13077 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013078}
13079#endif
13080
13081/*
13082 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13083 * Request to WDI to set Tx Per Tracking configurations
13084 */
13085VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13086{
13087 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013088 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13090 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13091 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13092 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013094 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 if(NULL == pwdiSetTxPerTrackingReqParams)
13096 {
13097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 vos_mem_free(pTxPerTrackingParams);
13100 VOS_ASSERT(0);
13101 return VOS_STATUS_E_NOMEM;
13102 }
13103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13104 if(NULL == pWdaParams)
13105 {
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13109 vos_mem_free(pTxPerTrackingParams);
13110 VOS_ASSERT(0);
13111 return VOS_STATUS_E_NOMEM;
13112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13114 pTxPerTrackingParams->ucTxPerTrackingEnable;
13115 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13116 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13117 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13118 pTxPerTrackingParams->ucTxPerTrackingRatio;
13119 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13120 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013121 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13122 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 /* Store param pointer as passed in by caller */
13124 /* store Params pass it to WDI
13125 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13126 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13127 pWdaParams->pWdaContext = pWDA;
13128 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013129 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013130 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013131 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 {
13133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13134 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013135 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 vos_mem_free(pWdaParams->wdaMsgParam) ;
13137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13138 vos_mem_free(pWdaParams) ;
13139 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013140 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013141
13142}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013143/*
13144 * FUNCTION: WDA_HALDumpCmdCallback
13145 * Send the VOS complete .
13146 */
13147void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13148 void* pUserData)
13149{
13150 tANI_U8 *buffer = NULL;
13151 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013152 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 if(NULL == pWdaParams)
13154 {
13155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013156 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_ASSERT(0) ;
13158 return ;
13159 }
13160
13161 pWDA = pWdaParams->pWdaContext;
13162 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163 if(wdiRspParams->usBufferLen > 0)
13164 {
13165 /*Copy the Resp data to UMAC supplied buffer*/
13166 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13167 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013168
13169 if (!pWdaParams->wdaHALDumpAsync)
13170 {/* Indicate VOSS about the start complete */
13171 vos_WDAComplete_cback(pWDA->pVosContext);
13172 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13174 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 return ;
13176}
13177
Jeff Johnson295189b2012-06-20 16:38:30 -070013178/*
13179 * FUNCTION: WDA_ProcessHALDumpCmdReq
13180 * Send Dump command to WDI
13181 */
13182VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13183 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013184 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013185{
13186 WDI_Status status = WDI_STATUS_SUCCESS;
13187 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13188 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013189 tWDA_HalDumpReqParams *pWdaParams ;
13190
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 pVosContextType pVosContext = NULL;
13192 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13194 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013195 if(pVosContext)
13196 {
13197 if (pVosContext->isLogpInProgress)
13198 {
13199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13200 "%s:LOGP in Progress. Ignore!!!", __func__);
13201 return VOS_STATUS_E_BUSY;
13202 }
13203 }
13204 else
13205 {
13206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13207 "%s: VOS Context Null", __func__);
13208 return VOS_STATUS_E_RESOURCES;
13209 }
13210
Siddharth Bhal68115602015-01-18 20:44:55 +053013211 if (NULL == pVosContext->pWDAContext)
13212 {
13213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13214 "%s: WDA Context Null", __func__);
13215 return VOS_STATUS_E_RESOURCES;
13216 }
13217 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 if(NULL == pWdaParams)
13219 {
13220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 return VOS_STATUS_E_NOMEM;
13223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013224 /* Allocate memory WDI request structure*/
13225 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13226 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13227 if(NULL == wdiHALDumpCmdReqParam)
13228 {
13229 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13230 "WDA HAL DUMP Command buffer alloc fail");
13231 vos_mem_free(pWdaParams);
13232 return WDI_STATUS_E_FAILURE;
13233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013234 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013235 /* Extract the arguments */
13236 wdiHalDumpCmdInfo->command = cmd;
13237 wdiHalDumpCmdInfo->argument1 = arg1;
13238 wdiHalDumpCmdInfo->argument2 = arg2;
13239 wdiHalDumpCmdInfo->argument3 = arg3;
13240 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013243 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013244
13245 /* Response message will be passed through the buffer */
13246 pWdaParams->wdaMsgParam = (void *)pBuffer;
13247
13248 /* store Params pass it to WDI */
13249 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013251 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13252 pWdaParams);
13253 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13254 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013255 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013256 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13257 WDA_DUMPCMD_WAIT_TIMEOUT );
13258 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013259 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013260 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13261 {
13262 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13263 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13264 }
13265 else
13266 {
13267 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13268 "%s: WDA_HALDUMP reporting other error",__func__);
13269 }
13270 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 }
13273 return status;
13274}
Jeff Johnson295189b2012-06-20 16:38:30 -070013275#ifdef WLAN_FEATURE_GTK_OFFLOAD
13276/*
13277 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13278 * Request to WDI to get GTK Offload Information
13279 */
13280VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13281 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13282{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013283 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13285 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13286 tWDA_ReqParams *pWdaParams ;
13287
13288 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13289 {
13290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 VOS_ASSERT(0);
13293 return VOS_STATUS_E_NOMEM;
13294 }
13295
13296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13297 if(NULL == pWdaParams)
13298 {
13299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 VOS_ASSERT(0);
13302 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13303 return VOS_STATUS_E_NOMEM;
13304 }
13305
Yue Ma7f44bbe2013-04-12 11:47:39 -070013306 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13307 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013308
Jeff Johnson295189b2012-06-20 16:38:30 -070013309 /* Store Params pass it to WDI */
13310 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13311 pWdaParams->pWdaContext = pWDA;
13312 /* Store param pointer as passed in by caller */
13313 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13314
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013315 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013316 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013317
Yue Ma7f44bbe2013-04-12 11:47:39 -070013318 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013319
13320 if(IS_WDI_STATUS_FAILURE(status))
13321 {
13322 /* failure returned by WDI API */
13323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13324 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13326 vos_mem_free(pWdaParams) ;
13327 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13328 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13329 }
13330
13331 return CONVERT_WDI2VOS_STATUS(status) ;
13332}
13333#endif // WLAN_FEATURE_GTK_OFFLOAD
13334
13335/*
Yue Mab9c86f42013-08-14 15:59:08 -070013336 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13337 *
13338 */
13339VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13340 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13341{
13342 WDI_Status wdiStatus;
13343 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13344
13345 addPeriodicTxPtrnParams =
13346 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13347
13348 if (NULL == addPeriodicTxPtrnParams)
13349 {
13350 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13351 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13352 __func__);
13353
13354 return VOS_STATUS_E_NOMEM;
13355 }
13356
13357 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13358 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13359
13360 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13361 addPeriodicTxPtrnParams->pUserData = pWDA;
13362
13363 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13364
13365 if (WDI_STATUS_PENDING == wdiStatus)
13366 {
13367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13368 "Pending received for %s:%d", __func__, __LINE__ );
13369 }
13370 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13371 {
13372 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13373 "Failure in %s:%d", __func__, __LINE__ );
13374 }
13375
13376 vos_mem_free(addPeriodicTxPtrnParams);
13377
13378 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13379}
13380
13381/*
13382 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13383 *
13384 */
13385VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13386 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13387{
13388 WDI_Status wdiStatus;
13389 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13390
13391 delPeriodicTxPtrnParams =
13392 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13393
13394 if (NULL == delPeriodicTxPtrnParams)
13395 {
13396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13397 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13398 __func__);
13399
13400 return VOS_STATUS_E_NOMEM;
13401 }
13402
13403 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13404 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13405
13406 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13407 delPeriodicTxPtrnParams->pUserData = pWDA;
13408
13409 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13410
13411 if (WDI_STATUS_PENDING == wdiStatus)
13412 {
13413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13414 "Pending received for %s:%d", __func__, __LINE__ );
13415 }
13416 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13417 {
13418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13419 "Failure in %s:%d", __func__, __LINE__ );
13420 }
13421
13422 vos_mem_free(delPeriodicTxPtrnParams);
13423
13424 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13425}
13426
Rajeev79dbe4c2013-10-05 11:03:42 +053013427#ifdef FEATURE_WLAN_BATCH_SCAN
13428/*
13429 * FUNCTION: WDA_ProcessStopBatchScanInd
13430 *
13431 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13432 *
13433 * PARAM:
13434 * pWDA: pointer to WDA context
13435 * pReq: pointer to stop batch scan request
13436 */
13437VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13438 tSirStopBatchScanInd *pReq)
13439{
13440 WDI_Status wdiStatus;
13441 WDI_StopBatchScanIndType wdiReq;
13442
13443 wdiReq.param = pReq->param;
13444
13445 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13446
13447 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13448 {
13449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13450 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13451 }
13452
13453 vos_mem_free(pReq);
13454
13455 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13456}
13457/*==========================================================================
13458 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13459
13460 DESCRIPTION
13461 API to pull batch scan result from FW
13462
13463 PARAMETERS
13464 pWDA: Pointer to WDA context
13465 pGetBatchScanReq: Pointer to get batch scan result indication
13466
13467 RETURN VALUE
13468 NONE
13469
13470===========================================================================*/
13471VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13472 tSirTriggerBatchScanResultInd *pReq)
13473{
13474 WDI_Status wdiStatus;
13475 WDI_TriggerBatchScanResultIndType wdiReq;
13476
13477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13478 "------> %s " ,__func__);
13479
13480 wdiReq.param = pReq->param;
13481
13482 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13483
13484 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13485 {
13486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13487 "Trigger batch scan result ind failed %s:%d",
13488 __func__, wdiStatus);
13489 }
13490
13491 vos_mem_free(pReq);
13492
13493 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13494}
13495
13496/*==========================================================================
13497 FUNCTION WDA_SetBatchScanRespCallback
13498
13499 DESCRIPTION
13500 API to process set batch scan response from FW
13501
13502 PARAMETERS
13503 pRsp: Pointer to set batch scan response
13504 pUserData: Pointer to user data
13505
13506 RETURN VALUE
13507 NONE
13508
13509===========================================================================*/
13510void WDA_SetBatchScanRespCallback
13511(
13512 WDI_SetBatchScanRspType *pRsp,
13513 void* pUserData
13514)
13515{
13516 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13517 tpAniSirGlobal pMac;
13518 void *pCallbackContext;
13519 tWDA_CbContext *pWDA = NULL ;
13520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13521
13522
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13524 "<------ %s " ,__func__);
13525 if (NULL == pWdaParams)
13526 {
13527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13528 "%s: pWdaParams received NULL", __func__);
13529 VOS_ASSERT(0) ;
13530 return ;
13531 }
13532
13533 /*extract WDA context*/
13534 pWDA = pWdaParams->pWdaContext;
13535 if (NULL == pWDA)
13536 {
13537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13538 "%s:pWDA is NULL can't invole HDD callback",
13539 __func__);
13540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13541 vos_mem_free(pWdaParams->wdaMsgParam);
13542 vos_mem_free(pWdaParams);
13543 VOS_ASSERT(0);
13544 return;
13545 }
13546
13547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13548 vos_mem_free(pWdaParams->wdaMsgParam);
13549 vos_mem_free(pWdaParams);
13550
13551 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13552 if (NULL == pMac)
13553 {
13554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13555 "%s:pMac is NULL", __func__);
13556 VOS_ASSERT(0);
13557 return;
13558 }
13559
13560 pHddSetBatchScanRsp =
13561 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13562 if (NULL == pHddSetBatchScanRsp)
13563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13565 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13566 VOS_ASSERT(0);
13567 return;
13568 }
13569
13570 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13571
13572 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13573 /*call hdd callback with set batch scan response data*/
13574 if(pMac->pmc.setBatchScanReqCallback)
13575 {
13576 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13577 }
13578 else
13579 {
13580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13581 "%s:HDD callback is null", __func__);
13582 VOS_ASSERT(0);
13583 }
13584
13585 vos_mem_free(pHddSetBatchScanRsp);
13586 return ;
13587}
13588
13589/*==========================================================================
13590 FUNCTION WDA_ProcessSetBatchScanReq
13591
13592 DESCRIPTION
13593 API to send set batch scan request to WDI
13594
13595 PARAMETERS
13596 pWDA: Pointer to WDA context
13597 pSetBatchScanReq: Pointer to set batch scan req
13598
13599 RETURN VALUE
13600 NONE
13601
13602===========================================================================*/
13603VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13604 tSirSetBatchScanReq *pSetBatchScanReq)
13605{
13606 WDI_Status status;
13607 tWDA_ReqParams *pWdaParams ;
13608 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13609
13610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13611 "------> %s " ,__func__);
13612
13613 pWdiSetBatchScanReq =
13614 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13615 if (NULL == pWdiSetBatchScanReq)
13616 {
13617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13618 "%s: VOS MEM Alloc Failure", __func__);
13619 vos_mem_free(pSetBatchScanReq);
13620 VOS_ASSERT(0);
13621 return VOS_STATUS_E_NOMEM;
13622 }
13623
13624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13625 if (NULL == pWdaParams)
13626 {
13627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13628 "%s: VOS MEM Alloc Failure", __func__);
13629 VOS_ASSERT(0);
13630 vos_mem_free(pSetBatchScanReq);
13631 vos_mem_free(pWdiSetBatchScanReq);
13632 return VOS_STATUS_E_NOMEM;
13633 }
13634
13635 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13636 pWdiSetBatchScanReq->numberOfScansToBatch =
13637 pSetBatchScanReq->numberOfScansToBatch;
13638 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13639 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13640 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13641
13642 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13643 pWdaParams->pWdaContext = pWDA;
13644 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13645
13646 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13647 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13648 if (IS_WDI_STATUS_FAILURE(status))
13649 {
13650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13651 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13653 vos_mem_free(pWdaParams->wdaMsgParam);
13654 vos_mem_free(pWdaParams);
13655 }
13656 return CONVERT_WDI2VOS_STATUS(status);
13657}
13658
13659#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013660/*
13661 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13662 *
13663 * DESCRIPTION: This function sends start/update OBSS scan
13664 * inidcation message to WDI
13665 *
13666 * PARAM:
13667 * pWDA: pointer to WDA context
13668 * pReq: pointer to start OBSS scan request
13669 */
13670VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13671 tSirHT40OBSSScanInd *pReq)
13672{
13673 WDI_Status status;
13674 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13675 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013676
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13678 "------> %s " ,__func__);
13679 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13680 wdiOBSSScanParams.pUserData = pWDA;
13681
13682 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13683 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13684 pWdiOBSSScanInd->scanType = pReq->scanType;
13685 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13686 pReq->OBSSScanActiveDwellTime;
13687 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13688 pReq->OBSSScanPassiveDwellTime;
13689 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13690 pReq->BSSChannelWidthTriggerScanInterval;
13691 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13692 pReq->BSSWidthChannelTransitionDelayFactor;
13693 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13694 pReq->OBSSScanActiveTotalPerChannel;
13695 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13696 pReq->OBSSScanPassiveTotalPerChannel;
13697 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13698 pReq->OBSSScanActivityThreshold;
13699 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13700 vos_mem_copy(pWdiOBSSScanInd->channels,
13701 pReq->channels,
13702 pReq->channelCount);
13703 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13704 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13705 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13706 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13707 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13708
13709 vos_mem_copy(pWdiOBSSScanInd->ieField,
13710 pReq->ieField,
13711 pReq->ieFieldLen);
13712
13713 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13714 if (WDI_STATUS_PENDING == status)
13715 {
13716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13717 "Pending received for %s:%d ",__func__,__LINE__ );
13718 }
13719 else if (WDI_STATUS_SUCCESS_SYNC != status)
13720 {
13721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13722 "Failure in %s:%d ",__func__,__LINE__ );
13723 }
13724 return CONVERT_WDI2VOS_STATUS(status) ;
13725}
13726/*
13727 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13728 *
13729 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13730 *
13731 * PARAM:
13732 * pWDA: pointer to WDA context
13733 * pReq: pointer to stop batch scan request
13734 */
13735VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13736 tANI_U8 *bssIdx)
13737{
13738 WDI_Status status;
13739
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13741 "------> %s " ,__func__);
13742
13743 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13744 if (WDI_STATUS_PENDING == status)
13745 {
13746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13747 "Pending received for %s:%d ",__func__,__LINE__ );
13748 }
13749 else if (WDI_STATUS_SUCCESS_SYNC != status)
13750 {
13751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13752 "Failure in %s:%d ",__func__,__LINE__ );
13753 }
13754 return CONVERT_WDI2VOS_STATUS(status) ;
13755}
Yue Mab9c86f42013-08-14 15:59:08 -070013756/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013757 * FUNCTION: WDA_ProcessRateUpdateInd
13758 *
13759 */
13760VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13761 tSirRateUpdateInd *pRateUpdateParams)
13762{
13763 WDI_Status wdiStatus;
13764 WDI_RateUpdateIndParams rateUpdateParams;
13765
13766 vos_mem_copy(rateUpdateParams.bssid,
13767 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13768
13769 rateUpdateParams.ucastDataRateTxFlag =
13770 pRateUpdateParams->ucastDataRateTxFlag;
13771 rateUpdateParams.reliableMcastDataRateTxFlag =
13772 pRateUpdateParams->reliableMcastDataRateTxFlag;
13773 rateUpdateParams.mcastDataRate24GHzTxFlag =
13774 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13775 rateUpdateParams.mcastDataRate5GHzTxFlag =
13776 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13777
13778 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13779 rateUpdateParams.reliableMcastDataRate =
13780 pRateUpdateParams->reliableMcastDataRate;
13781 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13782 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13783
13784 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13785 rateUpdateParams.pUserData = pWDA;
13786
13787 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13788
13789 if (WDI_STATUS_PENDING == wdiStatus)
13790 {
13791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13792 "Pending received for %s:%d", __func__, __LINE__ );
13793 }
13794 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13795 {
13796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13797 "Failure in %s:%d", __func__, __LINE__ );
13798 }
13799
13800 vos_mem_free(pRateUpdateParams);
13801
13802 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13803}
13804
13805/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 * -------------------------------------------------------------------------
13807 * DATA interface with WDI for Mgmt Frames
13808 * -------------------------------------------------------------------------
13809 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013810/*
13811 * FUNCTION: WDA_TxComplete
13812 * Callback function for the WDA_TxPacket
13813 */
13814VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13815 VOS_STATUS status )
13816{
13817
13818 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13819 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013820 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013821
Mihir Shete63341222015-03-24 15:39:18 +053013822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13823
Jeff Johnson295189b2012-06-20 16:38:30 -070013824 if(NULL == wdaContext)
13825 {
13826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13827 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013828 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013829 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013830 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 return VOS_STATUS_E_FAILURE;
13832 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013833
13834 /*Check if frame was timed out or not*/
13835 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13836 (v_PVOID_t)&uUserData);
13837
13838 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13839 {
13840 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13842 "%s: MGMT Frame Tx timed out",
13843 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013844 vos_pkt_return_packet(pData);
13845 return VOS_STATUS_SUCCESS;
13846 }
13847
Jeff Johnson295189b2012-06-20 16:38:30 -070013848 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13849 if( NULL!=wdaContext->pTxCbFunc)
13850 {
13851 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013852 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 {
13854 wdaContext->pTxCbFunc(pMac, pData);
13855 }
13856 else
13857 {
13858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013859 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013860 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 //Return from here since we reaching here because the packet already timeout
13862 return status;
13863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 }
13865
13866 /*
13867 * Trigger the event to bring the HAL TL Tx complete function to come
13868 * out of wait
13869 * Let the coe above to complete the packet first. When this event is set,
13870 * the thread waiting for the event may run and set Vospacket_freed causing the original
13871 * packet not being freed.
13872 */
13873 status = vos_event_set(&wdaContext->txFrameEvent);
13874 if(!VOS_IS_STATUS_SUCCESS(status))
13875 {
13876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013877 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013879 return status;
13880}
Jeff Johnson295189b2012-06-20 16:38:30 -070013881/*
13882 * FUNCTION: WDA_TxPacket
13883 * Forward TX management frame to WDI
13884 */
13885VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13886 void *pFrmBuf,
13887 tANI_U16 frmLen,
13888 eFrameType frmType,
13889 eFrameTxDir txDir,
13890 tANI_U8 tid,
13891 pWDATxRxCompFunc pCompFunc,
13892 void *pData,
13893 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013894 tANI_U32 txFlag,
13895 tANI_U32 txBdToken
13896 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013897{
13898 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13899 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13900 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13901 tANI_U8 eventIdx = 0;
13902 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13903 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013904 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013905
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 if((NULL == pWDA)||(NULL == pFrmBuf))
13907 {
13908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013909 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013910 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 VOS_ASSERT(0);
13912 return VOS_STATUS_E_FAILURE;
13913 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013914
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013916 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13917 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013918 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13919 if(NULL == pMac)
13920 {
13921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013922 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 VOS_ASSERT(0);
13924 return VOS_STATUS_E_FAILURE;
13925 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013926
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 /* store the call back function in WDA context */
13928 pWDA->pTxCbFunc = pCompFunc;
13929 /* store the call back for the function of ackTxComplete */
13930 if( pAckTxComp )
13931 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013932 if( NULL != pWDA->pAckTxCbFunc )
13933 {
13934 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013936 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013937 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013938 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013939
Jeff Johnsone7245742012-09-05 17:12:55 -070013940 if( VOS_STATUS_SUCCESS !=
13941 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13942 {
13943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13944 "Tx Complete timeout Timer Stop Failed ");
13945 }
13946 else
13947 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013949 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013950 }
13951 }
13952
13953 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13954 pWDA->pAckTxCbFunc = pAckTxComp;
13955 if( VOS_STATUS_SUCCESS !=
13956 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13957 {
13958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13959 "Tx Complete Timer Start Failed ");
13960 pWDA->pAckTxCbFunc = NULL;
13961 return eHAL_STATUS_FAILURE;
13962 }
13963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013964 /* Reset the event to be not signalled */
13965 status = vos_event_reset(&pWDA->txFrameEvent);
13966 if(!VOS_IS_STATUS_SUCCESS(status))
13967 {
13968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013969 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13971 if( pAckTxComp )
13972 {
13973 pWDA->pAckTxCbFunc = NULL;
13974 if( VOS_STATUS_SUCCESS !=
13975 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13976 {
13977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13978 "Tx Complete timeout Timer Stop Failed ");
13979 }
13980 }
13981 return VOS_STATUS_E_FAILURE;
13982 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013983
13984 /* If Peer Sta mask is set don't overwrite to self sta */
13985 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013987 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013988 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013989 else
13990 {
Ganesh K08bce952012-12-13 15:04:41 -080013991 /* Get system role, use the self station if in unknown role or STA role */
13992 systemRole = wdaGetGlobalSystemRole(pMac);
13993 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13994 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013995#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013996 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013997#endif
Ganesh K08bce952012-12-13 15:04:41 -080013998 ))
13999 {
14000 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14001 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014003
Jeff Johnsone7245742012-09-05 17:12:55 -070014004 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14005 disassoc frame reaches the HW, HAL has already deleted the peer station */
14006 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014007 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014008 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014009 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014011 /*Send Probe request frames on self sta idx*/
14012 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014014 /* Since we donot want probe responses to be retried, send probe responses
14015 through the NO_ACK queues */
14016 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14017 {
14018 //probe response is sent out using self station and no retries options.
14019 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14020 }
14021 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14022 {
14023 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14024 }
14025 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014026#ifdef FEATURE_WLAN_TDLS
14027 /* TDLS Management frames are sent using Peer Sta mask */
14028 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14029 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14030 {
14031 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14032
14033 }
14034#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014035 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014036
14037 /*Set frame tag to 0
14038 We will use the WDA user data in order to tag a frame as expired*/
14039 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14040 (v_PVOID_t)0);
14041
14042
14043 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014044 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14045 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014046 {
14047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014048 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014049 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014050 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 -070014051 if( pAckTxComp )
14052 {
14053 pWDA->pAckTxCbFunc = NULL;
14054 if( VOS_STATUS_SUCCESS !=
14055 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14056 {
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14058 "Tx Complete timeout Timer Stop Failed ");
14059 }
14060 }
14061 return VOS_STATUS_E_FAILURE;
14062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014063 /*
14064 * Wait for the event to be set by the TL, to get the response of TX
14065 * complete, this event should be set by the Callback function called by TL
14066 */
14067 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14068 &eventIdx);
14069 if(!VOS_IS_STATUS_SUCCESS(status))
14070 {
14071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14072 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014073 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014074
14075 /*Tag Frame as timed out for later deletion*/
14076 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14077 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014078 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14079 after the packet gets completed(packet freed once)*/
14080
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014081 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014082 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014083
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 /* check whether the packet was freed already,so need not free again when
14085 * TL calls the WDA_Txcomplete routine
14086 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014087 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14088 /*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 -070014089 {
14090 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014091 } */
Abhishek Singh837adf22015-10-01 17:37:37 +053014092 if (vos_isFatalEventEnabled())
14093 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14094 WLAN_LOG_INDICATOR_HOST_DRIVER,
14095 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14096 FALSE, TRUE);
14097 else
Abhishek Singh84fc7512015-10-06 14:27:25 +053014098 vos_wlanRestart();
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014099
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 if( pAckTxComp )
14101 {
14102 pWDA->pAckTxCbFunc = NULL;
14103 if( VOS_STATUS_SUCCESS !=
14104 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14105 {
14106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14107 "Tx Complete timeout Timer Stop Failed ");
14108 }
14109 }
14110 status = VOS_STATUS_E_FAILURE;
14111 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014112#ifdef WLAN_DUMP_MGMTFRAMES
14113 if (VOS_IS_STATUS_SUCCESS(status))
14114 {
14115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14116 "%s() TX packet : SubType %d", __func__,pFc->subType);
14117 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14118 pData, frmLen);
14119 }
14120#endif
14121
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014122 if (VOS_IS_STATUS_SUCCESS(status))
14123 {
14124 if (pMac->fEnableDebugLog & 0x1)
14125 {
14126 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14127 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14128 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14129 {
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14131 pFc->type, pFc->subType);
14132 }
14133 }
14134 }
14135
14136
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 return status;
14138}
Jeff Johnson295189b2012-06-20 16:38:30 -070014139/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014140 * FUNCTION: WDA_ProcessDHCPStartInd
14141 * Forward DHCP Start to WDI
14142 */
14143static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14144 tAniDHCPInd *dhcpStartInd)
14145{
14146 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014147 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014148
c_hpothu0b0cab72014-02-13 21:52:40 +053014149 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14150 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014151 sizeof(tSirMacAddr));
14152
c_hpothu0b0cab72014-02-13 21:52:40 +053014153 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014154
c_hpothu0b0cab72014-02-13 21:52:40 +053014155 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014156 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14158 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014159 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014160 else if (WDI_STATUS_SUCCESS_SYNC != status)
14161 {
14162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14163 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14164 }
14165
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014166 vos_mem_free(dhcpStartInd);
14167 return CONVERT_WDI2VOS_STATUS(status) ;
14168}
14169
14170 /*
14171 * FUNCTION: WDA_ProcessDHCPStopInd
14172 * Forward DHCP Stop to WDI
14173 */
14174 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14175 tAniDHCPInd *dhcpStopInd)
14176 {
14177 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014178 WDI_DHCPInd wdiDHCPInd;
14179
14180 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14181 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14182
14183 status = WDI_dhcpStopInd(&wdiDHCPInd);
14184
14185 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014186 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14188 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014189 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014190 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014191 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14193 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014194 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014195
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014196 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014197
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014198 return CONVERT_WDI2VOS_STATUS(status) ;
14199 }
14200
14201/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014202 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14203 *
14204 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14205 *
14206 * PARAM:
14207 * pWDA: pointer to WDA context
14208 * pReq: pointer to stop batch scan request
14209 */
14210VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14211 tpSpoofMacAddrReqParams pReq)
14212{
14213 WDI_Status wdiStatus;
14214 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14215 tWDA_ReqParams *pWdaParams;
14216
14217 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14218 sizeof(WDI_SpoofMacAddrInfoType));
14219 if(NULL == WDI_SpoofMacAddrInfoParams) {
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14221 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14222 VOS_ASSERT(0);
14223 return VOS_STATUS_E_NOMEM;
14224 }
14225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14226 if(NULL == pWdaParams) {
14227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14228 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014229 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014230 VOS_ASSERT(0);
14231 return VOS_STATUS_E_NOMEM;
14232 }
14233
14234 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14235 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14236
14237 pWdaParams->pWdaContext = pWDA;
14238 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014239 pWdaParams->wdaMsgParam = (void *)pReq;
14240
14241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14242 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14243
Siddharth Bhal171788a2014-09-29 21:02:40 +053014244 /* store Params pass it to WDI */
14245 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14246
14247 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014248 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14249 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014250
14251 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14252 {
14253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14254 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14256 vos_mem_free(pWdaParams->wdaMsgParam);
14257 vos_mem_free(pWdaParams);
14258 }
14259
14260 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14261}
14262
c_manjeecfd1efb2015-09-25 19:32:34 +053014263
14264/*
14265 * FUNCTION: WDA_FwrMemDumpRespCallback
14266 * recieves Mgmt Logging init response from FW
14267 */
14268 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14269 void* pUserData)
14270{
14271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14272 tAniFwrDumpReq *pFwrMemDumpReq;
14273 tAniFwrDumpRsp *pFwrMemDumpRsp;
14274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14275 "<------ %s " ,__func__);
14276
14277 if(NULL == pWdaParams)
14278 {
14279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14280 "%s: pWdaParams received NULL", __func__);
14281 VOS_ASSERT(0);
14282 return ;
14283 }
14284
14285 if(NULL == pWdaParams->wdaMsgParam)
14286 {
14287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14288 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14289 VOS_ASSERT(0);
14290 vos_mem_free(pWdaParams);
14291 return ;
14292 }
14293
14294 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14295 if(pFwrMemDumpRsp == NULL)
14296 {
14297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14298 "%s: pFwrMemDumpRsp is NULL", __func__);
14299 VOS_ASSERT(0);
14300 vos_mem_free(pWdaParams);
14301 return ;
14302 }
14303
14304 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14305 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14306
14307 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14308 {
14309 pFwrMemDumpReq->fwMemDumpReqCallback(
14310 pFwrMemDumpReq->fwMemDumpReqContext,
14311 pFwrMemDumpRsp);
14312 }
14313 else
14314 {
14315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14316 "%s: FwrMemDump callback is NULL", __func__);
14317 }
14318
14319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14320 vos_mem_free(pWdaParams->wdaMsgParam);
14321 vos_mem_free(pWdaParams);
14322 vos_mem_free(pFwrMemDumpRsp);
14323
14324 return ;
14325}
14326
14327VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14328 tAniFwrDumpReq* pFwrMemDumpReq)
14329{
14330 VOS_STATUS status = VOS_STATUS_SUCCESS;
14331 WDI_Status wstatus;
14332 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14333 tWDA_ReqParams *pWdaParams ;
14334
14335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14336 "------> %s " ,__func__);
14337 /* Sanity Check*/
14338 if(NULL == pFwrMemDumpReq)
14339 {
14340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14341 "%s: pFwrMemDumpReq received NULL", __func__);
14342 VOS_ASSERT(0) ;
14343 return VOS_STATUS_E_FAULT;
14344 }
14345
14346 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14347 if(NULL == pWdiFwrMemDumpReq)
14348 {
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14350 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14351 VOS_ASSERT(0);
14352 return VOS_STATUS_E_NOMEM;
14353 }
14354
14355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14356 if(NULL == pWdaParams)
14357 {
14358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14359 "%s: pWdaParams Alloc Failure", __func__);
14360 VOS_ASSERT(0);
14361 vos_mem_free(pWdiFwrMemDumpReq);
14362 return VOS_STATUS_E_NOMEM;
14363 }
14364
14365 /* Store Params pass it to WDI */
14366 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14367 pWdaParams->pWdaContext = pWDA;
14368 /* Store param pointer as passed in by caller */
14369 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14370
14371 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14372 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14373 pWdaParams);
14374
14375 if(IS_WDI_STATUS_FAILURE(wstatus))
14376 {
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14378 FL("Fwr Mem Dump Req failed, free all the memory"));
14379 status = CONVERT_WDI2VOS_STATUS(wstatus);
14380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14381 vos_mem_free(pWdaParams->wdaMsgParam);
14382 vos_mem_free(pWdaParams);
14383 pWdaParams->wdaWdiApiMsgParam = NULL;
14384 pWdaParams->wdaMsgParam = NULL;
14385 }
14386
14387 return status;
14388
14389}
14390
14391
14392
Siddharth Bhal171788a2014-09-29 21:02:40 +053014393/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014394 * FUNCTION: WDA_McProcessMsg
14395 * Trigger DAL-AL to start CFG download
14396 */
14397VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14398{
14399 VOS_STATUS status = VOS_STATUS_SUCCESS;
14400 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014401 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014402 {
14403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014404 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014405 VOS_ASSERT(0);
14406 return VOS_STATUS_E_FAILURE;
14407 }
14408
14409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014410 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070014411
14412 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
14413 if(NULL == pWDA )
14414 {
14415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014416 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014417 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070014418 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014419 return VOS_STATUS_E_FAILURE;
14420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014421 /* Process all the WDA messages.. */
14422 switch( pMsg->type )
14423 {
14424 case WNI_CFG_DNLD_REQ:
14425 {
14426 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070014427 /* call WDA complete event if config download success */
14428 if( VOS_IS_STATUS_SUCCESS(status) )
14429 {
14430 vos_WDAComplete_cback(pVosContext);
14431 }
14432 else
14433 {
14434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14435 "WDA Config Download failure" );
14436 }
14437 break ;
14438 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014439 /*
14440 * Init SCAN request from PE, convert it into DAL format
14441 * and send it to DAL
14442 */
14443 case WDA_INIT_SCAN_REQ:
14444 {
14445 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
14446 break ;
14447 }
14448 /* start SCAN request from PE */
14449 case WDA_START_SCAN_REQ:
14450 {
14451 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
14452 break ;
14453 }
14454 /* end SCAN request from PE */
14455 case WDA_END_SCAN_REQ:
14456 {
14457 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
14458 break ;
14459 }
14460 /* end SCAN request from PE */
14461 case WDA_FINISH_SCAN_REQ:
14462 {
14463 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
14464 break ;
14465 }
14466 /* join request from PE */
14467 case WDA_CHNL_SWITCH_REQ:
14468 {
14469 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
14470 {
14471 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
14472 }
14473 else
14474 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080014475 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
14476 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
14477 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
14478 {
14479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14480 "call ProcessChannelSwitchReq_V1" );
14481 WDA_ProcessChannelSwitchReq_V1(pWDA,
14482 (tSwitchChannelParams*)pMsg->bodyptr) ;
14483 }
14484 else
14485 {
14486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14487 "call ProcessChannelSwitchReq" );
14488 WDA_ProcessChannelSwitchReq(pWDA,
14489 (tSwitchChannelParams*)pMsg->bodyptr) ;
14490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014491 }
14492 break ;
14493 }
14494 /* ADD BSS request from PE */
14495 case WDA_ADD_BSS_REQ:
14496 {
14497 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
14498 break ;
14499 }
14500 case WDA_ADD_STA_REQ:
14501 {
14502 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
14503 break ;
14504 }
14505 case WDA_DELETE_BSS_REQ:
14506 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014507 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
14508 break ;
14509 }
14510 case WDA_DELETE_STA_REQ:
14511 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
14513 break ;
14514 }
14515 case WDA_CONFIG_PARAM_UPDATE_REQ:
14516 {
14517 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
14518 break ;
14519 }
14520 case WDA_SET_BSSKEY_REQ:
14521 {
14522 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
14523 break ;
14524 }
14525 case WDA_SET_STAKEY_REQ:
14526 {
14527 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14528 break ;
14529 }
14530 case WDA_SET_STA_BCASTKEY_REQ:
14531 {
14532 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14533 break ;
14534 }
14535 case WDA_REMOVE_BSSKEY_REQ:
14536 {
14537 WDA_ProcessRemoveBssKeyReq(pWDA,
14538 (tRemoveBssKeyParams *)pMsg->bodyptr);
14539 break ;
14540 }
14541 case WDA_REMOVE_STAKEY_REQ:
14542 {
14543 WDA_ProcessRemoveStaKeyReq(pWDA,
14544 (tRemoveStaKeyParams *)pMsg->bodyptr);
14545 break ;
14546 }
14547 case WDA_REMOVE_STA_BCASTKEY_REQ:
14548 {
14549 /* TODO: currently UMAC is not sending this request, Add the code for
14550 handling this request when UMAC supports */
14551 break;
14552 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014553#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 case WDA_TSM_STATS_REQ:
14555 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070014556 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 break;
14558 }
14559#endif
14560 case WDA_UPDATE_EDCA_PROFILE_IND:
14561 {
14562 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
14563 break;
14564 }
14565 case WDA_ADD_TS_REQ:
14566 {
14567 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
14568 break;
14569 }
14570 case WDA_DEL_TS_REQ:
14571 {
14572 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
14573 break;
14574 }
14575 case WDA_ADDBA_REQ:
14576 {
14577 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
14578 break;
14579 }
14580 case WDA_DELBA_IND:
14581 {
14582 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
14583 break;
14584 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080014585 case WDA_UPDATE_CHAN_LIST_REQ:
14586 {
14587 WDA_ProcessUpdateChannelList(pWDA,
14588 (tSirUpdateChanList *)pMsg->bodyptr);
14589 break;
14590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014591 case WDA_SET_LINK_STATE:
14592 {
14593 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
14594 break;
14595 }
14596 case WDA_GET_STATISTICS_REQ:
14597 {
14598 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
14599 break;
14600 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014601#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080014602 case WDA_GET_ROAM_RSSI_REQ:
14603 {
14604 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
14605 break;
14606 }
14607#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014608 case WDA_PWR_SAVE_CFG:
14609 {
14610 if(pWDA->wdaState == WDA_READY_STATE)
14611 {
14612 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
14613 }
14614 else
14615 {
14616 if(NULL != pMsg->bodyptr)
14617 {
14618 vos_mem_free(pMsg->bodyptr);
14619 }
14620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14621 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
14622 }
14623 break;
14624 }
14625 case WDA_ENTER_IMPS_REQ:
14626 {
14627 if(pWDA->wdaState == WDA_READY_STATE)
14628 {
14629 WDA_ProcessEnterImpsReq(pWDA);
14630 }
14631 else
14632 {
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14634 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14635 }
14636 break;
14637 }
14638 case WDA_EXIT_IMPS_REQ:
14639 {
14640 if(pWDA->wdaState == WDA_READY_STATE)
14641 {
14642 WDA_ProcessExitImpsReq(pWDA);
14643 }
14644 else
14645 {
14646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14647 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14648 }
14649 break;
14650 }
14651 case WDA_ENTER_BMPS_REQ:
14652 {
14653 if(pWDA->wdaState == WDA_READY_STATE)
14654 {
14655 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
14656 }
14657 else
14658 {
14659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14660 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14661 }
14662 break;
14663 }
14664 case WDA_EXIT_BMPS_REQ:
14665 {
14666 if(pWDA->wdaState == WDA_READY_STATE)
14667 {
14668 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
14669 }
14670 else
14671 {
14672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14673 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14674 }
14675 break;
14676 }
14677 case WDA_ENTER_UAPSD_REQ:
14678 {
14679 if(pWDA->wdaState == WDA_READY_STATE)
14680 {
14681 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
14682 }
14683 else
14684 {
14685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14686 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14687 }
14688 break;
14689 }
14690 case WDA_EXIT_UAPSD_REQ:
14691 {
14692 if(pWDA->wdaState == WDA_READY_STATE)
14693 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014694 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014695 }
14696 else
14697 {
14698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14699 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14700 }
14701 break;
14702 }
14703 case WDA_UPDATE_UAPSD_IND:
14704 {
14705 if(pWDA->wdaState == WDA_READY_STATE)
14706 {
14707 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14708 }
14709 else
14710 {
14711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14712 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14713 }
14714 break;
14715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014716 case WDA_REGISTER_PE_CALLBACK :
14717 {
14718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14719 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14720 /*TODO: store the PE callback */
14721 /* Do Nothing? MSG Body should be freed at here */
14722 if(NULL != pMsg->bodyptr)
14723 {
14724 vos_mem_free(pMsg->bodyptr);
14725 }
14726 break;
14727 }
14728 case WDA_SYS_READY_IND :
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14731 "Handling msg type WDA_SYS_READY_IND " );
14732 pWDA->wdaState = WDA_READY_STATE;
14733 if(NULL != pMsg->bodyptr)
14734 {
14735 vos_mem_free(pMsg->bodyptr);
14736 }
14737 break;
14738 }
14739 case WDA_BEACON_FILTER_IND :
14740 {
14741 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14742 break;
14743 }
14744 case WDA_BTC_SET_CFG:
14745 {
14746 /*TODO: handle this while dealing with BTC */
14747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14748 "Handling msg type WDA_BTC_SET_CFG " );
14749 /* Do Nothing? MSG Body should be freed at here */
14750 if(NULL != pMsg->bodyptr)
14751 {
14752 vos_mem_free(pMsg->bodyptr);
14753 }
14754 break;
14755 }
14756 case WDA_SIGNAL_BT_EVENT:
14757 {
14758 /*TODO: handle this while dealing with BTC */
14759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14760 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14761 /* Do Nothing? MSG Body should be freed at here */
14762 if(NULL != pMsg->bodyptr)
14763 {
14764 vos_mem_free(pMsg->bodyptr);
14765 }
14766 break;
14767 }
14768 case WDA_CFG_RXP_FILTER_REQ:
14769 {
14770 WDA_ProcessConfigureRxpFilterReq(pWDA,
14771 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14772 break;
14773 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014774 case WDA_MGMT_LOGGING_INIT_REQ:
14775 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014776 WDA_ProcessFWLoggingInitReq(pWDA,
14777 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014778 break;
14779 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014780 case WDA_GET_FRAME_LOG_REQ:
14781 {
14782 WDA_ProcessGetFrameLogReq(pWDA,
14783 (tAniGetFrameLogReq *)pMsg->bodyptr);
14784 break;
14785 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053014786 case WDA_START_RSSI_MONITOR_REQ:
14787 {
14788 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14789 break;
14790 }
14791 case WDA_STOP_RSSI_MONITOR_REQ:
14792 {
14793 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14794 break;
14795 }
Karthick Sa35b0692015-08-21 15:57:05 +053014796 case WDA_SEND_LOG_DONE_IND:
14797 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014798 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014799 break;
14800 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014801 case WDA_FATAL_EVENT_LOGS_REQ:
14802 {
14803 WDA_ProcessFatalEventLogsReq(pWDA,
14804 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14805 break;
14806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014807 case WDA_SET_HOST_OFFLOAD:
14808 {
14809 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14810 break;
14811 }
14812 case WDA_SET_KEEP_ALIVE:
14813 {
14814 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14815 break;
14816 }
14817#ifdef WLAN_NS_OFFLOAD
14818 case WDA_SET_NS_OFFLOAD:
14819 {
14820 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14821 break;
14822 }
14823#endif //WLAN_NS_OFFLOAD
14824 case WDA_ADD_STA_SELF_REQ:
14825 {
14826 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14827 break;
14828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 case WDA_DEL_STA_SELF_REQ:
14830 {
14831 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14832 break;
14833 }
14834 case WDA_WOWL_ADD_BCAST_PTRN:
14835 {
14836 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14837 break;
14838 }
14839 case WDA_WOWL_DEL_BCAST_PTRN:
14840 {
14841 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14842 break;
14843 }
14844 case WDA_WOWL_ENTER_REQ:
14845 {
14846 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14847 break;
14848 }
14849 case WDA_WOWL_EXIT_REQ:
14850 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014851 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014852 break;
14853 }
14854 case WDA_TL_FLUSH_AC_REQ:
14855 {
14856 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14857 break;
14858 }
14859 case WDA_SIGNAL_BTAMP_EVENT:
14860 {
14861 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14862 break;
14863 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014864 case WDA_FW_STATS_GET_REQ:
14865 {
14866 WDA_ProcessFWStatsGetReq(pWDA,
14867 (tSirFWStatsGetReq *)pMsg->bodyptr);
14868 break;
14869 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014870#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14871 case WDA_LINK_LAYER_STATS_SET_REQ:
14872 {
14873 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14874 break;
14875 }
14876 case WDA_LINK_LAYER_STATS_GET_REQ:
14877 {
14878 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14879 break;
14880 }
14881 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14882 {
14883 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14884 break;
14885 }
14886#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014887#ifdef WLAN_FEATURE_EXTSCAN
14888 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14889 {
14890 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14891 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14892 break;
14893 }
14894 case WDA_EXTSCAN_START_REQ:
14895 {
14896 WDA_ProcessEXTScanStartReq(pWDA,
14897 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14898 break;
14899 }
14900 case WDA_EXTSCAN_STOP_REQ:
14901 {
14902 WDA_ProcessEXTScanStopReq(pWDA,
14903 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14904 break;
14905 }
14906 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14907 {
14908 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
14909 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
14910 break;
14911 }
14912 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
14913 {
14914 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
14915 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
14916 break;
14917 }
14918 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
14919 {
14920 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
14921 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
14922 break;
14923 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053014924 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
14925 {
14926 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
14927 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
14928 break;
14929 }
14930 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
14931 {
14932 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
14933 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
14934 break;
14935 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053014936 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
14937 {
14938 WDA_ProcessHighPriorityDataInfoInd(pWDA,
14939 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
14940 break;
14941 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014942#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070014943#ifdef WDA_UT
14944 case WDA_WDI_EVENT_MSG:
14945 {
14946 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
14947 break ;
14948 }
14949#endif
14950 case WDA_UPDATE_BEACON_IND:
14951 {
14952 WDA_ProcessUpdateBeaconParams(pWDA,
14953 (tUpdateBeaconParams *)pMsg->bodyptr);
14954 break;
14955 }
14956 case WDA_SEND_BEACON_REQ:
14957 {
14958 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
14959 break;
14960 }
14961 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
14962 {
14963 WDA_ProcessUpdateProbeRspTemplate(pWDA,
14964 (tSendProbeRespParams *)pMsg->bodyptr);
14965 break;
14966 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014967#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 case WDA_SET_MAX_TX_POWER_REQ:
14969 {
14970 WDA_ProcessSetMaxTxPowerReq(pWDA,
14971 (tMaxTxPowerParams *)pMsg->bodyptr);
14972 break;
14973 }
14974#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070014975 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
14976 {
14977 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
14978 pMsg->bodyptr);
14979 break;
14980 }
schang86c22c42013-03-13 18:41:24 -070014981 case WDA_SET_TX_POWER_REQ:
14982 {
14983 WDA_ProcessSetTxPowerReq(pWDA,
14984 (tSirSetTxPowerReq *)pMsg->bodyptr);
14985 break;
14986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014987 case WDA_SET_P2P_GO_NOA_REQ:
14988 {
14989 WDA_ProcessSetP2PGONOAReq(pWDA,
14990 (tP2pPsParams *)pMsg->bodyptr);
14991 break;
14992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014993 /* timer related messages */
14994 case WDA_TIMER_BA_ACTIVITY_REQ:
14995 {
14996 WDA_BaCheckActivity(pWDA) ;
14997 break ;
14998 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014999
15000 /* timer related messages */
15001 case WDA_TIMER_TRAFFIC_STATS_IND:
15002 {
15003 WDA_TimerTrafficStatsInd(pWDA);
15004 break;
15005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015006#ifdef WLAN_FEATURE_VOWIFI_11R
15007 case WDA_AGGR_QOS_REQ:
15008 {
15009 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15010 break;
15011 }
15012#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 case WDA_FTM_CMD_REQ:
15014 {
15015 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15016 break ;
15017 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015018#ifdef FEATURE_OEM_DATA_SUPPORT
15019 case WDA_START_OEM_DATA_REQ:
15020 {
15021 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15022 break;
15023 }
15024#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015025 /* Tx Complete Time out Indication */
15026 case WDA_TX_COMPLETE_TIMEOUT_IND:
15027 {
15028 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15029 break;
15030 }
15031 case WDA_WLAN_SUSPEND_IND:
15032 {
15033 WDA_ProcessWlanSuspendInd(pWDA,
15034 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15035 break;
15036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015037 case WDA_WLAN_RESUME_REQ:
15038 {
15039 WDA_ProcessWlanResumeReq(pWDA,
15040 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15041 break;
15042 }
15043
15044 case WDA_UPDATE_CF_IND:
15045 {
15046 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15047 pMsg->bodyptr = NULL;
15048 break;
15049 }
15050#ifdef FEATURE_WLAN_SCAN_PNO
15051 case WDA_SET_PNO_REQ:
15052 {
15053 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15054 break;
15055 }
15056 case WDA_UPDATE_SCAN_PARAMS_REQ:
15057 {
15058 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15059 break;
15060 }
15061 case WDA_SET_RSSI_FILTER_REQ:
15062 {
15063 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15064 break;
15065 }
15066#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015067#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015068 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015069 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015070 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015071 break;
15072 }
15073#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015074 case WDA_SET_TX_PER_TRACKING_REQ:
15075 {
15076 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15077 break;
15078 }
15079
15080#ifdef WLAN_FEATURE_PACKET_FILTERING
15081 case WDA_8023_MULTICAST_LIST_REQ:
15082 {
15083 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15084 break;
15085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015086 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15087 {
15088 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15089 break;
15090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015091 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15092 {
15093 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15094 break;
15095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015096 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15097 {
15098 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15099 break;
15100 }
15101#endif // WLAN_FEATURE_PACKET_FILTERING
15102
15103
15104 case WDA_TRANSMISSION_CONTROL_IND:
15105 {
15106 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15107 break;
15108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015109 case WDA_SET_POWER_PARAMS_REQ:
15110 {
15111 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15112 break;
15113 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015114 case WDA_FW_MEM_DUMP_REQ:
15115 {
15116 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15117 break;
15118 }
15119
Jeff Johnson295189b2012-06-20 16:38:30 -070015120#ifdef WLAN_FEATURE_GTK_OFFLOAD
15121 case WDA_GTK_OFFLOAD_REQ:
15122 {
15123 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15124 break;
15125 }
15126
15127 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15128 {
15129 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15130 break;
15131 }
15132#endif //WLAN_FEATURE_GTK_OFFLOAD
15133
15134 case WDA_SET_TM_LEVEL_REQ:
15135 {
15136 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15137 break;
15138 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015139
Mohit Khanna4a70d262012-09-11 16:30:12 -070015140 case WDA_UPDATE_OP_MODE:
15141 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015142 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15143 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15144 {
15145 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15146 }
15147 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015148 {
15149 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15150 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15151 else
15152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015153 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015154 }
15155 else
15156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015157 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015158 break;
15159 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015160#ifdef WLAN_FEATURE_11W
15161 case WDA_EXCLUDE_UNENCRYPTED_IND:
15162 {
15163 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15164 break;
15165 }
15166#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015167#ifdef FEATURE_WLAN_TDLS
15168 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15169 {
15170 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15171 break;
15172 }
15173#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015174 case WDA_DHCP_START_IND:
15175 {
15176 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15177 break;
15178 }
15179 case WDA_DHCP_STOP_IND:
15180 {
15181 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15182 break;
15183 }
Leo Chang9056f462013-08-01 19:21:11 -070015184#ifdef FEATURE_WLAN_LPHB
15185 case WDA_LPHB_CONF_REQ:
15186 {
15187 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15188 break;
15189 }
15190#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015191 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15192 {
15193 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15194 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15195 break;
15196 }
15197 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15198 {
15199 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15200 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15201 break;
15202 }
15203
Rajeev79dbe4c2013-10-05 11:03:42 +053015204#ifdef FEATURE_WLAN_BATCH_SCAN
15205 case WDA_SET_BATCH_SCAN_REQ:
15206 {
15207 WDA_ProcessSetBatchScanReq(pWDA,
15208 (tSirSetBatchScanReq *)pMsg->bodyptr);
15209 break;
15210 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070015211 case WDA_RATE_UPDATE_IND:
15212 {
15213 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15214 break;
15215 }
Rajeev79dbe4c2013-10-05 11:03:42 +053015216 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15217 {
15218 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15219 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15220 break;
15221 }
15222 case WDA_STOP_BATCH_SCAN_IND:
15223 {
15224 WDA_ProcessStopBatchScanInd(pWDA,
15225 (tSirStopBatchScanInd *)pMsg->bodyptr);
15226 break;
15227 }
c_hpothu92367912014-05-01 15:18:17 +053015228 case WDA_GET_BCN_MISS_RATE_REQ:
15229 WDA_ProcessGetBcnMissRateReq(pWDA,
15230 (tSirBcnMissRateReq *)pMsg->bodyptr);
15231 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015232#endif
15233
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015234 case WDA_HT40_OBSS_SCAN_IND:
15235 {
15236 WDA_ProcessHT40OBSSScanInd(pWDA,
15237 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15238 break;
15239 }
15240 case WDA_HT40_OBSS_STOP_SCAN_IND:
15241 {
15242 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15243 (tANI_U8*)pMsg->bodyptr);
15244 break;
15245 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015246// tdlsoffchan
15247#ifdef FEATURE_WLAN_TDLS
15248 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15249 {
15250 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15251 break;
15252 }
15253#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015254 case WDA_SPOOF_MAC_ADDR_REQ:
15255 {
15256 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15257 break;
15258 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015259 case WDA_ENCRYPT_MSG_REQ:
15260 {
15261 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15262 break;
15263 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015264
15265 case WDA_NAN_REQUEST:
15266 {
15267 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15268 break;
15269 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015270 case WDA_SET_RTS_CTS_HTVHT:
15271 {
15272 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15273 break;
15274 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015275
15276 case WDA_MON_START_REQ:
15277 {
15278 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15279 break;
15280 }
15281 case WDA_MON_STOP_REQ:
15282 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015283 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015284 break;
15285 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015286 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15287 {
15288 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15289 break;
15290 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015291 case WDA_WIFI_CONFIG_REQ:
15292 {
15293 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15294 break;
15295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 default:
15297 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015299 "No Handling for msg type %x in WDA "
15300 ,pMsg->type);
15301 /* Do Nothing? MSG Body should be freed at here */
15302 if(NULL != pMsg->bodyptr)
15303 {
15304 vos_mem_free(pMsg->bodyptr);
15305 }
15306 //WDA_VOS_ASSERT(0) ;
15307 }
15308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015309 return status ;
15310}
15311
Jeff Johnson295189b2012-06-20 16:38:30 -070015312/*
15313 * FUNCTION: WDA_LowLevelIndCallback
15314 * IND API callback from WDI, send Ind to PE
15315 */
15316void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15317 void* pUserData )
15318{
15319 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15320#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15321 tSirRSSINotification rssiNotification;
15322#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015323 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 {
15325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015326 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015327 VOS_ASSERT(0);
15328 return ;
15329 }
15330
15331 switch(wdiLowLevelInd->wdiIndicationType)
15332 {
15333 case WDI_RSSI_NOTIFICATION_IND:
15334 {
15335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15336 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015337#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15338 rssiNotification.bReserved =
15339 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15340 rssiNotification.bRssiThres1NegCross =
15341 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15342 rssiNotification.bRssiThres1PosCross =
15343 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15344 rssiNotification.bRssiThres2NegCross =
15345 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15346 rssiNotification.bRssiThres2PosCross =
15347 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15348 rssiNotification.bRssiThres3NegCross =
15349 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15350 rssiNotification.bRssiThres3PosCross =
15351 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015352 rssiNotification.avgRssi = (v_S7_t)
15353 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015354 WLANTL_BMPSRSSIRegionChangedNotification(
15355 pWDA->pVosContext,
15356 &rssiNotification);
15357#endif
15358 break ;
15359 }
15360 case WDI_MISSED_BEACON_IND:
15361 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015362 tpSirSmeMissedBeaconInd pMissBeacInd =
15363 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15365 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015366 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015367 if(NULL == pMissBeacInd)
15368 {
15369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15370 "%s: VOS MEM Alloc Failure", __func__);
15371 break;
15372 }
15373 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
15374 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
15375 pMissBeacInd->bssIdx =
15376 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
15377 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015378 break ;
15379 }
15380 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
15381 {
15382 /* TODO: Decode Ind and send Ind to PE */
15383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15384 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
15385 break ;
15386 }
15387
15388 case WDI_MIC_FAILURE_IND:
15389 {
15390 tpSirSmeMicFailureInd pMicInd =
15391 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
15392
15393 if(NULL == pMicInd)
15394 {
15395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015397 break;
15398 }
15399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15400 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015401 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
15402 pMicInd->length = sizeof(tSirSmeMicFailureInd);
15403 vos_mem_copy(pMicInd->bssId,
15404 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
15405 sizeof(tSirMacAddr));
15406 vos_mem_copy(pMicInd->info.srcMacAddr,
15407 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
15408 sizeof(tSirMacAddr));
15409 vos_mem_copy(pMicInd->info.taMacAddr,
15410 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
15411 sizeof(tSirMacAddr));
15412 vos_mem_copy(pMicInd->info.dstMacAddr,
15413 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
15414 sizeof(tSirMacAddr));
15415 vos_mem_copy(pMicInd->info.rxMacAddr,
15416 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
15417 sizeof(tSirMacAddr));
15418 pMicInd->info.multicast =
15419 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
15420 pMicInd->info.keyId=
15421 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
15422 pMicInd->info.IV1=
15423 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
15424 vos_mem_copy(pMicInd->info.TSC,
15425 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070015426 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
15427 (void *)pMicInd , 0) ;
15428 break ;
15429 }
15430 case WDI_FATAL_ERROR_IND:
15431 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070015432 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070015433 /* TODO: Decode Ind and send Ind to PE */
15434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15435 "Received WDI_FATAL_ERROR_IND from WDI ");
15436 break ;
15437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015438 case WDI_DEL_STA_IND:
15439 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015440 tpDeleteStaContext pDelSTACtx =
15441 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
15442
15443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15444 "Received WDI_DEL_STA_IND from WDI ");
15445 if(NULL == pDelSTACtx)
15446 {
15447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015449 break;
15450 }
15451 vos_mem_copy(pDelSTACtx->addr2,
15452 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
15453 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 vos_mem_copy(pDelSTACtx->bssId,
15455 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
15456 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 pDelSTACtx->assocId =
15458 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
15459 pDelSTACtx->reasonCode =
15460 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
15461 pDelSTACtx->staId =
15462 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015463 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
15464 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 break ;
15466 }
15467 case WDI_COEX_IND:
15468 {
15469 tANI_U32 index;
15470 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053015471 tSirSmeCoexInd *pSmeCoexInd;
15472
15473 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
15474 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
15475 {
15476 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
15477 {
15478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15479 FL("Coex state: 0x%x coex feature: 0x%x"),
15480 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
15481 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
15482
15483 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
15484 {
15485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
15486 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
15487 }
15488 }
15489 break;
15490 }
15491
15492 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 if(NULL == pSmeCoexInd)
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015496 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015497 break;
15498 }
15499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15500 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015501 /* Message Header */
15502 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
15503 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 /* Info from WDI Indication */
15505 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
15506 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
15507 {
15508 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
15509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015510 /* VOS message wrapper */
15511 vosMsg.type = eWNI_SME_COEX_IND;
15512 vosMsg.bodyptr = (void *)pSmeCoexInd;
15513 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015514 /* Send message to SME */
15515 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15516 {
15517 /* free the mem and return */
15518 vos_mem_free((v_VOID_t *)pSmeCoexInd);
15519 }
15520 else
15521 {
15522 /* DEBUG */
15523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15524 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
15525 pSmeCoexInd->coexIndType,
15526 pSmeCoexInd->coexIndData[0],
15527 pSmeCoexInd->coexIndData[1],
15528 pSmeCoexInd->coexIndData[2],
15529 pSmeCoexInd->coexIndData[3]);
15530 }
15531 break;
15532 }
15533 case WDI_TX_COMPLETE_IND:
15534 {
15535 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
15536 /* Calling TxCompleteAck Indication from wda context*/
15537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15538 "Complete Indication received from HAL");
15539 if( pWDA->pAckTxCbFunc )
15540 {
15541 if( VOS_STATUS_SUCCESS !=
15542 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15543 {
15544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15545 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015546 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053015547 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015548 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
15549 else
15550 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015551 pWDA->pAckTxCbFunc = NULL;
15552 }
15553 else
15554 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053015555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015556 "Tx Complete Indication is received after timeout ");
15557 }
15558 break;
15559 }
Viral Modid86bde22012-12-10 13:09:21 -080015560 case WDI_P2P_NOA_START_IND :
15561 {
15562 tSirP2PNoaStart *pP2pNoaStart =
15563 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
15564
15565 if (NULL == pP2pNoaStart)
15566 {
15567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15568 "Memory allocation failure, "
15569 "WDI_P2P_NOA_START_IND not forwarded");
15570 break;
15571 }
15572 pP2pNoaStart->status =
15573 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
15574 pP2pNoaStart->bssIdx =
15575 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
15576 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
15577 (void *)pP2pNoaStart , 0) ;
15578 break;
15579 }
15580
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015581#ifdef FEATURE_WLAN_TDLS
15582 case WDI_TDLS_IND :
15583 {
15584 tSirTdlsInd *pTdlsInd =
15585 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
15586
15587 if (NULL == pTdlsInd)
15588 {
15589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15590 "Memory allocation failure, "
15591 "WDI_TDLS_IND not forwarded");
15592 break;
15593 }
15594 pTdlsInd->status =
15595 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
15596 pTdlsInd->assocId =
15597 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
15598 pTdlsInd->staIdx =
15599 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
15600 pTdlsInd->reasonCode =
15601 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
15602 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
15603 (void *)pTdlsInd , 0) ;
15604 break;
15605 }
15606#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 case WDI_P2P_NOA_ATTR_IND :
15608 {
15609 tSirP2PNoaAttr *pP2pNoaAttr =
15610 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15612 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 if (NULL == pP2pNoaAttr)
15614 {
15615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15616 "Memory allocation failure, "
15617 "WDI_P2P_NOA_ATTR_IND not forwarded");
15618 break;
15619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015620 pP2pNoaAttr->index =
15621 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
15622 pP2pNoaAttr->oppPsFlag =
15623 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
15624 pP2pNoaAttr->ctWin =
15625 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
15626
15627 pP2pNoaAttr->uNoa1IntervalCnt =
15628 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
15629 pP2pNoaAttr->uNoa1Duration =
15630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
15631 pP2pNoaAttr->uNoa1Interval =
15632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
15633 pP2pNoaAttr->uNoa1StartTime =
15634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015635 pP2pNoaAttr->uNoa2IntervalCnt =
15636 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
15637 pP2pNoaAttr->uNoa2Duration =
15638 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
15639 pP2pNoaAttr->uNoa2Interval =
15640 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
15641 pP2pNoaAttr->uNoa2StartTime =
15642 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015643 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
15644 (void *)pP2pNoaAttr , 0) ;
15645 break;
15646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015647#ifdef FEATURE_WLAN_SCAN_PNO
15648 case WDI_PREF_NETWORK_FOUND_IND:
15649 {
15650 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015651 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
15652 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15653 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
15654 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
15655
Jeff Johnson295189b2012-06-20 16:38:30 -070015656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15657 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015658 if (NULL == pPrefNetworkFoundInd)
15659 {
15660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15661 "Memory allocation failure, "
15662 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053015663 if (NULL !=
15664 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15665 {
15666 wpalMemoryFree(
15667 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
15668 );
15669 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015671 break;
15672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015673 /* Message Header */
15674 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015675 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070015676
15677 /* Info from WDI Indication */
15678 pPrefNetworkFoundInd->ssId.length =
15679 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070015680 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070015681 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
15682 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
15683 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070015684 if (NULL !=
15685 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15686 {
15687 pPrefNetworkFoundInd->frameLength =
15688 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15689 vos_mem_copy( pPrefNetworkFoundInd->data,
15690 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
15691 pPrefNetworkFoundInd->frameLength);
15692 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
15693 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15694 }
15695 else
15696 {
15697 pPrefNetworkFoundInd->frameLength = 0;
15698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015699 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070015700 /* VOS message wrapper */
15701 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
15702 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
15703 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015704 /* Send message to SME */
15705 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15706 {
15707 /* free the mem and return */
15708 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
15709 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015710 break;
15711 }
15712#endif // FEATURE_WLAN_SCAN_PNO
15713
15714#ifdef WLAN_WAKEUP_EVENTS
15715 case WDI_WAKE_REASON_IND:
15716 {
15717 vos_msg_t vosMsg;
15718 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15719 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15720 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15721
15722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015723 "[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 -070015724 wdiLowLevelInd->wdiIndicationType,
15725 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15726 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15727 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15728
15729 if (NULL == pWakeReasonInd)
15730 {
15731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15732 "Memory allocation failure, "
15733 "WDI_WAKE_REASON_IND not forwarded");
15734 break;
15735 }
15736
15737 vos_mem_zero(pWakeReasonInd, allocSize);
15738
15739 /* Message Header */
15740 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15741 pWakeReasonInd->mesgLen = allocSize;
15742
15743 /* Info from WDI Indication */
15744 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15745 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15746 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15747 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15748 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15749 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15750 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15751 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15752
15753 /* VOS message wrapper */
15754 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15755 vosMsg.bodyptr = (void *) pWakeReasonInd;
15756 vosMsg.bodyval = 0;
15757
15758 /* Send message to SME */
15759 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15760 {
15761 /* free the mem and return */
15762 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15763 }
15764
15765 break;
15766 }
15767#endif // WLAN_WAKEUP_EVENTS
15768
15769 case WDI_TX_PER_HIT_IND:
15770 {
15771 vos_msg_t vosMsg;
15772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15773 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15774 /* VOS message wrapper */
15775 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15776 vosMsg.bodyptr = NULL;
15777 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015778 /* Send message to SME */
15779 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15780 {
15781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15782 }
15783 break;
15784 }
15785
Leo Chang9056f462013-08-01 19:21:11 -070015786#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015787 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015788 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015789 vos_msg_t vosMsg;
15790 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015791
Leo Changd9df8aa2013-09-26 13:32:26 -070015792 lphbInd =
15793 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15794 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015795 {
15796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15797 "%s: LPHB IND buffer alloc Fail", __func__);
15798 return ;
15799 }
15800
Leo Changd9df8aa2013-09-26 13:32:26 -070015801 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015802 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015803 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015804 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015805 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015806 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15807
15808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015809 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015810 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15811
Leo Changd9df8aa2013-09-26 13:32:26 -070015812 vosMsg.type = eWNI_SME_LPHB_IND;
15813 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015814 vosMsg.bodyval = 0;
15815 /* Send message to SME */
15816 if (VOS_STATUS_SUCCESS !=
15817 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15818 {
15819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15820 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015821 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015822 }
15823 break;
15824 }
15825#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015826 case WDI_PERIODIC_TX_PTRN_FW_IND:
15827 {
15828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15829 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15830 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15831 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15832 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15833 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15834 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15835
15836 break;
15837 }
Leo Chang9056f462013-08-01 19:21:11 -070015838
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015839 case WDI_IBSS_PEER_INACTIVITY_IND:
15840 {
15841 tSirIbssPeerInactivityInd *pIbssInd =
15842 (tSirIbssPeerInactivityInd *)
15843 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15844
15845 if (NULL == pIbssInd)
15846 {
15847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15848 "Memory allocation failure, "
15849 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15850 break;
15851 }
15852
15853 pIbssInd->bssIdx =
15854 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15855 pIbssInd->staIdx =
15856 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15857 vos_mem_copy(pIbssInd->peerAddr,
15858 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15859 sizeof(tSirMacAddr));
15860 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15861 break;
15862 }
15863
Rajeev79dbe4c2013-10-05 11:03:42 +053015864#ifdef FEATURE_WLAN_BATCH_SCAN
15865 case WDI_BATCH_SCAN_RESULT_IND:
15866 {
15867 void *pBatchScanResult;
15868 void *pCallbackContext;
15869 tpAniSirGlobal pMac;
15870
15871 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15872 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15873
15874 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015875 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015876 {
15877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15878 "%s:pWDA is NULL", __func__);
15879 VOS_ASSERT(0);
15880 return;
15881 }
15882
15883 pBatchScanResult =
15884 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15885 if (NULL == pBatchScanResult)
15886 {
15887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15888 "%s:Batch scan result from FW is null can't invoke HDD callback",
15889 __func__);
15890 VOS_ASSERT(0);
15891 return;
15892 }
15893
15894 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15895 if (NULL == pMac)
15896 {
15897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15898 "%s:pMac is NULL", __func__);
15899 VOS_ASSERT(0);
15900 return;
15901 }
15902
15903 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
15904 /*call hdd callback with set batch scan response data*/
15905 if(pMac->pmc.batchScanResultCallback)
15906 {
15907 pMac->pmc.batchScanResultCallback(pCallbackContext,
15908 pBatchScanResult);
15909 }
15910 else
15911 {
15912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15913 "%s:HDD callback is null", __func__);
15914 VOS_ASSERT(0);
15915 }
15916 break;
15917 }
15918#endif
15919
Leo Chang0b0e45a2013-12-15 15:18:55 -080015920#ifdef FEATURE_WLAN_CH_AVOID
15921 case WDI_CH_AVOID_IND:
15922 {
15923 vos_msg_t vosMsg;
15924 tSirChAvoidIndType *chAvoidInd;
15925
15926 chAvoidInd =
15927 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
15928 if (NULL == chAvoidInd)
15929 {
15930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15931 "%s: CH_AVOID IND buffer alloc Fail", __func__);
15932 return ;
15933 }
15934
15935 chAvoidInd->avoidRangeCount =
15936 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
15937 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
15938 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
15939 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
15940
15941 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15942 "%s : WDA CH avoid notification", __func__);
15943
15944 vosMsg.type = eWNI_SME_CH_AVOID_IND;
15945 vosMsg.bodyptr = chAvoidInd;
15946 vosMsg.bodyval = 0;
15947 /* Send message to SME */
15948 if (VOS_STATUS_SUCCESS !=
15949 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15950 {
15951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15952 "post eWNI_SME_CH_AVOID_IND to SME Failed");
15953 vos_mem_free(chAvoidInd);
15954 }
15955 break;
15956 }
15957#endif /* FEATURE_WLAN_CH_AVOID */
15958
Sunil Duttbd736ed2014-05-26 21:19:41 +053015959#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15960 case WDI_LL_STATS_RESULTS_IND:
15961 {
15962 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053015963 tpAniSirGlobal pMac;
15964
15965 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15966 "Received WDI_LL_STATS_RESULTS_IND from FW");
15967
15968 /*sanity check*/
15969 if (NULL == pWDA)
15970 {
15971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15972 "%s:pWDA is NULL", __func__);
15973 VOS_ASSERT(0);
15974 return;
15975 }
15976
15977 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053015978 (void *)wdiLowLevelInd->
15979 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053015980 if (NULL == pLinkLayerStatsInd)
15981 {
15982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15983 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
15984 __func__);
15985 VOS_ASSERT(0);
15986 return;
15987 }
15988
15989 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15990 if (NULL == pMac)
15991 {
15992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15993 "%s:pMac is NULL", __func__);
15994 VOS_ASSERT(0);
15995 return;
15996 }
15997
Dino Mycled3d50022014-07-07 12:58:25 +053015998 /* call hdd callback with Link Layer Statistics.
15999 * vdev_id/ifacId in link_stats_results will be
16000 * used to retrieve the correct HDD context
16001 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016002 if (pMac->sme.pLinkLayerStatsIndCallback)
16003 {
Dino Mycled3d50022014-07-07 12:58:25 +053016004 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016005 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016006 pLinkLayerStatsInd,
16007 wdiLowLevelInd->
16008 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016009 }
16010 else
16011 {
16012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16013 "%s:HDD callback is null", __func__);
16014 }
16015 break;
16016 }
16017#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16018
Dino Mycle41bdc942014-06-10 11:30:24 +053016019#ifdef WLAN_FEATURE_EXTSCAN
16020 case WDI_EXTSCAN_PROGRESS_IND:
16021 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16022 case WDI_EXTSCAN_SCAN_RESULT_IND:
16023 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016024 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016025 {
16026 void *pEXTScanData;
16027 void *pCallbackContext;
16028 tpAniSirGlobal pMac;
16029 tANI_U16 indType;
16030
16031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16032 "Received WDI_EXTSCAN Indications from FW");
16033 /*sanity check*/
16034 if (NULL == pWDA)
16035 {
16036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16037 "%s:pWDA is NULL", __func__);
16038 VOS_ASSERT(0);
16039 return;
16040 }
16041 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16042 {
16043 indType = WDA_EXTSCAN_PROGRESS_IND;
16044
16045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16046 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16047 }
16048 if (wdiLowLevelInd->wdiIndicationType ==
16049 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16050 {
16051 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16052
16053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16054 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16055 }
16056 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16057 {
16058 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16059
16060 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16061 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16062 }
16063 if (wdiLowLevelInd->wdiIndicationType ==
16064 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16065 {
16066 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16067
16068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16069 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16070 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016071 if (wdiLowLevelInd->wdiIndicationType ==
16072 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16073 {
16074 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16075
16076 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16077 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16078 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016079
16080 pEXTScanData =
16081 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16082 if (NULL == pEXTScanData)
16083 {
16084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16085 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16086 __func__);
16087 VOS_ASSERT(0);
16088 return;
16089 }
16090
16091 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16092 if (NULL == pMac)
16093 {
16094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16095 "%s:pMac is NULL", __func__);
16096 VOS_ASSERT(0);
16097 return;
16098 }
16099
16100 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16101
16102 if(pMac->sme.pEXTScanIndCb)
16103 {
16104 pMac->sme.pEXTScanIndCb(pCallbackContext,
16105 indType,
16106 pEXTScanData);
16107 }
16108 else
16109 {
16110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16111 "%s:HDD callback is null", __func__);
16112 }
16113 break;
16114 }
16115#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016116 case WDI_DEL_BA_IND:
16117 {
16118 tpBADeleteParams pDelBAInd =
16119 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
16120
16121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16122 "Received WDI_DEL_BA_IND from WDI ");
16123 if(NULL == pDelBAInd)
16124 {
16125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16126 "%s: VOS MEM Alloc Failure", __func__);
16127 break;
16128 }
16129 vos_mem_copy(pDelBAInd->peerMacAddr,
16130 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16131 sizeof(tSirMacAddr));
16132 vos_mem_copy(pDelBAInd->bssId,
16133 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16134 sizeof(tSirMacAddr));
16135 pDelBAInd->staIdx =
16136 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16137 pDelBAInd->baTID =
16138 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16139 pDelBAInd->baDirection =
16140 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16141 pDelBAInd->reasonCode =
16142 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16143
16144 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16145 (void *)pDelBAInd , 0) ;
16146 break;
16147 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016148 case WDI_NAN_EVENT_IND:
16149 {
16150 vos_msg_t vosMsg;
16151 tpSirNanEvent pSirNanEvent = NULL;
16152
16153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16154 "Received WDI_NAN_EVENT");
16155
16156 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16157 - sizeof( pSirNanEvent->event_data)
16158 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16159
16160 if (NULL == pSirNanEvent)
16161 {
16162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16163 "%s: VOS MEM Alloc Failure", __func__);
16164 VOS_ASSERT(0) ;
16165 break;
16166 }
16167
16168 pSirNanEvent->event_data_len =
16169 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16170
16171 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16172 {
16173 vos_mem_copy( pSirNanEvent->event_data,
16174 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16175 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16176 }
16177
16178 /* VOS message wrapper */
16179 vosMsg.type = eWNI_SME_NAN_EVENT;
16180 vosMsg.bodyptr = pSirNanEvent;
16181 vosMsg.bodyval = 0;
16182
16183 /* Send message to SME */
16184 if (VOS_STATUS_SUCCESS
16185 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16186 {
16187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16188 "post eWNI_SME_NAN_EVENT to SME Failed");
16189 vos_mem_free(pSirNanEvent);
16190 }
16191 break;
16192 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016193 case WDI_LOST_LINK_PARAMS_IND:
16194 {
16195 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16196 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016197
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016198 if (NULL == pLostLinkParamInd)
16199 {
16200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16201 "%s: VOS MEM Alloc Failure", __func__);
16202 break;
16203 }
16204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16205 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16206
16207 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16208 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16209 pLostLinkParamInd->info.bssIdx =
16210 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16211 pLostLinkParamInd->info.rssi =
16212 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16213 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16214 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16215 sizeof(tSirMacAddr));
16216 pLostLinkParamInd->info.linkFlCnt =
16217 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16218 pLostLinkParamInd->info.linkFlTx =
16219 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16220 pLostLinkParamInd->info.lastDataRate =
16221 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16222 pLostLinkParamInd->info.rsvd1 =
16223 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16224 pLostLinkParamInd->info.rsvd2 =
16225 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16226 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16227 (void *)pLostLinkParamInd , 0) ;
16228 break;
16229 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016230 case WDI_RSSI_BREACHED_IND:
16231 {
16232 WDI_RssiBreachedIndType *pRssiBreachedInd;
16233 tpAniSirGlobal pMac;
16234
16235 pRssiBreachedInd =
16236 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16238 "Received WDI_RSSI_BREACHED_IND from FW");
16239
16240 vos_mem_copy(pRssiBreachedInd,
16241 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16242 sizeof(WDI_RssiBreachedIndType));
16243
16244 /*sanity check*/
16245 if (NULL == pWDA)
16246 {
16247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16248 "%s:pWDA is NULL", __func__);
16249 vos_mem_free(pRssiBreachedInd);
16250 VOS_ASSERT(0);
16251 return;
16252 }
16253
16254 if (NULL == pRssiBreachedInd)
16255 {
16256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16257 "%s:Breach indication from FW is null can't invoke HDD callback",
16258 __func__);
16259 VOS_ASSERT(0);
16260 return;
16261 }
16262
16263 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16264 if (NULL == pMac)
16265 {
16266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16267 "%s:pMac is NULL", __func__);
16268 VOS_ASSERT(0);
16269 vos_mem_free(pRssiBreachedInd);
16270 return;
16271 }
16272
16273 if (pMac->sme.rssiThresholdBreachedCb)
16274 {
16275 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16276 }
16277 else
16278 {
16279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16280 "%s:HDD callback is null", __func__);
16281 }
16282 vos_mem_free(pRssiBreachedInd);
16283 break;
16284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016285 default:
16286 {
16287 /* TODO error */
16288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16289 "Received UNKNOWN Indication from WDI ");
16290 }
16291 }
16292 return ;
16293}
16294
Jeff Johnson295189b2012-06-20 16:38:30 -070016295/*
16296 * BA related processing in WDA.
16297 */
Jeff Johnson295189b2012-06-20 16:38:30 -070016298void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
16299 void* pUserData)
16300{
16301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16302 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070016303 if(NULL == pWdaParams)
16304 {
16305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016306 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016307 VOS_ASSERT(0) ;
16308 return ;
16309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070016311 vos_mem_free(pWdaParams->wdaMsgParam) ;
16312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16313 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016316 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
16317 {
16318 tANI_U8 i = 0 ;
16319 tBaActivityInd *baActivityInd = NULL ;
16320 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
16321 tANI_U8 allocSize = sizeof(tBaActivityInd)
16322 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
16323 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
16324 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016326 if(NULL == baActivityInd)
16327 {
16328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016330 VOS_ASSERT(0) ;
16331 return;
16332 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016333 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
16334 sizeof(tSirMacAddr)) ;
16335 baActivityInd->baCandidateCnt = baCandidateCount ;
16336
16337 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
16338 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
16339
16340 for(i = 0 ; i < baCandidateCount ; i++)
16341 {
16342 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
16344 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016345 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
16346 {
16347 baCandidate->baInfo[tid].fBaEnable =
16348 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
16349 baCandidate->baInfo[tid].startingSeqNum =
16350 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
16351 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016352 wdiBaCandidate++ ;
16353 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016355 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
16356 }
16357 else
16358 {
16359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16360 "BA Trigger RSP with Failure received ");
16361 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016362 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016363}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016364
16365
16366/*
16367 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
16368 * during MCC
16369 */
16370void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
16371{
16372 wpt_uint32 enabled;
16373 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
16374 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
16375 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
16376
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016377 if (NULL == pMac )
16378 {
16379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16380 "%s: Invoked with invalid MAC context ", __func__ );
16381 VOS_ASSERT(0);
16382 return;
16383 }
16384
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016385 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16386 != eSIR_SUCCESS)
16387 {
16388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16389 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16390 return;
16391 }
16392
16393 if(!enabled)
16394 {
16395 return;
16396 }
16397
16398 if(NULL == pWDA)
16399 {
16400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16401 "%s:WDA context is NULL", __func__);
16402 VOS_ASSERT(0);
16403 return;
16404 }
16405
16406 if(activate)
16407 {
16408 if( VOS_STATUS_SUCCESS !=
16409 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16410 {
16411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16412 "Traffic Stats Timer Start Failed ");
16413 return;
16414 }
16415 WDI_DS_ActivateTrafficStats();
16416 }
16417 else
16418 {
16419 WDI_DS_DeactivateTrafficStats();
16420 WDI_DS_ClearTrafficStats();
16421
16422 if( VOS_STATUS_SUCCESS !=
16423 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16424 {
16425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16426 "Traffic Stats Timer Stop Failed ");
16427 return;
16428 }
16429 }
16430}
16431
16432/*
16433 * Traffic Stats Timer handler
16434 */
16435void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
16436{
16437 WDI_Status wdiStatus;
16438 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
16439 WDI_TrafficStatsIndType trafficStatsIndParams;
16440 wpt_uint32 length, enabled;
16441 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16442
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016443 if (NULL == pMac )
16444 {
16445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16446 "%s: Invoked with invalid MAC context ", __func__ );
16447 VOS_ASSERT(0);
16448 return;
16449 }
16450
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016451 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16452 != eSIR_SUCCESS)
16453 {
16454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16455 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16456 return;
16457 }
16458
16459 if(!enabled)
16460 {
16461 WDI_DS_DeactivateTrafficStats();
16462 return;
16463 }
16464
16465 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
16466
16467 if(pWdiTrafficStats != NULL)
16468 {
16469 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
16470 trafficStatsIndParams.length = length;
16471 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080016472 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016473 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
16474 trafficStatsIndParams.pUserData = pWDA;
16475
16476 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
16477
16478 if(WDI_STATUS_PENDING == wdiStatus)
16479 {
16480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16481 "Pending received for %s:%d ",__func__,__LINE__ );
16482 }
16483 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
16484 {
16485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16486 "Failure in %s:%d ",__func__,__LINE__ );
16487 }
16488
16489 WDI_DS_ClearTrafficStats();
16490 }
16491 else
16492 {
16493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16494 "pWdiTrafficStats is Null");
16495 }
16496
16497 if( VOS_STATUS_SUCCESS !=
16498 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16499 {
16500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16501 "Traffic Stats Timer Start Failed ");
16502 return;
16503 }
16504}
16505
Jeff Johnson295189b2012-06-20 16:38:30 -070016506/*
16507 * BA Activity check timer handler
16508 */
16509void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
16510{
16511 tANI_U8 curSta = 0 ;
16512 tANI_U8 tid = 0 ;
16513 tANI_U8 size = 0 ;
16514 tANI_U8 baCandidateCount = 0 ;
16515 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016516 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016518 tpAniSirGlobal pMac;
16519
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016520 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016521 {
16522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016523 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016524 VOS_ASSERT(0);
16525 return ;
16526 }
16527 if(WDA_MAX_STA < pWDA->wdaMaxSta)
16528 {
16529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16530 "Inconsistent STA entries in WDA");
16531 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016532 }
16533 if(NULL == pWDA->pVosContext)
16534 {
16535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16536 "%s: pVosContext is NULL",__func__);
16537 VOS_ASSERT(0);
16538 return ;
16539 }
16540 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053016541 if(NULL == pMac)
16542 {
16543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16544 "%s: pMac is NULL",__func__);
16545 VOS_ASSERT(0);
16546 return ;
16547 }
16548
Abhishek Singh0644e482014-10-06 18:38:23 +053016549 if (wlan_cfgGetInt(pMac,
16550 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
16551 eSIR_SUCCESS)
16552 {
16553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16554 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
16555 val = 0;
16556 }
16557
Jeff Johnson295189b2012-06-20 16:38:30 -070016558 /* walk through all STA entries and find out TX packet count */
16559 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
16560 {
Abhishek Singh0644e482014-10-06 18:38:23 +053016561 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016562#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016563 // We can only do BA on "hard" STAs.
16564 if (!(IS_HWSTA_IDX(curSta)))
16565 {
16566 continue;
16567 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016568#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016569 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
16570 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016571 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016572 tANI_U32 txPktCount = 0 ;
16573 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016574 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016575 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
16576 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070016577 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
16578 curSta, tid, &txPktCount)))
16579 {
16580#if 0
16581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16582 "************* %d:%d, %d ",curSta, txPktCount,
16583 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
16584#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053016585 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
16586 (currentOperChan <= SIR_11B_CHANNEL_END)))
16587 {
16588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16589 "%s: BTC disabled aggregation - dont start "
16590 "TX ADDBA req",__func__);
16591 }
16592 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016593 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053016594 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
16595 pWDA->wdaGlobalSystemRole) && txPktCount )
16596 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
16597 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070016598 {
16599 /* get prepare for sending message to HAL */
16600 //baCandidate[baCandidateCount].staIdx = curSta ;
16601 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
16602 newBaCandidate = WDA_ENABLE_BA ;
16603 }
16604 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
16605 }
16606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016607 /* fill the entry for all the sta with given TID's */
16608 if(WDA_ENABLE_BA == newBaCandidate)
16609 {
16610 /* move to next BA candidate */
16611 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
16612 size += sizeof(WDI_TriggerBAReqCandidateType) ;
16613 baCandidateCount++ ;
16614 newBaCandidate = WDA_DISABLE_BA ;
16615 }
16616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 /* prepare and send message to hal */
16618 if( 0 < baCandidateCount)
16619 {
16620 WDI_Status status = WDI_STATUS_SUCCESS ;
16621 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
16622 tWDA_ReqParams *pWdaParams =
16623 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016624 if(NULL == pWdaParams)
16625 {
16626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016628 VOS_ASSERT(0) ;
16629 return;
16630 }
16631 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
16632 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
16633 if(NULL == wdiTriggerBaReq)
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 vos_mem_free(pWdaParams);
16639 return;
16640 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016641 do
16642 {
16643 WDI_TriggerBAReqinfoType *triggerBaInfo =
16644 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
16645 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
16646 /* TEMP_FIX: Need to see if WDI need check for assoc session for
16647 * for each request */
16648 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
16649 triggerBaInfo->ucBASessionID = 0;
16650 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
16651 } while(0) ;
16652 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
16653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016654 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016655 pWdaParams->pWdaContext = pWDA;
16656 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
16657 pWdaParams->wdaMsgParam = NULL;
16658 status = WDI_TriggerBAReq(wdiTriggerBaReq,
16659 WDA_TriggerBaReqCallback, pWdaParams) ;
16660 if(IS_WDI_STATUS_FAILURE(status))
16661 {
16662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16663 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
16664 vos_mem_free(pWdaParams->wdaMsgParam) ;
16665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16666 vos_mem_free(pWdaParams) ;
16667 }
16668 }
16669 else
16670 {
16671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16672 "There is no TID for initiating BA");
16673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016674 if( VOS_STATUS_SUCCESS !=
16675 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16676 {
16677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16678 "BA Activity Timer Stop Failed ");
16679 return ;
16680 }
16681 if( VOS_STATUS_SUCCESS !=
16682 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16683 {
16684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16685 "BA Activity Timer Start Failed ");
16686 return;
16687 }
16688 return ;
16689}
Jeff Johnson295189b2012-06-20 16:38:30 -070016690/*
16691 * WDA common routine to create timer used by WDA.
16692 */
16693static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
16694{
Jeff Johnson295189b2012-06-20 16:38:30 -070016695 VOS_STATUS status = VOS_STATUS_SUCCESS ;
16696 tANI_U32 val = 0 ;
16697 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16698
16699 if(NULL == pMac)
16700 {
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016702 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016703 VOS_ASSERT(0);
16704 return VOS_STATUS_E_FAILURE;
16705 }
16706 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
16707 != eSIR_SUCCESS)
16708 {
16709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16710 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
16711 return VOS_STATUS_E_FAILURE;
16712 }
16713 val = SYS_MS_TO_TICKS(val) ;
16714
16715 /* BA activity check timer */
16716 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
16717 "BA Activity Check timer", WDA_TimerHandler,
16718 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
16719 if(status != TX_SUCCESS)
16720 {
16721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16722 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016723 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016725 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016726 /* Tx Complete Timeout timer */
16727 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
16728 "Tx Complete Check timer", WDA_TimerHandler,
16729 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016730 if(status != TX_SUCCESS)
16731 {
16732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16733 "Unable to create Tx Complete Timeout timer");
16734 /* Destroy timer of BA activity check timer */
16735 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16736 if(status != TX_SUCCESS)
16737 {
16738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16739 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016740 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016741 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016742 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016743 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016744
16745 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
16746
16747 /* Traffic Stats timer */
16748 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
16749 "Traffic Stats timer", WDA_TimerHandler,
16750 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
16751 if(status != TX_SUCCESS)
16752 {
16753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16754 "Unable to create traffic stats timer");
16755 /* Destroy timer of BA activity check timer */
16756 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16757 if(status != TX_SUCCESS)
16758 {
16759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16760 "Unable to Destroy BA activity timer");
16761 }
16762 /* Destroy timer of tx complete timer */
16763 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16764 if(status != TX_SUCCESS)
16765 {
16766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16767 "Unable to Tx complete timer");
16768 }
16769 return VOS_STATUS_E_FAILURE ;
16770 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016771 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016772}
Jeff Johnson295189b2012-06-20 16:38:30 -070016773/*
16774 * WDA common routine to destroy timer used by WDA.
16775 */
16776static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16777{
16778 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016779 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16780 if(status != TX_SUCCESS)
16781 {
16782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16783 "Unable to Destroy Tx Complete Timeout timer");
16784 return eSIR_FAILURE ;
16785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016786 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16787 if(status != TX_SUCCESS)
16788 {
16789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16790 "Unable to Destroy BA activity timer");
16791 return eSIR_FAILURE ;
16792 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016793 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16794 if(status != TX_SUCCESS)
16795 {
16796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16797 "Unable to Destroy traffic stats timer");
16798 return eSIR_FAILURE ;
16799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016800 return eSIR_SUCCESS ;
16801}
Jeff Johnson295189b2012-06-20 16:38:30 -070016802/*
16803 * WDA timer handler.
16804 */
16805void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16806{
16807 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16808 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016809 /*
16810 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16811 */
16812 wdaMsg.type = timerInfo ;
16813 wdaMsg.bodyptr = NULL;
16814 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016815 /* post the message.. */
16816 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16817 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16818 {
16819 vosStatus = VOS_STATUS_E_BADMSG;
16820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016821}
Jeff Johnson295189b2012-06-20 16:38:30 -070016822/*
16823 * WDA Tx Complete timeout Indication.
16824 */
16825void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
16826{
16827 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016828 tpSirTxBdStatus txBdStatus = {0};
16829
Jeff Johnson295189b2012-06-20 16:38:30 -070016830 if( pWDA->pAckTxCbFunc )
16831 {
16832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016833 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016834 /*Indicate failure*/
16835 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016836 pWDA->pAckTxCbFunc = NULL;
16837 }
16838 else
16839 {
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016841 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070016842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016843}
Jeff Johnson295189b2012-06-20 16:38:30 -070016844/*
16845 * WDA Set REG Domain to VOS NV
16846 */
Abhishek Singha306a442013-11-07 18:39:01 +053016847eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
16848 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070016849{
Abhishek Singha306a442013-11-07 18:39:01 +053016850 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070016851 {
16852 return eHAL_STATUS_INVALID_PARAMETER;
16853 }
16854 return eHAL_STATUS_SUCCESS;
16855}
Jeff Johnson295189b2012-06-20 16:38:30 -070016856
Jeff Johnson295189b2012-06-20 16:38:30 -070016857#ifdef FEATURE_WLAN_SCAN_PNO
16858/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016859 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016860 *
16861 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016862void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016863{
16864 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016865 tSirPNOScanReq *pPNOScanReqParams;
16866
Jeff Johnson295189b2012-06-20 16:38:30 -070016867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016868 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016869 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070016870 {
16871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016873 VOS_ASSERT(0) ;
16874 return ;
16875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016876
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016877 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
16878 if(pPNOScanReqParams->statusCallback)
16879 {
16880 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16881 (status == WDI_STATUS_SUCCESS) ?
16882 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
16883 }
16884
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053016885 if (pPNOScanReqParams->enable == 1)
16886 {
16887 if (pPNOScanReqParams->aNetworks)
16888 vos_mem_free(pPNOScanReqParams->aNetworks);
16889 if (pPNOScanReqParams->p24GProbeTemplate)
16890 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16891 if (pPNOScanReqParams->p5GProbeTemplate)
16892 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16893 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16895 vos_mem_free(pWdaParams->wdaMsgParam);
16896 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016897
16898 return ;
16899}
Jeff Johnson295189b2012-06-20 16:38:30 -070016900/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016901 * FUNCTION: WDA_PNOScanReqCallback
16902 * Free memory.
16903 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
16904 */
16905void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016906{
Yue Ma7f44bbe2013-04-12 11:47:39 -070016907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016908 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016909
16910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16911 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16912
16913 if(NULL == pWdaParams)
16914 {
16915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16916 "%s: pWdaParams received NULL", __func__);
16917 VOS_ASSERT(0);
16918 return;
16919 }
16920
16921 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16922 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016923 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
16924 if(pPNOScanReqParams->statusCallback)
16925 {
16926 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16927 VOS_STATUS_E_FAILURE);
16928 }
16929
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053016930 if (pPNOScanReqParams->enable == 1)
16931 {
16932 if (pPNOScanReqParams->aNetworks)
16933 vos_mem_free(pPNOScanReqParams->aNetworks);
16934 if (pPNOScanReqParams->p24GProbeTemplate)
16935 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16936 if (pPNOScanReqParams->p5GProbeTemplate)
16937 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16938 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16940 vos_mem_free(pWdaParams->wdaMsgParam);
16941 vos_mem_free(pWdaParams);
16942 }
16943
16944 return;
16945}
16946/*
16947 * FUNCTION: WDA_UpdateScanParamsRespCallback
16948 *
16949 */
16950void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
16951{
16952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016954 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016955 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070016956 {
16957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016959 VOS_ASSERT(0) ;
16960 return ;
16961 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016962
16963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16964 vos_mem_free(pWdaParams->wdaMsgParam);
16965 vos_mem_free(pWdaParams);
16966
Jeff Johnson295189b2012-06-20 16:38:30 -070016967 return ;
16968}
Jeff Johnson295189b2012-06-20 16:38:30 -070016969/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016970 * FUNCTION: WDA_UpdateScanParamsReqCallback
16971 * Free memory.
16972 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
16973 */
16974void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16975{
16976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16977
16978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16979 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16980
16981 if(NULL == pWdaParams)
16982 {
16983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16984 "%s: pWdaParams received NULL", __func__);
16985 VOS_ASSERT(0);
16986 return;
16987 }
16988
16989 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16990 {
16991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16992 vos_mem_free(pWdaParams->wdaMsgParam);
16993 vos_mem_free(pWdaParams);
16994 }
16995
16996 return;
16997}
16998/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17000 * Request to WDI to set Preferred Network List.Offload
17001 */
17002VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17003 tSirPNOScanReq *pPNOScanReqParams)
17004{
Jeff Johnson43971f52012-07-17 12:26:56 -070017005 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017006 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17007 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17008 tWDA_ReqParams *pWdaParams ;
17009 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017012 if(NULL == pwdiPNOScanReqInfo)
17013 {
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017016 VOS_ASSERT(0);
17017 return VOS_STATUS_E_NOMEM;
17018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17020 if(NULL == pWdaParams)
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 vos_mem_free(pwdiPNOScanReqInfo);
17026 return VOS_STATUS_E_NOMEM;
17027 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017028 //
17029 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17030 //
17031 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17032 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017033 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17034 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17035 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017036 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17037 {
17038 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17039 &pPNOScanReqParams->aNetworks[i],
17040 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017042 /*Scan timer intervals*/
17043 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17044 &pPNOScanReqParams->scanTimers,
17045 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017046 /*Probe template for 2.4GHz band*/
17047 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17048 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17049 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017050 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17051 pPNOScanReqParams->p24GProbeTemplate,
17052 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017053 /*Probe template for 5GHz band*/
17054 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17055 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17056 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017057 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17058 pPNOScanReqParams->p5GProbeTemplate,
17059 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017060 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17061 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017062
Jeff Johnson295189b2012-06-20 16:38:30 -070017063 /* Store Params pass it to WDI */
17064 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17065 pWdaParams->pWdaContext = pWDA;
17066 /* Store param pointer as passed in by caller */
17067 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017068 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017069 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017070 if(IS_WDI_STATUS_FAILURE(status))
17071 {
17072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17073 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017074 if(pPNOScanReqParams->statusCallback)
17075 {
17076 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17077 VOS_STATUS_E_FAILURE);
17078 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017079 if (pPNOScanReqParams->enable == 1)
17080 {
17081 if (pPNOScanReqParams->aNetworks)
17082 vos_mem_free(pPNOScanReqParams->aNetworks);
17083 if (pPNOScanReqParams->p24GProbeTemplate)
17084 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17085 if (pPNOScanReqParams->p5GProbeTemplate)
17086 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17089 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017090
Jeff Johnson295189b2012-06-20 16:38:30 -070017091 pWdaParams->wdaWdiApiMsgParam = NULL;
17092 pWdaParams->wdaMsgParam = NULL;
17093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017094 return CONVERT_WDI2VOS_STATUS(status) ;
17095}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017096
17097#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17098
17099void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17100{
17101 /*Convert the CSR Auth types to WDI Auth types */
17102 switch (csrAuthType)
17103 {
17104 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17105 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17106 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017107#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017108 case eCSR_AUTH_TYPE_CCKM_WPA:
17109 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17110 break;
17111#endif
17112 case eCSR_AUTH_TYPE_WPA:
17113 *AuthType = eWDA_AUTH_TYPE_WPA;
17114 break;
17115 case eCSR_AUTH_TYPE_WPA_PSK:
17116 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17117 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017118#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017119 case eCSR_AUTH_TYPE_CCKM_RSN:
17120 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17121 break;
17122#endif
17123 case eCSR_AUTH_TYPE_RSN:
17124 *AuthType = eWDA_AUTH_TYPE_RSN;
17125 break;
17126 case eCSR_AUTH_TYPE_RSN_PSK:
17127 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17128 break;
17129#if defined WLAN_FEATURE_VOWIFI_11R
17130 case eCSR_AUTH_TYPE_FT_RSN:
17131 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17132 break;
17133 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17134 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17135 break;
17136#endif
17137#ifdef FEATURE_WLAN_WAPI
17138 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17139 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17140 break;
17141 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17142 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17143 break;
17144#endif /* FEATURE_WLAN_WAPI */
17145 case eCSR_AUTH_TYPE_SHARED_KEY:
17146 case eCSR_AUTH_TYPE_AUTOSWITCH:
17147 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17148 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017149#ifdef WLAN_FEATURE_11W
17150 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17151 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017152 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017153 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17154 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17155 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017156#endif
17157 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017159 "%s: Unknown Auth Type", __func__);
17160 break;
17161 }
17162}
17163void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17164{
17165 switch (csrEncrType)
17166 {
17167 case eCSR_ENCRYPT_TYPE_NONE:
17168 *EncrType = WDI_ED_NONE;
17169 break;
17170 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17171 case eCSR_ENCRYPT_TYPE_WEP40:
17172 *EncrType = WDI_ED_WEP40;
17173 break;
17174 case eCSR_ENCRYPT_TYPE_WEP104:
17175 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17176 *EncrType = WDI_ED_WEP104;
17177 break;
17178 case eCSR_ENCRYPT_TYPE_TKIP:
17179 *EncrType = WDI_ED_TKIP;
17180 break;
17181 case eCSR_ENCRYPT_TYPE_AES:
17182 *EncrType = WDI_ED_CCMP;
17183 break;
17184#ifdef WLAN_FEATURE_11W
17185 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17186 *EncrType = WDI_ED_AES_128_CMAC;
17187 break;
17188#endif
17189#ifdef FEATURE_WLAN_WAPI
17190 case eCSR_ENCRYPT_TYPE_WPI:
17191 *EncrType = WDI_ED_WPI;
17192 break;
17193#endif
17194 case eCSR_ENCRYPT_TYPE_ANY:
17195 *EncrType = WDI_ED_ANY;
17196 break;
17197
17198 default:
17199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17200 "%s: Unknown Encryption Type", __func__);
17201 break;
17202 }
17203}
17204
17205/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017206 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017207 * Request to WDI to set Roam Offload Scan
17208 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017209VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017210 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17211{
17212 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017213 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17214 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017215 tWDA_ReqParams *pWdaParams ;
17216 v_U8_t csrAuthType;
17217 WDI_RoamNetworkType *pwdiRoamNetworkType;
17218 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17220 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017221 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017222 {
17223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17224 "%s: VOS MEM Alloc Failure", __func__);
17225 VOS_ASSERT(0);
17226 return VOS_STATUS_E_NOMEM;
17227 }
17228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17229 if (NULL == pWdaParams)
17230 {
17231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17232 "%s: VOS MEM Alloc Failure", __func__);
17233 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017234 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017235 return VOS_STATUS_E_NOMEM;
17236 }
17237
17238 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017239 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017240 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017241 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
17242 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017243 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
17244 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
17245 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
17246 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
17247 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
17248 sizeof(pwdiRoamNetworkType->currAPbssid));
17249 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
17250 csrAuthType);
17251 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
17252 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
17253 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
17254 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
17255 pwdiRoamOffloadScanInfo->LookupThreshold =
17256 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080017257 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
17258 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017259 pwdiRoamOffloadScanInfo->RoamRssiDiff =
17260 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080017261 pwdiRoamOffloadScanInfo->MAWCEnabled =
17262 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017263 pwdiRoamOffloadScanInfo->Command =
17264 pRoamOffloadScanReqParams->Command ;
17265 pwdiRoamOffloadScanInfo->StartScanReason =
17266 pRoamOffloadScanReqParams->StartScanReason ;
17267 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
17268 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
17269 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
17270 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
17271 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
17272 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
17273 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
17274 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
17275 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
17276 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017277 pwdiRoamOffloadScanInfo->IsESEEnabled =
17278 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017279 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
17280 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
17281 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
17282 pwdiRoamNetworkType->ssId.ucLength =
17283 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
17284 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
17285 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
17286 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
17287 pwdiRoamNetworkType->ChannelCount =
17288 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
17289 pwdiRoamOffloadScanInfo->ChannelCacheType =
17290 pRoamOffloadScanReqParams->ChannelCacheType;
17291 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
17292 pRoamOffloadScanReqParams->ValidChannelList,
17293 pRoamOffloadScanReqParams->ValidChannelCount);
17294 pwdiRoamOffloadScanInfo->ValidChannelCount =
17295 pRoamOffloadScanReqParams->ValidChannelCount;
17296 pwdiRoamOffloadScanInfo->us24GProbeSize =
17297 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17298 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17299 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
17300 pRoamOffloadScanReqParams->p24GProbeTemplate,
17301 pwdiRoamOffloadScanInfo->us24GProbeSize);
17302 pwdiRoamOffloadScanInfo->us5GProbeSize =
17303 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17304 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17305 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
17306 pRoamOffloadScanReqParams->p5GProbeTemplate,
17307 pwdiRoamOffloadScanInfo->us5GProbeSize);
17308 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
17309 pRoamOffloadScanReqParams->MDID.mdiePresent;
17310 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
17311 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017312 pwdiRoamOffloadScanInfo->nProbes =
17313 pRoamOffloadScanReqParams->nProbes;
17314 pwdiRoamOffloadScanInfo->HomeAwayTime =
17315 pRoamOffloadScanReqParams->HomeAwayTime;
17316 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017317 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017318 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017319 pWdaParams->pWdaContext = pWDA;
17320 /* Store param pointer as passed in by caller */
17321 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017322 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017323 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
17324 if(IS_WDI_STATUS_FAILURE(status))
17325 {
17326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17327 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
17328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17329 vos_mem_free(pWdaParams->wdaMsgParam);
17330 pWdaParams->wdaWdiApiMsgParam = NULL;
17331 pWdaParams->wdaMsgParam = NULL;
17332 }
17333 return CONVERT_WDI2VOS_STATUS(status) ;
17334}
17335#endif
17336
Jeff Johnson295189b2012-06-20 16:38:30 -070017337/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017338 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017339 *
17340 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017341void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017342{
17343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17344
17345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017347
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017348 if(NULL == pWdaParams)
17349 {
17350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017351 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017352 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017353 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017354 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017355
Jeff Johnson295189b2012-06-20 16:38:30 -070017356 vos_mem_free(pWdaParams->wdaMsgParam) ;
17357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17358 vos_mem_free(pWdaParams) ;
17359
17360 return ;
17361}
17362/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017363 * FUNCTION: WDA_RssiFilterReqCallback
17364 * Free memory.
17365 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
17366 */
17367void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17368{
17369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17370
17371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17372 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17373
17374 if(NULL == pWdaParams)
17375 {
17376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17377 "%s: pWdaParams received NULL", __func__);
17378 VOS_ASSERT(0);
17379 return;
17380 }
17381
17382 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17383 {
17384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17385 vos_mem_free(pWdaParams->wdaMsgParam);
17386 vos_mem_free(pWdaParams);
17387 }
17388
17389 return;
17390}
17391/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053017392 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070017393 * Request to WDI to set Preferred Network List.Offload
17394 */
17395VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
17396 tSirSetRSSIFilterReq* pRssiFilterParams)
17397{
Jeff Johnson43971f52012-07-17 12:26:56 -070017398 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017399 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
17400 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
17401 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017404 if(NULL == pwdiSetRssiFilterReqInfo)
17405 {
17406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017408 VOS_ASSERT(0);
17409 return VOS_STATUS_E_NOMEM;
17410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17412 if(NULL == pWdaParams)
17413 {
17414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017416 VOS_ASSERT(0);
17417 vos_mem_free(pwdiSetRssiFilterReqInfo);
17418 return VOS_STATUS_E_NOMEM;
17419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017420 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017421 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
17422 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017423
Jeff Johnson295189b2012-06-20 16:38:30 -070017424 /* Store Params pass it to WDI */
17425 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
17426 pWdaParams->pWdaContext = pWDA;
17427 /* Store param pointer as passed in by caller */
17428 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017429 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017430 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017431 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017432 if(IS_WDI_STATUS_FAILURE(status))
17433 {
17434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17435 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
17436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17437 vos_mem_free(pWdaParams->wdaMsgParam);
17438 pWdaParams->wdaWdiApiMsgParam = NULL;
17439 pWdaParams->wdaMsgParam = NULL;
17440 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017441 return CONVERT_WDI2VOS_STATUS(status) ;
17442}
17443
Jeff Johnson295189b2012-06-20 16:38:30 -070017444/*
17445 * FUNCTION: WDA_ProcessUpdateScanParams
17446 * Request to WDI to update Scan Parameters
17447 */
17448VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
17449 tSirUpdateScanParams *pUpdateScanParams)
17450{
Jeff Johnson43971f52012-07-17 12:26:56 -070017451 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017452 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
17453 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
17454 sizeof(WDI_UpdateScanParamsInfoType)) ;
17455 tWDA_ReqParams *pWdaParams ;
17456 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017459 if(NULL == wdiUpdateScanParamsInfoType)
17460 {
17461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017463 VOS_ASSERT(0);
17464 return VOS_STATUS_E_NOMEM;
17465 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17467 if ( NULL == pWdaParams )
17468 {
17469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017471 VOS_ASSERT(0);
17472 vos_mem_free(wdiUpdateScanParamsInfoType);
17473 return VOS_STATUS_E_NOMEM;
17474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017475 //
17476 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
17477 //
Jeff Johnson295189b2012-06-20 16:38:30 -070017478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17479 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
17480 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
17481 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080017482 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070017483 pUpdateScanParams->b11dEnabled,
17484 pUpdateScanParams->b11dResolved,
17485 pUpdateScanParams->ucChannelCount,
17486 pUpdateScanParams->usPassiveMinChTime,
17487 pUpdateScanParams->usPassiveMaxChTime,
17488 pUpdateScanParams->usActiveMinChTime,
17489 pUpdateScanParams->usActiveMaxChTime,
17490 sizeof(tSirUpdateScanParams),
17491 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
17492
Jeff Johnson295189b2012-06-20 16:38:30 -070017493 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
17494 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070017495 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
17496 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070017497 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
17498 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070017499 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
17500 pUpdateScanParams->usActiveMaxChTime;
17501 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
17502 pUpdateScanParams->usActiveMinChTime;
17503 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
17504 pUpdateScanParams->usPassiveMaxChTime;
17505 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
17506 pUpdateScanParams->usPassiveMinChTime;
17507
Jeff Johnson295189b2012-06-20 16:38:30 -070017508 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053017509 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
17510 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070017511
Jeff Johnson295189b2012-06-20 16:38:30 -070017512 for ( i = 0; i <
17513 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
17514 i++)
17515 {
17516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17517 "Update Scan Parameters channel: %d",
17518 pUpdateScanParams->aChannels[i]);
17519
17520 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
17521 pUpdateScanParams->aChannels[i];
17522 }
17523
Yue Ma7f44bbe2013-04-12 11:47:39 -070017524 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
17525 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017526
Jeff Johnson295189b2012-06-20 16:38:30 -070017527 /* Store Params pass it to WDI */
17528 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
17529 pWdaParams->pWdaContext = pWDA;
17530 /* Store param pointer as passed in by caller */
17531 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070017532
Jeff Johnson295189b2012-06-20 16:38:30 -070017533
17534
17535 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017536 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017537 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017538 if(IS_WDI_STATUS_FAILURE(status))
17539 {
17540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17541 "Failure in Update Scan Params EQ WDI API, free all the memory " );
17542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17543 vos_mem_free(pWdaParams->wdaMsgParam);
17544 vos_mem_free(pWdaParams);
17545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017546 return CONVERT_WDI2VOS_STATUS(status) ;
17547}
17548#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017549
17550#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17551/*
17552 * FUNCTION: WDA_RoamOffloadScanReqCallback
17553 *
17554 */
17555void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
17556{
17557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017558 vos_msg_t vosMsg;
17559 wpt_uint8 reason = 0;
17560
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070017561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017562 "<------ %s " ,__func__);
17563 if (NULL == pWdaParams)
17564 {
17565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17566 "%s: pWdaParams received NULL", __func__);
17567 VOS_ASSERT(0) ;
17568 return ;
17569 }
17570 if ( pWdaParams != NULL )
17571 {
17572 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
17573 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017574 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17576 }
17577 if ( pWdaParams->wdaMsgParam != NULL)
17578 {
17579 vos_mem_free(pWdaParams->wdaMsgParam);
17580 }
17581
17582 vos_mem_free(pWdaParams) ;
17583 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017584 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
17585 vosMsg.bodyptr = NULL;
17586 if (WDI_STATUS_SUCCESS != status)
17587 {
17588 reason = 0;
17589 }
17590 vosMsg.bodyval = reason;
17591 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17592 {
17593 /* free the mem and return */
17594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070017595 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017596 }
17597
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017598 return ;
17599}
17600#endif
17601
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017602/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017603 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017604 *
17605 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017606void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017607{
17608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17609
17610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17611 "<------ %s " ,__func__);
17612
17613 if(NULL == pWdaParams)
17614 {
17615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17616 "%s: pWdaParams received NULL", __func__);
17617 VOS_ASSERT(0);
17618 return;
17619 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017620
17621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17622 vos_mem_free(pWdaParams->wdaMsgParam);
17623 vos_mem_free(pWdaParams);
17624
17625 return;
17626}
17627/*
17628 * FUNCTION: WDA_SetPowerParamsReqCallback
17629 * Free memory.
17630 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
17631 */
17632void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17633{
17634 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17635
17636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17637 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17638
17639 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017640 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070017641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17642 "%s: pWdaParams received NULL", __func__);
17643 VOS_ASSERT(0);
17644 return;
17645 }
17646
17647 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17648 {
17649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17650 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017651 vos_mem_free(pWdaParams);
17652 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017653
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017654 return;
17655}
17656
Jeff Johnson295189b2012-06-20 16:38:30 -070017657#ifdef WLAN_FEATURE_PACKET_FILTERING
17658/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017659 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017660 *
17661 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017662void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017663 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
17664 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017665{
17666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017668 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017669 if(NULL == pWdaParams)
17670 {
17671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017672 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017673 VOS_ASSERT(0) ;
17674 return ;
17675 }
17676
17677 vos_mem_free(pWdaParams->wdaMsgParam) ;
17678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17679 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017680 //print a msg, nothing else to do
17681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017682 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017683 return ;
17684}
Jeff Johnson295189b2012-06-20 16:38:30 -070017685/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017686 * FUNCTION: WDA_8023MulticastListReqCallback
17687 * Free memory.
17688 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
17689 */
17690void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
17691{
17692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17693
17694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17695 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17696
17697 if(NULL == pWdaParams)
17698 {
17699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17700 "%s: pWdaParams received NULL", __func__);
17701 VOS_ASSERT(0);
17702 return;
17703 }
17704
17705 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17706 {
17707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17708 vos_mem_free(pWdaParams->wdaMsgParam);
17709 vos_mem_free(pWdaParams);
17710 }
17711
17712 return;
17713}
17714/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017715 * FUNCTION: WDA_Process8023MulticastListReq
17716 * Request to WDI to add 8023 Multicast List
17717 */
17718VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
17719 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
17720{
Jeff Johnson43971f52012-07-17 12:26:56 -070017721 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017722 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
17723 tWDA_ReqParams *pWdaParams ;
17724 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017726 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017727 pwdiFltPktSetMcListReqParamsType =
17728 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
17729 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
17730 ) ;
17731 if(NULL == pwdiFltPktSetMcListReqParamsType)
17732 {
17733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017735 return VOS_STATUS_E_NOMEM;
17736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17738 if(NULL == pWdaParams)
17739 {
17740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017742 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
17743 return VOS_STATUS_E_NOMEM;
17744 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017745
Jeff Johnson295189b2012-06-20 16:38:30 -070017746 //
17747 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
17748 //
17749 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070017750 pRcvFltMcAddrList->ulMulticastAddrCnt;
17751
17752 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
17753 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
17754 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
17755 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
17756
Jeff Johnson295189b2012-06-20 16:38:30 -070017757 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
17758 {
17759 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
17760 &(pRcvFltMcAddrList->multicastAddr[i]),
17761 sizeof(tSirMacAddr));
17762 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017763 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
17764 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017765
Jeff Johnson295189b2012-06-20 16:38:30 -070017766 /* Store Params pass it to WDI */
17767 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
17768 pWdaParams->pWdaContext = pWDA;
17769 /* Store param pointer as passed in by caller */
17770 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017771 status = WDI_8023MulticastListReq(
17772 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017773 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017774 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017775 if(IS_WDI_STATUS_FAILURE(status))
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17780 vos_mem_free(pWdaParams->wdaMsgParam);
17781 vos_mem_free(pWdaParams);
17782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017783 return CONVERT_WDI2VOS_STATUS(status) ;
17784}
Jeff Johnson295189b2012-06-20 16:38:30 -070017785/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017786 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017787 *
17788 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017789void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017790 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17791 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017792{
17793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017796 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017797 if(NULL == pWdaParams)
17798 {
17799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017800 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017801 VOS_ASSERT(0) ;
17802 return ;
17803 }
17804
17805 vos_mem_free(pWdaParams->wdaMsgParam) ;
17806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17807 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017808 //print a msg, nothing else to do
17809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017810 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017811 return ;
17812}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017813
17814/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017815 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17816 * Free memory.
17817 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017818 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017819void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017820 void* pUserData)
17821{
17822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17823
17824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17825 "<------ %s, wdiStatus: %d",
17826 __func__, wdiStatus);
17827
17828 if (NULL == pWdaParams)
17829 {
17830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17831 "%s: Invalid pWdaParams pointer", __func__);
17832 VOS_ASSERT(0);
17833 return;
17834 }
17835
17836 if (IS_WDI_STATUS_FAILURE(wdiStatus))
17837 {
17838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17839 vos_mem_free(pWdaParams->wdaMsgParam);
17840 vos_mem_free(pWdaParams);
17841 }
17842
17843 return;
17844}
17845
Jeff Johnson295189b2012-06-20 16:38:30 -070017846/*
17847 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
17848 * Request to WDI to set Receive Filters
17849 */
17850VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
17851 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
17852{
Jeff Johnson43971f52012-07-17 12:26:56 -070017853 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017854 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
17855 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
17856 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
17857 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
17858 tWDA_ReqParams *pWdaParams ;
17859 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017862 if(NULL == pwdiSetRcvPktFilterReqParamsType)
17863 {
17864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017866 VOS_ASSERT(0);
17867 return VOS_STATUS_E_NOMEM;
17868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17870 if(NULL == pWdaParams)
17871 {
17872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017874 VOS_ASSERT(0);
17875 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
17876 return VOS_STATUS_E_NOMEM;
17877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017878 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
17879 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
17880 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
17881 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070017882 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
17883 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
17884
17885 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
17886 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017887
17888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17889 "FID %d FT %d NParams %d CT %d",
17890 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
17891 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
17892 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
17893 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070017894 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
17895 {
17896 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
17897 &pRcvPktFilterCfg->paramsData[i],
17898 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070017899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017900 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017901 pwdiSetRcvPktFilterReqParamsType->
17902 wdiPktFilterCfg.paramsData[i].protocolLayer,
17903 pwdiSetRcvPktFilterReqParamsType->
17904 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070017905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017906 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017907 pwdiSetRcvPktFilterReqParamsType->
17908 wdiPktFilterCfg.paramsData[i].dataOffset,
17909 pwdiSetRcvPktFilterReqParamsType->
17910 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070017911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017912 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017913 pwdiSetRcvPktFilterReqParamsType->
17914 wdiPktFilterCfg.paramsData[i].compareData[0],
17915 pwdiSetRcvPktFilterReqParamsType->
17916 wdiPktFilterCfg.paramsData[i].compareData[1],
17917 pwdiSetRcvPktFilterReqParamsType->
17918 wdiPktFilterCfg.paramsData[i].compareData[2],
17919 pwdiSetRcvPktFilterReqParamsType->
17920 wdiPktFilterCfg.paramsData[i].compareData[3],
17921 pwdiSetRcvPktFilterReqParamsType->
17922 wdiPktFilterCfg.paramsData[i].compareData[4],
17923 pwdiSetRcvPktFilterReqParamsType->
17924 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070017925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017926 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017927 pwdiSetRcvPktFilterReqParamsType->
17928 wdiPktFilterCfg.paramsData[i].dataMask[0],
17929 pwdiSetRcvPktFilterReqParamsType->
17930 wdiPktFilterCfg.paramsData[i].dataMask[1],
17931 pwdiSetRcvPktFilterReqParamsType->
17932 wdiPktFilterCfg.paramsData[i].dataMask[2],
17933 pwdiSetRcvPktFilterReqParamsType->
17934 wdiPktFilterCfg.paramsData[i].dataMask[3],
17935 pwdiSetRcvPktFilterReqParamsType->
17936 wdiPktFilterCfg.paramsData[i].dataMask[4],
17937 pwdiSetRcvPktFilterReqParamsType->
17938 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017940 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017941 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017942 /* Store Params pass it to WDI */
17943 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
17944 pWdaParams->pWdaContext = pWDA;
17945 /* Store param pointer as passed in by caller */
17946 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070017947 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017948 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017949 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017950 if(IS_WDI_STATUS_FAILURE(status))
17951 {
17952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17953 "Failure in SetFilter(),free all the memory,status %d ",status);
17954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17955 vos_mem_free(pWdaParams->wdaMsgParam);
17956 vos_mem_free(pWdaParams);
17957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017958 return CONVERT_WDI2VOS_STATUS(status) ;
17959}
Jeff Johnson295189b2012-06-20 16:38:30 -070017960/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017961 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017962 *
17963 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017964void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017965 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
17966 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017967{
17968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17969 tWDA_CbContext *pWDA;
17970 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
17971 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
17972 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
17973 tANI_U8 i;
17974 vos_msg_t vosMsg;
17975
17976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017978 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
17979
Jeff Johnsone7245742012-09-05 17:12:55 -070017980 if(NULL == pRcvFltPktMatchCntRsp)
17981 {
17982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017983 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070017984 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017985 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070017986 return ;
17987 }
17988
Jeff Johnson295189b2012-06-20 16:38:30 -070017989 if(NULL == pWdaParams)
17990 {
17991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017993 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017994 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070017995 return ;
17996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017997 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
17998 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070017999 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18000 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18001
18002 /* Message Header */
18003 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18004 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18005
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018006 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018007
18008 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18009 {
18010 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18011 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018013 /* VOS message wrapper */
18014 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18015 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18016 vosMsg.bodyval = 0;
18017 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18018 {
18019 /* free the mem and return */
18020 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18021 }
18022
18023 vos_mem_free(pWdaParams->wdaMsgParam) ;
18024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18025 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018026
18027 return;
18028}
18029/*
18030 * FUNCTION: WDA_FilterMatchCountReqCallback
18031 * Free memory and send RSP back to SME.
18032 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18033 */
18034void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18035{
18036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18037 vos_msg_t vosMsg;
18038
18039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18040 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18041
18042 if(NULL == pWdaParams)
18043 {
18044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18045 "%s: pWdaParams received NULL", __func__);
18046 VOS_ASSERT(0);
18047 return;
18048 }
18049
18050 /* VOS message wrapper */
18051 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18052 vosMsg.bodyptr = NULL;
18053 vosMsg.bodyval = 0;
18054
18055 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18056 {
18057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18058 vos_mem_free(pWdaParams->wdaMsgParam);
18059 vos_mem_free(pWdaParams);
18060 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18061 }
18062
18063 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018064}
Jeff Johnson295189b2012-06-20 16:38:30 -070018065/*
18066 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18067 * Request to WDI to get PC Filter Match Count
18068 */
18069VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18070{
Jeff Johnson43971f52012-07-17 12:26:56 -070018071 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018072 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18073 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018077 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18078 {
18079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018081 VOS_ASSERT(0);
18082 return VOS_STATUS_E_NOMEM;
18083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18085 if(NULL == pWdaParams)
18086 {
18087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018089 VOS_ASSERT(0);
18090 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18091 return VOS_STATUS_E_NOMEM;
18092 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018093
Yue Ma7f44bbe2013-04-12 11:47:39 -070018094 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18095 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018096
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018097 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18098 pRcvFltPktMatchRsp->bssId,
18099 sizeof(wpt_macAddr));
18100
Jeff Johnson295189b2012-06-20 16:38:30 -070018101 /* Store Params pass it to WDI */
18102 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18103 pWdaParams->pWdaContext = pWDA;
18104 /* Store param pointer as passed in by caller */
18105 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018106 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018107 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018108 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018109 if(IS_WDI_STATUS_FAILURE(status))
18110 {
18111 /* failure returned by WDI API */
18112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18113 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18115 vos_mem_free(pWdaParams) ;
18116 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18117 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018119 return CONVERT_WDI2VOS_STATUS(status) ;
18120}
Jeff Johnson295189b2012-06-20 16:38:30 -070018121/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018122 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018123 *
18124 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018125void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018126 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18127 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018128{
18129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018131 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018132/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18133 if(NULL == pWdaParams)
18134 {
18135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018137 VOS_ASSERT(0) ;
18138 return ;
18139 }
18140
18141 vos_mem_free(pWdaParams->wdaMsgParam) ;
18142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18143 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018144 //print a msg, nothing else to do
18145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018146 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018147 return ;
18148}
Jeff Johnson295189b2012-06-20 16:38:30 -070018149/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018150 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18151 * Free memory.
18152 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18153 */
18154void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18155{
18156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18157
18158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18159 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18160
18161 if(NULL == pWdaParams)
18162 {
18163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18164 "%s: Invalid pWdaParams pointer", __func__);
18165 VOS_ASSERT(0);
18166 return;
18167 }
18168
18169 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18170 {
18171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18172 vos_mem_free(pWdaParams->wdaMsgParam);
18173 vos_mem_free(pWdaParams);
18174 }
18175
18176 return;
18177}
18178/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018179 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18180 * Request to WDI to clear Receive Filters
18181 */
18182VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18183 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18184{
Jeff Johnson43971f52012-07-17 12:26:56 -070018185 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018186 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18187 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18188 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018191 if(NULL == pwdiRcvFltPktClearReqParamsType)
18192 {
18193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018195 VOS_ASSERT(0);
18196 return VOS_STATUS_E_NOMEM;
18197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18199 if(NULL == pWdaParams)
18200 {
18201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018203 VOS_ASSERT(0);
18204 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18205 return VOS_STATUS_E_NOMEM;
18206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018207 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18208 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018209 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18210 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18211 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18212 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018213
Yue Ma7f44bbe2013-04-12 11:47:39 -070018214 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018215 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018216 /* Store Params pass it to WDI */
18217 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18218 pWdaParams->pWdaContext = pWDA;
18219 /* Store param pointer as passed in by caller */
18220 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018221 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018222 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018223 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018224 if(IS_WDI_STATUS_FAILURE(status))
18225 {
18226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18227 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018229 vos_mem_free(pWdaParams->wdaMsgParam);
18230 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018231 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018232 return CONVERT_WDI2VOS_STATUS(status) ;
18233}
18234#endif // WLAN_FEATURE_PACKET_FILTERING
18235
Jeff Johnson295189b2012-06-20 16:38:30 -070018236/*
18237 * FUNCTION: WDA_ProcessSetPowerParamsReq
18238 * Request to WDI to set power params
18239 */
18240VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
18241 tSirSetPowerParamsReq *pPowerParams)
18242{
Jeff Johnson43971f52012-07-17 12:26:56 -070018243 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018244 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
18245 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018246 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018249 if(NULL == pwdiSetPowerParamsReqInfo)
18250 {
18251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018253 VOS_ASSERT(0);
18254 return VOS_STATUS_E_NOMEM;
18255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18257 if(NULL == pWdaParams)
18258 {
18259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018261 VOS_ASSERT(0);
18262 vos_mem_free(pwdiSetPowerParamsReqInfo);
18263 return VOS_STATUS_E_NOMEM;
18264 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018265
Jeff Johnson295189b2012-06-20 16:38:30 -070018266
18267 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
18268 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070018269 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
18270 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070018271 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
18272 pPowerParams->uListenInterval;
18273 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
18274 pPowerParams->uBcastMcastFilter;
18275 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
18276 pPowerParams->uEnableBET;
18277 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
18278 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070018279 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
18280 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018281 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
18282 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018283
Jeff Johnson295189b2012-06-20 16:38:30 -070018284 /* Store Params pass it to WDI */
18285 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
18286 pWdaParams->pWdaContext = pWDA;
18287 /* Store param pointer as passed in by caller */
18288 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018289 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018290 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018291 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018292 if(IS_WDI_STATUS_FAILURE(status))
18293 {
18294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18295 "Failure in Set power params REQ WDI API, free all the memory " );
18296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18297 vos_mem_free(pWdaParams->wdaMsgParam);
18298 pWdaParams->wdaWdiApiMsgParam = NULL;
18299 pWdaParams->wdaMsgParam = NULL;
18300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018301 return CONVERT_WDI2VOS_STATUS(status) ;
18302}
18303
18304/*
18305 * FUNCTION: WDA_SetTmLevelRspCallback
18306 * Set TM Level response
18307 */
18308void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
18309{
18310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18311
18312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018313 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018314
18315 if(NULL == pWdaParams)
18316 {
18317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018318 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018319 VOS_ASSERT(0) ;
18320 return ;
18321 }
18322
18323 /* Dose not need to send notification to upper layer
18324 * Just free allocated resources */
18325 if( pWdaParams != NULL )
18326 {
18327 if( pWdaParams->wdaWdiApiMsgParam != NULL )
18328 {
18329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18330 }
18331 vos_mem_free(pWdaParams->wdaMsgParam) ;
18332 vos_mem_free(pWdaParams) ;
18333 }
18334}
18335
18336/*
18337 * FUNCTION: WDA_ProcessSetTmLevelReq
18338 * Set TM Level request
18339 */
18340VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
18341 tAniSetTmLevelReq *setTmLevelReq)
18342{
18343 WDI_Status status = WDI_STATUS_SUCCESS ;
18344 tWDA_ReqParams *pWdaParams ;
18345 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
18346 (WDI_SetTmLevelReqType *)vos_mem_malloc(
18347 sizeof(WDI_SetTmLevelReqType)) ;
18348 if(NULL == wdiSetTmLevelReq)
18349 {
18350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018352 VOS_ASSERT(0);
18353 return VOS_STATUS_E_NOMEM;
18354 }
18355
18356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18357 if(NULL == pWdaParams)
18358 {
18359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018361 VOS_ASSERT(0);
18362 vos_mem_free(wdiSetTmLevelReq);
18363 return VOS_STATUS_E_NOMEM;
18364 }
18365
18366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018367 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018368
18369 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
18370 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
18371
18372 pWdaParams->pWdaContext = pWDA;
18373 pWdaParams->wdaMsgParam = setTmLevelReq;
18374 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
18375
18376 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
18377 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
18378
18379 if(IS_WDI_STATUS_FAILURE(status))
18380 {
18381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080018382 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070018383 vos_mem_free(pWdaParams->wdaMsgParam) ;
18384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18385 vos_mem_free(pWdaParams) ;
18386 }
18387
18388 return CONVERT_WDI2VOS_STATUS(status) ;
18389}
18390
18391VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
18392 tpTxControlParams pTxCtrlParam)
18393{
18394 VOS_STATUS wdaStatus;
18395
18396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018397 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018398 if( pTxCtrlParam == NULL )
18399 {
18400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018401 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018402 return VOS_STATUS_E_FAILURE;
18403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018404 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
18405 {
18406 wdaStatus = WDA_SuspendDataTx(pWDA);
18407 }
18408 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
18409 {
18410 wdaStatus = WDA_ResumeDataTx(pWDA);
18411 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018412 return wdaStatus;
18413}
18414
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018415void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053018416{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018417 WDI_Status status;
18418 status = WDI_FWLoggingDXEdoneInd(logType);
18419
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053018420 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018421 {
18422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18423 FL("Failure status %d"), status);
18424 }
Mihir Shete5affadc2015-05-29 20:54:57 +053018425}
18426
Jeff Johnson295189b2012-06-20 16:38:30 -070018427 /* FUNCTION WDA_featureCapsExchange
18428 * WDA API to invoke capability exchange between host and FW.
18429 */
18430void WDA_featureCapsExchange(v_PVOID_t pVosContext)
18431{
18432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018433 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018434 WDI_featureCapsExchangeReq( NULL, pVosContext);
18435}
18436
Yathish9f22e662012-12-10 14:21:35 -080018437/* FUNCTION WDA_disableCapablityFeature
18438 * WDA API to diable Active mode offload in host.
18439 */
18440void WDA_disableCapablityFeature(tANI_U8 feature_index)
18441{
18442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18443 "%s:enter", __func__ );
18444 WDI_disableCapablityFeature(feature_index);
18445}
18446
Jeff Johnson295189b2012-06-20 16:38:30 -070018447 /* FUNCTION WDA_getHostWlanFeatCaps
18448 * Wrapper for WDI API, that will return if the feature (enum value).passed
18449 * to this API is supported or not in Host
18450 * return value
18451 * 0 - implies feature is NOT Supported
18452 * any non zero value - implies feature is SUPPORTED
18453 */
18454tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
18455{
18456 return WDI_getHostWlanFeatCaps(featEnumValue);
18457}
18458
18459 /* FUNCTION WDA_getFwWlanFeatCaps
18460 * Wrapper for WDI API, that will return if the feature (enum value).passed
18461 * to this API is supported or not in FW
18462 * return value
18463 * 0 - implies feature is NOT Supported
18464 * any non zero value - implies feature is SUPPORTED
18465 */
18466tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
18467{
18468 return WDI_getFwWlanFeatCaps(featEnumValue);
18469}
18470
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053018471
Jeff Johnson295189b2012-06-20 16:38:30 -070018472/*
18473 * FUNCTION: WDA_shutdown
18474 * Shutdown WDA/WDI without handshaking with Riva.
18475 * Synchronous function.
18476 */
18477VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
18478{
18479 WDI_Status wdiStatus;
18480 //tANI_U8 eventIdx = 0;
18481 VOS_STATUS status = VOS_STATUS_SUCCESS;
18482 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070018483 if (NULL == pWDA)
18484 {
18485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018486 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018487 VOS_ASSERT(0);
18488 return VOS_STATUS_E_FAILURE;
18489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018490 /* FTM mode stay START_STATE */
18491 if( (WDA_READY_STATE != pWDA->wdaState) &&
18492 (WDA_INIT_STATE != pWDA->wdaState) &&
18493 (WDA_START_STATE != pWDA->wdaState) )
18494 {
18495 VOS_ASSERT(0);
18496 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018497
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018498 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070018499 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018500 if(VOS_TRUE == pWDA->wdaTimersCreated)
18501 {
18502 wdaDestroyTimers(pWDA);
18503 pWDA->wdaTimersCreated = VOS_FALSE;
18504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018505 }
Leo Chang9d76f622013-08-23 16:34:52 -070018506 else
18507 {
18508 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018509 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018510
Jeff Johnson295189b2012-06-20 16:38:30 -070018511 /* call WDI shutdown */
18512 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070018513 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
18514 {
18515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18516 "error in WDA Stop" );
18517 status = VOS_STATUS_E_FAILURE;
18518 }
18519 /* WDI stop is synchrnous, shutdown is complete when it returns */
18520 pWDA->wdaState = WDA_STOP_STATE;
18521
Jeff Johnson295189b2012-06-20 16:38:30 -070018522 /* shutdown should perform the stop & close actions. */
18523 /* Destroy the event */
18524 status = vos_event_destroy(&pWDA->txFrameEvent);
18525 if(!VOS_IS_STATUS_SUCCESS(status))
18526 {
18527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018528 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018529 status = VOS_STATUS_E_FAILURE;
18530 }
18531 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
18532 if(!VOS_IS_STATUS_SUCCESS(status))
18533 {
18534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018535 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018536 status = VOS_STATUS_E_FAILURE;
18537 }
18538 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
18539 if(!VOS_IS_STATUS_SUCCESS(status))
18540 {
18541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018542 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018543 status = VOS_STATUS_E_FAILURE;
18544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018545 /* free WDA context */
18546 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
18547 if ( !VOS_IS_STATUS_SUCCESS(status) )
18548 {
18549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18550 "error in WDA close " );
18551 status = VOS_STATUS_E_FAILURE;
18552 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018553 return status;
18554}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018555
Jeff Johnsone7245742012-09-05 17:12:55 -070018556/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018557 * FUNCTION: WDA_setNeedShutdown
18558 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070018559 */
18560
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018561void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070018562{
18563 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018564 if(pWDA == NULL)
18565 {
18566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18567 "Could not get the WDA Context pointer" );
18568 return;
18569 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018570 pWDA->needShutdown = TRUE;
18571}
18572/*
18573 * FUNCTION: WDA_needShutdown
18574 * WDA needs a shutdown
18575 */
18576
18577v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
18578{
18579 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018580 if(pWDA == NULL)
18581 {
18582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18583 "Could not get the WDA Context pointer" );
18584 return 0;
18585 }
18586 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070018587}
18588
Mohit Khanna4a70d262012-09-11 16:30:12 -070018589#ifdef WLAN_FEATURE_11AC
18590/*
18591 * FUNCTION: WDA_SetBeaconFilterReqCallback
18592 *
18593 */
18594void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
18595{
18596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018598 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018599 if(NULL == pWdaParams)
18600 {
18601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018602 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018603 VOS_ASSERT(0) ;
18604 return ;
18605 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018606
Mohit Khanna4a70d262012-09-11 16:30:12 -070018607 vos_mem_free(pWdaParams->wdaMsgParam) ;
18608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18609 vos_mem_free(pWdaParams) ;
18610 /*
18611 * No respone required for SetBeaconFilter req so just free the request
18612 * param here
18613 */
18614
18615 return ;
18616}
18617
18618VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
18619 tUpdateVHTOpMode *pData)
18620{
18621 WDI_Status status = WDI_STATUS_SUCCESS ;
18622 tWDA_ReqParams *pWdaParams ;
18623 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
18624 sizeof(WDI_UpdateVHTOpMode)) ;
18625 if(NULL == wdiTemp)
18626 {
18627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018628 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018629 VOS_ASSERT(0);
18630 return VOS_STATUS_E_NOMEM;
18631 }
18632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18633 if(NULL == pWdaParams)
18634 {
18635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018636 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018637 VOS_ASSERT(0);
18638 vos_mem_free(wdiTemp);
18639 return VOS_STATUS_E_NOMEM;
18640 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053018641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18642 "------> %s Opmode = %d and staid = %d" ,
18643 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018644 wdiTemp->opMode = pData->opMode;
18645 wdiTemp->staId = pData->staId;
18646
18647 pWdaParams->pWdaContext = pWDA;
18648 /* Store Req pointer, as this will be used for response */
18649 pWdaParams->wdaMsgParam = (void *)pData;
18650 /* store Params pass it to WDI */
18651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
18652
18653 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
18654
18655 if(IS_WDI_STATUS_FAILURE(status))
18656 {
18657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18658 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
18659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18660 vos_mem_free(pWdaParams->wdaMsgParam);
18661 vos_mem_free(pWdaParams);
18662 }
18663 return CONVERT_WDI2VOS_STATUS(status) ;
18664}
18665#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018666
18667/*==========================================================================
18668 FUNCTION WDA_TransportChannelDebug
18669
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070018670 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018671 Display Transport Channel debugging information
18672 User may request to display DXE channel snapshot
18673 Or if host driver detects any abnormal stcuk may display
18674
18675 PARAMETERS
schang6295e542013-03-12 15:31:23 -070018676 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080018677 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053018678 debugFlags : Enable stall detect features
18679 defined by WPAL_DeviceDebugFlags
18680 These features may effect
18681 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018682
18683 RETURN VALUE
18684 NONE
18685
18686===========================================================================*/
18687void WDA_TransportChannelDebug
18688(
schang6295e542013-03-12 15:31:23 -070018689 tpAniSirGlobal pMac,
18690 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053018691 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018692)
18693{
Mihir Shete40a55652014-03-02 14:14:47 +053018694 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018695 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018696}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018697
18698/*==========================================================================
18699 FUNCTION WDA_SetEnableSSR
18700
18701 DESCRIPTION
18702 API to enable/disable SSR on WDI timeout
18703
18704 PARAMETERS
18705 enableSSR : enable/disable SSR
18706
18707 RETURN VALUE
18708 NONE
18709
18710===========================================================================*/
18711void WDA_SetEnableSSR(v_BOOL_t enableSSR)
18712{
18713 WDI_SetEnableSSR(enableSSR);
18714}
Leo Chang9056f462013-08-01 19:21:11 -070018715
18716#ifdef FEATURE_WLAN_LPHB
18717/*
18718 * FUNCTION: WDA_LPHBconfRspCallback
18719 *
18720 */
18721void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
18722{
18723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18724
18725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18726 "<------ %s " ,__func__);
18727 if (NULL == pWdaParams)
18728 {
18729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18730 "%s: pWdaParams received NULL", __func__);
18731 VOS_ASSERT(0) ;
18732 return ;
18733 }
18734
18735 /* Do not need to send notification to upper layer
18736 * Just free allocated resources */
18737 if (pWdaParams != NULL)
18738 {
18739 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18740 {
18741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18742 }
18743 vos_mem_free(pWdaParams->wdaMsgParam) ;
18744 vos_mem_free(pWdaParams) ;
18745 }
18746
18747 return;
18748}
18749
18750/*
18751 * FUNCTION: WDA_ProcessLPHBConfReq
18752 *
18753 */
18754VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
18755 tSirLPHBReq *pData)
18756{
18757 WDI_Status wdiStatus;
18758 tWDA_ReqParams *pWdaParams ;
18759
18760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18761 "------> %s " , __func__);
18762
18763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18764 if (NULL == pWdaParams)
18765 {
18766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18767 "%s: VOS MEM Alloc Failure", __func__);
18768 VOS_ASSERT(0);
18769 vos_mem_free(pData);
18770 return VOS_STATUS_E_NOMEM;
18771 }
18772
18773 pWdaParams->pWdaContext = pWDA;
18774 pWdaParams->wdaMsgParam = (void *)pData;
18775 pWdaParams->wdaWdiApiMsgParam = NULL;
18776
18777 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18778 if (WDI_STATUS_PENDING == wdiStatus)
18779 {
18780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18781 "Pending received for %s:%d ", __func__, __LINE__);
18782 }
18783 else if (WDI_STATUS_SUCCESS != wdiStatus)
18784 {
18785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18786 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18787 vos_mem_free(pWdaParams->wdaMsgParam);
18788 vos_mem_free(pWdaParams);
18789 }
18790
18791 return CONVERT_WDI2VOS_STATUS(wdiStatus);
18792}
18793#endif /* FEATURE_WLAN_LPHB */
18794
c_hpothu92367912014-05-01 15:18:17 +053018795void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
18796 void* pUserData)
18797{
18798 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
18799
18800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18801 "<------ %s " ,__func__);
18802 if (NULL == pBcnMissRateInfo)
18803 {
18804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18805 "%s: pWdaParams received NULL", __func__);
18806 VOS_ASSERT(0) ;
18807 return ;
18808 }
18809 if (pBcnMissRateInfo->callback)
18810 {
18811 pBcnMissRateInfo->callback(status, bcnMissRate,
18812 pBcnMissRateInfo->data);
18813 }
18814 vos_mem_free(pUserData);
18815
18816 return;
18817}
18818
18819v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
18820 tSirBcnMissRateReq *pData)
18821{
18822 WDI_Status wdiStatus;
18823 tSirBcnMissRateInfo *pBcnMissRateInfo;
18824
18825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18826 "------> %s " , __func__);
18827
18828 pBcnMissRateInfo =
18829 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
18830 if (NULL == pBcnMissRateInfo)
18831 {
18832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18833 "%s: VOS MEM Alloc Failure", __func__);
18834 VOS_ASSERT(0);
18835 vos_mem_free(pData);
18836 return;
18837 }
18838
18839 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
18840 pBcnMissRateInfo->data = pData->data;
18841
18842 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
18843 WDA_GetBcnMissRateCallback,
18844 pData->bssid);
18845 if (WDI_STATUS_PENDING == wdiStatus)
18846 {
18847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18848 "Pending received for %s:%d ", __func__, __LINE__);
18849 }
18850 else if (WDI_STATUS_SUCCESS != wdiStatus)
18851 {
18852 if (pBcnMissRateInfo->callback)
18853 {
18854 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
18855 -1, pBcnMissRateInfo->data);
18856 }
18857 }
18858 vos_mem_free(pData);
18859}
Dino Mycle41bdc942014-06-10 11:30:24 +053018860
18861#ifdef WLAN_FEATURE_EXTSCAN
18862
18863/*==========================================================================
18864 FUNCTION WDA_EXTScanStartRspCallback
18865
18866 DESCRIPTION
18867 API to send EXTScan Start Response to HDD
18868
18869 PARAMETERS
18870 pEventData: Response from FW
18871 pUserData:
18872===========================================================================*/
18873void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
18874{
18875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18876 tWDA_CbContext *pWDA = NULL;
18877 void *pCallbackContext;
18878 tpAniSirGlobal pMac;
18879
18880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18881 "%s:", __func__);
18882 if (NULL == pWdaParams)
18883 {
18884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18885 "%s: pWdaParams received NULL", __func__);
18886 VOS_ASSERT(0);
18887 return;
18888 }
18889
18890 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18891
18892 if (NULL == pWDA)
18893 {
18894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18895 "%s: pWDA received NULL", __func__);
18896 VOS_ASSERT(0);
18897 goto error;
18898 }
18899
18900 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18901 if (NULL == pMac)
18902 {
18903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18904 "%s:pMac is NULL", __func__);
18905 VOS_ASSERT(0);
18906 goto error;
18907 }
18908
18909 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18910
18911 if (pMac->sme.pEXTScanIndCb)
18912 {
18913 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
18914 pEventData);
18915 }
18916 else
18917 {
18918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18919 "%s:HDD callback is null", __func__);
18920 VOS_ASSERT(0);
18921 }
18922
18923error:
18924
18925 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18926 {
18927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18928 }
18929 if (pWdaParams->wdaMsgParam != NULL)
18930 {
18931 vos_mem_free(pWdaParams->wdaMsgParam);
18932 }
18933 vos_mem_free(pWdaParams) ;
18934
18935 return;
18936}
18937
18938/*==========================================================================
18939 FUNCTION WDA_EXTScanStopRspCallback
18940
18941 DESCRIPTION
18942 API to send EXTScan Stop Response to HDD
18943
18944 PARAMETERS
18945 pEventData: Response from FW
18946 pUserData:
18947===========================================================================*/
18948void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
18949{
18950 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18951 tWDA_CbContext *pWDA = NULL;
18952 void *pCallbackContext;
18953 tpAniSirGlobal pMac;
18954
18955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18956 "%s:", __func__);
18957 if (NULL == pWdaParams)
18958 {
18959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18960 "%s: pWdaParams received NULL", __func__);
18961 VOS_ASSERT(0);
18962 return;
18963 }
18964
18965 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18966
18967 if (NULL == pWDA)
18968 {
18969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18970 "%s: pWDA received NULL", __func__);
18971 VOS_ASSERT(0);
18972 goto error;
18973 }
18974
18975 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18976 if (NULL == pMac)
18977 {
18978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18979 "%s:pMac is NULL", __func__);
18980 VOS_ASSERT(0);
18981 goto error;
18982 }
18983 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18984
18985 if (pMac->sme.pEXTScanIndCb)
18986 {
18987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18988 "%s:HDD call back function called", __func__);
18989 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
18990 pEventData);
18991 }
18992 else
18993 {
18994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18995 "%s:HDD callback is null", __func__);
18996 VOS_ASSERT(0);
18997 }
18998
18999error:
19000
19001 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19002 {
19003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19004 }
19005 if (pWdaParams->wdaMsgParam != NULL)
19006 {
19007 vos_mem_free(pWdaParams->wdaMsgParam);
19008 }
19009 vos_mem_free(pWdaParams) ;
19010
19011
19012 return;
19013}
19014
19015/*==========================================================================
19016 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19017
19018 DESCRIPTION
19019 API to send EXTScan Get Cached Results Response to HDD
19020
19021 PARAMETERS
19022 pEventData: Response from FW
19023 pUserData:
19024===========================================================================*/
19025void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19026{
19027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19028 tWDA_CbContext *pWDA = NULL;
19029 void *pCallbackContext;
19030 tpAniSirGlobal pMac;
19031
19032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19033 "%s: ", __func__);
19034 if (NULL == pWdaParams)
19035 {
19036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19037 "%s: pWdaParams received NULL", __func__);
19038 VOS_ASSERT(0);
19039 return;
19040 }
19041
19042 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19043
19044 if (NULL == pWDA)
19045 {
19046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19047 "%s: pWDA received NULL", __func__);
19048 VOS_ASSERT(0);
19049 goto error;
19050 }
19051
19052 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19053 if (NULL == pMac)
19054 {
19055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19056 "%s:pMac is NULL", __func__);
19057 VOS_ASSERT(0);
19058 goto error;
19059 }
19060
19061 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19062
19063 if (pMac->sme.pEXTScanIndCb)
19064 {
19065 pMac->sme.pEXTScanIndCb(pCallbackContext,
19066 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19067 pEventData);
19068 }
19069 else
19070 {
19071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19072 "%s:HDD callback is null", __func__);
19073 VOS_ASSERT(0);
19074 }
19075
19076
19077error:
19078
19079 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19080 {
19081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19082 }
19083 if (pWdaParams->wdaMsgParam != NULL)
19084 {
19085 vos_mem_free(pWdaParams->wdaMsgParam);
19086 }
19087 vos_mem_free(pWdaParams) ;
19088
19089 return;
19090}
19091
19092/*==========================================================================
19093 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19094
19095 DESCRIPTION
19096 API to send EXTScan Get Capabilities Response to HDD
19097
19098 PARAMETERS
19099 pEventData: Response from FW
19100 pUserData:
19101===========================================================================*/
19102void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19103{
19104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19105 tWDA_CbContext *pWDA = NULL;
19106 void *pCallbackContext;
19107 tpAniSirGlobal pMac;
19108
19109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19110 "%s:", __func__);
19111 if (NULL == pWdaParams)
19112 {
19113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19114 "%s: pWdaParams received NULL", __func__);
19115 VOS_ASSERT(0);
19116 return;
19117 }
19118
19119 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19120
19121 if (NULL == pWDA)
19122 {
19123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19124 "%s: pWDA received NULL", __func__);
19125 VOS_ASSERT(0);
19126 goto error;
19127 }
19128
19129 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19130 if (NULL == pMac)
19131 {
19132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19133 "%s:pMac is NULL", __func__);
19134 VOS_ASSERT(0);
19135 goto error;
19136 }
19137
19138 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19139
19140 if (pMac->sme.pEXTScanIndCb)
19141 {
19142 pMac->sme.pEXTScanIndCb(pCallbackContext,
19143 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19144 pEventData);
19145 }
19146 else
19147 {
19148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19149 "%s:HDD callback is null", __func__);
19150 VOS_ASSERT(0);
19151 }
19152
19153
19154error:
19155
19156 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19157 {
19158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19159 }
19160 if (pWdaParams->wdaMsgParam != NULL)
19161 {
19162 vos_mem_free(pWdaParams->wdaMsgParam);
19163 }
19164 vos_mem_free(pWdaParams) ;
19165
19166 return;
19167}
19168
19169/*==========================================================================
19170 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19171
19172 DESCRIPTION
19173 API to send EXTScan Set BSSID Hotlist Response to HDD
19174
19175 PARAMETERS
19176 pEventData: Response from FW
19177 pUserData:
19178===========================================================================*/
19179void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19180{
19181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19182 tWDA_CbContext *pWDA = NULL;
19183 void *pCallbackContext;
19184 tpAniSirGlobal pMac;
19185
19186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19187 "%s: ", __func__);
19188 if (NULL == pWdaParams)
19189 {
19190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19191 "%s: pWdaParams received NULL", __func__);
19192 VOS_ASSERT(0) ;
19193 return;
19194 }
19195
19196 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19197
19198 if (NULL == pWDA)
19199 {
19200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19201 "%s: pWDA received NULL", __func__);
19202 VOS_ASSERT(0);
19203 goto error;
19204 }
19205
19206 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19207 if (NULL == pMac)
19208 {
19209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19210 "%s:pMac is NULL", __func__);
19211 VOS_ASSERT(0);
19212 goto error;
19213 }
19214
19215 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19216
19217 if (pMac->sme.pEXTScanIndCb)
19218 {
19219 pMac->sme.pEXTScanIndCb(pCallbackContext,
19220 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
19221 pEventData);
19222 }
19223 else
19224 {
19225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19226 "%s:HDD callback is null", __func__);
19227 VOS_ASSERT(0);
19228 }
19229
19230
19231error:
19232
19233 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19234 {
19235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19236 }
19237 if (pWdaParams->wdaMsgParam != NULL)
19238 {
19239 vos_mem_free(pWdaParams->wdaMsgParam);
19240 }
19241 vos_mem_free(pWdaParams) ;
19242
19243 return;
19244}
19245
19246/*==========================================================================
19247 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
19248
19249 DESCRIPTION
19250 API to send EXTScan ReSet BSSID Hotlist Response to HDD
19251
19252 PARAMETERS
19253 pEventData: Response from FW
19254 pUserData:
19255===========================================================================*/
19256void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19257{
19258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19259 tWDA_CbContext *pWDA = NULL;
19260 void *pCallbackContext;
19261 tpAniSirGlobal pMac;
19262
19263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19264 "%s:", __func__);
19265 if (NULL == pWdaParams)
19266 {
19267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19268 "%s: pWdaParams received NULL", __func__);
19269 VOS_ASSERT(0) ;
19270 return;
19271 }
19272
19273 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19274
19275 if (NULL == pWDA)
19276 {
19277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19278 "%s: pWDA received NULL", __func__);
19279 VOS_ASSERT(0);
19280 goto error;
19281 }
19282
19283 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19284 if (NULL == pMac)
19285 {
19286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19287 "%s:pMac is NULL", __func__);
19288 VOS_ASSERT(0);
19289 goto error;
19290 }
19291
19292 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19293
19294 if (pMac->sme.pEXTScanIndCb)
19295 {
19296 pMac->sme.pEXTScanIndCb(pCallbackContext,
19297 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
19298 pEventData);
19299 }
19300 else
19301 {
19302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19303 "%s:HDD callback is null", __func__);
19304 VOS_ASSERT(0);
19305 }
19306
19307
19308error:
19309
19310 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19311 {
19312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19313 }
19314 if (pWdaParams->wdaMsgParam != NULL)
19315 {
19316 vos_mem_free(pWdaParams->wdaMsgParam);
19317 }
19318 vos_mem_free(pWdaParams) ;
19319
19320 return;
19321}
19322
19323/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019324 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
19325
19326 DESCRIPTION
19327 API to send EXTScan Set SSID Hotlist Response to HDD
19328
19329 PARAMETERS
19330 pEventData: Response from FW
19331 pUserData:
19332===========================================================================*/
19333void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19334{
19335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19336 tWDA_CbContext *pWDA = NULL;
19337 void *pCallbackContext;
19338 tpAniSirGlobal pMac;
19339
19340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19341 "%s: ", __func__);
19342 if (NULL == pWdaParams)
19343 {
19344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19345 "%s: pWdaParams received NULL", __func__);
19346 VOS_ASSERT(0) ;
19347 return;
19348 }
19349
19350 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19351
19352 if (NULL == pWDA)
19353 {
19354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19355 "%s: pWDA received NULL", __func__);
19356 VOS_ASSERT(0);
19357 goto error;
19358 }
19359
19360 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19361 if (NULL == pMac)
19362 {
19363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19364 "%s:pMac is NULL", __func__);
19365 VOS_ASSERT(0);
19366 goto error;
19367 }
19368
19369 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19370
19371 if (pMac->sme.pEXTScanIndCb)
19372 {
19373 pMac->sme.pEXTScanIndCb(pCallbackContext,
19374 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
19375 pEventData);
19376 }
19377 else
19378 {
19379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19380 "%s:HDD callback is null", __func__);
19381 VOS_ASSERT(0);
19382 }
19383
19384
19385error:
19386
19387 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19388 {
19389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19390 }
19391 if (pWdaParams->wdaMsgParam != NULL)
19392 {
19393 vos_mem_free(pWdaParams->wdaMsgParam);
19394 }
19395 vos_mem_free(pWdaParams) ;
19396
19397 return;
19398}
19399
19400/*==========================================================================
19401 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
19402
19403 DESCRIPTION
19404 API to send EXTScan ReSet SSID Hotlist Response to HDD
19405
19406 PARAMETERS
19407 pEventData: Response from FW
19408 pUserData:
19409===========================================================================*/
19410void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19411{
19412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19413 tWDA_CbContext *pWDA = NULL;
19414 void *pCallbackContext;
19415 tpAniSirGlobal pMac;
19416
19417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19418 "%s:", __func__);
19419 if (NULL == pWdaParams)
19420 {
19421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19422 "%s: pWdaParams received NULL", __func__);
19423 VOS_ASSERT(0) ;
19424 return;
19425 }
19426
19427 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19428
19429 if (NULL == pWDA)
19430 {
19431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19432 "%s: pWDA received NULL", __func__);
19433 VOS_ASSERT(0);
19434 goto error;
19435 }
19436
19437 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19438 if (NULL == pMac)
19439 {
19440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19441 "%s:pMac is NULL", __func__);
19442 VOS_ASSERT(0);
19443 goto error;
19444 }
19445
19446 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19447
19448 if (pMac->sme.pEXTScanIndCb)
19449 {
19450 pMac->sme.pEXTScanIndCb(pCallbackContext,
19451 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
19452 pEventData);
19453 }
19454 else
19455 {
19456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19457 "%s:HDD callback is null", __func__);
19458 VOS_ASSERT(0);
19459 }
19460
19461
19462error:
19463
19464 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19465 {
19466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19467 }
19468 if (pWdaParams->wdaMsgParam != NULL)
19469 {
19470 vos_mem_free(pWdaParams->wdaMsgParam);
19471 }
19472 vos_mem_free(pWdaParams) ;
19473
19474 return;
19475}
19476
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019477/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053019478 FUNCTION WDA_ProcessEXTScanStartReq
19479
19480 DESCRIPTION
19481 API to send EXTScan Start Request to WDI
19482
19483 PARAMETERS
19484 pWDA: Pointer to WDA context
19485 wdaRequest: Pointer to EXTScan req parameters
19486===========================================================================*/
19487VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
19488 tSirEXTScanStartReqParams *wdaRequest)
19489{
19490 WDI_Status status = WDI_STATUS_SUCCESS;
19491 tWDA_ReqParams *pWdaParams;
19492
19493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19494 "%s: ", __func__);
19495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19496 if (NULL == pWdaParams)
19497 {
19498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19499 "%s: VOS MEM Alloc Failure", __func__);
19500 VOS_ASSERT(0);
19501 return VOS_STATUS_E_NOMEM;
19502 }
19503 pWdaParams->pWdaContext = pWDA;
19504 pWdaParams->wdaMsgParam = wdaRequest;
19505 pWdaParams->wdaWdiApiMsgParam = NULL;
19506
19507 status = WDI_EXTScanStartReq((void *)wdaRequest,
19508 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
19509 (void *)pWdaParams);
19510 if (IS_WDI_STATUS_FAILURE(status))
19511 {
19512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19513 "Failure to request. Free all the memory " );
19514 vos_mem_free(pWdaParams->wdaMsgParam);
19515 vos_mem_free(pWdaParams);
19516 }
19517 return CONVERT_WDI2VOS_STATUS(status);
19518}
19519
19520/*==========================================================================
19521 FUNCTION WDA_ProcessEXTScanStopReq
19522
19523 DESCRIPTION
19524 API to send EXTScan Start Request to WDI
19525
19526 PARAMETERS
19527 pWDA: Pointer to WDA context
19528 wdaRequest: Pointer to EXTScan req parameters
19529===========================================================================*/
19530VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
19531 tSirEXTScanStopReqParams *wdaRequest)
19532{
19533 WDI_Status status = WDI_STATUS_SUCCESS;
19534 tWDA_ReqParams *pWdaParams;
19535
19536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19537 "%s:", __func__);
19538 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19539 if (NULL == pWdaParams)
19540 {
19541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19542 "%s: VOS MEM Alloc Failure", __func__);
19543 VOS_ASSERT(0);
19544 return VOS_STATUS_E_NOMEM;
19545 }
19546 pWdaParams->pWdaContext = pWDA;
19547 pWdaParams->wdaMsgParam = wdaRequest;
19548 pWdaParams->wdaWdiApiMsgParam = NULL;
19549
19550 status = WDI_EXTScanStopReq((void *)wdaRequest,
19551 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
19552 (void *)pWdaParams);
19553 if (IS_WDI_STATUS_FAILURE(status))
19554 {
19555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19556 "Failure to request. Free all the memory " );
19557 vos_mem_free(pWdaParams->wdaMsgParam);
19558 vos_mem_free(pWdaParams);
19559 }
19560 return CONVERT_WDI2VOS_STATUS(status);
19561}
19562
19563/*==========================================================================
19564 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
19565
19566 DESCRIPTION
19567 API to send EXTScan Get Cached Results Request to WDI
19568
19569 PARAMETERS
19570 pWDA: Pointer to WDA context
19571 wdaRequest: Pointer to EXTScan req parameters
19572===========================================================================*/
19573VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
19574 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
19575{
19576 WDI_Status status = WDI_STATUS_SUCCESS;
19577 tWDA_ReqParams *pWdaParams;
19578
19579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19580 "%s: ", __func__);
19581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19582 if (NULL == pWdaParams)
19583 {
19584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19585 "%s: VOS MEM Alloc Failure", __func__);
19586 VOS_ASSERT(0);
19587 return VOS_STATUS_E_NOMEM;
19588 }
19589 pWdaParams->pWdaContext = pWDA;
19590 pWdaParams->wdaMsgParam = wdaRequest;
19591 pWdaParams->wdaWdiApiMsgParam = NULL;
19592
19593 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
19594 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
19595 (void *)pWdaParams);
19596 if (IS_WDI_STATUS_FAILURE(status))
19597 {
19598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19599 "Failure to request. Free all the memory " );
19600 vos_mem_free(pWdaParams->wdaMsgParam);
19601 vos_mem_free(pWdaParams);
19602 }
19603 return CONVERT_WDI2VOS_STATUS(status);
19604}
19605
19606/*==========================================================================
19607 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
19608
19609 DESCRIPTION
19610 API to send EXTScan Get Capabilities Request to WDI
19611
19612 PARAMETERS
19613 pWDA: Pointer to WDA context
19614 wdaRequest: Pointer to EXTScan req parameters
19615===========================================================================*/
19616VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
19617 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
19618{
19619 WDI_Status status = WDI_STATUS_SUCCESS;
19620 tWDA_ReqParams *pWdaParams;
19621
19622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19623 "%s:", __func__);
19624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19625 if (NULL == pWdaParams)
19626 {
19627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19628 "%s: VOS MEM Alloc Failure", __func__);
19629 VOS_ASSERT(0);
19630 return VOS_STATUS_E_NOMEM;
19631 }
19632 pWdaParams->pWdaContext = pWDA;
19633 pWdaParams->wdaMsgParam = wdaRequest;
19634 pWdaParams->wdaWdiApiMsgParam = NULL;
19635
19636 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
19637 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
19638 (void *)pWdaParams);
19639 if (IS_WDI_STATUS_FAILURE(status))
19640 {
19641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19642 "Failure to request. Free all the memory " );
19643 vos_mem_free(pWdaParams->wdaMsgParam);
19644 vos_mem_free(pWdaParams);
19645 }
19646 return CONVERT_WDI2VOS_STATUS(status);
19647}
19648
19649/*==========================================================================
19650 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
19651
19652 DESCRIPTION
19653 API to send Set BSSID Hotlist Request to WDI
19654
19655 PARAMETERS
19656 pWDA: Pointer to WDA context
19657 wdaRequest: Pointer to EXTScan req parameters
19658===========================================================================*/
19659VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19660 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
19661{
19662 WDI_Status status = WDI_STATUS_SUCCESS;
19663 tWDA_ReqParams *pWdaParams;
19664
19665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19666 "%s: ", __func__);
19667 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19668 if (NULL == pWdaParams)
19669 {
19670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19671 "%s: VOS MEM Alloc Failure", __func__);
19672 VOS_ASSERT(0);
19673 return VOS_STATUS_E_NOMEM;
19674 }
19675 pWdaParams->pWdaContext = pWDA;
19676 pWdaParams->wdaMsgParam = wdaRequest;
19677 pWdaParams->wdaWdiApiMsgParam = NULL;
19678
19679 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
19680 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
19681 (void *)pWdaParams);
19682 if (IS_WDI_STATUS_FAILURE(status))
19683 {
19684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19685 "Failure to request. Free all the memory " );
19686 vos_mem_free(pWdaParams->wdaMsgParam);
19687 vos_mem_free(pWdaParams);
19688 }
19689 return CONVERT_WDI2VOS_STATUS(status);
19690}
19691
19692/*==========================================================================
19693 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
19694
19695 DESCRIPTION
19696 API to send Reset BSSID Hotlist Request to WDI
19697
19698 PARAMETERS
19699 pWDA: Pointer to WDA context
19700 wdaRequest: Pointer to EXTScan req parameters
19701===========================================================================*/
19702VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19703 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
19704{
19705 WDI_Status status = WDI_STATUS_SUCCESS;
19706 tWDA_ReqParams *pWdaParams;
19707
19708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19709 "%s:", __func__);
19710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19711 if (NULL == pWdaParams)
19712 {
19713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19714 "%s: VOS MEM Alloc Failure", __func__);
19715 VOS_ASSERT(0);
19716 return VOS_STATUS_E_NOMEM;
19717 }
19718 pWdaParams->pWdaContext = pWDA;
19719 pWdaParams->wdaMsgParam = wdaRequest;
19720 pWdaParams->wdaWdiApiMsgParam = NULL;
19721
19722 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
19723 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
19724 (void *)pWdaParams);
19725 if (IS_WDI_STATUS_FAILURE(status))
19726 {
19727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19728 "Failure to request. Free all the memory " );
19729 vos_mem_free(pWdaParams->wdaMsgParam);
19730 vos_mem_free(pWdaParams);
19731 }
19732 return CONVERT_WDI2VOS_STATUS(status);
19733}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019734
19735/*==========================================================================
19736 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
19737
19738 DESCRIPTION
19739 API to send Set SSID Hotlist Request to WDI
19740
19741 PARAMETERS
19742 pWDA: Pointer to WDA context
19743 wdaRequest: Pointer to EXTScan req parameters
19744===========================================================================*/
19745VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
19746 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
19747{
19748 WDI_Status status = WDI_STATUS_SUCCESS;
19749 tWDA_ReqParams *pWdaParams;
19750
19751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19752 "%s: ", __func__);
19753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19754 if (NULL == pWdaParams)
19755 {
19756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19757 "%s: VOS MEM Alloc Failure", __func__);
19758 VOS_ASSERT(0);
19759 return VOS_STATUS_E_NOMEM;
19760 }
19761 pWdaParams->pWdaContext = pWDA;
19762 pWdaParams->wdaMsgParam = wdaRequest;
19763 pWdaParams->wdaWdiApiMsgParam = NULL;
19764
19765 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
19766 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19767 (void *)pWdaParams);
19768 if (IS_WDI_STATUS_FAILURE(status))
19769 {
19770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19771 "Failure to request. Free all the memory " );
19772 vos_mem_free(pWdaParams->wdaMsgParam);
19773 vos_mem_free(pWdaParams);
19774 }
19775 return CONVERT_WDI2VOS_STATUS(status);
19776}
19777
19778/*==========================================================================
19779 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19780
19781 DESCRIPTION
19782 API to send Reset SSID Hotlist Request to WDI
19783
19784 PARAMETERS
19785 pWDA: Pointer to WDA context
19786 wdaRequest: Pointer to EXTScan req parameters
19787===========================================================================*/
19788VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
19789 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
19790{
19791 WDI_Status status = WDI_STATUS_SUCCESS;
19792 tWDA_ReqParams *pWdaParams;
19793
19794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19795 "%s:", __func__);
19796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19797 if (NULL == pWdaParams)
19798 {
19799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19800 "%s: VOS MEM Alloc Failure", __func__);
19801 VOS_ASSERT(0);
19802 return VOS_STATUS_E_NOMEM;
19803 }
19804 pWdaParams->pWdaContext = pWDA;
19805 pWdaParams->wdaMsgParam = wdaRequest;
19806 pWdaParams->wdaWdiApiMsgParam = NULL;
19807
19808 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
19809 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
19810 (void *)pWdaParams);
19811 if (IS_WDI_STATUS_FAILURE(status))
19812 {
19813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19814 "Failure to request. Free all the memory " );
19815 vos_mem_free(pWdaParams->wdaMsgParam);
19816 vos_mem_free(pWdaParams);
19817 }
19818 return CONVERT_WDI2VOS_STATUS(status);
19819}
19820
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053019821/*==========================================================================
19822 FUNCTION WDA_ProcessHighPriorityDataInfoInd
19823
19824 DESCRIPTION
19825 API to send Reset SSID Hotlist Request to WDI
19826
19827 PARAMETERS
19828 pWDA: Pointer to WDA context
19829 wdaRequest: Pointer to EXTScan req parameters
19830===========================================================================*/
19831VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
19832 tSirHighPriorityDataInfoInd *wdaRequest)
19833{
19834 WDI_Status status = WDI_STATUS_SUCCESS;
19835
19836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19837 "%s:", __func__);
19838
19839 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
19840 if (WDI_STATUS_PENDING == status)
19841 {
19842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19843 FL("pending status received "));
19844 }
19845 else if (WDI_STATUS_SUCCESS_SYNC != status)
19846 {
19847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19848 FL("Failure status %d"), status);
19849 }
19850 return CONVERT_WDI2VOS_STATUS(status);
19851}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019852
Dino Mycle41bdc942014-06-10 11:30:24 +053019853#endif /* WLAN_FEATURE_EXTSCAN */
19854
Sunil Duttbd736ed2014-05-26 21:19:41 +053019855#ifdef WLAN_FEATURE_LINK_LAYER_STATS
19856
19857/*==========================================================================
19858 FUNCTION WDA_LLStatsSetRspCallback
19859
19860 DESCRIPTION
19861 API to process set link layer statistics response from FW
19862
19863 PARAMETERS
19864 pRsp: Pointer to set link layer statistics response
19865 pUserData: Pointer to user data
19866
19867 RETURN VALUE
19868 NONE
19869
19870===========================================================================*/
19871void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
19872{
19873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19874
19875
19876 if (NULL == pWdaParams)
19877 {
19878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19879 "%s: pWdaParams received NULL", __func__);
19880 VOS_ASSERT(0) ;
19881 return ;
19882 }
19883
19884 /* Do not need to send notification to upper layer
19885 * Just free allocated resources */
19886 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19887 {
19888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19889 }
19890 if (pWdaParams->wdaMsgParam != NULL)
19891 {
19892 vos_mem_free(pWdaParams->wdaMsgParam);
19893 }
19894 vos_mem_free(pWdaParams) ;
19895
19896 return;
19897}
19898
19899/*==========================================================================
19900 FUNCTION WDA_ProcessLLStatsSetReq
19901
19902 DESCRIPTION
19903 API to send Set Link Layer Stats request to WDI
19904
19905 PARAMETERS
19906 pWDA: Pointer to WDA context
19907 wdaRequest: Pointer to set Link Layer Stats req parameters
19908===========================================================================*/
19909VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
19910 tSirLLStatsSetReq *wdaRequest)
19911{
19912 WDI_Status status = WDI_STATUS_SUCCESS;
19913 tWDA_ReqParams *pWdaParams;
19914
19915 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19916 if (NULL == pWdaParams)
19917 {
19918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19919 "%s: VOS MEM Alloc Failure", __func__);
19920 VOS_ASSERT(0);
19921 return VOS_STATUS_E_NOMEM;
19922 }
19923 pWdaParams->pWdaContext = pWDA;
19924 pWdaParams->wdaMsgParam = wdaRequest;
19925 pWdaParams->wdaWdiApiMsgParam = NULL;
19926
19927 status = WDI_LLStatsSetReq((void *)wdaRequest,
19928 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
19929 (void *)pWdaParams);
19930 if (IS_WDI_STATUS_FAILURE(status))
19931 {
19932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19933 "Failure to request. Free all the memory " );
19934 vos_mem_free(pWdaParams->wdaMsgParam);
19935 vos_mem_free(pWdaParams);
19936 }
19937 return CONVERT_WDI2VOS_STATUS(status);
19938}
19939
19940/*==========================================================================
19941 FUNCTION WDA_LLStatsGetRspCallback
19942
19943 DESCRIPTION
19944 API to process get link layer statistics response from FW
19945
19946 PARAMETERS
19947 pRsp: Pointer to get link layer statistics response
19948 pUserData: Pointer to user data
19949
19950 RETURN VALUE
19951 NONE
19952
19953===========================================================================*/
19954void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
19955{
19956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19957
19958 if (NULL == pWdaParams)
19959 {
19960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19961 "%s: pWdaParams received NULL", __func__);
19962 VOS_ASSERT(0) ;
19963 return ;
19964 }
19965
19966 /* Do not need to send notification to upper layer
19967 * Just free allocated resources */
19968 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19969 {
19970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19971 }
19972 if (pWdaParams->wdaMsgParam != NULL)
19973 {
19974 vos_mem_free(pWdaParams->wdaMsgParam);
19975 }
19976 vos_mem_free(pWdaParams) ;
19977
19978 return;
19979}
19980
19981/*==========================================================================
19982 FUNCTION WDA_ProcessLLStatsGetReq
19983
19984 DESCRIPTION
19985 API to send Get Link Layer Stats request to WDI
19986
19987 PARAMETERS
19988 pWDA: Pointer to WDA context
19989 wdaRequest: Pointer to get Link Layer Stats req parameters
19990===========================================================================*/
19991VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
19992 tSirLLStatsGetReq *wdaRequest)
19993{
19994 WDI_Status status = WDI_STATUS_SUCCESS;
19995 tWDA_ReqParams *pWdaParams;
19996
19997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19998 if (NULL == pWdaParams)
19999 {
20000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20001 "%s: VOS MEM Alloc Failure", __func__);
20002 VOS_ASSERT(0);
20003 return VOS_STATUS_E_NOMEM;
20004 }
20005 pWdaParams->pWdaContext = pWDA;
20006 pWdaParams->wdaMsgParam = wdaRequest;
20007 pWdaParams->wdaWdiApiMsgParam = NULL;
20008
20009 status = WDI_LLStatsGetReq((void *) wdaRequest,
20010 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20011 (void *)pWdaParams);
20012 if (IS_WDI_STATUS_FAILURE(status))
20013 {
20014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20015 "Failure to request. Free all the memory " );
20016 vos_mem_free(pWdaParams->wdaMsgParam);
20017 vos_mem_free(pWdaParams);
20018 }
20019 return CONVERT_WDI2VOS_STATUS(status);
20020}
20021
20022/*==========================================================================
20023 FUNCTION WDA_LLStatsClearRspCallback
20024
20025 DESCRIPTION
20026 API to process clear link layer statistics response from FW
20027
20028 PARAMETERS
20029 pRsp: Pointer to clear link layer statistics response
20030 pUserData: Pointer to user data
20031
20032 RETURN VALUE
20033 NONE
20034
20035===========================================================================*/
20036void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20037{
20038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20039
20040
20041 if (NULL == pWdaParams)
20042 {
20043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20044 "%s: pWdaParams received NULL", __func__);
20045 VOS_ASSERT(0) ;
20046 return ;
20047 }
20048 /* Do not need to send notification to upper layer
20049 * Just free allocated resources */
20050 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20051 {
20052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20053 }
20054 if (pWdaParams->wdaMsgParam != NULL)
20055 {
20056 vos_mem_free(pWdaParams->wdaMsgParam);
20057 }
20058 vos_mem_free(pWdaParams) ;
20059 return;
20060}
20061
20062/*==========================================================================
20063 FUNCTION WDA_ProcessLLStatsClearReq
20064
20065 DESCRIPTION
20066 API to send Clear Link Layer Stats request to WDI
20067
20068 PARAMETERS
20069 pWDA: Pointer to WDA context
20070 wdaRequest: Pointer to earLink Layer Stats req
20071===========================================================================*/
20072VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20073 tSirLLStatsClearReq *wdaRequest)
20074{
20075 WDI_Status status = WDI_STATUS_SUCCESS;
20076 tWDA_ReqParams *pWdaParams;
20077
20078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20079 if (NULL == pWdaParams)
20080 {
20081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20082 "%s: VOS MEM Alloc Failure", __func__);
20083 VOS_ASSERT(0);
20084 return VOS_STATUS_E_NOMEM;
20085 }
20086 pWdaParams->pWdaContext = pWDA;
20087 pWdaParams->wdaMsgParam = wdaRequest;
20088 pWdaParams->wdaWdiApiMsgParam = NULL;
20089
20090 status = WDI_LLStatsClearReq((void *) wdaRequest,
20091 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20092 (void *)pWdaParams);
20093 if (IS_WDI_STATUS_FAILURE(status))
20094 {
20095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20096 "Failure to request. Free all the memory " );
20097 vos_mem_free(pWdaParams->wdaMsgParam);
20098 vos_mem_free(pWdaParams);
20099 }
20100 return CONVERT_WDI2VOS_STATUS(status);
20101}
20102
20103#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020104
Abhishek Singh85b74712014-10-08 11:38:19 +053020105void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20106{
20107 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20108
20109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20110 "<------ %s " ,__func__);
20111 if (NULL == fwStatsinfo)
20112 {
20113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20114 "%s: pWdaParams received NULL", __func__);
20115 VOS_ASSERT(0);
20116 return;
20117 }
20118
20119 if(fwStatsinfo->callback)
20120 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20121
20122 vos_mem_free(pUserData);
20123 return;
20124}
20125
20126
20127v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20128 tSirFWStatsGetReq *pData)
20129{
20130
20131 WDI_Status wdiStatus;
20132 tSirFWStatsInfo *fwStatsinfo;
20133
20134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20135 "------> %s" , __func__);
20136
20137 fwStatsinfo =
20138 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20139 if (NULL == fwStatsinfo)
20140 {
20141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20142 "%s: VOS MEM Alloc Failure", __func__);
20143 VOS_ASSERT(0);
20144 vos_mem_free(pData);
20145 return;
20146 }
20147
20148 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20149 fwStatsinfo->data = pData->data;
20150
20151 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20152 WDA_FWStatsGetRspCallback,
20153 pData->stats);
20154 if (WDI_STATUS_PENDING == wdiStatus)
20155 {
20156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20157 "Pending received for %s:%d ", __func__, __LINE__);
20158 }
20159 else if (WDI_STATUS_SUCCESS != wdiStatus)
20160 {
20161 if (fwStatsinfo->callback)
20162 {
20163 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20164 }
20165 vos_mem_free(fwStatsinfo);
20166 }
20167 vos_mem_free(pData);
20168}
20169
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020170/*==========================================================================
20171 FUNCTION WDA_EncryptMsgRspCallback
20172
20173 DESCRIPTION
20174 API to send Encrypt message response to HDD
20175
20176 PARAMETERS
20177 pEventData: Response from FW
20178 pUserData: Data sent to firmware as part of request
20179===========================================================================*/
20180void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20181 void* pUserData)
20182{
20183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20184 tWDA_CbContext *pWDA = NULL;
20185 tpAniSirGlobal pMac;
20186 vos_msg_t vosMsg;
20187 tpSirEncryptedDataRspParams pEncRspParams;
20188 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20189
20190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20191 FL("%s:"), __func__);
20192 if (NULL == pWdaParams)
20193 {
20194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20195 FL("%s: pWdaParams received NULL"), __func__);
20196 VOS_ASSERT(0);
20197 return;
20198 }
20199
20200 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20201
20202 if (NULL == pWDA)
20203 {
20204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20205 FL("%s: pWDA received NULL"), __func__);
20206 VOS_ASSERT(0);
20207 goto error;
20208 }
20209
20210 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20211 if (NULL == pMac)
20212 {
20213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20214 FL("%s:pMac is NULL"), __func__);
20215 VOS_ASSERT(0);
20216 goto error;
20217 }
20218
20219 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
20220
20221 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
20222 if (NULL == pEncRspParams)
20223 {
20224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20225 FL("%s: VOS MEM Alloc Failure"), __func__);
20226 VOS_ASSERT(0);
20227 goto error;
20228 }
20229
20230 /* Message Header */
20231 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
20232 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
20233 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
20234 pEncryptedDataRsp->encryptedPayload.length;
20235 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
20236 pEncryptedDataRsp->encryptedPayload.data,
20237 pEncryptedDataRsp->encryptedPayload.length);
20238
20239 /* VOS message wrapper */
20240 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
20241 vosMsg.bodyptr = (void *)pEncRspParams;
20242 vosMsg.bodyval = 0;
20243
20244 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20245 {
20246 /* free the mem */
20247 vos_mem_free((v_VOID_t *) pEncRspParams);
20248 }
20249
20250error:
20251
20252 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20253 {
20254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20255 }
20256 if (pWdaParams->wdaMsgParam != NULL)
20257 {
20258 vos_mem_free(pWdaParams->wdaMsgParam);
20259 }
20260 vos_mem_free(pWdaParams) ;
20261
20262 return;
20263}
20264/*==========================================================================
20265 FUNCTION WDA_ProcessEncryptMsgReq
20266
20267 DESCRIPTION
20268 API to send Encrypt message Request to WDI
20269
20270 PARAMETERS
20271 pWDA: Pointer to WDA context
20272 wdaRequest: Pointer to Encrypt_msg req parameters
20273===========================================================================*/
20274VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
20275 u8 *wdaRequest)
20276{
20277 WDI_Status status = WDI_STATUS_SUCCESS;
20278 tWDA_ReqParams *pWdaParams;
20279
20280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20281 FL("%s: "), __func__);
20282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20283 if (NULL == pWdaParams)
20284 {
20285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20286 FL("%s: VOS MEM Alloc Failure"), __func__);
20287 VOS_ASSERT(0);
20288 return VOS_STATUS_E_NOMEM;
20289 }
20290 pWdaParams->pWdaContext = pWDA;
20291 pWdaParams->wdaMsgParam = wdaRequest;
20292 pWdaParams->wdaWdiApiMsgParam = NULL;
20293
20294 status = WDI_EncryptMsgReq((void *)wdaRequest,
20295 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
20296 (void *)pWdaParams);
20297 if (IS_WDI_STATUS_FAILURE(status))
20298 {
20299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20300 FL("Failure to request. Free all the memory " ));
20301 vos_mem_free(pWdaParams->wdaMsgParam);
20302 vos_mem_free(pWdaParams);
20303 }
20304 return CONVERT_WDI2VOS_STATUS(status);
20305}
Abhishek Singh41988ba2015-05-25 19:42:29 +053020306/*==========================================================================
20307 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
20308
20309 DESCRIPTION
20310 API to enable/disable RTS/CTS for different modes.
20311
20312 PARAMETERS
20313 pWDA: Pointer to WDA context
20314 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
20315===========================================================================*/
20316
20317VOS_STATUS
20318WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
20319 tANI_U32 rtsCtsVal)
20320{
20321 WDI_Status status;
20322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20323 FL("---> %s"), __func__);
20324 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
20325 if (WDI_STATUS_PENDING == status)
20326 {
20327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20328 FL("pending status received "));
20329 }
20330 else if (WDI_STATUS_SUCCESS_SYNC != status)
20331 {
20332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20333 FL("Failure status %d"), status);
20334 }
20335 return CONVERT_WDI2VOS_STATUS(status) ;
20336}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020337
20338void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053020339{
20340 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020341 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053020342
20343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20344 "<------ %s " ,__func__);
20345 if (NULL == pWdaParams)
20346 {
20347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20348 "%s: pWdaParams received NULL", __func__);
20349 VOS_ASSERT(0) ;
20350 return ;
20351 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020352 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
20353 if (pData != NULL) {
20354 pData->callback(pData->magic, pData->cmpVar);
20355 vos_mem_free(pWdaParams->wdaMsgParam);
20356 }
Katya Nigamf0511f62015-05-05 16:40:57 +053020357 vos_mem_free(pWdaParams) ;
20358
20359 return;
20360}
20361
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020362VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053020363{
20364
20365 WDI_Status status = WDI_STATUS_SUCCESS;
20366 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020367 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053020368
20369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20370 FL("%s: "), __func__);
20371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20372 if (NULL == pWdaParams)
20373 {
20374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20375 FL("%s: VOS MEM Alloc Failure"), __func__);
20376 VOS_ASSERT(0);
20377 return VOS_STATUS_E_NOMEM;
20378 }
20379 pWdaParams->pWdaContext = pWDA;
20380 pWdaParams->wdaMsgParam = wdaRequest;
20381 pWdaParams->wdaWdiApiMsgParam = NULL;
20382
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020383 status = WDI_MonStartReq(pMonModeData->data,
20384 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020385 (void *)pWdaParams);
20386 if (IS_WDI_STATUS_FAILURE(status))
20387 {
20388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20389 "Failure to request. Free all the memory " );
20390 vos_mem_free(pWdaParams->wdaMsgParam);
20391 vos_mem_free(pWdaParams);
20392 }
20393 return CONVERT_WDI2VOS_STATUS(status);
20394}
20395
Katya Nigamf0511f62015-05-05 16:40:57 +053020396VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
20397{
20398
20399 WDI_Status status = WDI_STATUS_SUCCESS;
20400 tWDA_ReqParams *pWdaParams;
20401
20402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20403 FL("%s: "), __func__);
20404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20405 if (NULL == pWdaParams)
20406 {
20407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20408 FL("%s: VOS MEM Alloc Failure"), __func__);
20409 VOS_ASSERT(0);
20410 return VOS_STATUS_E_NOMEM;
20411 }
20412 pWdaParams->pWdaContext = pWDA;
20413 pWdaParams->wdaMsgParam = wdaRequest;
20414 pWdaParams->wdaWdiApiMsgParam = NULL;
20415
Bhargav Shah1ae5de02015-07-20 13:32:31 +053020416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20417 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020418 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020419 (void *)pWdaParams);
20420
20421 if (IS_WDI_STATUS_FAILURE(status))
20422 {
20423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20424 "Failure to request. Free all the memory " );
20425 vos_mem_free(pWdaParams->wdaMsgParam);
20426 vos_mem_free(pWdaParams);
20427 }
20428 return CONVERT_WDI2VOS_STATUS(status);
20429}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053020430
20431VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
20432{
20433 WDI_Status status;
20434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20435 FL("---> %s"), __func__);
20436 status = WDI_EnableDisableCAEventInd(val);
20437 if (WDI_STATUS_PENDING == status)
20438 {
20439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20440 FL("pending status received "));
20441 }
20442 else if (WDI_STATUS_SUCCESS_SYNC != status)
20443 {
20444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20445 FL("Failure status %d"), status);
20446 }
20447 return CONVERT_WDI2VOS_STATUS(status) ;
20448}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020449
20450/*==========================================================================
20451 FUNCTION WDA_WifiConfigSetRspCallback
20452
20453 DESCRIPTION
20454 API to process set WifiConfig response from FW
20455
20456 PARAMETERS
20457 pRsp: Pointer to set WifiConfig response
20458 pUserData: Pointer to user data
20459
20460 RETURN VALUE
20461 NONE
20462
20463===========================================================================*/
20464void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
20465{
20466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20467
20468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20469 "<------ %s " ,__func__);
20470
20471 if(NULL == pWdaParams)
20472 {
20473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20474 "%s: pWdaParams received NULL", __func__);
20475 VOS_ASSERT(0);
20476 return ;
20477 }
20478
20479 if(NULL == pWdaParams->wdaMsgParam)
20480 {
20481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20482 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
20483 VOS_ASSERT(0);
20484 vos_mem_free(pWdaParams);
20485 return ;
20486 }
20487
20488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20489 vos_mem_free(pWdaParams->wdaMsgParam);
20490 vos_mem_free(pWdaParams);
20491
20492 return;
20493}
20494
20495/*==========================================================================
20496 FUNCTION WDA_ProcessWifiConfigReq
20497
20498 DESCRIPTION
20499 API to send Set WifiConfig params request to WDI
20500
20501 PARAMETERS
20502 pWDA: Pointer to WDA context
20503 wdaRequest: Pointer to set WifiConfig req parameters
20504===========================================================================*/
20505
20506VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
20507 tSetWifiConfigParams *pwdaWificonfig)
20508{
20509 WDI_Status status = WDI_STATUS_SUCCESS;
20510 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
20511 tWDA_ReqParams *pWdaParams ;
20512 WDI_Status wstatus;
20513
20514 /* Sanity Check*/
20515 if(NULL == pwdaWificonfig)
20516 {
20517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20518 "%s: tSetWifiConfigParams received NULL", __func__);
20519 VOS_ASSERT(0) ;
20520 return VOS_STATUS_E_FAULT;
20521 }
20522
20523 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
20524 sizeof(WDI_WifiConfigSetReqType));
20525 if(NULL == pwdiWifConfigSetReqParams)
20526 {
20527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20528 "%s: VOS MEM Alloc Failure", __func__);
20529 VOS_ASSERT(0);
20530 vos_mem_free(pwdaWificonfig);
20531 return VOS_STATUS_E_NOMEM;
20532 }
20533
20534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20535 if(NULL == pWdaParams)
20536 {
20537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20538 "%s: VOS MEM Alloc Failure", __func__);
20539 VOS_ASSERT(0);
20540 vos_mem_free(pwdiWifConfigSetReqParams);
20541 vos_mem_free(pwdaWificonfig);
20542 return VOS_STATUS_E_NOMEM;
20543 }
20544 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
20545 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
20546 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
20547 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
20548
20549 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053020550 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020551 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
20552
20553 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
20554 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
20555 pWdaParams);
20556 if(IS_WDI_STATUS_FAILURE(wstatus))
20557 {
20558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20559 "Failure in sendind WifiConfigReq, free all the memory" );
20560 status = CONVERT_WDI2VOS_STATUS(wstatus);
20561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20562 vos_mem_free(pWdaParams->wdaMsgParam);
20563 vos_mem_free(pWdaParams);
20564 }
20565
20566 return status;
20567
20568}