blob: e35a088f3589b5cc4252cbfb2f6e0dbbc8ef532a [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);
240
Dino Mycle41bdc942014-06-10 11:30:24 +0530241#endif /* WLAN_FEATURE_EXTSCAN */
242
Sunil Duttbd736ed2014-05-26 21:19:41 +0530243#ifdef WLAN_FEATURE_LINK_LAYER_STATS
244VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
245 tSirLLStatsSetReq *wdaRequest);
246
247VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
248 tSirLLStatsGetReq *wdaRequest);
249
250VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
251 tSirLLStatsClearReq *wdaRequest);
252#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530253
254v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
255 tSirFWStatsGetReq *wdaRequest);
256
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530257VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
258 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530259VOS_STATUS
260WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
261 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530262
Srinivas Dasari32a79262015-02-19 13:04:49 +0530263
Katya Nigamf0511f62015-05-05 16:40:57 +0530264VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
265VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530266VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530267/*
268 * FUNCTION: WDA_ProcessNanRequest
269 * Process NAN request
270 */
271VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
272 tNanRequest *wdaRequest)
273{
274 WDI_Status status = WDI_STATUS_SUCCESS;
275 tWDA_ReqParams *pWdaParams;
276 WDI_NanRequestType *wdiRequest = NULL;
277 size_t wdiReqLength = sizeof(WDI_NanRequestType)
278 - sizeof(wdiRequest->request_data)
279 + wdaRequest->request_data_len;
280
281 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
282
283 if (NULL == wdiRequest)
284 {
285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
286 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
287 wdiReqLength);
288 vos_mem_free(wdaRequest);
289 return VOS_STATUS_E_NOMEM;
290 }
291
292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
293 "WDA: Process Nan Request length: %zu", wdiReqLength);
294
295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
296 if (NULL == pWdaParams)
297 {
298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
299 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
300 VOS_ASSERT(0);
301 vos_mem_free(wdaRequest);
302 vos_mem_free(wdiRequest);
303 return VOS_STATUS_E_NOMEM;
304 }
305
306 wdiRequest->request_data_len = wdaRequest->request_data_len;
307
308 vos_mem_copy( wdiRequest->request_data,
309 wdaRequest->request_data,
310 wdaRequest->request_data_len);
311
312 vos_mem_free(wdaRequest);
313
314 pWdaParams->pWdaContext = pWDA;
315 pWdaParams->wdaMsgParam = NULL;
316 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
317
318 status = WDI_NanRequest(wdiRequest, pWdaParams);
319
320 if (IS_WDI_STATUS_FAILURE(status))
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "Failure to request. Free all the memory " );
324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
325 vos_mem_free(pWdaParams);
326 }
327
328 return CONVERT_WDI2VOS_STATUS(status) ;
329}
330
331
332
Jeff Johnson295189b2012-06-20 16:38:30 -0700333/*
334 * FUNCTION: WDA_open
335 * Allocate the WDA context
336 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530337VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 tMacOpenParameters *pMacParams )
339{
340 tWDA_CbContext *wdaContext;
341 VOS_STATUS status;
342 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530344 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700345 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
346 if(!VOS_IS_STATUS_SUCCESS(status))
347 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
349 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 return VOS_STATUS_E_NOMEM;
351 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 /*__asm int 3;*/
353 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
354
355 /* Initialize data structures */
356 wdaContext->pVosContext = pVosContext;
357 wdaContext->wdaState = WDA_INIT_STATE;
358 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
359
360 /* Initialize WDA-WDI synchronization event */
361 status = vos_event_init(&wdaContext->wdaWdiEvent);
362 if(!VOS_IS_STATUS_SUCCESS(status))
363 {
364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800365 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800366 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700367 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700368 /* Init Frame transfer event */
369 status = vos_event_init(&wdaContext->txFrameEvent);
370 if(!VOS_IS_STATUS_SUCCESS(status))
371 {
372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800373 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800374 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700375 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700376 status = vos_event_init(&wdaContext->suspendDataTxEvent);
377 if(!VOS_IS_STATUS_SUCCESS(status))
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800380 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800381 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
384 if(!VOS_IS_STATUS_SUCCESS(status))
385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800387 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800388 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530392 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 &wdiDevCapability, pMacParams->driverType))
394 {
395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
396 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800397 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 }
399 else
400 {
401 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
402 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
403 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 /* update max STA in WDA used for BA */
405 wdaContext->wdaMaxSta = pMacParams->maxStation;
406 /* store the frameTransRequired flag in wdaContext, to send this to HAL
407 * in WDA_Start
408 */
409 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
410 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800412
413error:
414 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
415 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700416}
417
Jeff Johnson295189b2012-06-20 16:38:30 -0700418/*
419 * FUNCTION: WDA_preStart
420 * Trigger DAL-AL to start CFG download
421 */
422VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
423{
424 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
425 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /*
427 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
428 */
429 wdaMsg.type = WNI_CFG_DNLD_REQ ;
430 wdaMsg.bodyptr = NULL;
431 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 /* post the message.. */
433 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
434 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
435 {
436 vosStatus = VOS_STATUS_E_BADMSG;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 return( vosStatus );
439}
Jeff Johnson295189b2012-06-20 16:38:30 -0700440/*
441 * FUNCTION: WDA_wdiStartCallback
442 * Once WDI_Start is finished, WDI start callback will be called by WDI
443 * to indicate completion of WDI_Start.
444 */
445void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
446 void *pVosContext)
447{
448 tWDA_CbContext *wdaContext;
449 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 if (NULL == pVosContext)
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700453 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 return;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
457 if (NULL == wdaContext)
458 {
459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700460 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 return;
462 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700466 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 }
468 else
469 {
470 wdaContext->wdaState = WDA_START_STATE;
471 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 /* extract and save version information from the Start Response */
473 wdaContext->wcnssWlanCompiledVersion.major =
474 wdiRspParams->wlanCompiledVersion.major;
475 wdaContext->wcnssWlanCompiledVersion.minor =
476 wdiRspParams->wlanCompiledVersion.minor;
477 wdaContext->wcnssWlanCompiledVersion.version =
478 wdiRspParams->wlanCompiledVersion.version;
479 wdaContext->wcnssWlanCompiledVersion.revision =
480 wdiRspParams->wlanCompiledVersion.revision;
481 wdaContext->wcnssWlanReportedVersion.major =
482 wdiRspParams->wlanReportedVersion.major;
483 wdaContext->wcnssWlanReportedVersion.minor =
484 wdiRspParams->wlanReportedVersion.minor;
485 wdaContext->wcnssWlanReportedVersion.version =
486 wdiRspParams->wlanReportedVersion.version;
487 wdaContext->wcnssWlanReportedVersion.revision =
488 wdiRspParams->wlanReportedVersion.revision;
489 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
490 wdiRspParams->wcnssSoftwareVersion,
491 sizeof(wdaContext->wcnssSoftwareVersionString));
492 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
493 wdiRspParams->wcnssHardwareVersion,
494 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 /* Notify WDA_start that WDI_Start has completed */
496 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700497 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 {
499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700500 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700502 return;
503}
504
Jeff Johnson295189b2012-06-20 16:38:30 -0700505/*
506 * FUNCTION: WDA_start
507 * Prepare TLV configuration and call WDI_Start.
508 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700509VOS_STATUS WDA_start(v_PVOID_t pVosContext)
510{
511 tWDA_CbContext *wdaContext;
512 VOS_STATUS status;
513 WDI_Status wdiStatus;
514 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 if (NULL == pVosContext)
516 {
517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700518 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 return VOS_STATUS_E_FAILURE;
520 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700521 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
522 if (NULL == wdaContext)
523 {
524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700525 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 return VOS_STATUS_E_FAILURE;
527 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 /* Non-FTM mode, WDA status for START must be INIT
529 * FTM mode, WDA Status for START can be INIT or STOP */
530 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
531 (WDA_STOP_STATE != wdaContext->wdaState) )
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
534 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 /* initialize the wdiStartParam. Note that we can create this on
539 the stack since we won't exit until WDI_Start() completes or
540 times out */
541 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700542 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 /* prepare the config TLV for the WDI */
544 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
545 if ( !VOS_IS_STATUS_SUCCESS(status) )
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 return VOS_STATUS_E_FAILURE;
550 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* note from here onwards if an error occurs we must
552 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
554 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
555 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 /* initialize the WDA-WDI synchronization event */
557 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700558 /* call WDI start */
559 wdiStatus = WDI_Start(&wdiStartParam,
560 (WDI_StartRspCb)WDA_wdiStartCallback,
561 (v_VOID_t *)pVosContext);
562 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700565 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 vos_mem_free(wdiStartParam.pConfigBuffer);
567 return VOS_STATUS_E_FAILURE;
568 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 /* wait for WDI start to invoke our callback */
570 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
571 WDA_WDI_START_TIMEOUT );
572 if ( !VOS_IS_STATUS_SUCCESS(status) )
573 {
574 if ( VOS_STATUS_E_TIMEOUT == status )
575 {
576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700577 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 }
579 else
580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
582 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700583 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 }
585 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530586 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* we no longer need the config TLV */
590 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* if we are not in the START state then WDI_Start() failed */
592 if (WDA_START_STATE != wdaContext->wdaState)
593 {
594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700595 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 return VOS_STATUS_E_FAILURE;
597 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 /* FTM mode does not need to monitor BA activity */
599 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
600 {
601 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800602 if(VOS_STATUS_SUCCESS == status)
603 {
604 wdaContext->wdaTimersCreated = VOS_TRUE;
605 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530606 else
607 {
608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
609 FL("wda create timers failed"));
610 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 }
Leo Chang9d76f622013-08-23 16:34:52 -0700612 else
613 {
614 vos_event_init(&wdaContext->ftmStopDoneEvent);
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 return status;
617}
618
Jeff Johnson295189b2012-06-20 16:38:30 -0700619/*
620 * FUNCTION: WDA_prepareConfigTLV
621 * Function to prepare CFG for DAL(WDA)
622 */
623VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
624 WDI_StartReqParamsType *wdiStartParams )
625{
626 /* get pMac to acess CFG data base */
627 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
628 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
629 tHalCfg *tlvStruct = NULL ;
630 tANI_U8 *tlvStructStart = NULL ;
631 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
632 v_PVOID_t *configParam;
633 tANI_U32 configParamSize;
634 tANI_U32 *configDataValue;
635 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700636 tANI_U8 i;
637
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 if ((NULL == pMac)||(NULL == wdaContext))
639 {
640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700641 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 VOS_ASSERT(0);
643 return VOS_STATUS_E_FAILURE;
644 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
646 WNI_CFG_STA_ID_LEN +
647 WNI_CFG_EDCA_WME_ACBK_LEN +
648 WNI_CFG_EDCA_WME_ACBE_LEN +
649 WNI_CFG_EDCA_WME_ACVI_LEN +
650 WNI_CFG_EDCA_WME_ACVO_LEN +
651 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 /* malloc memory for all configs in one shot */
653 configParam = vos_mem_malloc(configParamSize);
654
655 if(NULL == configParam )
656 {
657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700658 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700659 VOS_ASSERT(0) ;
660 return VOS_STATUS_E_NOMEM;
661 }
662 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 tlvStruct = (tHalCfg *)configParam;
665 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 /* TODO: Remove Later */
667 /* QWLAN_HAL_CFG_STA_ID */
668 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
669 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
670 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
671 eSIR_SUCCESS)
672 {
673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
674 "Failed to get value for WNI_CFG_STA_ID");
675 goto handle_failure;
676 }
677 tlvStruct->length = strLength ;
678 /* calculate the pad bytes to have the CFG in aligned format */
679 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
680 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
684 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
688 != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
697 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
710 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
714 != eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
722
723 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
724 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
728 configDataValue ) != eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_CAL_PERIOD */
737 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
741 != eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_CAL_PERIOD");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_CAL_CONTROL */
750 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
754 != eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_CAL_CONTROL");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_PROXIMITY */
763 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
767 != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_PROXIMITY");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
776 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
780 != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
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_MAX_MEDIUM_TIME */
789 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
793 eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
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_MAX_MPDUS_IN_AMPDU */
802 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
803 tlvStruct->length = sizeof(tANI_U32);
804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
805 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
806 configDataValue ) != eSIR_SUCCESS)
807 {
808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
809 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
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_RTS_THRESHOLD */
815 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
819 eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
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_SHORT_RETRY_LIMIT */
828 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
829 tlvStruct->length = sizeof(tANI_U32);
830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
831 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
832 eSIR_SUCCESS)
833 {
834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
835 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
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_LONG_RETRY_LIMIT */
841 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
842 tlvStruct->length = sizeof(tANI_U32);
843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
844 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
845 eSIR_SUCCESS)
846 {
847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
848 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
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_FRAGMENTATION_THRESHOLD */
854 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
855 tlvStruct->length = sizeof(tANI_U32);
856 configDataValue = (tANI_U32 *)(tlvStruct + 1);
857 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
858 configDataValue ) != eSIR_SUCCESS)
859 {
860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
861 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
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_DYNAMIC_THRESHOLD_ZERO */
867 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
868 tlvStruct->length = sizeof(tANI_U32);
869 configDataValue = (tANI_U32 *)(tlvStruct + 1);
870 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
871 configDataValue ) != eSIR_SUCCESS)
872 {
873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
874 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
875 goto handle_failure;
876 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700877 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
878 + sizeof(tHalCfg) + tlvStruct->length));
879
880 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
881 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
894 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length));
906
907 /* QWLAN_HAL_CFG_FIXED_RATE */
908 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
912 != eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_FIXED_RATE");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length));
920
921 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
922 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
923 tlvStruct->length = sizeof(tANI_U32);
924 configDataValue = (tANI_U32 *)(tlvStruct + 1);
925 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
926 != eSIR_SUCCESS)
927 {
928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
929 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
930 goto handle_failure;
931 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700932 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
933 + sizeof(tHalCfg) + tlvStruct->length));
934
935 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
936 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
949 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
957 goto handle_failure;
958 }
959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
962 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
963 tlvStruct->length = sizeof(tANI_U32);
964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
965 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
966 configDataValue ) != eSIR_SUCCESS)
967 {
968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
969 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
970 goto handle_failure;
971 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700972 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
973 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
975 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
976 tlvStruct->length = sizeof(tANI_U32);
977 configDataValue = (tANI_U32 *)(tlvStruct + 1);
978 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
979 configDataValue ) != eSIR_SUCCESS)
980 {
981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
982 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
983 goto handle_failure;
984 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700985 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
986 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
988 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
992 configDataValue ) != eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length);
1000
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1002 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1003 tlvStruct->length = sizeof(tANI_U32);
1004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1005 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1006 configDataValue ) != eSIR_SUCCESS)
1007 {
1008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1009 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1010 goto handle_failure;
1011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1013 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1015 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1016 tlvStruct->length = sizeof(tANI_U32);
1017 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1018 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1019 configDataValue ) != eSIR_SUCCESS)
1020 {
1021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1022 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1023 goto handle_failure;
1024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1026 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1028 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1029 tlvStruct->length = sizeof(tANI_U32);
1030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1031 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1032 eSIR_SUCCESS)
1033 {
1034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1035 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1036 goto handle_failure;
1037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length);
1040
1041 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1042 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1043 tlvStruct->length = sizeof(tANI_U32);
1044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1045 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1046 configDataValue ) != eSIR_SUCCESS)
1047 {
1048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1049 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1050 goto handle_failure;
1051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1055 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1056 tlvStruct->length = sizeof(tANI_U32);
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1059 configDataValue ) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1063 goto handle_failure;
1064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1066 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1068 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1069 tlvStruct->length = sizeof(tANI_U32);
1070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1071 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1072 configDataValue ) != eSIR_SUCCESS)
1073 {
1074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1075 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1076 goto handle_failure;
1077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1081 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1082 tlvStruct->length = sizeof(tANI_U32);
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1085 configDataValue ) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1089 goto handle_failure;
1090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length);
1093
1094 /* QWLAN_HAL_CFG_STATS_PERIOD */
1095 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1099 eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_STATS_PERIOD");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1108 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1109 tlvStruct->length = sizeof(tANI_U32);
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1112 eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1116 goto handle_failure;
1117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1119 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1121 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1122 tlvStruct->length = sizeof(tANI_U32);
1123 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1124 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1125 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1129 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1133 != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1142 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1143 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1146 &strLength) != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1150 goto handle_failure;
1151 }
1152 tlvStruct->length = strLength;
1153 /* calculate the pad bytes to have the CFG in aligned format */
1154 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1155 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1159 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1160 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1163 &strLength) != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1167 goto handle_failure;
1168 }
1169 tlvStruct->length = strLength;
1170 /* calculate the pad bytes to have the CFG in aligned format */
1171 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1172 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1174 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001175 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1176 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1177 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1178 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1179 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1180 &strLength) != eSIR_SUCCESS)
1181 {
1182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1183 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1184 goto handle_failure;
1185 }
1186 tlvStruct->length = strLength;
1187 /* calculate the pad bytes to have the CFG in aligned format */
1188 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1189 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001190 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1191 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1193 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1194 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1196 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1197 &strLength) != eSIR_SUCCESS)
1198 {
1199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1200 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1201 goto handle_failure;
1202 }
1203 tlvStruct->length = strLength;
1204 /* calculate the pad bytes to have the CFG in aligned format */
1205 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1206 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1210 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1218 goto handle_failure;
1219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1223 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1231 goto handle_failure;
1232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1236 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1249 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1253 != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1257 goto handle_failure;
1258 }
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1262 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1270 goto handle_failure;
1271 }
1272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1275 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1276 tlvStruct->length = sizeof(tANI_U32);
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1279 != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1283 goto handle_failure;
1284 }
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1288 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1289 tlvStruct->length = sizeof(tANI_U32);
1290 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1291 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1292 != eSIR_SUCCESS)
1293 {
1294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1295 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1296 goto handle_failure;
1297 }
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001300 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1301 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1302 tlvStruct->length = sizeof(tANI_U32);
1303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1304 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, 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_WAKEUP_EN");
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_INFRA_STA_KEEP_ALIVE_PERIOD */
1314 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1315 tlvStruct->length = sizeof(tANI_U32);
1316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1317 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1318 != eSIR_SUCCESS)
1319 {
1320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1321 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1322 goto handle_failure;
1323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1325 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001326 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1327 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1331 != eSIR_SUCCESS)
1332 {
1333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1334 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1335 goto handle_failure;
1336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1338 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001339 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1340 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1344 != eSIR_SUCCESS)
1345 {
1346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1347 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1348 goto handle_failure;
1349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001350 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1351 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001352 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1353 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1354 * into FW, so the parameters are added here.
1355 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1357 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1361 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1362 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001363 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001370 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1371 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1375 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1376 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001377 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1378 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1383 + sizeof(tHalCfg) + tlvStruct->length) ;
1384
1385 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1386 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1387 tlvStruct->length = sizeof(tANI_U32);
1388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1389 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1390 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1391 + sizeof(tHalCfg) + tlvStruct->length) ;
1392
1393 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1394 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1395 tlvStruct->length = sizeof(tANI_U32);
1396 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1397 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
1400
1401 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1402 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1403 tlvStruct->length = sizeof(tANI_U32);
1404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1405 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
1408
1409 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1410 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1411 tlvStruct->length = sizeof(tANI_U32);
1412 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1413 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1414 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1415 + sizeof(tHalCfg) + tlvStruct->length) ;
1416
1417 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1418 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1419 tlvStruct->length = sizeof(tANI_U32);
1420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1421 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1422 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1423 + sizeof(tHalCfg) + tlvStruct->length) ;
1424
1425 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1426 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1431 + sizeof(tHalCfg) + tlvStruct->length) ;
1432
1433 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1434 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1435 tlvStruct->length = sizeof(tANI_U32);
1436 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1437 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1438 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1439 + sizeof(tHalCfg) + tlvStruct->length) ;
1440
1441 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1442 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1443 tlvStruct->length = sizeof(tANI_U32);
1444 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1445 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1446 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1447 + sizeof(tHalCfg) + tlvStruct->length) ;
1448
1449 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1450 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1451 tlvStruct->length = sizeof(tANI_U32);
1452 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1453 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1454 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1455 + sizeof(tHalCfg) + tlvStruct->length) ;
1456
1457 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1458 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
1465 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1466 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1470 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1471 + sizeof(tHalCfg) + tlvStruct->length) ;
1472
1473 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1474 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1475 tlvStruct->length = sizeof(tANI_U32);
1476 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1477 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
Wilson Tsaof8b37942013-09-06 10:49:00 -07001481 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1482 {
1483 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1484 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1492 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1500 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1508 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514 }
1515
1516 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1517 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1518 tlvStruct->length = sizeof(tANI_U32);
1519 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1520 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1521 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1522 + sizeof(tHalCfg) + tlvStruct->length) ;
1523
1524 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1525 {
1526 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1527 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1528 tlvStruct->length = sizeof(tANI_U32);
1529 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1530 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1531 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1532 + sizeof(tHalCfg) + tlvStruct->length) ;
1533 }
1534
1535 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1536 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1540 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1541 + sizeof(tHalCfg) + tlvStruct->length) ;
1542
Jeff Johnson32d95a32012-09-10 13:15:23 -07001543 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001544 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1545 tlvStruct->length = sizeof(tANI_U32);
1546 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1547 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1548 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1549 wcnssCompiledApiVersion.minor,
1550 wcnssCompiledApiVersion.version,
1551 wcnssCompiledApiVersion.revision);
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
Jeff Johnsond13512a2012-07-17 11:42:19 -07001555 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1556 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1564 goto handle_failure;
1565 }
1566
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1570 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1578 goto handle_failure;
1579 }
1580
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
1583
1584 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1585 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1586 tlvStruct->length = sizeof(tANI_U32);
1587 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1588 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1589 != eSIR_SUCCESS)
1590 {
1591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1592 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1593 goto handle_failure;
1594 }
1595
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
1598
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001599 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1600 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1601 tlvStruct->length = sizeof(tANI_U32);
1602 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1603 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1604 != eSIR_SUCCESS)
1605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1607 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1608 goto handle_failure;
1609 }
1610
1611 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1612 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001613#ifdef WLAN_SOFTAP_VSTA_FEATURE
1614 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1615 tlvStruct->length = sizeof(tANI_U32);
1616 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1617 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1618 != eSIR_SUCCESS)
1619 {
1620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1621 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1622 goto handle_failure;
1623 }
1624
1625 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1626 + sizeof(tHalCfg) + tlvStruct->length) ;
1627#endif
1628
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001629 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1630 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1631 tlvStruct->length = sizeof(tANI_U32);
1632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1633
1634 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1635 != eSIR_SUCCESS)
1636 {
1637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1638 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1639 goto handle_failure;
1640 }
1641
1642 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1643 + sizeof(tHalCfg) + tlvStruct->length) ;
1644
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301645/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1646 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1647 tlvStruct->length = sizeof(tANI_U32);
1648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1649 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1650 configDataValue ) != eSIR_SUCCESS)
1651 {
1652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1653 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1654 goto handle_failure;
1655 }
1656
1657 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1658 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301659#ifdef FEATURE_WLAN_TDLS
1660 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1661 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1662 tlvStruct->length = sizeof(tANI_U32);
1663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1664 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1665 configDataValue ) != eSIR_SUCCESS)
1666 {
1667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1668 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1669 goto handle_failure;
1670 }
1671 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1672 + sizeof(tHalCfg) + tlvStruct->length) ;
1673
1674 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1675 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1676 tlvStruct->length = sizeof(tANI_U32);
1677 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1678 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1679 configDataValue ) != eSIR_SUCCESS)
1680 {
1681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1682 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1683 goto handle_failure;
1684 }
1685 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1686 + sizeof(tHalCfg) + tlvStruct->length) ;
1687 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1688 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1689 tlvStruct->length = sizeof(tANI_U32);
1690 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1691 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1692 configDataValue ) != eSIR_SUCCESS)
1693 {
1694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1695 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1696 goto handle_failure;
1697 }
1698 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1699 + sizeof(tHalCfg) + tlvStruct->length) ;
1700 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1701 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1702 tlvStruct->length = sizeof(tANI_U32);
1703 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1704 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1705 configDataValue ) != eSIR_SUCCESS)
1706 {
1707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1708 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1709 goto handle_failure;
1710 }
1711 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1712 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301713 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1714 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1715 tlvStruct->length = sizeof(tANI_U32);
1716 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1717 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1718 configDataValue ) != eSIR_SUCCESS)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1721 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1722 goto handle_failure;
1723 }
1724 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1725 + sizeof(tHalCfg) + tlvStruct->length) ;
1726
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301727#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301728
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001729 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1730 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1731 tlvStruct->length = sizeof(tANI_U32);
1732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1733 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1734 configDataValue ) != eSIR_SUCCESS)
1735 {
1736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1737 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1738 goto handle_failure;
1739 }
1740
1741 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1742 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001743
1744 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1745 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1746 tlvStruct->length = sizeof(tANI_U32);
1747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1748 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1749 != eSIR_SUCCESS)
1750 {
1751 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1752 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1753 goto handle_failure;
1754 }
1755 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1756 + sizeof(tHalCfg) + tlvStruct->length));
1757
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301758 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1759 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1760 tlvStruct->length = sizeof(tANI_U32);
1761 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1762 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1763 configDataValue ) != eSIR_SUCCESS)
1764 {
1765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1766 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1767 goto handle_failure;
1768 }
1769
1770 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1771 + sizeof(tHalCfg) + tlvStruct->length) ;
1772
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301773 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1774 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1775 tlvStruct->length = sizeof(tANI_U32);
1776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1777 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1778 configDataValue ) != eSIR_SUCCESS)
1779 {
1780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1781 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1782 goto handle_failure;
1783 }
1784 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1785 + sizeof(tHalCfg) + tlvStruct->length) ;
1786
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301787 /* QWLAN_HAL_CFG_ATH_DISABLE */
1788 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1789 tlvStruct->length = sizeof(tANI_U32);
1790 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1791 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1792 configDataValue ) != eSIR_SUCCESS)
1793 {
1794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1795 "Failed to get value for WNI_CFG_ATH_DISABLE");
1796 goto handle_failure;
1797 }
1798 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1799 + sizeof(tHalCfg) + tlvStruct->length) ;
1800
c_hpothu6d7dc922013-12-02 12:36:41 +05301801 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1802 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1803 tlvStruct->length = sizeof(tANI_U32);
1804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1805 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1806 configDataValue ) != eSIR_SUCCESS)
1807 {
1808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1809 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1810 goto handle_failure;
1811 }
1812 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1813 + sizeof(tHalCfg) + tlvStruct->length) ;
1814
1815 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1816 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1817 tlvStruct->length = sizeof(tANI_U32);
1818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1819 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1820 configDataValue ) != eSIR_SUCCESS)
1821 {
1822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1823 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1824 goto handle_failure;
1825 }
1826 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1827 + sizeof(tHalCfg) + tlvStruct->length) ;
1828
1829 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1830 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1831 tlvStruct->length = sizeof(tANI_U32);
1832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1833 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
1843 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1844 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1848 configDataValue ) != eSIR_SUCCESS)
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1851 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1852 goto handle_failure;
1853 }
1854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1855 + sizeof(tHalCfg) + tlvStruct->length) ;
1856
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301857 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1858 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1859 tlvStruct->length = sizeof(tANI_U32);
1860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1861 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1862 configDataValue ) != eSIR_SUCCESS)
1863 {
1864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1865 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1866 goto handle_failure;
1867 }
1868 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1869 + sizeof(tHalCfg) + tlvStruct->length) ;
1870
1871 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1872 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1873 tlvStruct->length = sizeof(tANI_U32);
1874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1875 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1876 configDataValue ) != eSIR_SUCCESS)
1877 {
1878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1879 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1880 goto handle_failure;
1881 }
1882 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1883 + sizeof(tHalCfg) + tlvStruct->length) ;
1884
1885 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1886 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1887 tlvStruct->length = sizeof(tANI_U32);
1888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1889 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1890 configDataValue ) != eSIR_SUCCESS)
1891 {
1892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1893 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1894 goto handle_failure;
1895 }
1896 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1897 + sizeof(tHalCfg) + tlvStruct->length) ;
1898
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001899 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1900 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1901 tlvStruct->length = sizeof(tANI_U32);
1902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1903 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1904 configDataValue ) != eSIR_SUCCESS)
1905 {
1906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1907 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1908 goto handle_failure;
1909 }
1910 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1911 + sizeof(tHalCfg) + tlvStruct->length) ;
1912
c_hpothu5bd1ae42014-03-07 20:28:22 +05301913 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1914 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1915 tlvStruct->length = sizeof(tANI_U32);
1916 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1917
1918 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1919 configDataValue ) != eSIR_SUCCESS)
1920 {
1921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1922 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1923 goto handle_failure;
1924 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301925 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1926 + sizeof(tHalCfg) + tlvStruct->length) ;
1927
1928 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1929 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1930 tlvStruct->length = sizeof(tANI_U32);
1931 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1932
1933 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1934 configDataValue ) != eSIR_SUCCESS)
1935 {
1936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1937 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1938 goto handle_failure;
1939 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301940 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1941 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301942
c_hpothu2d0f1c42014-04-01 18:38:51 +05301943 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1944 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1945 tlvStruct->length = sizeof(tANI_U32);
1946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1947
1948 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1949 configDataValue ) != eSIR_SUCCESS)
1950 {
1951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1952 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1953 goto handle_failure;
1954 }
1955 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1956 + sizeof(tHalCfg) + tlvStruct->length) ;
1957
1958 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1959 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1960 tlvStruct->length = sizeof(tANI_U32);
1961 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1962
1963 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1964 configDataValue ) != eSIR_SUCCESS)
1965 {
1966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1967 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1968 goto handle_failure;
1969 }
1970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1971 + sizeof(tHalCfg) + tlvStruct->length) ;
1972
1973 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1974 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1975 tlvStruct->length = sizeof(tANI_U32);
1976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1977
1978 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1979 configDataValue ) != eSIR_SUCCESS)
1980 {
1981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1982 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1983 goto handle_failure;
1984 }
1985 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1986 + sizeof(tHalCfg) + tlvStruct->length) ;
1987
1988 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1989 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1990 tlvStruct->length = sizeof(tANI_U32);
1991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1992
1993 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1994 configDataValue ) != eSIR_SUCCESS)
1995 {
1996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1997 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1998 goto handle_failure;
1999 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2001 + sizeof(tHalCfg) + tlvStruct->length) ;
2002
Mihir Shetec34258c2014-07-30 17:50:27 +05302003 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2004 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2005 tlvStruct->length = sizeof(tANI_U32);
2006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2007
2008 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2009 configDataValue ) != eSIR_SUCCESS)
2010 {
2011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2012 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2013 goto handle_failure;
2014 }
2015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2016 + sizeof(tHalCfg) + tlvStruct->length) ;
2017
2018 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2019 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2020 tlvStruct->length = sizeof(tANI_U32);
2021 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2022
2023 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2024 configDataValue ) != eSIR_SUCCESS)
2025 {
2026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2027 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2028 goto handle_failure;
2029 }
2030 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2031 + sizeof(tHalCfg) + tlvStruct->length) ;
2032
2033 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2034 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2035 tlvStruct->length = sizeof(tANI_U32);
2036 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2037
2038 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2039 configDataValue ) != eSIR_SUCCESS)
2040 {
2041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2042 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2043 goto handle_failure;
2044 }
2045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2046 + sizeof(tHalCfg) + tlvStruct->length) ;
2047
2048 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2049 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2050 tlvStruct->length = sizeof(tANI_U32);
2051 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2052
2053 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2054 configDataValue ) != eSIR_SUCCESS)
2055 {
2056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2057 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2058 goto handle_failure;
2059 }
2060 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2061 + sizeof(tHalCfg) + tlvStruct->length) ;
2062
2063 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2064 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2065 tlvStruct->length = sizeof(tANI_U32);
2066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2067
2068 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2069 configDataValue ) != eSIR_SUCCESS)
2070 {
2071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2072 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2073 goto handle_failure;
2074 }
2075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2076 + sizeof(tHalCfg) + tlvStruct->length) ;
2077
2078 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2079 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2080 tlvStruct->length = sizeof(tANI_U32);
2081 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2082
2083 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2084 configDataValue ) != eSIR_SUCCESS)
2085 {
2086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2087 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2088 goto handle_failure;
2089 }
2090 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2091 + sizeof(tHalCfg) + tlvStruct->length) ;
2092
2093 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2094 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2095 tlvStruct->length = sizeof(tANI_U32);
2096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2097
2098 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2099 configDataValue ) != eSIR_SUCCESS)
2100 {
2101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2102 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2103 goto handle_failure;
2104 }
2105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2106 + sizeof(tHalCfg) + tlvStruct->length) ;
2107
2108 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2109 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2110 tlvStruct->length = sizeof(tANI_U32);
2111 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2112
2113 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2114 configDataValue ) != eSIR_SUCCESS)
2115 {
2116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2117 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2118 goto handle_failure;
2119 }
2120 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2121 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302122
2123 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2124 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2125 tlvStruct->length = sizeof(tANI_U32);
2126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2127
2128 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2129 configDataValue ) != eSIR_SUCCESS)
2130 {
2131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2132 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2133 goto handle_failure;
2134 }
2135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2136 + sizeof(tHalCfg) + tlvStruct->length) ;
2137
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302138 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2139 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2140 tlvStruct->length = sizeof(tANI_U32);
2141 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2142
2143 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2144 configDataValue ) != eSIR_SUCCESS)
2145 {
2146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2147 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2148 goto handle_failure;
2149 }
2150 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2151 + sizeof(tHalCfg) + tlvStruct->length) ;
2152
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302153 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2154 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2155 tlvStruct->length = sizeof(tANI_U32);
2156 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2157
2158 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2159 configDataValue ) != eSIR_SUCCESS)
2160 {
2161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2162 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2163 goto handle_failure;
2164 }
2165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2166 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302167
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302168 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2169 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2170 tlvStruct->length = sizeof(tANI_U32);
2171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2172
2173 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2174 configDataValue ) != eSIR_SUCCESS)
2175 {
2176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2177 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2178 goto handle_failure;
2179 }
2180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2181 + sizeof(tHalCfg) + tlvStruct->length) ;
2182
Sachin Ahuja41b61902015-06-18 18:32:15 +05302183
2184 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2185 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2186 tlvStruct->length = sizeof(tANI_U32);
2187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2188
2189 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2190 configDataValue ) != eSIR_SUCCESS)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2193 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2194 goto handle_failure;
2195 }
2196 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2197 + sizeof(tHalCfg) + tlvStruct->length) ;
2198
2199 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2200 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2201 tlvStruct->length = sizeof(tANI_U32);
2202 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2203
2204 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2205 configDataValue ) != eSIR_SUCCESS)
2206 {
2207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2208 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2209 goto handle_failure;
2210 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302211 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2212 + sizeof(tHalCfg) + tlvStruct->length) ;
2213
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302214 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2215 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2216 tlvStruct->length = sizeof(tANI_U32);
2217 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2218
2219 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2220 configDataValue ) != eSIR_SUCCESS)
2221 {
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2223 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2224 goto handle_failure;
2225 }
2226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2227 + sizeof(tHalCfg) + tlvStruct->length) ;
2228
2229 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2230 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2231 tlvStruct->length = sizeof(tANI_U32);
2232 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2233
2234 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2235 configDataValue ) != eSIR_SUCCESS)
2236 {
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2238 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2239 goto handle_failure;
2240 }
2241 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2242 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302243
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302244 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2245 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2246 tlvStruct->length = sizeof(tANI_U32);
2247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2248
2249 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2250 configDataValue ) != eSIR_SUCCESS)
2251 {
2252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2253 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2254 goto handle_failure;
2255 }
2256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2257 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302258 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2259 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2260 tlvStruct->length = sizeof(tANI_U32);
2261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2262 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2263 configDataValue ) != eSIR_SUCCESS)
2264 {
2265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2266 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2267 goto handle_failure;
2268 }
2269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2270 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302271
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002273#ifdef WLAN_DEBUG
2274 {
2275 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2277 "****** Dumping CFG TLV ***** ");
2278 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2279 {
2280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2281 "%02x %02x %02x %02x %02x %02x %02x %02x",
2282 tlvStructStart[i],
2283 tlvStructStart[i+1],
2284 tlvStructStart[i+2],
2285 tlvStructStart[i+3],
2286 tlvStructStart[i+4],
2287 tlvStructStart[i+5],
2288 tlvStructStart[i+6],
2289 tlvStructStart[i+7]);
2290 }
2291 /* Dump the bytes in the last line*/
2292 for (; i < wdiStartParams->usConfigBufferLen; i++)
2293 {
2294 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2295 "%02x ",tlvStructStart[i]);
2296 }
2297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2298 "**************************** ");
2299 }
2300#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002302handle_failure:
2303 vos_mem_free(configParam);
2304 return VOS_STATUS_E_FAILURE;
2305}
Jeff Johnson295189b2012-06-20 16:38:30 -07002306/*
2307 * FUNCTION: WDA_wdiCompleteCB
2308 * call the voss call back function
2309 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002310void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002311{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2313 tWDA_CbContext *wdaContext;
2314
2315 if(NULL == pWdaParams)
2316 {
2317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002318 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002319 VOS_ASSERT(0) ;
2320 return ;
2321 }
2322
2323 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2324
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if (NULL == wdaContext)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 return ;
2330 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002331
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002333 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002337 vos_mem_free(pWdaParams);
2338
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 if(WDI_STATUS_SUCCESS != status)
2340 {
2341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2342 "WDI stop callback returned failure" );
2343 VOS_ASSERT(0) ;
2344 }
2345 else
2346 {
2347 wdaContext->wdaState = WDA_STOP_STATE;
2348 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002349
Leo Chang9d76f622013-08-23 16:34:52 -07002350 /* FTM Driver stop procedure should be synced.
2351 * Stop and Close will happen on same context */
2352 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2353 {
2354 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2355 {
2356 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2357 "%s: FTM Stop Event Set Fail", __func__);
2358 VOS_ASSERT(0);
2359 }
2360 }
2361
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002363 vos_WDAComplete_cback(wdaContext->pVosContext);
2364
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 return ;
2366}
Jeff Johnson295189b2012-06-20 16:38:30 -07002367/*
2368 * FUNCTION: WDA_stop
2369 * call WDI_stop
2370 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002371VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2372{
2373 WDI_Status wdiStatus;
2374 VOS_STATUS status = VOS_STATUS_SUCCESS;
2375 WDI_StopReqParamsType *wdiStopReq;
2376 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002377 tWDA_ReqParams *pWdaParams ;
2378
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 if (NULL == pWDA)
2380 {
2381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002382 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 VOS_ASSERT(0);
2384 return VOS_STATUS_E_FAILURE;
2385 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002386 if (pWDA->wdiFailed == true)
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002390 return VOS_STATUS_E_ALREADY;
2391 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002392
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 /* FTM mode stay START_STATE */
2394 if( (WDA_READY_STATE != pWDA->wdaState) &&
2395 (WDA_INIT_STATE != pWDA->wdaState) &&
2396 (WDA_START_STATE != pWDA->wdaState) )
2397 {
2398 VOS_ASSERT(0);
2399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 wdiStopReq = (WDI_StopReqParamsType *)
2401 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2402 if(NULL == wdiStopReq)
2403 {
2404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 VOS_ASSERT(0);
2407 return VOS_STATUS_E_NOMEM;
2408 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 wdiStopReq->wdiStopReason = reason;
2411 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302412
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2414 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 {
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 VOS_ASSERT(0);
2419 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002420 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002422
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002423 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2424 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 {
2426 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002427 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002429
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002430 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2431 pWdaParams->wdaMsgParam = NULL;
2432 pWdaParams->pWdaContext = pWDA;
2433
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 /* call WDI stop */
2435 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002436 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2437
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2441 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2443 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 status = VOS_STATUS_E_FAILURE;
2445 }
Leo Chang9d76f622013-08-23 16:34:52 -07002446
2447 /* FTM Driver stop procedure should be synced.
2448 * Stop and Close will happen on same context */
2449 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2450 {
2451 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2452 WDI_RESPONSE_TIMEOUT);
2453 if (status != VOS_STATUS_SUCCESS)
2454 {
2455 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2456 "%s: FTM Stop Timepoout", __func__);
2457 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002458 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302459 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 return status;
2462}
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_close
2465 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302466 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002467VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2468{
Jeff Johnson43971f52012-07-17 12:26:56 -07002469 VOS_STATUS status = VOS_STATUS_SUCCESS;
2470 WDI_Status wstatus;
2471 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 if (NULL == wdaContext)
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 return VOS_STATUS_E_FAILURE;
2478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2480 (WDA_STOP_STATE != wdaContext->wdaState))
2481 {
2482 VOS_ASSERT(0);
2483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002485 wstatus = WDI_Close();
2486 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 {
2488 status = VOS_STATUS_E_FAILURE;
2489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002492 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2493 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002496 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 status = VOS_STATUS_E_FAILURE;
2498 }
2499
Jeff Johnson43971f52012-07-17 12:26:56 -07002500 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002501 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 {
2503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002504 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 status = VOS_STATUS_E_FAILURE;
2506 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002507 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002508 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 {
2510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002511 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 status = VOS_STATUS_E_FAILURE;
2513 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002514 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002515 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002518 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 status = VOS_STATUS_E_FAILURE;
2520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002522 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002523 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 {
2525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2526 "error in WDA close " );
2527 status = VOS_STATUS_E_FAILURE;
2528 }
2529 return status;
2530}
Jeff Johnson295189b2012-06-20 16:38:30 -07002531/*
2532 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2533 * returns 1 if the compiled version is greater than or equal to the input version
2534 */
2535
2536uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2537{
2538 VOS_STATUS status = VOS_STATUS_SUCCESS;
2539 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2540 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2543 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2544 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2545 (compiledVersion.revision >= revision)))
2546 return 1;
2547 else
2548 return 0;
2549}
Jeff Johnson295189b2012-06-20 16:38:30 -07002550/*
2551 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2552 * returns 1 if the compiled version is greater than or equal to the input version
2553 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002554uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2555{
2556 VOS_STATUS status = VOS_STATUS_SUCCESS;
2557 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2558 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2561 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2562 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2563 (reportedVersion.revision >= revision)))
2564 return 1;
2565 else
2566 return 0;
2567}
Jeff Johnson295189b2012-06-20 16:38:30 -07002568/*
2569 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2570 * Returns the version of the WCNSS WLAN API with which the HOST
2571 * device driver was compiled
2572 */
2573VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2574 tSirVersionType *pVersion)
2575{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302576 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 if ((NULL == pvosGCtx) || (NULL == pVersion))
2578 {
2579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 VOS_ASSERT(0);
2582 return VOS_STATUS_E_FAILURE;
2583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2585 if (NULL == pWDA )
2586 {
2587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002588 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 VOS_ASSERT(0);
2590 return VOS_STATUS_E_FAILURE;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 *pVersion = pWDA->wcnssWlanCompiledVersion;
2593 return VOS_STATUS_SUCCESS;
2594}
Jeff Johnson295189b2012-06-20 16:38:30 -07002595/*
2596 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2597 * Returns the version of the WCNSS WLAN API with which the WCNSS
2598 * device driver was compiled
2599 */
2600VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2601 tSirVersionType *pVersion)
2602{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302603 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 if ((NULL == pvosGCtx) || (NULL == pVersion))
2605 {
2606 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002607 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 VOS_ASSERT(0);
2609 return VOS_STATUS_E_FAILURE;
2610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2612 if (NULL == pWDA )
2613 {
2614 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002615 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 VOS_ASSERT(0);
2617 return VOS_STATUS_E_FAILURE;
2618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 *pVersion = pWDA->wcnssWlanReportedVersion;
2620 return VOS_STATUS_SUCCESS;
2621}
Jeff Johnson295189b2012-06-20 16:38:30 -07002622/*
2623 * FUNCTION: WDA_GetWcnssSoftwareVersion
2624 * Returns the WCNSS Software version string
2625 */
2626VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2627 tANI_U8 *pVersion,
2628 tANI_U32 versionBufferSize)
2629{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302630 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002632 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 if ((NULL == pvosGCtx) || (NULL == pVersion))
2634 {
2635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002636 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 VOS_ASSERT(0);
2638 return VOS_STATUS_E_FAILURE;
2639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2641 if (NULL == pWDA )
2642 {
2643 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002644 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 VOS_ASSERT(0);
2646 return VOS_STATUS_E_FAILURE;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2649 return VOS_STATUS_SUCCESS;
2650}
Jeff Johnson295189b2012-06-20 16:38:30 -07002651/*
2652 * FUNCTION: WDA_GetWcnssHardwareVersion
2653 * Returns the WCNSS Hardware version string
2654 */
2655VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2656 tANI_U8 *pVersion,
2657 tANI_U32 versionBufferSize)
2658{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302659 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if ((NULL == pvosGCtx) || (NULL == pVersion))
2663 {
2664 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 VOS_ASSERT(0);
2667 return VOS_STATUS_E_FAILURE;
2668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2670 if (NULL == pWDA )
2671 {
2672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_ASSERT(0);
2675 return VOS_STATUS_E_FAILURE;
2676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2678 return VOS_STATUS_SUCCESS;
2679}
Jeff Johnson295189b2012-06-20 16:38:30 -07002680/*
2681 * FUNCTION: WDA_WniCfgDnld
2682 * Trigger CFG Download
2683 */
2684VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2685{
2686 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302687 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002688
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 if (NULL == pMac )
2690 {
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 VOS_ASSERT(0);
2694 return VOS_STATUS_E_FAILURE;
2695 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302696 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 return vosStatus;
2698}
Jeff Johnson295189b2012-06-20 16:38:30 -07002699/* -----------------------------------------------------------------
2700 * WDI interface
2701 * -----------------------------------------------------------------
2702 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002703/*
2704 * FUNCTION: WDA_suspendDataTxCallback
2705 * call back function called from TL after suspend Transmission
2706 */
2707VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2708 v_U8_t* ucSTAId,
2709 VOS_STATUS vosStatus)
2710{
2711 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002713 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 if (NULL == pWDA )
2715 {
2716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 VOS_ASSERT(0);
2719 return VOS_STATUS_E_FAILURE;
2720 }
2721 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2722 {
2723 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2724 }
2725 else
2726 {
2727 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 /* Trigger the event to bring the WDA TL suspend function to come
2730 * out of wait*/
2731 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2732 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2733 {
2734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002735 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 /* If TL suspended had timedout before this callback was called, resume back
2738 * TL.*/
2739 if (pWDA->txSuspendTimedOut)
2740 {
2741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002742 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 WDA_ResumeDataTx(pWDA);
2744 pWDA->txSuspendTimedOut = FALSE;
2745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 return VOS_STATUS_SUCCESS;
2747}
Jeff Johnson295189b2012-06-20 16:38:30 -07002748/*
2749 * FUNCTION: WDA_suspendDataTx
2750 * Update TL to suspend the data Transmission
2751 */
2752VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2753{
2754 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2755 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002756
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 if (pWDA->txSuspendTimedOut)
2761 {
2762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002763 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 return status;
2765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 /* Reset the event to be not signalled */
2767 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2768 if(!VOS_IS_STATUS_SUCCESS(status))
2769 {
2770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002771 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 return VOS_STATUS_E_FAILURE;
2773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002775 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 WDA_SuspendDataTxCallback);
2777 if(status != VOS_STATUS_SUCCESS)
2778 {
2779 return status;
2780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 /* Wait for the event to be set by the TL, to get the response of
2782 * suspending the TX queues, this event should be set by the Callback
2783 * function called by TL*/
2784 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2785 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2786 if(!VOS_IS_STATUS_SUCCESS(status))
2787 {
2788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2789 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002790 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 /* Set this flag to true when TL suspend times out, so that when TL
2792 * suspend eventually happens and calls the callback, TL can be resumed
2793 * right away by looking at this flag when true.*/
2794 pWDA->txSuspendTimedOut = TRUE;
2795 }
2796 else
2797 {
2798 pWDA->txSuspendTimedOut = FALSE;
2799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2801 {
2802 status = VOS_STATUS_SUCCESS;
2803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002804 return status;
2805}
Jeff Johnson295189b2012-06-20 16:38:30 -07002806/*
2807 * FUNCTION: WDA_resumeDataTx
2808 * Update TL to resume the data Transmission
2809 */
2810VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2811{
2812 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813
2814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002815 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002816
2817 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 return status;
2819}
Jeff Johnson295189b2012-06-20 16:38:30 -07002820/*
2821 * FUNCTION: WDA_InitScanReqCallback
2822 * Trigger Init SCAN callback
2823 */
2824void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2825{
2826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2827 tWDA_CbContext *pWDA;
2828 tInitScanParams *pWDA_ScanParam ;
2829 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 if(NULL == pWdaParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0) ;
2837 return ;
2838 }
2839 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2840 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 if(NULL == pWDA_ScanParam)
2842 {
2843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002844 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002845 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2847 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 return ;
2849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 if(WDI_STATUS_SUCCESS != wdiStatus)
2851 {
2852 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 if(VOS_STATUS_SUCCESS != status)
2854 {
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002856 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 }
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* free WDI command buffer */
2860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302862
2863
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002865 /* without converting the Status to Failure or Success Just
2866 pass the same status to lim */
2867 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 /* send SCAN RSP message back to PE */
2869 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 return ;
2871}
2872
2873/*
2874 * FUNCTION: WDA_ProcessInitScanReq
2875 * Trigger Init SCAN in DAL
2876 */
2877VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2878 tInitScanParams *initScanParams)
2879{
2880 WDI_Status status = WDI_STATUS_SUCCESS ;
2881 WDI_InitScanReqParamsType *wdiInitScanParam =
2882 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2883 sizeof(WDI_InitScanReqParamsType)) ;
2884 tWDA_ReqParams *pWdaParams;
2885 tANI_U8 i = 0;
2886
2887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 if(NULL == wdiInitScanParam)
2890 {
2891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002892 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 VOS_ASSERT(0);
2894 return VOS_STATUS_E_NOMEM;
2895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2897 if(NULL == pWdaParams)
2898 {
2899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 VOS_ASSERT(0);
2902 vos_mem_free(wdiInitScanParam);
2903 return VOS_STATUS_E_NOMEM;
2904 }
2905
2906 /* Copy init Scan params to WDI structure */
2907 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2908 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2909 sizeof(tSirMacAddr)) ;
2910 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2911 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2912 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2914 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2916 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2918 {
2919 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2920 initScanParams->scanEntry.bssIdx[i] ;
2921 }
2922
2923 /* if Frame length, copy macMgmtHdr or WDI structure */
2924 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2925 {
2926 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2927 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2928 }
2929 wdiInitScanParam->wdiReqStatusCB = NULL ;
2930
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 /* Store Init Req pointer, as this will be used for response */
2932 pWdaParams->pWdaContext = pWDA;
2933 pWdaParams->wdaMsgParam = initScanParams;
2934 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 /* first try to suspend TX */
2936 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 if(WDI_STATUS_SUCCESS != status)
2938 {
2939 goto handleWdiFailure;
2940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 /* call DAL API to pass init scan request to DAL */
2942 status = WDI_InitScanReq(wdiInitScanParam,
2943 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 if(IS_WDI_STATUS_FAILURE(status))
2945 {
2946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2947 "error in WDA Init Scan, Resume Tx " );
2948 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 VOS_ASSERT(0) ;
2950
2951 goto handleWdiFailure;
2952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954handleWdiFailure:
2955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2956 "Failure in WDI Api, free all the memory " );
2957 /* free WDI command buffer */
2958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2959 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 /* send Failure to PE */
2961 initScanParams->status = eSIR_FAILURE ;
2962 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 return CONVERT_WDI2VOS_STATUS(status) ;
2964}
2965
Jeff Johnson295189b2012-06-20 16:38:30 -07002966/*
2967 * FUNCTION: WDA_StartScanReqCallback
2968 * send Start SCAN RSP back to PE
2969 */
2970void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2971 void* pUserData)
2972{
2973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2974 tWDA_CbContext *pWDA;
2975 tStartScanParams *pWDA_ScanParam;
2976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(NULL == pWdaParams)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 VOS_ASSERT(0) ;
2983 return ;
2984 }
2985 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2986 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 if(NULL == pWDA_ScanParam)
2988 {
2989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002990 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002992 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 return ;
2994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2996 {
2997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003000 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 return ;
3002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3004 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003005
Jeff Johnson295189b2012-06-20 16:38:30 -07003006
3007 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003008 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 /* send SCAN RSP message back to PE */
3010 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 return ;
3012}
3013
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ProcessStartScanReq
3016 * Trigger start SCAN in WDI
3017 */
3018VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3019 tStartScanParams *startScanParams)
3020{
3021 WDI_Status status = WDI_STATUS_SUCCESS;
3022 WDI_StartScanReqParamsType *wdiStartScanParams =
3023 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_StartScanReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003027 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 if(NULL == wdiStartScanParams)
3029 {
3030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 VOS_ASSERT(0);
3033 return VOS_STATUS_E_NOMEM;
3034 }
3035 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3036 if(NULL == pWdaParams)
3037 {
3038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 VOS_ASSERT(0);
3041 vos_mem_free(wdiStartScanParams);
3042 return VOS_STATUS_E_NOMEM;
3043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 /* Copy init Scan params to WDI structure */
3045 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3046 wdiStartScanParams->wdiReqStatusCB = NULL ;
3047
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 /* Store Init Req pointer, as this will be used for response */
3049 /* store Params pass it to WDI */
3050 pWdaParams->pWdaContext = pWDA;
3051 pWdaParams->wdaMsgParam = startScanParams;
3052 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 /* call DAL API to pass init scan request to DAL */
3054 status = WDI_StartScanReq(wdiStartScanParams,
3055 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 /* failure returned by WDI API */
3057 if(IS_WDI_STATUS_FAILURE(status))
3058 {
3059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3060 "Failure in Start Scan WDI API, free all the memory "
3061 "It should be due to previous abort scan." );
3062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3063 vos_mem_free(pWdaParams) ;
3064 startScanParams->status = eSIR_FAILURE ;
3065 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 return CONVERT_WDI2VOS_STATUS(status) ;
3068}
Jeff Johnson295189b2012-06-20 16:38:30 -07003069/*
3070 * FUNCTION: WDA_EndScanReqCallback
3071 * END SCAN callback
3072 */
3073void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3074{
3075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3076 tWDA_CbContext *pWDA;
3077 tEndScanParams *endScanParam;
3078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 if(NULL == pWdaParams)
3081 {
3082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003083 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 VOS_ASSERT(0) ;
3085 return ;
3086 }
3087 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3088 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if(NULL == endScanParam)
3090 {
3091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003092 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3095 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 return ;
3097 }
3098
3099 /* Free WDI command buffer */
3100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3101 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003103 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 /* send response back to PE */
3105 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3106 return ;
3107}
3108
Jeff Johnson295189b2012-06-20 16:38:30 -07003109/*
3110 * FUNCTION: WDA_ProcessEndScanReq
3111 * Trigger END SCAN in WDI
3112 */
3113VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3114 tEndScanParams *endScanParams)
3115{
3116 WDI_Status status = WDI_STATUS_SUCCESS;
3117 WDI_EndScanReqParamsType *wdiEndScanParams =
3118 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3119 sizeof(WDI_EndScanReqParamsType)) ;
3120 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003122 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 if(NULL == wdiEndScanParams)
3124 {
3125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 VOS_ASSERT(0);
3128 return VOS_STATUS_E_NOMEM;
3129 }
3130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3131 if(NULL == pWdaParams)
3132 {
3133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 VOS_ASSERT(0);
3136 vos_mem_free(wdiEndScanParams);
3137 return VOS_STATUS_E_NOMEM;
3138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 /* Copy init Scan params to WDI structure */
3140 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3141 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 /* Store Init Req pointer, as this will be used for response */
3143 /* store Params pass it to WDI */
3144 pWdaParams->pWdaContext = pWDA;
3145 pWdaParams->wdaMsgParam = endScanParams;
3146 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 /* call DAL API to pass init scan request to DAL */
3148 status = WDI_EndScanReq(wdiEndScanParams,
3149 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 if(IS_WDI_STATUS_FAILURE(status))
3151 {
3152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3153 "Failure in End Scan WDI API, free all the memory "
3154 "It should be due to previous abort scan." );
3155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3156 vos_mem_free(pWdaParams) ;
3157 endScanParams->status = eSIR_FAILURE ;
3158 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 return CONVERT_WDI2VOS_STATUS(status) ;
3161}
Jeff Johnson295189b2012-06-20 16:38:30 -07003162/*
3163 * FUNCTION: WDA_FinishScanReqCallback
3164 * Trigger Finish SCAN callback
3165 */
3166void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3167{
3168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3169 tWDA_CbContext *pWDA;
3170 tFinishScanParams *finishScanParam;
3171 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 if(NULL == pWdaParams)
3175 {
3176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 VOS_ASSERT(0) ;
3179 return ;
3180 }
3181
3182 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3183 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 if(NULL == finishScanParam)
3185 {
3186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003187 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3190 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 return ;
3192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3194 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 /*
3196 * Now Resume TX, if we reached here means, TX is already suspended, we
3197 * have to resume it unconditionaly
3198 */
3199 status = WDA_ResumeDataTx(pWDA) ;
3200
3201 if(VOS_STATUS_SUCCESS != status)
3202 {
3203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003204 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003206 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3208 return ;
3209}
Jeff Johnson295189b2012-06-20 16:38:30 -07003210/*
3211 * FUNCTION: WDA_ProcessFinshScanReq
3212 * Trigger Finish SCAN in WDI
3213 */
3214VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3215 tFinishScanParams *finishScanParams)
3216{
3217 WDI_Status status = WDI_STATUS_SUCCESS;
3218 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3219 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3220 sizeof(WDI_FinishScanReqParamsType)) ;
3221 tWDA_ReqParams *pWdaParams ;
3222 tANI_U8 i = 0;
3223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003224 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 if(NULL == wdiFinishScanParams)
3226 {
3227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 VOS_ASSERT(0);
3230 return VOS_STATUS_E_NOMEM;
3231 }
3232 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3233 if(NULL == pWdaParams)
3234 {
3235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 VOS_ASSERT(0);
3238 vos_mem_free(wdiFinishScanParams);
3239 return VOS_STATUS_E_NOMEM;
3240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 /* Copy init Scan params to WDI structure */
3242 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3243 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3244 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3246 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3247 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3248 finishScanParams->frameLength ;
3249 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3250 finishScanParams->currentOperChannel ;
3251 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3252 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3253 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3255 {
3256 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3257 finishScanParams->scanEntry.bssIdx[i] ;
3258 }
3259
3260
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 /* if Frame length, copy macMgmtHdr ro WDI structure */
3262 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3263 {
3264 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3265 &finishScanParams->macMgmtHdr,
3266 sizeof(WDI_MacMgmtHdr)) ;
3267 }
3268 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 /* Store Init Req pointer, as this will be used for response */
3270 /* store Params pass it to WDI */
3271 pWdaParams->pWdaContext = pWDA;
3272 pWdaParams->wdaMsgParam = finishScanParams;
3273 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 /* call DAL API to pass init scan request to DAL */
3275 status = WDI_FinishScanReq(wdiFinishScanParams,
3276 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003277
Jeff Johnson295189b2012-06-20 16:38:30 -07003278
3279 /*
3280 * WDI API returns failure..
3281 */
3282 if(IS_WDI_STATUS_FAILURE( status))
3283 {
3284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3285 "Failure in Finish Scan WDI API, free all the memory " );
3286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3287 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 finishScanParams->status = eSIR_FAILURE ;
3289 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 return CONVERT_WDI2VOS_STATUS(status) ;
3292}
Jeff Johnson295189b2012-06-20 16:38:30 -07003293/*---------------------------------------------------------------------
3294 * ASSOC API's
3295 *---------------------------------------------------------------------
3296 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003297/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303298 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 * Trigger Init SCAN callback
3300 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303301void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003302{
3303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3304 tWDA_CbContext *pWDA;
3305 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(NULL == pWdaParams)
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0) ;
3313 return ;
3314 }
3315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3316 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3318 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 /* reset macBSSID */
3320 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 /* reset macSTASelf */
3322 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003323 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 return ;
3326}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303327
3328/*
3329 * FUNCTION: WDA_JoinReqCallback
3330 * Free memory and send SWITCH CHANNEL RSP back to PE.
3331 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3332 */
3333void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3334{
3335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3336 tWDA_CbContext *pWDA;
3337 tSwitchChannelParams *joinReqParam;
3338
3339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3340 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3341
3342 if(NULL == pWdaParams)
3343 {
3344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3345 "%s: pWdaParams received NULL", __func__);
3346 VOS_ASSERT(0);
3347 return;
3348 }
3349
3350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3351 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3352 joinReqParam->status = wdiStatus;
3353
3354 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3355 {
3356 /* reset macBSSID */
3357 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3358 /* reset macSTASelf */
3359 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3360
3361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3362 vos_mem_free(pWdaParams);
3363 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3364 }
3365
3366 return;
3367}
3368
Jeff Johnson295189b2012-06-20 16:38:30 -07003369/*
3370 * FUNCTION: WDA_ProcessJoinReq
3371 * Trigger Join REQ in WDI
3372 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003373VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3374 tSwitchChannelParams* joinReqParam)
3375{
3376 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 WDI_JoinReqParamsType *wdiJoinReqParam =
3378 (WDI_JoinReqParamsType *)vos_mem_malloc(
3379 sizeof(WDI_JoinReqParamsType)) ;
3380 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 if(NULL == wdiJoinReqParam)
3384 {
3385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003388 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 return VOS_STATUS_E_NOMEM;
3390 }
3391 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3392 if(NULL == pWdaParams)
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 VOS_ASSERT(0);
3397 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003398 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 return VOS_STATUS_E_NOMEM;
3400 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003401
3402 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3403 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3404 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3405 {
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3407 "%s: received join request when BSSID or self-STA is NULL "
3408 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003409 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003410 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3411 VOS_ASSERT(0);
3412 vos_mem_free(wdiJoinReqParam);
3413 vos_mem_free(pWdaParams);
3414 joinReqParam->status = eSIR_FAILURE ;
3415 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3416 return VOS_STATUS_E_INVAL;
3417 }
3418
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 /* copy the BSSID for pWDA */
3420 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3421 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3423 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3425 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003426#ifdef WLAN_FEATURE_VOWIFI
3427 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3428 joinReqParam->maxTxPower ;
3429#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3431 joinReqParam->localPowerConstraint ;
3432#endif
3433 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3434 joinReqParam->secondaryChannelOffset ;
3435 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3436
Sachin Ahuja935eda782014-07-30 14:57:41 +05303437 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3438 wdiJoinReqParam->pUserData = pWdaParams;
3439
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 /* Store Init Req pointer, as this will be used for response */
3441 /* store Params pass it to WDI */
3442 pWdaParams->pWdaContext = pWDA;
3443 pWdaParams->wdaMsgParam = joinReqParam;
3444 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303446 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 if(IS_WDI_STATUS_FAILURE(status))
3448 {
3449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3450 "Failure in Join WDI API, free all the memory " );
3451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3452 vos_mem_free(pWdaParams) ;
3453 joinReqParam->status = eSIR_FAILURE ;
3454 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 return CONVERT_WDI2VOS_STATUS(status) ;
3457}
Jeff Johnson295189b2012-06-20 16:38:30 -07003458/*
3459 * FUNCTION: WDA_SwitchChannelReqCallback
3460 * send Switch channel RSP back to PE
3461 */
3462void WDA_SwitchChannelReqCallback(
3463 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3464{
3465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3466 tWDA_CbContext *pWDA;
3467 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003469 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 if(NULL == pWdaParams)
3471 {
3472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003473 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 VOS_ASSERT(0) ;
3475 return ;
3476 }
3477 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3478 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3479
3480#ifdef WLAN_FEATURE_VOWIFI
3481 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3482#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3484 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003486 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 return ;
3489}
Jeff Johnson295189b2012-06-20 16:38:30 -07003490/*
3491 * FUNCTION: WDA_ProcessChannelSwitchReq
3492 * Request to WDI to switch channel REQ params.
3493 */
3494VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3495 tSwitchChannelParams *pSwitchChanParams)
3496{
3497 WDI_Status status = WDI_STATUS_SUCCESS ;
3498 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3499 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3500 sizeof(WDI_SwitchChReqParamsType)) ;
3501 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003504 if(NULL == wdiSwitchChanParam)
3505 {
3506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 VOS_ASSERT(0);
3509 return VOS_STATUS_E_NOMEM;
3510 }
3511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3512 if(NULL == pWdaParams)
3513 {
3514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 VOS_ASSERT(0);
3517 vos_mem_free(wdiSwitchChanParam);
3518 return VOS_STATUS_E_NOMEM;
3519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3521#ifndef WLAN_FEATURE_VOWIFI
3522 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3523 pSwitchChanParams->localPowerConstraint;
3524#endif
3525 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3526 pSwitchChanParams->secondaryChannelOffset;
3527 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 /* Store req pointer, as this will be used for response */
3529 /* store Params pass it to WDI */
3530 pWdaParams->pWdaContext = pWDA;
3531 pWdaParams->wdaMsgParam = pSwitchChanParams;
3532 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533#ifdef WLAN_FEATURE_VOWIFI
3534 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3535 = pSwitchChanParams->maxTxPower;
3536 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3537 pSwitchChanParams ->selfStaMacAddr,
3538 sizeof(tSirMacAddr));
3539#endif
3540 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3541 pSwitchChanParams->bssId,
3542 sizeof(tSirMacAddr));
3543
3544 status = WDI_SwitchChReq(wdiSwitchChanParam,
3545 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 if(IS_WDI_STATUS_FAILURE(status))
3547 {
3548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3549 "Failure in process channel switch Req WDI API, free all the memory " );
3550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3551 vos_mem_free(pWdaParams) ;
3552 pSwitchChanParams->status = eSIR_FAILURE ;
3553 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 return CONVERT_WDI2VOS_STATUS(status) ;
3556}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003557
3558/*
3559 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3560 * send Switch channel RSP back to PE
3561 */
3562void WDA_SwitchChannelReqCallback_V1(
3563 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3564 void* pUserData)
3565{
3566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3567 tWDA_CbContext *pWDA;
3568 tSwitchChannelParams *pSwitchChanParams;
3569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3570 "<------ %s " ,__func__);
3571
3572 if (NULL == pWdaParams)
3573 {
3574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3575 "%s: pWdaParams received NULL", __func__);
3576 VOS_ASSERT(0);
3577 return ;
3578 }
3579 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3580 pSwitchChanParams =
3581 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3582 pSwitchChanParams->channelSwitchSrc =
3583 wdiSwitchChanRsp->channelSwitchSrc;
3584#ifdef WLAN_FEATURE_VOWIFI
3585 pSwitchChanParams->txMgmtPower =
3586 wdiSwitchChanRsp->ucTxMgmtPower;
3587#endif
3588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3589 vos_mem_free(pWdaParams);
3590 pSwitchChanParams->status =
3591 wdiSwitchChanRsp->wdiStatus ;
3592 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3593 (void *)pSwitchChanParams , 0);
3594 return;
3595}
3596
3597/*
3598 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3599 * Request to WDI to switch channel REQ params.
3600 */
3601VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3602 tSwitchChannelParams *pSwitchChanParams)
3603{
3604 WDI_Status status = WDI_STATUS_SUCCESS ;
3605 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3606 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3607 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3608 tWDA_ReqParams *pWdaParams ;
3609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3610 "------> %s " ,__func__);
3611 if (NULL == wdiSwitchChanParam)
3612 {
3613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3614 "%s: VOS MEM Alloc Failure", __func__);
3615 VOS_ASSERT(0);
3616 return VOS_STATUS_E_NOMEM;
3617 }
3618 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3619 if (NULL == pWdaParams)
3620 {
3621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3622 "%s: VOS MEM Alloc Failure", __func__);
3623 VOS_ASSERT(0);
3624 vos_mem_free(wdiSwitchChanParam);
3625 return VOS_STATUS_E_NOMEM;
3626 }
3627 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3628 pSwitchChanParams->channelSwitchSrc;
3629
3630 wdiSwitchChanParam->wdiChInfo.ucChannel =
3631 pSwitchChanParams->channelNumber;
3632#ifndef WLAN_FEATURE_VOWIFI
3633 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3634 pSwitchChanParams->localPowerConstraint;
3635#endif
3636 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3637 pSwitchChanParams->secondaryChannelOffset;
3638 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3639 /* Store req pointer, as this will be used for response */
3640 /* store Params pass it to WDI */
3641 pWdaParams->pWdaContext = pWDA;
3642 pWdaParams->wdaMsgParam = pSwitchChanParams;
3643 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3644#ifdef WLAN_FEATURE_VOWIFI
3645 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3646 pSwitchChanParams->maxTxPower;
3647 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3648 pSwitchChanParams ->selfStaMacAddr,
3649 sizeof(tSirMacAddr));
3650#endif
3651 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3652 pSwitchChanParams->bssId,
3653 sizeof(tSirMacAddr));
3654
3655 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3656 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3657 pWdaParams);
3658 if (IS_WDI_STATUS_FAILURE(status))
3659 {
3660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3661 "Failure in process channel switch Req WDI "
3662 "API, free all the memory " );
3663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3664 vos_mem_free(pWdaParams) ;
3665 pSwitchChanParams->status = eSIR_FAILURE ;
3666 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3667 (void *)pSwitchChanParams, 0) ;
3668 }
3669 return CONVERT_WDI2VOS_STATUS(status) ;
3670}
3671
Jeff Johnson295189b2012-06-20 16:38:30 -07003672/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303673 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 * config BSS Req Callback, called by WDI
3675 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303676void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003677 ,void* pUserData)
3678{
3679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3680 tWDA_CbContext *pWDA;
3681 tAddBssParams *configBssReqParam;
3682 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003684 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 if(NULL == pWdaParams)
3686 {
3687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003688 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 VOS_ASSERT(0) ;
3690 return ;
3691 }
3692 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3693 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3694 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003696 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3698 {
3699 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3700 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3702 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3703 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3704
3705 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3706 {
3707 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3708 {
3709 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3710 staConfigBssParam->staType = STA_ENTRY_BSSID;
3711 }
3712 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3713 (staConfigBssParam->staType == STA_ENTRY_SELF))
3714 {
3715 /* This is the 1st add BSS Req for the BTAMP STA */
3716 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3717 staConfigBssParam->staType = STA_ENTRY_BSSID;
3718 }
3719 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3720 (staConfigBssParam->staType == STA_ENTRY_PEER))
3721 {
3722 /* This is the 2nd ADD BSS Request that is sent
3723 * on the BTAMP STA side. The Sta type is
3724 * set to STA_ENTRY_PEER here.*/
3725 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3726 }
3727 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3728 (staConfigBssParam->staType == STA_ENTRY_SELF))
3729 {
3730 /* statype is already set by PE.
3731 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3732 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3733 staConfigBssParam->staType = STA_ENTRY_BSSID;
3734 }
3735 else
3736 {
3737 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3738 staConfigBssParam->staType = STA_ENTRY_PEER;
3739 }
3740 }
3741 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3742 {
3743 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3744 staConfigBssParam->staType = STA_ENTRY_SELF;
3745 }
3746 else
3747 {
3748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3749 "Invalid operation mode specified");
3750 VOS_ASSERT(0);
3751 }
3752
3753 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003755 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3758 sizeof(tSirMacAddr));
3759 staConfigBssParam->txChannelWidthSet =
3760 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3762 staConfigBssParam->htCapable)
3763 {
3764 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3765 wdiConfigBssRsp->ucBSSIdx;
3766 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3767 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303768 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3769 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3772 wdiConfigBssRsp->ucBSSIdx,
3773 wdiConfigBssRsp->ucSTAIdx))
3774 {
3775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003776 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 VOS_ASSERT(0) ;
3778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3780 {
3781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003782 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 VOS_ASSERT(0) ;
3784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003785#ifdef WLAN_FEATURE_VOWIFI
3786 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3787#endif
3788 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303789 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3790 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3792 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 return ;
3795}
Jeff Johnson295189b2012-06-20 16:38:30 -07003796/*
3797 * FUNCTION: WDA_UpdateEdcaParamsForAC
3798 * Update WDI EDCA params with PE edca params
3799 */
3800void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3801 WDI_EdcaParamRecord *wdiEdcaParam,
3802 tSirMacEdcaParamRecord *macEdcaParam)
3803{
3804 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3805 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3806 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3807 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3808 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3809 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3810}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303811void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3812 void* pUserData)
3813{
3814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3815 tWDA_CbContext *pWDA;
3816 tAddBssParams *addBssParams;
3817
3818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3819 "<------ %s, wdiStatus: %d",
3820 __func__, wdiStatus);
3821
3822 if (NULL == pWdaParams)
3823 {
3824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3825 "%s: Invalid pWdaParams pointer", __func__);
3826 VOS_ASSERT(0);
3827 return;
3828 }
3829
3830 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3831 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3832
3833 addBssParams->status = wdiStatus;
3834
3835 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3836 {
3837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3838 vos_mem_free(pWdaParams) ;
3839 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3840 }
3841
3842 return ;
3843}
3844
Jeff Johnson295189b2012-06-20 16:38:30 -07003845/*
3846 * FUNCTION: WDA_ProcessConfigBssReq
3847 * Configure BSS before starting Assoc with AP
3848 */
3849VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3850 tAddBssParams* configBssReqParam)
3851{
3852 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303853 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003856 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303857 if (NULL == configBssReqParam)
3858 {
3859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3860 "%s: configBssReqParam is NULL", __func__);
3861 return VOS_STATUS_E_INVAL;
3862 }
3863
3864 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3865 sizeof(WDI_ConfigBSSReqParamsType)) ;
3866
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 if(NULL == wdiConfigBssReqParam)
3868 {
3869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003870 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 VOS_ASSERT(0);
3872 return VOS_STATUS_E_NOMEM;
3873 }
3874 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3875 if(NULL == pWdaParams)
3876 {
3877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003878 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 VOS_ASSERT(0);
3880 vos_mem_free(wdiConfigBssReqParam);
3881 return VOS_STATUS_E_NOMEM;
3882 }
Kiran4a17ebe2013-01-31 10:43:43 -08003883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3884 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3887 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303888 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
3889 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 /* Store Init Req pointer, as this will be used for response */
3891 /* store Params pass it to WDI */
3892 pWdaParams->pWdaContext = pWDA;
3893 pWdaParams->wdaMsgParam = configBssReqParam;
3894 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303896 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 if(IS_WDI_STATUS_FAILURE(status))
3898 {
3899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3900 "Failure in Config BSS WDI API, free all the memory " );
3901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3902 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 return CONVERT_WDI2VOS_STATUS(status) ;
3907}
Jeff Johnson295189b2012-06-20 16:38:30 -07003908#ifdef ENABLE_HAL_COMBINED_MESSAGES
3909/*
3910 * FUNCTION: WDA_PostAssocReqCallback
3911 * Post ASSOC req callback, send RSP back to PE
3912 */
3913void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3914 void* pUserData)
3915{
3916 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3917 tPostAssocParams *postAssocReqParam =
3918 (tPostAssocParams *)pWDA->wdaMsgParam ;
3919 /*STA context within the BSS Params*/
3920 tAddStaParams *staPostAssocParam =
3921 &postAssocReqParam->addBssParams.staContext ;
3922 /*STA Params for self STA*/
3923 tAddStaParams *selfStaPostAssocParam =
3924 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003926 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003928 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3930 {
3931 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3932 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3933 sizeof(tSirMacAddr)) ;
3934 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3935 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3936 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3938 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303939 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3941 pWDA->wdaWdiApiMsgParam = NULL;
3942 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 return ;
3945}
Jeff Johnson295189b2012-06-20 16:38:30 -07003946/*
3947 * FUNCTION: WDA_ProcessPostAssocReq
3948 * Trigger POST ASSOC processing in WDI
3949 */
3950VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3951 tPostAssocParams *postAssocReqParam)
3952{
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 WDI_Status status = WDI_STATUS_SUCCESS ;
3954
3955 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3956 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3957 sizeof(WDI_PostAssocReqParamsType)) ;
3958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003959 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003960
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 if(NULL == wdiPostAssocReqParam)
3962 {
3963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 VOS_ASSERT(0);
3966 return VOS_STATUS_E_NOMEM;
3967 }
3968
3969 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3970 {
3971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003972 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 VOS_ASSERT(0);
3974 return VOS_STATUS_E_FAILURE;
3975 }
3976
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 /* update BSS params into WDI structure */
3978 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3979 &postAssocReqParam->addBssParams) ;
3980 /* update STA params into WDI structure */
3981 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3982 &postAssocReqParam->addStaParams) ;
3983
3984 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3985 postAssocReqParam->addBssParams.highPerformance;
3986 WDA_UpdateEdcaParamsForAC(pWDA,
3987 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3988 &postAssocReqParam->addBssParams.acbe);
3989 WDA_UpdateEdcaParamsForAC(pWDA,
3990 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3991 &postAssocReqParam->addBssParams.acbk);
3992 WDA_UpdateEdcaParamsForAC(pWDA,
3993 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3994 &postAssocReqParam->addBssParams.acvi);
3995 WDA_UpdateEdcaParamsForAC(pWDA,
3996 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3997 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 /* Store Init Req pointer, as this will be used for response */
3999 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 /* store Params pass it to WDI */
4001 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4003 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 if(IS_WDI_STATUS_FAILURE(status))
4005 {
4006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4007 "Failure in Post Assoc WDI API, free all the memory " );
4008 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4009 pWDA->wdaWdiApiMsgParam = NULL;
4010 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004012 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 return CONVERT_WDI2VOS_STATUS(status) ;
4015}
4016#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004017/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304018 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 * ADD STA req callback, send RSP back to PE
4020 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304021void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 void* pUserData)
4023{
4024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4025 tWDA_CbContext *pWDA;
4026 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004028 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 if(NULL == pWdaParams)
4030 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 VOS_ASSERT(0) ;
4033 return ;
4034 }
4035 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4036 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004038 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4040 {
4041 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4042 /*TODO: UMAC structure doesn't have these fields*/
4043 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4044 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4045 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4046 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4047 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4048 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004049#ifdef FEATURE_WLAN_TDLS
4050 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4051 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4052#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004054#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 {
4056 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4057 wdiConfigStaRsp->ucBssIdx;
4058 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4059 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304060 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4061 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 }
4063 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4064 {
4065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004066 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 VOS_ASSERT(0) ;
4068 return ;
4069 }
4070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4072 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 return ;
4075}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304076void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4077 void* pUserData)
4078{
4079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4080 tWDA_CbContext *pWDA;
4081 tAddStaParams *addStaParams;
4082
4083 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4084 "<------ %s, wdiStatus: %d",
4085 __func__, wdiStatus);
4086
4087 if (NULL == pWdaParams)
4088 {
4089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4090 "%s: Invalid pWdaParams pointer", __func__);
4091 VOS_ASSERT(0);
4092 return;
4093 }
4094
4095 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4096 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4097
4098 addStaParams->status = wdiStatus;
4099
4100 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4101 {
4102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4103 vos_mem_free(pWdaParams) ;
4104 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4105 }
4106
4107 return ;
4108}
4109
Jeff Johnson295189b2012-06-20 16:38:30 -07004110/*
4111 * FUNCTION: WDA_ConfigStaReq
4112 * Trigger Config STA processing in WDI
4113 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304114VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 tAddStaParams *addStaReqParam)
4116{
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4119 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4120 sizeof(WDI_ConfigSTAReqParamsType)) ;
4121 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 if(NULL == wdiConfigStaReqParam)
4125 {
4126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 VOS_ASSERT(0);
4129 return VOS_STATUS_E_NOMEM;
4130 }
4131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4132 if(NULL == pWdaParams)
4133 {
4134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 VOS_ASSERT(0);
4137 vos_mem_free(wdiConfigStaReqParam);
4138 return VOS_STATUS_E_NOMEM;
4139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 /* update STA params into WDI structure */
4142 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4143 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304144 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4145 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 /* Store Init Req pointer, as this will be used for response */
4147 /* store Params pass it to WDI */
4148 pWdaParams->pWdaContext = pWDA;
4149 pWdaParams->wdaMsgParam = addStaReqParam;
4150 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304151
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304153 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 if(IS_WDI_STATUS_FAILURE(status))
4155 {
4156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4157 "Failure in Config STA WDI API, free all the memory " );
4158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4159 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 return CONVERT_WDI2VOS_STATUS(status) ;
4164}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304165
Jeff Johnson295189b2012-06-20 16:38:30 -07004166/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304167 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304169 */
4170void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 void* pUserData)
4172{
4173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4174 tWDA_CbContext *pWDA;
4175 tDeleteBssParams *delBssReqParam;
4176 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004178 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 if(NULL == pWdaParams)
4180 {
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004182 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 VOS_ASSERT(0) ;
4184 return ;
4185 }
4186 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4187 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004188 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4190 {
4191 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4192 sizeof(tSirMacAddr)) ;
4193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4195 {
4196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004197 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 VOS_ASSERT(0) ;
4199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4201 {
4202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004203 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 VOS_ASSERT(0) ;
4205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4207 {
4208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004209 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 VOS_ASSERT(0) ;
4211 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304212
4213 WLANTL_StartForwarding(staIdx,0,0);
4214
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4216 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 /* reset the the system role*/
4218 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4219
4220 /* Reset the BA related information */
4221 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4222 {
4223 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4224 {
4225 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4226 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304227 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 /* Reset framesTxed counters here */
4229 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4230 {
4231 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4232 }
4233 }
4234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 return ;
4237}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304238void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4239 void* pUserData)
4240{
4241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4242 tWDA_CbContext *pWDA;
4243 tDeleteBssParams *delbssParams;
4244
4245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4246 "<------ %s, wdiStatus: %d",
4247 __func__, wdiStatus);
4248
4249 if (NULL == pWdaParams)
4250 {
4251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4252 "%s: Invalid pWdaParams pointer", __func__);
4253 VOS_ASSERT(0);
4254 return;
4255 }
4256
4257 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4258 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4259
4260 delbssParams->status = wdiStatus ;
4261
4262 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4263 {
4264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4265 vos_mem_free(pWdaParams) ;
4266 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4267 }
4268
4269 return ;
4270}
Jeff Johnson295189b2012-06-20 16:38:30 -07004271
Jeff Johnson295189b2012-06-20 16:38:30 -07004272/*
4273 * FUNCTION: WDA_ProcessDelBssReq
4274 * Init DEL BSS req with WDI
4275 */
4276VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4277 tDeleteBssParams *delBssParam)
4278{
4279 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4281 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4282 sizeof(WDI_DelBSSReqParamsType)) ;
4283 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004285 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 if(NULL == wdiDelBssReqParam)
4287 {
4288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_ASSERT(0);
4291 return VOS_STATUS_E_NOMEM;
4292 }
4293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4294 if(NULL == pWdaParams)
4295 {
4296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 VOS_ASSERT(0);
4299 vos_mem_free(wdiDelBssReqParam);
4300 return VOS_STATUS_E_NOMEM;
4301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304303 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4304 wdiDelBssReqParam->pUserData = pWdaParams;
4305
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 /* Store Init Req pointer, as this will be used for response */
4307 /* store Params pass it to WDI */
4308 pWdaParams->pWdaContext = pWDA;
4309 pWdaParams->wdaMsgParam = delBssParam;
4310 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304311
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304313 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 if(IS_WDI_STATUS_FAILURE(status))
4315 {
4316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4317 "Failure in Del BSS WDI API, free all the memory " );
4318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4319 vos_mem_free(pWdaParams) ;
4320 delBssParam->status = eSIR_FAILURE ;
4321 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 return CONVERT_WDI2VOS_STATUS(status) ;
4324}
Jeff Johnson295189b2012-06-20 16:38:30 -07004325/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304326 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304328 */
4329void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 void* pUserData)
4331{
4332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4333 tWDA_CbContext *pWDA;
4334 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004336 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 if(NULL == pWdaParams)
4338 {
4339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304341 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 return ;
4343 }
4344 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4345 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004346 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4348 {
4349 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4350 {
4351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004352 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 VOS_ASSERT(0) ;
4354 }
4355 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304356 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 }
4358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4359 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 /*Reset the BA information corresponding to this STAIdx */
4361 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4362 WDA_INVALID_STA_INDEX;
4363 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304364 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 return ;
4367}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304368void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4369 void* pUserData)
4370{
4371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4372 tWDA_CbContext *pWDA;
4373 tDeleteStaParams *delStaParams;
4374
4375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4376 "<------ %s, wdiStatus: %d",
4377 __func__, wdiStatus);
4378
4379 if (NULL == pWdaParams)
4380 {
4381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4382 "%s: Invalid pWdaParams pointer", __func__);
4383 VOS_ASSERT(0);
4384 return;
4385 }
4386
4387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4388 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4389
4390 delStaParams->status = wdiStatus ;
4391
4392 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4393 {
4394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4395 vos_mem_free(pWdaParams) ;
4396 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4397 }
4398
4399 return ;
4400}
4401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402/*
4403 * FUNCTION: WDA_ProcessDelStaReq
4404 * Init DEL STA req with WDI
4405 */
4406VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4407 tDeleteStaParams *delStaParam)
4408{
4409 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4411 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4412 sizeof(WDI_DelSTAReqParamsType)) ;
4413 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 if(NULL == wdiDelStaReqParam)
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 VOS_ASSERT(0);
4421 return VOS_STATUS_E_NOMEM;
4422 }
4423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4424 if(NULL == pWdaParams)
4425 {
4426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 VOS_ASSERT(0);
4429 vos_mem_free(wdiDelStaReqParam);
4430 return VOS_STATUS_E_NOMEM;
4431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304433 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4434 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 /* Store Init Req pointer, as this will be used for response */
4436 /* store Params pass it to WDI */
4437 pWdaParams->pWdaContext = pWDA;
4438 pWdaParams->wdaMsgParam = delStaParam;
4439 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304440
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304442 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 if(IS_WDI_STATUS_FAILURE(status))
4444 {
4445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4446 "Failure in Del STA WDI API, free all the memory status = %d",
4447 status );
4448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4449 vos_mem_free(pWdaParams) ;
4450 delStaParam->status = eSIR_FAILURE ;
4451 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 return CONVERT_WDI2VOS_STATUS(status) ;
4454}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304455void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004456{
4457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4458 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304459 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004461 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 if(NULL == pWdaParams)
4463 {
4464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004465 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 VOS_ASSERT(0) ;
4467 return ;
4468 }
4469 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4470 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4472 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4474 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4475 pwdiAddSTASelfRsp->macSelfSta,
4476 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304477 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4478 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4479 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4480 {
4481 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4482 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 return ;
4486}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304487void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4488 void* pUserData)
4489{
4490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4491 tWDA_CbContext *pWDA;
4492 tAddStaSelfParams *addStaSelfParams;
4493
4494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4495 "<------ %s, wdiStatus: %d",
4496 __func__, wdiStatus);
4497
4498 if (NULL == pWdaParams)
4499 {
4500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4501 "%s: Invalid pWdaParams pointer", __func__);
4502 VOS_ASSERT(0);
4503 return;
4504 }
4505
4506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4507 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4508
4509 addStaSelfParams->status = wdiStatus ;
4510
4511 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4512 {
4513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4514 vos_mem_free(pWdaParams) ;
4515 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4516 = WDA_ADDSTA_REQ_WDI_FAIL;
4517 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4518 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4519 }
4520
4521 return ;
4522}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304523
Jeff Johnson295189b2012-06-20 16:38:30 -07004524/*
4525 * FUNCTION: WDA_ProcessAddStaSelfReq
4526 *
4527 */
4528VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4529{
4530 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004531 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4533 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4534 sizeof(WDI_AddSTASelfReqParamsType)) ;
4535 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004537 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304538 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 if( NULL == wdiAddStaSelfReq )
4540 {
4541 VOS_ASSERT( 0 );
4542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004543 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304544 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4545 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 return( VOS_STATUS_E_NOMEM );
4547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 if( NULL == pWdaParams )
4550 {
4551 VOS_ASSERT( 0 );
4552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004553 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304554 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4555 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 vos_mem_free(wdiAddStaSelfReq) ;
4557 return( VOS_STATUS_E_NOMEM );
4558 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304559 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4560 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004562 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 /* Store Init Req pointer, as this will be used for response */
4564 /* store Params pass it to WDI */
4565 pWdaParams->pWdaContext = pWDA;
4566 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304567 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4568
4569 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4570 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004571
Jeff Johnson43971f52012-07-17 12:26:56 -07004572 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 {
4574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4575 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004576 wstatus );
4577 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4579 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304580 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4581 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 pAddStaSelfReq->status = eSIR_FAILURE ;
4583 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4584 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004585 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586}
Jeff Johnson295189b2012-06-20 16:38:30 -07004587/*
4588 * FUNCTION: WDA_DelSTASelfRespCallback
4589 *
4590 */
4591void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4592 wdiDelStaSelfRspParams , void* pUserData)
4593{
4594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4595 tWDA_CbContext *pWDA;
4596 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004598 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 if (NULL == pWdaParams)
4600 {
4601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004602 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 VOS_ASSERT(0);
4604 return;
4605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4607 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004609 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004610
4611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4612 vos_mem_free(pWdaParams) ;
4613
4614 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 return ;
4616}
Jeff Johnson295189b2012-06-20 16:38:30 -07004617/*
4618 * FUNCTION: WDA_DelSTASelfReqCallback
4619 *
4620 */
4621void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4622 void* pUserData)
4623{
4624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4625 tWDA_CbContext *pWDA;
4626 tDelStaSelfParams *delStaSelfParams;
4627
4628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304629 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004630 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004631
4632 if (NULL == pWdaParams)
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 VOS_ASSERT(0);
4637 return;
4638 }
4639
4640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4641 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4642
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004643 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004644
4645 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4646 {
4647 VOS_ASSERT(0);
4648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4649 vos_mem_free(pWdaParams) ;
4650 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4651 }
4652
4653 return ;
4654}
4655
4656/*
4657 * FUNCTION: WDA_DelSTASelfReq
4658 * Trigger Config STA processing in WDI
4659 */
4660VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4661 tDelStaSelfParams* pDelStaSelfReqParam)
4662{
4663 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004664 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 tWDA_ReqParams *pWdaParams = NULL;
4666 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4667 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4668 sizeof(WDI_DelSTASelfReqParamsType)) ;
4669
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 if( NULL == wdiDelStaSelfReq )
4673 {
4674 VOS_ASSERT( 0 );
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004676 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 return( VOS_STATUS_E_NOMEM );
4678 }
4679
4680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4681 if( NULL == pWdaParams )
4682 {
4683 VOS_ASSERT( 0 );
4684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004685 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 vos_mem_free(wdiDelStaSelfReq) ;
4687 return( VOS_STATUS_E_NOMEM );
4688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 pWdaParams->pWdaContext = pWDA;
4690 /* Store param pointer as passed in by caller */
4691 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4692 /* store Params pass it to WDI */
4693 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004694 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4695 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4696
4697 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4698 wdiDelStaSelfReq->pUserData = pWdaParams;
4699
Jeff Johnson43971f52012-07-17 12:26:56 -07004700 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4702
Jeff Johnson43971f52012-07-17 12:26:56 -07004703 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 {
4705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4706 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4707 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004708 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4710 vos_mem_free(pWdaParams) ;
4711 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4712 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4713 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004714 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715}
4716
Jeff Johnson295189b2012-06-20 16:38:30 -07004717/*
4718 * FUNCTION: WDA_SendMsg
4719 * Send Message back to PE
4720 */
4721void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4722 void *pBodyptr, tANI_U32 bodyVal)
4723{
4724 tSirMsgQ msg = {0} ;
4725 tANI_U32 status = VOS_STATUS_SUCCESS ;
4726 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 msg.type = msgType;
4728 msg.bodyval = bodyVal;
4729 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 if (VOS_STATUS_SUCCESS != status)
4732 {
4733 if(NULL != pBodyptr)
4734 {
4735 vos_mem_free(pBodyptr);
4736 }
4737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 VOS_ASSERT(0) ;
4740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 return ;
4742}
Jeff Johnson295189b2012-06-20 16:38:30 -07004743/*
4744 * FUNCTION: WDA_UpdateBSSParams
4745 * Translated WDA/PE BSS info into WDI BSS info..
4746 */
4747void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4748 WDI_ConfigBSSReqInfoType *wdiBssParams,
4749 tAddBssParams *wdaBssParams)
4750{
4751 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304752 v_U8_t i = 0;
4753
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 /* copy bssReq Params to WDI structure */
4755 vos_mem_copy(wdiBssParams->macBSSID,
4756 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4757 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4758 sizeof(tSirMacAddr)) ;
4759 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4760 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4761 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 wdiBssParams->ucShortSlotTimeSupported =
4763 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4765 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4766 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4767 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4768 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4769
4770 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4771 wdiBssParams->ucTXOPProtectionFullSupport =
4772 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004773 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4774 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4777 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4778 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4779 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4780
Chet Lanctot186b5732013-03-18 10:26:30 -07004781 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4782
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 /* copy SSID into WDI structure */
4784 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4785 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4786 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4788 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004790#ifdef WLAN_FEATURE_VOWIFI
4791 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4792#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795#ifdef WLAN_FEATURE_VOWIFI_11R
4796 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 if(wdiBssParams->bExtSetStaKeyParamValid)
4798 {
4799 /* copy set STA key params to WDI structure */
4800 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4801 wdaBssParams->extSetStaKeyParam.staIdx;
4802 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4803 wdaBssParams->extSetStaKeyParam.encType;
4804 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4805 wdaBssParams->extSetStaKeyParam.wepType;
4806 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4807 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4809 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004810 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4812 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4813 {
4814 WDA_GetWepKeysFromCfg( pWDA,
4815 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4816 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4817 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4818 }
4819 else
4820 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4822 keyIndex++)
4823 {
4824 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4825 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4826 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4827 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4828 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4829 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304830
4831 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4832 {
4833 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4834 {
4835 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4836 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4837 }
4838
4839 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4840 {
4841 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4842 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4843 }
4844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4845 FL("%s: Negated Keys"), __func__);
4846 }
4847 else
4848 {
4849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4850 FL("%s: No change in Keys "), __func__);
4851 vos_mem_copy(
4852 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4853 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4854 WLAN_MAX_KEY_RSC_LEN);
4855 vos_mem_copy(
4856 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4857 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4858 SIR_MAC_MAX_KEY_LENGTH);
4859 }
4860
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4862 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4863 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4864 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304866 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 }
4869 }
4870 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4871 }
4872 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4873 {
4874 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4875 sizeof(wdaBssParams->extSetStaKeyParam) );
4876 }
4877#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004878#ifdef WLAN_FEATURE_11AC
4879 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4880 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4881#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004882
4883 return ;
4884}
Jeff Johnson295189b2012-06-20 16:38:30 -07004885/*
4886 * FUNCTION: WDA_UpdateSTAParams
4887 * Translated WDA/PE BSS info into WDI BSS info..
4888 */
4889void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4890 WDI_ConfigStaReqInfoType *wdiStaParams,
4891 tAddStaParams *wdaStaParams)
4892{
4893 tANI_U8 i = 0;
4894 /* Update STA params */
4895 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4896 sizeof(tSirMacAddr)) ;
4897 wdiStaParams->usAssocId = wdaStaParams->assocId;
4898 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004899 wdiStaParams->staIdx = wdaStaParams->staIdx;
4900
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 wdiStaParams->ucShortPreambleSupported =
4902 wdaStaParams->shortPreambleSupported;
4903 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4904 sizeof(tSirMacAddr)) ;
4905 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4906
4907 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4908
4909 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4910 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4911 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4912 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4913 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4914 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4915 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4916
4917 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4918 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 wdiStaParams->wdiSupportedRates.opRateMode =
4920 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4922 {
4923 wdiStaParams->wdiSupportedRates.llbRates[i] =
4924 wdaStaParams->supportedRates.llbRates[i];
4925 }
4926 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4927 {
4928 wdiStaParams->wdiSupportedRates.llaRates[i] =
4929 wdaStaParams->supportedRates.llaRates[i];
4930 }
4931 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4932 {
4933 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4934 wdaStaParams->supportedRates.aniLegacyRates[i];
4935 }
4936 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4937 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004938#ifdef WLAN_FEATURE_11AC
4939 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4940 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4941 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4942 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4943#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4945 {
4946 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4947 wdaStaParams->supportedRates.supportedMCSSet[i];
4948 }
4949 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4950 wdaStaParams->supportedRates.rxHighestDataRate;
4951
4952 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4953
4954 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4955
4956 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4957 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4958 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4959
4960 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4961 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4962 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4963 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004965#ifdef WLAN_FEATURE_11AC
4966 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4967 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004968 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304969 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4970 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4971 * must be set by default */
4972 if ( wdiStaParams->vhtTxMUBformeeCapable )
4973 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004974#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004975 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4976 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 return ;
4978}
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
4980 * -------------------------------------------------------------------------
4981 * CFG update to WDI
4982 * -------------------------------------------------------------------------
4983 */
4984
4985 /*
4986 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4987 * Convert the WNI CFG ID to HAL CFG ID
4988 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004989static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004990{
4991 switch(wniCfgId)
4992 {
4993 case WNI_CFG_STA_ID:
4994 return QWLAN_HAL_CFG_STA_ID;
4995 case WNI_CFG_CURRENT_TX_ANTENNA:
4996 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4997 case WNI_CFG_CURRENT_RX_ANTENNA:
4998 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4999 case WNI_CFG_LOW_GAIN_OVERRIDE:
5000 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5001 case WNI_CFG_POWER_STATE_PER_CHAIN:
5002 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5003 case WNI_CFG_CAL_PERIOD:
5004 return QWLAN_HAL_CFG_CAL_PERIOD;
5005 case WNI_CFG_CAL_CONTROL:
5006 return QWLAN_HAL_CFG_CAL_CONTROL;
5007 case WNI_CFG_PROXIMITY:
5008 return QWLAN_HAL_CFG_PROXIMITY;
5009 case WNI_CFG_NETWORK_DENSITY:
5010 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5011 case WNI_CFG_MAX_MEDIUM_TIME:
5012 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5013 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5014 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5015 case WNI_CFG_RTS_THRESHOLD:
5016 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5017 case WNI_CFG_SHORT_RETRY_LIMIT:
5018 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5019 case WNI_CFG_LONG_RETRY_LIMIT:
5020 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5021 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5022 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5023 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5024 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5025 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5026 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5027 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5028 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5029 case WNI_CFG_FIXED_RATE:
5030 return QWLAN_HAL_CFG_FIXED_RATE;
5031 case WNI_CFG_RETRYRATE_POLICY:
5032 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5033 case WNI_CFG_RETRYRATE_SECONDARY:
5034 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5035 case WNI_CFG_RETRYRATE_TERTIARY:
5036 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5037 case WNI_CFG_FORCE_POLICY_PROTECTION:
5038 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5039 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5040 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5041 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5042 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5043 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5044 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5045 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5046 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5047 case WNI_CFG_MAX_BA_SESSIONS:
5048 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5049 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5050 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5051 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5052 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5053 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5054 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5055 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5056 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5057 case WNI_CFG_STATS_PERIOD:
5058 return QWLAN_HAL_CFG_STATS_PERIOD;
5059 case WNI_CFG_CFP_MAX_DURATION:
5060 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5061#if 0 /*This is not part of CFG*/
5062 case WNI_CFG_FRAME_TRANS_ENABLED:
5063 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5064#endif
5065 case WNI_CFG_DTIM_PERIOD:
5066 return QWLAN_HAL_CFG_DTIM_PERIOD;
5067 case WNI_CFG_EDCA_WME_ACBK:
5068 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5069 case WNI_CFG_EDCA_WME_ACBE:
5070 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5071 case WNI_CFG_EDCA_WME_ACVI:
5072 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5073 case WNI_CFG_EDCA_WME_ACVO:
5074 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5075#if 0
5076 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5077 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5078 case WNI_CFG_TELE_BCN_TRANS_LI:
5079 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5080 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5081 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5082 case WNI_CFG_TELE_BCN_MAX_LI:
5083 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5084 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5085 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5086#endif
5087 case WNI_CFG_ENABLE_CLOSE_LOOP:
5088 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005089 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5090 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305091 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5092 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 default:
5094 {
5095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005096 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 wniCfgId);
5098 return VOS_STATUS_E_INVAL;
5099 }
5100 }
5101}
Jeff Johnson295189b2012-06-20 16:38:30 -07005102/*
5103 * FUNCTION: WDA_UpdateCfgCallback
5104 *
5105 */
5106void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5107{
5108 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5109 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5110 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005112 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 /*
5114 * currently there is no response message is expected between PE and
5115 * WDA, Failure return from WDI is a ASSERT condition
5116 */
5117 if(WDI_STATUS_SUCCESS != wdiStatus)
5118 {
5119 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005120 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5122 }
5123
5124 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5125 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5126 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 return ;
5128}
Jeff Johnson295189b2012-06-20 16:38:30 -07005129/*
5130 * FUNCTION: WDA_UpdateCfg
5131 *
5132 */
5133VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5134{
5135
5136 WDI_Status status = WDI_STATUS_SUCCESS ;
5137 tANI_U32 val =0;
5138 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5139 tHalCfg *configData;
5140 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5141 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 if (NULL == pMac )
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005147 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 return VOS_STATUS_E_FAILURE;
5149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(WDA_START_STATE != pWDA->wdaState)
5151 {
5152 return VOS_STATUS_E_FAILURE;
5153 }
5154
5155 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0);
5160 return VOS_STATUS_E_FAILURE;
5161 }
5162
5163 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5164 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 if(NULL == wdiCfgReqParam)
5166 {
5167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 VOS_ASSERT(0);
5170 return VOS_STATUS_E_NOMEM;
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5173 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(NULL == wdiCfgReqParam->pConfigBuffer)
5175 {
5176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 vos_mem_free(wdiCfgReqParam);
5179 VOS_ASSERT(0);
5180 return VOS_STATUS_E_NOMEM;
5181 }
5182
5183 /*convert the WNI CFG Id to HAL CFG Id*/
5184 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5185 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5186
5187 /*TODO: revisit this for handling string parameters */
5188 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5189 &val) != eSIR_SUCCESS)
5190 {
5191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005192 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5194 vos_mem_free(wdiCfgReqParam);
5195 return eSIR_FAILURE;
5196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5198 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5199 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5200 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5201 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5202
5203 /* store Params pass it to WDI */
5204 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005205#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5206 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5207 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 if(IS_WDI_STATUS_FAILURE(status))
5209 {
5210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5211 "Failure in Update CFG WDI API, free all the memory " );
5212 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5213 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5214 pWDA->wdaWdiCfgApiMsgParam = NULL;
5215 /* Failure is not expected */
5216 VOS_ASSERT(0) ;
5217 }
5218#else
5219 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5220 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5221 pWDA->wdaWdiCfgApiMsgParam = NULL;
5222#endif
5223 return CONVERT_WDI2VOS_STATUS(status) ;
5224}
5225
Jeff Johnson295189b2012-06-20 16:38:30 -07005226VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5227 v_U8_t *pDefaultKeyId,
5228 v_U8_t *pNumKeys,
5229 WDI_KeysType *pWdiKeys )
5230{
5231 v_U32_t i, j, defKeyId = 0;
5232 v_U32_t val = SIR_MAC_KEY_LENGTH;
5233 VOS_STATUS status = WDI_STATUS_SUCCESS;
5234 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 if (NULL == pMac )
5236 {
5237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005238 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 return VOS_STATUS_E_FAILURE;
5240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5242 &defKeyId ))
5243 {
5244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5245 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5246 }
5247
5248 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 /* Need to extract ALL of the configured WEP Keys */
5250 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5251 {
5252 val = SIR_MAC_KEY_LENGTH;
5253 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5254 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5255 pWdiKeys[j].key,
5256 &val ))
5257 {
5258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005259 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 }
5261 else
5262 {
5263 pWdiKeys[j].keyId = (tANI_U8) i;
5264 /*
5265 * Actually, a DC (Don't Care) because
5266 * this is determined (and set) by PE/MLME
5267 */
5268 pWdiKeys[j].unicast = 0;
5269 /*
5270 * Another DC (Don't Care)
5271 */
5272 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5273 /* Another DC (Don't Care). Unused for WEP */
5274 pWdiKeys[j].paeRole = 0;
5275 /* Determined from wlan_cfgGetStr() above.*/
5276 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 j++;
5278 *pNumKeys = (tANI_U8) j;
5279 }
5280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 return status;
5282}
Jeff Johnson295189b2012-06-20 16:38:30 -07005283/*
5284 * FUNCTION: WDA_SetBssKeyReqCallback
5285 * send SET BSS key RSP back to PE
5286 */
5287void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5288{
5289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5290 tWDA_CbContext *pWDA;
5291 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005293 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 if(NULL == pWdaParams)
5295 {
5296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005297 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 VOS_ASSERT(0) ;
5299 return ;
5300 }
5301 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5302 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305303 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5304 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5306 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005307 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 return ;
5310}
Jeff Johnson295189b2012-06-20 16:38:30 -07005311/*
5312 * FUNCTION: WDA_ProcessSetBssKeyReq
5313 * Request to WDI for programming the BSS key( key for
5314 * broadcast/multicast frames Encryption)
5315 */
5316VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5317 tSetBssKeyParams *setBssKeyParams )
5318{
5319 WDI_Status status = WDI_STATUS_SUCCESS ;
5320 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5321 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5322 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5323 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005326 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 if(NULL == wdiSetBssKeyParam)
5328 {
5329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 VOS_ASSERT(0);
5332 return VOS_STATUS_E_NOMEM;
5333 }
5334 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5335 if(NULL == pWdaParams)
5336 {
5337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005338 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005339 VOS_ASSERT(0);
5340 vos_mem_free(wdiSetBssKeyParam);
5341 return VOS_STATUS_E_NOMEM;
5342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 /* copy set BSS params to WDI structure */
5345 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5346 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5347 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 if(setBssKeyParams->encType != eSIR_ED_NONE)
5349 {
5350 if( setBssKeyParams->numKeys == 0 &&
5351 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5352 setBssKeyParams->encType == eSIR_ED_WEP104))
5353 {
5354 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5356 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5357 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5358 }
5359 else
5360 {
5361 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5362 {
5363 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5364 setBssKeyParams->key[keyIndex].keyId;
5365 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5366 setBssKeyParams->key[keyIndex].unicast;
5367 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5368 setBssKeyParams->key[keyIndex].keyDirection;
5369 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5370 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5371 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5372 setBssKeyParams->key[keyIndex].paeRole;
5373 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5374 setBssKeyParams->key[keyIndex].keyLength;
5375 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5376 setBssKeyParams->key[keyIndex].key,
5377 SIR_MAC_MAX_KEY_LENGTH);
5378 }
5379 }
5380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5382 setBssKeyParams->singleTidRc;
5383 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 /* Store set key pointer, as this will be used for response */
5385 /* store Params pass it to WDI */
5386 pWdaParams->pWdaContext = pWDA;
5387 pWdaParams->wdaMsgParam = setBssKeyParams;
5388 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5390 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5391
5392 if(IS_WDI_STATUS_FAILURE(status))
5393 {
5394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5395 "Failure in Set BSS Key Req WDI API, free all the memory " );
5396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5397 vos_mem_free(pWdaParams) ;
5398 setBssKeyParams->status = eSIR_FAILURE ;
5399 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 return CONVERT_WDI2VOS_STATUS(status) ;
5402}
Jeff Johnson295189b2012-06-20 16:38:30 -07005403/*
5404 * FUNCTION: WDA_RemoveBssKeyReqCallback
5405 * send SET BSS key RSP back to PE
5406 */
5407void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5408{
5409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5410 tWDA_CbContext *pWDA;
5411 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 if(NULL == pWdaParams)
5415 {
5416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005417 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 VOS_ASSERT(0) ;
5419 return ;
5420 }
5421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5422 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5424 vos_mem_free(pWdaParams) ;
5425
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005426 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 return ;
5429}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305430
5431/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305432 * FUNCTION: WDA_GetFrameLogRspCallback
5433 * recieves get frame log response from FW
5434 */
5435void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5436 void* pUserData)
5437{
5438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5439 tWDA_CbContext *pWDA = NULL;
5440 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5441
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5443 "<------ Entering: %s " ,__func__);
5444 if(NULL == pWdaParams)
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "%s: pWdaParams received NULL", __func__);
5448 VOS_ASSERT(0) ;
5449 return ;
5450 }
5451
5452 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5453 if (NULL == pWDA)
5454 {
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5456 "%s:pWDA is NULL", __func__);
5457 VOS_ASSERT(0);
5458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5459 vos_mem_free(pWdaParams);
5460 return ;
5461 }
5462
5463 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5464 if(NULL == pGetFrameLogReqParams)
5465 {
5466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5467 "%s: pGetFrameLogReqParams received NULL", __func__);
5468 VOS_ASSERT(0);
5469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5470 vos_mem_free(pWdaParams);
5471 return;
5472 }
5473
Siddharth Bhal64246172015-02-27 01:04:37 +05305474 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305476 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5477 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305478 }
5479
5480 /* free WDI command buffer only */
5481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5482 vos_mem_free(pWdaParams->wdaMsgParam);
5483 vos_mem_free(pWdaParams);
5484
5485 return ;
5486
5487}
5488/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305489 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305490 * recieves Mgmt Logging init response from FW
5491 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305492void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305493 void* pUserData)
5494{
5495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305496 tSirFWLoggingInitParam *pFWLoggingInitParams;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305497
5498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5499 "<------ %s " ,__func__);
5500
5501 if(NULL == pWdaParams)
5502 {
5503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5504 "%s: pWdaParams received NULL", __func__);
5505 VOS_ASSERT(0);
5506 return ;
5507 }
5508
5509 if(NULL == pWdaParams->wdaMsgParam)
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5512 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5513 VOS_ASSERT(0);
5514 vos_mem_free(pWdaParams);
5515 return ;
5516 }
5517
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305518 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305519
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305520 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305521 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305522 pFWLoggingInitParams->fwlogInitCallback(
5523 pFWLoggingInitParams->fwlogInitCbContext,
5524 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305525 }
5526 else
5527 {
5528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305529 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305530 }
5531
5532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5533 vos_mem_free(pWdaParams->wdaMsgParam);
5534 vos_mem_free(pWdaParams);
5535
5536 return;
5537}
5538
5539/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305540 * FUNCTION: WDA_SpoofMacAddrRspCallback
5541 * recieves spoof mac addr response from FW
5542 */
5543void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5544{
5545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5546 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305547
Siddharth Bhal171788a2014-09-29 21:02:40 +05305548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5549 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305550
Siddharth Bhal171788a2014-09-29 21:02:40 +05305551 if(NULL == pWdaParams)
5552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5554 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305555 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305556 return ;
5557 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305558 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305559
Siddharth Bhal029d6732014-10-09 21:31:23 +05305560 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305562 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305563 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305564 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5565 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305566
Siddharth Bhal171788a2014-09-29 21:02:40 +05305567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305568 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305569 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305570
5571 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305572}
5573
Jeff Johnson295189b2012-06-20 16:38:30 -07005574/*
5575 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5576 * Request to WDI to remove the BSS key( key for broadcast/multicast
5577 * frames Encryption)
5578 */
5579VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5580 tRemoveBssKeyParams *removeBssKeyParams )
5581{
5582 WDI_Status status = WDI_STATUS_SUCCESS ;
5583 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5584 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5585 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 if(NULL == wdiRemoveBssKeyParam)
5590 {
5591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 VOS_ASSERT(0);
5594 return VOS_STATUS_E_NOMEM;
5595 }
5596 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5597 if(NULL == pWdaParams)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0);
5602 vos_mem_free(wdiRemoveBssKeyParam);
5603 return VOS_STATUS_E_NOMEM;
5604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 /* copy Remove BSS key params to WDI structure*/
5606 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5607 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5608 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5609 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5610 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 /* Store remove key pointer, as this will be used for response */
5612 /* store Params pass it to WDI */
5613 pWdaParams->pWdaContext = pWDA;
5614 pWdaParams->wdaMsgParam = removeBssKeyParams;
5615 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5617 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 if(IS_WDI_STATUS_FAILURE(status))
5619 {
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5621 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5623 vos_mem_free(pWdaParams) ;
5624 removeBssKeyParams->status = eSIR_FAILURE ;
5625 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 return CONVERT_WDI2VOS_STATUS(status) ;
5628}
Jeff Johnson295189b2012-06-20 16:38:30 -07005629/*
5630 * FUNCTION: WDA_SetBssKeyReqCallback
5631 * send SET BSS key RSP back to PE
5632 */
5633void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5634{
5635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5636 tWDA_CbContext *pWDA;
5637 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005639 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 if(NULL == pWdaParams)
5641 {
5642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005643 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 VOS_ASSERT(0) ;
5645 return ;
5646 }
5647 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5648 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305649 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5650 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5652 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005653 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 return ;
5656}
Jeff Johnson295189b2012-06-20 16:38:30 -07005657/*
5658 * FUNCTION: WDA_ProcessSetStaKeyReq
5659 * Request to WDI for programming the STA key( key for Unicast frames
5660 * Encryption)
5661 */
5662VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5663 tSetStaKeyParams *setStaKeyParams )
5664{
5665 WDI_Status status = WDI_STATUS_SUCCESS ;
5666 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5667 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5668 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5669 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 if(NULL == wdiSetStaKeyParam)
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 VOS_ASSERT(0);
5678 return VOS_STATUS_E_NOMEM;
5679 }
5680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5681 if(NULL == pWdaParams)
5682 {
5683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 VOS_ASSERT(0);
5686 vos_mem_free(wdiSetStaKeyParam);
5687 return VOS_STATUS_E_NOMEM;
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 /* copy set STA key params to WDI structure */
5692 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5693 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5694 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5695 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 if(setStaKeyParams->encType != eSIR_ED_NONE)
5697 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005698 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5700 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5701 {
5702 WDA_GetWepKeysFromCfg( pWDA,
5703 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5704 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5705 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5706 }
5707 else
5708 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5710 keyIndex++)
5711 {
5712 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5713 setStaKeyParams->key[keyIndex].keyId;
5714 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5715 setStaKeyParams->key[keyIndex].unicast;
5716 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5717 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5719 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5720 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5721 setStaKeyParams->key[keyIndex].paeRole;
5722 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5723 setStaKeyParams->key[keyIndex].keyLength;
5724 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5725 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5726 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5727 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5728 {
5729 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5730 }
5731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5733 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005734 }
5735 }
5736 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5737 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 /* Store set key pointer, as this will be used for response */
5739 /* store Params pass it to WDI */
5740 pWdaParams->pWdaContext = pWDA;
5741 pWdaParams->wdaMsgParam = setStaKeyParams;
5742 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5744 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 if(IS_WDI_STATUS_FAILURE(status))
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5748 "Failure in set STA Key Req WDI API, free all the memory " );
5749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5750 vos_mem_free(pWdaParams) ;
5751 setStaKeyParams->status = eSIR_FAILURE ;
5752 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 return CONVERT_WDI2VOS_STATUS(status) ;
5755}
Jeff Johnson295189b2012-06-20 16:38:30 -07005756/*
5757 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5758 * send SET Bcast STA key RSP back to PE
5759 */
5760void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5761{
5762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5763 tWDA_CbContext *pWDA;
5764 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005766 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005767 if(NULL == pWdaParams)
5768 {
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005770 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 VOS_ASSERT(0) ;
5772 return ;
5773 }
5774 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5775 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5777 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005778 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005780 return ;
5781}
5782
Jeff Johnson295189b2012-06-20 16:38:30 -07005783/*
5784 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5785 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5786 * Encryption)
5787 */
5788VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5789 tSetStaKeyParams *setStaKeyParams )
5790{
5791 WDI_Status status = WDI_STATUS_SUCCESS ;
5792 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5793 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5794 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5795 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 if(NULL == wdiSetStaKeyParam)
5800 {
5801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 VOS_ASSERT(0);
5804 return VOS_STATUS_E_NOMEM;
5805 }
5806 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5807 if(NULL == pWdaParams)
5808 {
5809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 VOS_ASSERT(0);
5812 vos_mem_free(wdiSetStaKeyParam);
5813 return VOS_STATUS_E_NOMEM;
5814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 /* copy set STA key params to WDI structure */
5818 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5819 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5820 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5821 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 if(setStaKeyParams->encType != eSIR_ED_NONE)
5823 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5825 keyIndex++)
5826 {
5827 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5828 setStaKeyParams->key[keyIndex].keyId;
5829 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5830 setStaKeyParams->key[keyIndex].unicast;
5831 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5832 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5834 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5835 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5836 setStaKeyParams->key[keyIndex].paeRole;
5837 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5838 setStaKeyParams->key[keyIndex].keyLength;
5839 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5840 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5843 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 }
5845 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 /* Store set key pointer, as this will be used for response */
5847 /* store Params pass it to WDI */
5848 pWdaParams->pWdaContext = pWDA;
5849 pWdaParams->wdaMsgParam = setStaKeyParams;
5850 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5852 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 if(IS_WDI_STATUS_FAILURE(status))
5854 {
5855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5856 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5858 vos_mem_free(pWdaParams) ;
5859 setStaKeyParams->status = eSIR_FAILURE ;
5860 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 return CONVERT_WDI2VOS_STATUS(status) ;
5863}
Jeff Johnson295189b2012-06-20 16:38:30 -07005864/*
5865 * FUNCTION: WDA_RemoveStaKeyReqCallback
5866 * send SET BSS key RSP back to PE
5867 */
5868void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5869{
5870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5871 tWDA_CbContext *pWDA;
5872 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 if(NULL == pWdaParams)
5876 {
5877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005878 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 VOS_ASSERT(0) ;
5880 return ;
5881 }
5882 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5883 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5885 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005886 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 return ;
5889}
5890
Jeff Johnson295189b2012-06-20 16:38:30 -07005891/*
5892 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5893 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5894 */
5895VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5896 tRemoveStaKeyParams *removeStaKeyParams )
5897{
5898 WDI_Status status = WDI_STATUS_SUCCESS ;
5899 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5900 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5901 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5902 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 if(NULL == wdiRemoveStaKeyParam)
5906 {
5907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 VOS_ASSERT(0);
5910 return VOS_STATUS_E_NOMEM;
5911 }
5912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5913 if(NULL == pWdaParams)
5914 {
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_ASSERT(0);
5918 vos_mem_free(wdiRemoveStaKeyParam);
5919 return VOS_STATUS_E_NOMEM;
5920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 /* copy remove STA key params to WDI structure*/
5922 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5923 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5924 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5925 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5926 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 /* Store remove key pointer, as this will be used for response */
5928 /* store Params pass it to WDI */
5929 pWdaParams->pWdaContext = pWDA;
5930 pWdaParams->wdaMsgParam = removeStaKeyParams;
5931 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5933 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 if(IS_WDI_STATUS_FAILURE(status))
5935 {
5936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5937 "Failure in remove STA Key Req WDI API, free all the memory " );
5938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5939 vos_mem_free(pWdaParams) ;
5940 removeStaKeyParams->status = eSIR_FAILURE ;
5941 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 return CONVERT_WDI2VOS_STATUS(status) ;
5944}
Jeff Johnson295189b2012-06-20 16:38:30 -07005945/*
5946 * FUNCTION: WDA_IsHandleSetLinkStateReq
5947 * Update the WDA state and return the status to handle this message or not
5948 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005949WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5950 tWDA_CbContext *pWDA,
5951 tLinkStateParams *linkStateParams)
5952{
5953 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 switch(linkStateParams->state)
5955 {
5956 case eSIR_LINK_PREASSOC_STATE:
5957 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5958 /*
5959 * set the WDA state to PRE ASSOC
5960 * copy the BSSID into pWDA to use it in join request and return,
5961 * No need to handle these messages.
5962 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005963 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5964 {
5965 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005967 }
5968 else
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005971 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005972 VOS_ASSERT(0);
5973 }
5974
5975 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5976 {
5977 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005979 }
5980 else
5981 {
5982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005983 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005984 VOS_ASSERT(0);
5985 }
5986
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5988 *channel and after ) so reset the WDA state to ready when the second
5989 * time UMAC issue the link state with PREASSOC
5990 */
5991 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5992 {
5993 /* RESET WDA state back to WDA_READY_STATE */
5994 pWDA->wdaState = WDA_READY_STATE;
5995 }
5996 else
5997 {
5998 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5999 }
6000 //populate linkState info in WDACbCtxt
6001 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 default:
6004 if(pWDA->wdaState != WDA_READY_STATE)
6005 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006006 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6007 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6008 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6009 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6010 *the ASSERT in WDA_Stop during module unload.*/
6011 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6012 {
6013 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006014 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006015 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006016 else
6017 {
6018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006019 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006020 status = WDA_IGNORE_SET_LINK_STATE;
6021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 }
6023 break;
6024 }
6025
6026 return status;
6027}
Jeff Johnson295189b2012-06-20 16:38:30 -07006028/*
6029 * FUNCTION: WDA_SetLinkStateCallback
6030 * call back function for set link state from WDI
6031 */
6032void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6033{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306034 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 tLinkStateParams *linkStateParams;
6036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006038 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306039 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 {
6041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006042 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 VOS_ASSERT(0) ;
6044 return ;
6045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306047 if (NULL == pWDA)
6048 {
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6050 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6052 vos_mem_free(pWdaParams->wdaMsgParam);
6053 vos_mem_free(pWdaParams);
6054
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306055 VOS_ASSERT(0);
6056 return ;
6057 }
6058
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 /*
6061 * In STA mode start the BA activity check timer after association
6062 * and in AP mode start BA activity check timer after BSS start */
6063 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6064 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006065 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6066 ((status == WDI_STATUS_SUCCESS) &&
6067 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 {
6069 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 /*
6073 * No respone required for WDA_SET_LINK_STATE so free the request
6074 * param here
6075 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6077 vos_mem_free(pWdaParams);
6078
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 return ;
6080}
Jeff Johnson295189b2012-06-20 16:38:30 -07006081/*
6082 * FUNCTION: WDA_ProcessSetLinkState
6083 * Request to WDI to set the link status.
6084 */
6085VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6086 tLinkStateParams *linkStateParams)
6087{
6088 WDI_Status status = WDI_STATUS_SUCCESS ;
6089 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6090 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6091 sizeof(WDI_SetLinkReqParamsType)) ;
6092 tWDA_ReqParams *pWdaParams ;
6093 tpAniSirGlobal pMac;
6094 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6095
6096 if(NULL == pMac)
6097 {
6098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006099 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006101 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 return VOS_STATUS_E_FAILURE;
6103 }
6104
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 if(NULL == wdiSetLinkStateParam)
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 VOS_ASSERT(0);
6112 return VOS_STATUS_E_NOMEM;
6113 }
6114 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6115 if(NULL == pWdaParams)
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_ASSERT(0);
6120 vos_mem_free(wdiSetLinkStateParam);
6121 return VOS_STATUS_E_NOMEM;
6122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 if(WDA_IGNORE_SET_LINK_STATE ==
6124 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6125 {
6126 status = WDI_STATUS_E_FAILURE;
6127 }
6128 else
6129 {
6130 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6131 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6133 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6135 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 pWdaParams->pWdaContext = pWDA;
6137 /* Store remove key pointer, as this will be used for response */
6138 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 /* store Params pass it to WDI */
6140 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6141 /* Stop Timer only other than GO role and concurrent session */
6142 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006143 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6145 {
6146 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6149 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 if(IS_WDI_STATUS_FAILURE(status))
6151 {
6152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6153 "Failure in set link state Req WDI API, free all the memory " );
6154 }
6155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006156 if(IS_WDI_STATUS_FAILURE(status))
6157 {
6158 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006159 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 vos_mem_free(pWdaParams);
6161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 return CONVERT_WDI2VOS_STATUS(status) ;
6163}
Jeff Johnson295189b2012-06-20 16:38:30 -07006164/*
6165 * FUNCTION: WDA_GetStatsReqParamsCallback
6166 * send the response to PE with Stats received from WDI
6167 */
6168void WDA_GetStatsReqParamsCallback(
6169 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6170 void* pUserData)
6171{
6172 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
6173 tAniGetPEStatsRsp *pGetPEStatsRspParams;
6174
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 pGetPEStatsRspParams =
6178 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6179 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6180
6181 if(NULL == pGetPEStatsRspParams)
6182 {
6183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 VOS_ASSERT(0);
6186 return;
6187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
6189 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
6190 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6191 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006192
6193 //Fill the Session Id Properly in PE
6194 pGetPEStatsRspParams->sessionId = 0;
6195 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006196 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6198 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 vos_mem_copy( pGetPEStatsRspParams + 1,
6200 wdiGetStatsRsp + 1,
6201 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 /* send response to UMAC*/
6203 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
6204
6205 return;
6206}
6207
Jeff Johnson295189b2012-06-20 16:38:30 -07006208/*
6209 * FUNCTION: WDA_ProcessGetStatsReq
6210 * Request to WDI to get the statistics
6211 */
6212VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6213 tAniGetPEStatsReq *pGetStatsParams)
6214{
6215 WDI_Status status = WDI_STATUS_SUCCESS ;
6216 WDI_GetStatsReqParamsType wdiGetStatsParam;
6217 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006219 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6221 pGetStatsParams->staId;
6222 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6223 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 status = WDI_GetStatsReq(&wdiGetStatsParam,
6226 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 if(IS_WDI_STATUS_FAILURE(status))
6228 {
6229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6230 "Failure in Get Stats Req WDI API, free all the memory " );
6231 pGetPEStatsRspParams =
6232 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6233 if(NULL == pGetPEStatsRspParams)
6234 {
6235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006238 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 return VOS_STATUS_E_NOMEM;
6240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
6242 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6243 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6244 pGetPEStatsRspParams->rc = eSIR_FAILURE;
6245 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
6246 (void *)pGetPEStatsRspParams, 0) ;
6247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* Free the request message */
6249 vos_mem_free(pGetStatsParams);
6250 return CONVERT_WDI2VOS_STATUS(status);
6251}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006252
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006253#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006254/*
6255 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6256 * send the response to PE with roam Rssi received from WDI
6257 */
6258void WDA_GetRoamRssiReqParamsCallback(
6259 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6260 void* pUserData)
6261{
6262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6263 tWDA_CbContext *pWDA = NULL;
6264 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6265 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6267 "<------ %s " ,__func__);
6268 if(NULL == pWdaParams)
6269 {
6270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6271 "%s: pWdaParams received NULL", __func__);
6272 VOS_ASSERT(0) ;
6273 return ;
6274 }
6275 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6276 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6277
6278 if(NULL == pGetRoamRssiReqParams)
6279 {
6280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6281 "%s: pGetRoamRssiReqParams received NULL", __func__);
6282 VOS_ASSERT(0);
6283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6284 vos_mem_free(pWdaParams);
6285 return ;
6286 }
6287 pGetRoamRssiRspParams =
6288 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6289
6290 if(NULL == pGetRoamRssiRspParams)
6291 {
6292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6293 "%s: VOS MEM Alloc Failure", __func__);
6294 VOS_ASSERT(0);
6295 return;
6296 }
6297 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6298 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006299 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006300 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6301 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6302
6303 /* Assign get roam rssi req (backup) in to the response */
6304 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6305
6306 /* free WDI command buffer */
6307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6308 vos_mem_free(pWdaParams) ;
6309
6310 /* send response to UMAC*/
6311 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6312
6313 return;
6314}
6315
6316
6317
6318/*
6319 * FUNCTION: WDA_ProcessGetRoamRssiReq
6320 * Request to WDI to get the statistics
6321 */
6322VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6323 tAniGetRssiReq *pGetRoamRssiParams)
6324{
6325 WDI_Status status = WDI_STATUS_SUCCESS ;
6326 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6327 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6328 tWDA_ReqParams *pWdaParams = NULL;
6329
6330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6331 "------> %s " ,__func__);
6332 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6333 pGetRoamRssiParams->staId;
6334 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6335
6336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6337 if(NULL == pWdaParams)
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6340 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306341 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006342 VOS_ASSERT(0);
6343 return VOS_STATUS_E_NOMEM;
6344 }
6345
6346 /* Store Init Req pointer, as this will be used for response */
6347 pWdaParams->pWdaContext = pWDA;
6348
6349 /* Take Get roam Rssi req backup as it stores the callback to be called after
6350 receiving the response */
6351 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6352 pWdaParams->wdaWdiApiMsgParam = NULL;
6353
6354 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6355 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6356 if(IS_WDI_STATUS_FAILURE(status))
6357 {
6358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6359 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6360 pGetRoamRssiRspParams =
6361 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6362 if(NULL == pGetRoamRssiRspParams)
6363 {
6364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6365 "%s: VOS MEM Alloc Failure", __func__);
6366 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306367 vos_mem_free(pGetRoamRssiParams);
6368 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006369 return VOS_STATUS_E_NOMEM;
6370 }
6371 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6372 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6373 pGetRoamRssiRspParams->rssi = 0;
6374 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6375 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6376 (void *)pGetRoamRssiRspParams, 0) ;
6377 }
6378 return CONVERT_WDI2VOS_STATUS(status);
6379}
6380#endif
6381
6382
Jeff Johnson295189b2012-06-20 16:38:30 -07006383/*
6384 * FUNCTION: WDA_UpdateEDCAParamCallback
6385 * call back function for Update EDCA params from WDI
6386 */
6387void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6388{
6389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6390 tEdcaParams *pEdcaParams;
6391
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006393 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 if(NULL == pWdaParams)
6395 {
6396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006397 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 VOS_ASSERT(0) ;
6399 return ;
6400 }
6401 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6403 vos_mem_free(pWdaParams);
6404 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 return ;
6406}
Jeff Johnson295189b2012-06-20 16:38:30 -07006407/*
6408 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6409 * Request to WDI to Update the EDCA params.
6410 */
6411VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6412 tEdcaParams *pEdcaParams)
6413{
6414 WDI_Status status = WDI_STATUS_SUCCESS ;
6415 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6416 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6417 sizeof(WDI_UpdateEDCAParamsType)) ;
6418 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006420 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 if(NULL == wdiEdcaParam)
6422 {
6423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006424 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006426 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 return VOS_STATUS_E_NOMEM;
6428 }
6429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6430 if(NULL == pWdaParams)
6431 {
6432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006433 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 VOS_ASSERT(0);
6435 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006436 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 return VOS_STATUS_E_NOMEM;
6438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006440 /*
6441 Since firmware is not using highperformance flag, we have removed
6442 this flag from wdiEDCAInfo structure to match sizeof the structure
6443 between host and firmware.In future if we are planning to use
6444 highperformance flag then Please define this flag in wdiEDCAInfo
6445 structure, update it here and send it to firmware. i.e.
6446 Following is the original line which we removed as part of the fix
6447 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6448 pEdcaParams->highPerformance;
6449 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6451 &pEdcaParams->acbe);
6452 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6453 &pEdcaParams->acbk);
6454 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6455 &pEdcaParams->acvi);
6456 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6457 &pEdcaParams->acvo);
6458 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 pWdaParams->pWdaContext = pWDA;
6460 /* Store remove key pointer, as this will be used for response */
6461 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 /* store Params pass it to WDI */
6463 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6465 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 if(IS_WDI_STATUS_FAILURE(status))
6467 {
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6469 "Failure in Update EDCA Params WDI API, free all the memory " );
6470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6471 vos_mem_free(pWdaParams);
6472 vos_mem_free(pEdcaParams);
6473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 return CONVERT_WDI2VOS_STATUS(status) ;
6475}
Jeff Johnson295189b2012-06-20 16:38:30 -07006476/*
6477 * FUNCTION: WDA_AddBAReqCallback
6478 * send ADD BA RSP back to PE
6479 */
6480void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6481 void* pUserData)
6482{
6483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6484 tWDA_CbContext *pWDA;
6485 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006487 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306488 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 {
6490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006491 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 VOS_ASSERT(0) ;
6493 return ;
6494 }
6495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306496 if (NULL == pWDA)
6497 {
6498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6499 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6501 vos_mem_free(pWdaParams->wdaMsgParam);
6502 vos_mem_free(pWdaParams);
6503
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306504 VOS_ASSERT(0);
6505 return ;
6506 }
6507
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6510 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006511 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 return ;
6514}
6515
Jeff Johnson295189b2012-06-20 16:38:30 -07006516/*
6517 * FUNCTION: WDA_ProcessAddBAReq
6518 * Request to WDI to Update the ADDBA REQ params.
6519 */
6520VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306521 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006522{
Jeff Johnson43971f52012-07-17 12:26:56 -07006523 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6525 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6526 sizeof(WDI_AddBAReqParamsType)) ;
6527 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006529 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 if(NULL == wdiAddBAReqParam)
6531 {
6532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 VOS_ASSERT(0);
6535 return VOS_STATUS_E_NOMEM;
6536 }
6537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6538 if(NULL == pWdaParams)
6539 {
6540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 VOS_ASSERT(0);
6543 vos_mem_free(wdiAddBAReqParam);
6544 return VOS_STATUS_E_NOMEM;
6545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 do
6547 {
6548 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 wdiAddBaInfo->ucSTAIdx = staIdx ;
6550 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306551 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 } while(0) ;
6553 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 pWdaParams->pWdaContext = pWDA;
6555 /* store Params pass it to WDI */
6556 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6557 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006558 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6559 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006560
Jeff Johnson43971f52012-07-17 12:26:56 -07006561 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 {
6563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006564 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6565 status = CONVERT_WDI2VOS_STATUS(wstatus);
6566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006567 vos_mem_free(pWdaParams);
6568 pAddBAReqParams->status = eSIR_FAILURE;
6569 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6570 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006571 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006572}
Jeff Johnson295189b2012-06-20 16:38:30 -07006573/*
6574 * FUNCTION: WDA_AddBASessionReqCallback
6575 * send ADD BA SESSION RSP back to PE/(or TL)
6576 */
6577void WDA_AddBASessionReqCallback(
6578 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6579{
6580 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306582 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006585 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 if(NULL == pWdaParams)
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006590 VOS_ASSERT(0) ;
6591 return ;
6592 }
6593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306594 if (NULL == pWDA)
6595 {
6596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6597 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6599 vos_mem_free(pWdaParams->wdaMsgParam);
6600 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306601 VOS_ASSERT(0);
6602 return ;
6603 }
6604
Jeff Johnson295189b2012-06-20 16:38:30 -07006605 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006606 if( NULL == pAddBAReqParams )
6607 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006609 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6612 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 return ;
6614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6616 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306618 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 * another request to HAL(/WDI) (ADD_BA_REQ)
6620 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 if((VOS_STATUS_SUCCESS ==
6622 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306623 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 {
6625 /* Update TL with BA info received from HAL/WDI */
6626 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6627 wdiAddBaSession->usBaSessionID,
6628 wdiAddBaSession->ucSTAIdx,
6629 wdiAddBaSession->ucBaTID,
6630 wdiAddBaSession->ucBaBufferSize,
6631 wdiAddBaSession->ucWinSize,
6632 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306634 wdiAddBaSession->ucSTAIdx,
6635 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 }
6637 else
6638 {
6639 pAddBAReqParams->status =
6640 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6641
6642 /* Setting Flag to indicate that Set BA is success */
6643 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6644 {
6645 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6646 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6647 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 /*Reset the WDA state to READY */
6652 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 return ;
6654}
6655
Jeff Johnson295189b2012-06-20 16:38:30 -07006656/*
6657 * FUNCTION: WDA_ProcessAddBASessionReq
6658 * Request to WDI to Update the ADDBA REQ params.
6659 */
6660VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6661 tAddBAParams *pAddBAReqParams)
6662{
6663 WDI_Status status = WDI_STATUS_SUCCESS ;
6664 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6665 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6666 sizeof(WDI_AddBASessionReqParamsType)) ;
6667 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006668 WLANTL_STAStateType tlSTAState = 0;
6669
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 if(NULL == wdiAddBASessionReqParam)
6673 {
6674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006676 VOS_ASSERT(0);
6677 return VOS_STATUS_E_NOMEM;
6678 }
6679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6680 if(NULL == pWdaParams)
6681 {
6682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 VOS_ASSERT(0);
6685 vos_mem_free(wdiAddBASessionReqParam);
6686 return VOS_STATUS_E_NOMEM;
6687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 /*
6689 * Populate ADD BA parameters and pass these paarmeters to WDI.
6690 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6691 * the state to track if these is BA recipient case or BA initiator
6692 * case.
6693 */
6694 do
6695 {
6696 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6697 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6698 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6699 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6700 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6701 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6702 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6705 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6706 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6707 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6708 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306709
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 }while(0) ;
6711 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 pWdaParams->pWdaContext = pWDA;
6713 /* Store ADD BA pointer, as this will be used for response */
6714 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6715 /* store Params pass it to WDI */
6716 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006717
6718 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6719 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6720 */
6721 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6722 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6723 {
6724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006725 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006726 status = WDI_STATUS_E_NOT_ALLOWED;
6727 pAddBAReqParams->status =
6728 CONVERT_WDI2SIR_STATUS(status) ;
6729 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6730 /*Reset the WDA state to READY */
6731 pWDA->wdaState = WDA_READY_STATE;
6732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6733 vos_mem_free(pWdaParams);
6734
6735 return CONVERT_WDI2VOS_STATUS(status) ;
6736 }
6737
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6739 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 if(IS_WDI_STATUS_FAILURE(status))
6741 {
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006743 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006745 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006746 pAddBAReqParams->status =
6747 CONVERT_WDI2SIR_STATUS(status) ;
6748 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006749 /*Reset the WDA state to READY */
6750 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 vos_mem_free(pWdaParams);
6753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006755}
Jeff Johnson295189b2012-06-20 16:38:30 -07006756/*
6757 * FUNCTION: WDA_DelBANotifyTL
6758 * send DEL BA IND to TL
6759 */
6760void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6761 tDelBAParams *pDelBAReqParams)
6762{
6763 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6764 //tSirMsgQ msg;
6765 vos_msg_t vosMsg;
6766 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 if(NULL == pDelBAInd)
6768 {
6769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 VOS_ASSERT(0) ;
6772 return;
6773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6775 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6776 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6777 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006778
Jeff Johnson295189b2012-06-20 16:38:30 -07006779
6780 vosMsg.type = WDA_DELETEBA_IND;
6781 vosMsg.bodyptr = pDelBAInd;
6782 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6783 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6784 {
6785 vosStatus = VOS_STATUS_E_BADMSG;
6786 }
6787}
Jeff Johnson295189b2012-06-20 16:38:30 -07006788/*
6789 * FUNCTION: WDA_DelBAReqCallback
6790 * send DEL BA RSP back to PE
6791 */
6792void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6793{
6794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6795 tWDA_CbContext *pWDA;
6796 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 if(NULL == pWdaParams)
6800 {
6801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 VOS_ASSERT(0) ;
6804 return ;
6805 }
6806 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306807
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 /* Notify TL about DEL BA in case of recipinet */
6810 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6811 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6812 {
6813 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 /*
6816 * No respone required for WDA_DELBA_IND so just free the request
6817 * param here
6818 */
6819 vos_mem_free(pDelBAReqParams);
6820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6821 vos_mem_free(pWdaParams);
6822 return ;
6823}
6824
Jeff Johnson295189b2012-06-20 16:38:30 -07006825/*
6826 * FUNCTION: WDA_ProcessDelBAReq
6827 * Request to WDI to Update the DELBA REQ params.
6828 */
6829VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6830 tDelBAParams *pDelBAReqParams)
6831{
6832 WDI_Status status = WDI_STATUS_SUCCESS ;
6833 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6834 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6835 sizeof(WDI_DelBAReqParamsType)) ;
6836 tWDA_ReqParams *pWdaParams ;
6837 tANI_U16 staIdx = 0;
6838 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006840 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 if(NULL == wdiDelBAReqParam)
6842 {
6843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 VOS_ASSERT(0);
6846 return VOS_STATUS_E_NOMEM;
6847 }
6848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6849 if(NULL == pWdaParams)
6850 {
6851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 VOS_ASSERT(0);
6854 vos_mem_free(wdiDelBAReqParam);
6855 return VOS_STATUS_E_NOMEM;
6856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6858 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6859 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6860 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 pWdaParams->pWdaContext = pWDA;
6862 /* Store DEL BA pointer, as this will be used for response */
6863 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 /* store Params pass it to WDI */
6865 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6867 * maintained in WDA, so that WDA can retry for another BA session
6868 */
6869 staIdx = pDelBAReqParams->staIdx;
6870 tid = pDelBAReqParams->baTID;
6871 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 status = WDI_DelBAReq(wdiDelBAReqParam,
6873 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 if(IS_WDI_STATUS_FAILURE(status))
6875 {
6876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6877 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6879 vos_mem_free(pWdaParams->wdaMsgParam);
6880 vos_mem_free(pWdaParams);
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006884
6885/*
6886 * FUNCTION: WDA_UpdateChReqCallback
6887 *
6888 */
6889void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6890{
Siddharth Bhala006c122014-05-03 12:13:27 +05306891 tWDA_ReqParams *pWdaParams;
6892 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6893 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6894 WDI_UpdateChannelReqinfoType *pChanInfoType;
6895 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006896
6897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6898 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306899 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006900 {
6901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306902 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006903 VOS_ASSERT(0);
6904 return;
6905 }
6906
Siddharth Bhala006c122014-05-03 12:13:27 +05306907 pWdaParams = (tWDA_ReqParams *)pUserData;
6908 pwdiUpdateChReqParam =
6909 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6910 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6911 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6912 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006913 /*
6914 * currently there is no response message is expected between PE and
6915 * WDA, Failure return from WDI is a ASSERT condition
6916 */
6917 vos_mem_free(pChanInfoType);
6918 vos_mem_free(pChanList);
6919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6920 vos_mem_free(pWdaParams);
6921
6922 return;
6923}
6924
6925/*
6926 * FUNCTION: WDA_ProcessUpdateChannelList
6927 * Request to WDI to Update the ChannelList params.
6928 */
6929VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6930 tSirUpdateChanList *pChanList)
6931{
6932 WDI_Status status = WDI_STATUS_SUCCESS;
6933 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6934 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6935 WDI_UpdateChannelReqinfoType *pChanInfoType;
6936 tWDA_ReqParams *pWdaParams;
6937 wpt_uint8 i;
6938
6939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6940 "------> %s " ,__func__);
6941 if(NULL == pChanList)
6942 {
6943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6944 "%s: NULL pChanList", __func__);
6945 VOS_ASSERT(0);
6946 return VOS_STATUS_E_INVAL;
6947 }
6948
6949 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6950 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05306951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006952 "Update channel list capability Not Supported");
6953 vos_mem_free(pChanList);
6954 return VOS_STATUS_E_INVAL;
6955 }
6956
6957 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6958 sizeof(WDI_UpdateChReqParamsType));
6959 if(NULL == pwdiUpdateChReqParam)
6960 {
6961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6962 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6963 __func__);
6964 VOS_ASSERT(0);
6965 vos_mem_free(pChanList);
6966 return VOS_STATUS_E_NOMEM;
6967 }
6968 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6969 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6970 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6971 pChanList->numChan);
6972 if(NULL == pChanInfoType)
6973 {
6974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6975 "%s: VOS MEM Alloc Failure", __func__);
6976 VOS_ASSERT(0);
6977 vos_mem_free(pChanList);
6978 vos_mem_free(pwdiUpdateChReqParam);
6979 return VOS_STATUS_E_NOMEM;
6980 }
6981 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6982 * pChanList->numChan);
6983 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6984
6985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6986 if(NULL == pWdaParams)
6987 {
6988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6989 "%s: VOS MEM Alloc Failure", __func__);
6990 VOS_ASSERT(0);
6991 vos_mem_free(pChanList);
6992 vos_mem_free(pChanInfoType);
6993 vos_mem_free(pwdiUpdateChReqParam);
6994 return VOS_STATUS_E_NOMEM;
6995 }
6996 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6997
6998 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6999 {
7000 pChanInfoType->mhz =
7001 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7002
7003 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7004 pChanInfoType->band_center_freq2 = 0;
7005
7006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7007 "chan[%d] = %u", i, pChanInfoType->mhz);
7008 if (pChanList->chanParam[i].dfsSet)
7009 {
7010 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7012 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7013 pChanList->chanParam[i].dfsSet);
7014 }
7015
7016 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7017 {
7018 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7019 }
7020 else
7021 {
7022 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7023 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7024 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7025 }
7026
7027 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7028 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307029 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007030 pChanInfoType++;
7031 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007032 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7033 pWdaParams->pWdaContext = pWDA;
7034 pWdaParams->wdaMsgParam = (void *)pChanList;
7035 /* store Params pass it to WDI */
7036 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7037 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7038 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7039 if(IS_WDI_STATUS_FAILURE(status))
7040 {
7041 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7042 "Failure in Update Channel REQ Params WDI API, free all the memory");
7043 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7044 vos_mem_free(pwdiUpdateChReqParam);
7045 vos_mem_free(pWdaParams->wdaMsgParam);
7046 vos_mem_free(pWdaParams);
7047 }
7048 return CONVERT_WDI2VOS_STATUS(status);
7049}
7050
Jeff Johnson295189b2012-06-20 16:38:30 -07007051/*
7052 * FUNCTION: WDA_AddTSReqCallback
7053 * send ADD TS RSP back to PE
7054 */
7055void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7056{
7057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307058 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 tAddTsParams *pAddTsReqParams;
7060
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 if(NULL == pWdaParams)
7064 {
7065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007066 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 VOS_ASSERT(0) ;
7068 return ;
7069 }
7070 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307071 if (NULL == pWDA)
7072 {
7073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7074 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7076 vos_mem_free(pWdaParams->wdaMsgParam);
7077 vos_mem_free(pWdaParams);
7078
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307079 VOS_ASSERT(0);
7080 return ;
7081 }
7082
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7085 vos_mem_free(pWdaParams);
7086
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007087 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 return ;
7090}
7091
Jeff Johnson295189b2012-06-20 16:38:30 -07007092/*
7093 * FUNCTION: WDA_ProcessAddTSReq
7094 * Request to WDI to Update the ADD TS REQ params.
7095 */
7096VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7097 tAddTsParams *pAddTsReqParams)
7098{
7099 WDI_Status status = WDI_STATUS_SUCCESS ;
7100 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7101 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7102 sizeof(WDI_AddTSReqParamsType)) ;
7103 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007105 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 if(NULL == wdiAddTSReqParam)
7107 {
7108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 VOS_ASSERT(0);
7111 return VOS_STATUS_E_NOMEM;
7112 }
7113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7114 if(NULL == pWdaParams)
7115 {
7116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 VOS_ASSERT(0);
7119 vos_mem_free(wdiAddTSReqParam);
7120 return VOS_STATUS_E_NOMEM;
7121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7123 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 //TS IE
7125 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7126 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7127 pAddTsReqParams->tspec.length;
7128
7129 //TS IE : TS INFO : TRAFFIC
7130 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7131 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7132 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7133 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7134 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7135 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7136 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7137 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7138 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7139 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7140 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7141 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7142 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7143 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7144 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7145 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7146
7147 //TS IE : TS INFO : SCHEDULE
7148 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7149 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7150 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7151 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 //TS IE
7153 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7154 pAddTsReqParams->tspec.nomMsduSz;
7155 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7156 pAddTsReqParams->tspec.maxMsduSz;
7157 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7158 pAddTsReqParams->tspec.minSvcInterval;
7159 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7160 pAddTsReqParams->tspec.maxSvcInterval;
7161 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7162 pAddTsReqParams->tspec.inactInterval;
7163 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7164 pAddTsReqParams->tspec.suspendInterval;
7165 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7166 pAddTsReqParams->tspec.svcStartTime;
7167 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7168 pAddTsReqParams->tspec.minDataRate;
7169 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7170 pAddTsReqParams->tspec.meanDataRate;
7171 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7172 pAddTsReqParams->tspec.peakDataRate;
7173 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7174 pAddTsReqParams->tspec.maxBurstSz;
7175 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7176 pAddTsReqParams->tspec.delayBound;
7177 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7178 pAddTsReqParams->tspec.minPhyRate;
7179 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7180 pAddTsReqParams->tspec.surplusBw;
7181 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7182 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 /* TODO: tAddTsParams doesn't have the following fields */
7184#if 0
7185 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7186 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7187 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7188 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7189#endif
7190 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7191
7192 pWdaParams->pWdaContext = pWDA;
7193 /* Store ADD TS pointer, as this will be used for response */
7194 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 /* store Params pass it to WDI */
7196 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 status = WDI_AddTSReq(wdiAddTSReqParam,
7198 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 if(IS_WDI_STATUS_FAILURE(status))
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7202 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7204 vos_mem_free(pWdaParams);
7205 pAddTsReqParams->status = eSIR_FAILURE ;
7206 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007209}
7210
Jeff Johnson295189b2012-06-20 16:38:30 -07007211/*
7212 * FUNCTION: WDA_DelTSReqCallback
7213 * send DEL TS RSP back to PE
7214 */
7215void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7216{
7217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007219 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7221 vos_mem_free(pWdaParams->wdaMsgParam) ;
7222 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 /*
7224 * No respone required for WDA_DEL_TS_REQ so just free the request
7225 * param here
7226 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 return ;
7228}
7229
Jeff Johnson295189b2012-06-20 16:38:30 -07007230/*
7231 * FUNCTION: WDA_ProcessDelTSReq
7232 * Request to WDI to Update the DELTS REQ params.
7233 */
7234VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7235 tDelTsParams *pDelTSReqParams)
7236{
7237 WDI_Status status = WDI_STATUS_SUCCESS ;
7238 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7239 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7240 sizeof(WDI_DelTSReqParamsType)) ;
7241 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 if(NULL == wdiDelTSReqParam)
7245 {
7246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007247 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 VOS_ASSERT(0);
7249 return VOS_STATUS_E_NOMEM;
7250 }
7251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7252 if(NULL == pWdaParams)
7253 {
7254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_ASSERT(0);
7257 vos_mem_free(wdiDelTSReqParam);
7258 return VOS_STATUS_E_NOMEM;
7259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7261 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7262 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7263 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7264 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 pWdaParams->pWdaContext = pWDA;
7266 /* Store DEL TS pointer, as this will be used for response */
7267 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 /* store Params pass it to WDI */
7269 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 status = WDI_DelTSReq(wdiDelTSReqParam,
7271 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 if(IS_WDI_STATUS_FAILURE(status))
7273 {
7274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7275 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7277 vos_mem_free(pWdaParams->wdaMsgParam);
7278 vos_mem_free(pWdaParams);
7279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007281}
Jeff Johnson295189b2012-06-20 16:38:30 -07007282/*
7283 * FUNCTION: WDA_UpdateBeaconParamsCallback
7284 * Free the memory. No need to send any response to PE in this case
7285 */
7286void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7287{
7288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 if(NULL == pWdaParams)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 VOS_ASSERT(0) ;
7296 return ;
7297 }
7298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7299 vos_mem_free(pWdaParams->wdaMsgParam) ;
7300 vos_mem_free(pWdaParams);
7301 /*
7302 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7303 * param here
7304 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 return ;
7306}
Jeff Johnson295189b2012-06-20 16:38:30 -07007307/*
7308 * FUNCTION: WDA_ProcessUpdateBeaconParams
7309 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7310 */
7311VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7312 tUpdateBeaconParams *pUpdateBeaconParams)
7313{
7314 WDI_Status status = WDI_STATUS_SUCCESS ;
7315 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7316 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7317 sizeof(WDI_UpdateBeaconParamsType)) ;
7318 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 if(NULL == wdiUpdateBeaconParams)
7322 {
7323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 VOS_ASSERT(0);
7326 return VOS_STATUS_E_NOMEM;
7327 }
7328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7329 if(NULL == pWdaParams)
7330 {
7331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 VOS_ASSERT(0);
7334 vos_mem_free(wdiUpdateBeaconParams);
7335 return VOS_STATUS_E_NOMEM;
7336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7338 pUpdateBeaconParams->bssIdx;
7339 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7340 pUpdateBeaconParams->fShortPreamble;
7341 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7342 pUpdateBeaconParams->fShortSlotTime;
7343 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7344 pUpdateBeaconParams->beaconInterval;
7345 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7346 pUpdateBeaconParams->llaCoexist;
7347 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7348 pUpdateBeaconParams->llbCoexist;
7349 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7350 pUpdateBeaconParams->llgCoexist;
7351 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7352 pUpdateBeaconParams->ht20MhzCoexist;
7353 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7354 pUpdateBeaconParams->llnNonGFCoexist;
7355 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7356 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7357 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7358 pUpdateBeaconParams->fRIFSMode;
7359 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7360 pUpdateBeaconParams->paramChangeBitmap;
7361 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7362
7363 pWdaParams->pWdaContext = pWDA;
7364 /* Store UpdateBeacon Req pointer, as this will be used for response */
7365 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 /* store Params pass it to WDI */
7367 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7369 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7370 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 if(IS_WDI_STATUS_FAILURE(status))
7372 {
7373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7374 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7376 vos_mem_free(pWdaParams->wdaMsgParam);
7377 vos_mem_free(pWdaParams);
7378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007380}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007381#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007382/*
7383 * FUNCTION: WDA_TSMStatsReqCallback
7384 * send TSM Stats RSP back to PE
7385 */
7386void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7387{
7388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7389 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007390 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7391 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007394 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 if(NULL == pWdaParams)
7396 {
7397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007398 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 VOS_ASSERT(0) ;
7400 return ;
7401 }
7402 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307403 if (NULL == pWDA)
7404 {
7405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7406 "%s:pWDA is NULL", __func__);
7407 VOS_ASSERT(0);
7408 return ;
7409 }
7410
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007411 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7412
7413 if(NULL == pGetTsmStatsReqParams)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7416 "%s: pGetTsmStatsReqParams received NULL", __func__);
7417 VOS_ASSERT(0);
7418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7419 vos_mem_free(pWdaParams);
7420 return;
7421 }
7422
7423 pTsmRspParams =
7424 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 if( NULL == pTsmRspParams )
7426 {
7427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 VOS_ASSERT( 0 );
7430 return ;
7431 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007432 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7433 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7434 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7435
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7437 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7438 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7439 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7440 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7441 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7442 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7443 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7444 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7445 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007446
7447 /* Assign get tsm stats req req (backup) in to the response */
7448 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7449
7450 /* free WDI command buffer */
7451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7452 vos_mem_free(pWdaParams);
7453
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007455 return ;
7456}
7457
7458
Jeff Johnson295189b2012-06-20 16:38:30 -07007459/*
7460 * FUNCTION: WDA_ProcessTsmStatsReq
7461 * Request to WDI to get the TSM Stats params.
7462 */
7463VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007464 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007465{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007466 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007468 tWDA_ReqParams *pWdaParams = NULL;
7469 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7470
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007472 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7474 sizeof(WDI_TSMStatsReqParamsType));
7475 if(NULL == wdiTSMReqParam)
7476 {
7477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 VOS_ASSERT(0);
7480 return VOS_STATUS_E_NOMEM;
7481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7483 if(NULL == pWdaParams)
7484 {
7485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 VOS_ASSERT(0);
7488 vos_mem_free(wdiTSMReqParam);
7489 return VOS_STATUS_E_NOMEM;
7490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7492 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7493 pTsmStats->bssId,
7494 sizeof(wpt_macAddr));
7495 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7496
7497 pWdaParams->pWdaContext = pWDA;
7498 /* Store TSM Stats pointer, as this will be used for response */
7499 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007500 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 status = WDI_TSMStatsReq(wdiTSMReqParam,
7502 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 if(IS_WDI_STATUS_FAILURE(status))
7504 {
7505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7506 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007507 vos_mem_free(pWdaParams);
7508
7509 pGetTsmStatsRspParams =
7510 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7511 if(NULL == pGetTsmStatsRspParams)
7512 {
7513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7514 "%s: VOS MEM Alloc Failure", __func__);
7515 VOS_ASSERT(0);
7516 vos_mem_free(pTsmStats);
7517 return VOS_STATUS_E_NOMEM;
7518 }
7519 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7520 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7521 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7522
7523 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 return CONVERT_WDI2VOS_STATUS(status) ;
7526}
7527#endif
7528/*
7529 * FUNCTION: WDA_SendBeaconParamsCallback
7530 * No need to send any response to PE in this case
7531 */
7532void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7533{
7534
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007536 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007537 return ;
7538}
Jeff Johnson295189b2012-06-20 16:38:30 -07007539/*
7540 * FUNCTION: WDA_ProcessSendBeacon
7541 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7542 * start beacon trasmission
7543 */
7544VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7545 tSendbeaconParams *pSendbeaconParams)
7546{
7547 WDI_Status status = WDI_STATUS_SUCCESS ;
7548 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7552 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7553 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7554 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7556 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307557 /* p2pIeOffset should be atleast greater than timIeOffset */
7558 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7559 (pSendbeaconParams->p2pIeOffset <
7560 pSendbeaconParams->timIeOffset))
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7563 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307564 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307565 VOS_ASSERT( 0 );
7566 return WDI_STATUS_E_FAILURE;
7567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7569 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 /* Copy the beacon template to local buffer */
7571 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7572 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7573 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7574
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7576 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 if(IS_WDI_STATUS_FAILURE(status))
7578 {
7579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7580 "Failure in SEND BEACON REQ Params WDI API" );
7581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 vos_mem_free(pSendbeaconParams);
7583 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007584}
Jeff Johnson295189b2012-06-20 16:38:30 -07007585/*
7586 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7587 * No need to send any response to PE in this case
7588 */
7589void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7590{
Jeff Johnson295189b2012-06-20 16:38:30 -07007591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007592 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 return ;
7594}
7595
Jeff Johnson295189b2012-06-20 16:38:30 -07007596/*
7597 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7598 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7599 * send probe response
7600 */
7601VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7602 tSendProbeRespParams *pSendProbeRspParams)
7603{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007604 WDI_Status status = WDI_STATUS_SUCCESS;
7605 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7606 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007608 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007609
7610 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307611 {
7612 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007613 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307614 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007615
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007617 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007619 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 /* Copy the Probe Response template to local buffer */
7622 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007623 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 pSendProbeRspParams->pProbeRespTemplate,
7625 pSendProbeRspParams->probeRespTemplateLen);
7626 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007627 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7629 WDI_PROBE_REQ_BITMAP_IE_LEN);
7630
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007631 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007632
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007633 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 if(IS_WDI_STATUS_FAILURE(status))
7636 {
7637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7638 "Failure in SEND Probe RSP Params WDI API" );
7639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007640 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007641 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007642 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007643}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007644#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007645/*
7646 * FUNCTION: WDA_SetMaxTxPowerCallBack
7647 * send the response to PE with power value received from WDI
7648 */
7649void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7650 void* pUserData)
7651{
7652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7653 tWDA_CbContext *pWDA = NULL;
7654 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7655
7656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 if(NULL == pWdaParams)
7659 {
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007661 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 VOS_ASSERT(0) ;
7663 return ;
7664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007665 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307666 if (NULL == pWDA)
7667 {
7668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7669 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7671 vos_mem_free(pWdaParams->wdaMsgParam);
7672 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307673 VOS_ASSERT(0);
7674 return ;
7675 }
7676
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 if( NULL == pMaxTxPowerParams )
7679 {
7680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007681 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007682 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7684 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 return ;
7686 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007687
Jeff Johnson295189b2012-06-20 16:38:30 -07007688
7689 /*need to free memory for the pointers used in the
7690 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7692 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007694
Jeff Johnson295189b2012-06-20 16:38:30 -07007695
7696 /* send response to UMAC*/
7697 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7698
7699 return;
7700}
Jeff Johnson295189b2012-06-20 16:38:30 -07007701/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007702 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 * Request to WDI to send set Max Tx Power Request
7704 */
7705 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7706 tMaxTxPowerParams *MaxTxPowerParams)
7707{
7708 WDI_Status status = WDI_STATUS_SUCCESS;
7709 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7710 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007711
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007713 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007714
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7716 sizeof(WDI_SetMaxTxPowerParamsType));
7717 if(NULL == wdiSetMaxTxPowerParams)
7718 {
7719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 VOS_ASSERT(0);
7722 return VOS_STATUS_E_NOMEM;
7723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7725 if(NULL == pWdaParams)
7726 {
7727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 vos_mem_free(wdiSetMaxTxPowerParams);
7730 VOS_ASSERT(0);
7731 return VOS_STATUS_E_NOMEM;
7732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 /* Copy.Max.Tx.Power Params to WDI structure */
7734 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7735 MaxTxPowerParams->bssId,
7736 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7738 MaxTxPowerParams->selfStaMacAddr,
7739 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7741 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 pWdaParams->pWdaContext = pWDA;
7744 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 /* store Params pass it to WDI */
7746 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7748 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 if(IS_WDI_STATUS_FAILURE(status))
7750 {
7751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7752 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7754 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007755 /* send response to UMAC*/
7756 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 }
7758 return CONVERT_WDI2VOS_STATUS(status);
7759
7760}
Jeff Johnson295189b2012-06-20 16:38:30 -07007761#endif
schang86c22c42013-03-13 18:41:24 -07007762
7763/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007764 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7765 * send the response to PE with power value received from WDI
7766 */
7767void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7768 *pwdiSetMaxTxPowerPerBandRsp,
7769 void* pUserData)
7770{
7771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7772 tWDA_CbContext *pWDA = NULL;
7773 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7774
7775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7776 "<------ %s ", __func__);
7777 if (NULL == pWdaParams)
7778 {
7779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7780 "%s: pWdaParams received NULL", __func__);
7781 VOS_ASSERT(0);
7782 return ;
7783 }
7784 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307785 if (NULL == pWDA)
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7788 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7790 vos_mem_free(pWdaParams->wdaMsgParam);
7791 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307792 VOS_ASSERT(0);
7793 return ;
7794 }
7795
Arif Hussaina5ebce02013-08-09 15:09:58 -07007796 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7797 if ( NULL == pMxTxPwrPerBandParams )
7798 {
7799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7800 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7801 VOS_ASSERT(0);
7802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7803 vos_mem_free(pWdaParams);
7804 return;
7805 }
7806
7807 /*need to free memory for the pointers used in the
7808 WDA Process.Set Max Tx Power Req function*/
7809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7810 vos_mem_free(pWdaParams);
7811 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7812
7813 /* send response to UMAC*/
7814 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7815 pMxTxPwrPerBandParams, 0);
7816
7817 return;
7818}
7819
7820/*
7821 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7822 * Request to WDI to send set Max Tx Power Per band Request
7823 */
7824 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7825 tMaxTxPowerPerBandParams
7826 *MaxTxPowerPerBandParams)
7827{
7828 WDI_Status status = WDI_STATUS_SUCCESS;
7829 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7830 tWDA_ReqParams *pWdaParams = NULL;
7831
7832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7833 "------> %s ", __func__);
7834
7835 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7836 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7837
7838 if (NULL == wdiSetMxTxPwrPerBandParams)
7839 {
7840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7841 "%s: VOS MEM Alloc Failure", __func__);
7842 VOS_ASSERT(0);
7843 return VOS_STATUS_E_NOMEM;
7844 }
7845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7846 if (NULL == pWdaParams)
7847 {
7848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7849 "%s: VOS MEM Alloc Failure", __func__);
7850 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7851 VOS_ASSERT(0);
7852 return VOS_STATUS_E_NOMEM;
7853 }
7854 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7855 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7856 MaxTxPowerPerBandParams->bandInfo;
7857 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7858 MaxTxPowerPerBandParams->power;
7859 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7860 pWdaParams->pWdaContext = pWDA;
7861 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7862 /* store Params pass it to WDI */
7863 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7864 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7865 WDA_SetMaxTxPowerPerBandCallBack,
7866 pWdaParams);
7867 if (IS_WDI_STATUS_FAILURE(status))
7868 {
7869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7870 "Failure in SET MAX TX Power REQ Params WDI API,"
7871 " free all the memory");
7872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7873 vos_mem_free(pWdaParams);
7874 /* send response to UMAC*/
7875 WDA_SendMsg(pWDA,
7876 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7877 MaxTxPowerPerBandParams, 0);
7878 }
7879 return CONVERT_WDI2VOS_STATUS(status);
7880}
7881
7882/*
schang86c22c42013-03-13 18:41:24 -07007883 * FUNCTION: WDA_SetTxPowerCallBack
7884 * send the response to PE with power value received from WDI
7885 */
7886void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7887 void* pUserData)
7888{
7889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7890 tWDA_CbContext *pWDA = NULL;
7891 tSirSetTxPowerReq *pTxPowerParams = NULL;
7892
7893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7894 "<------ %s ", __func__);
7895 if(NULL == pWdaParams)
7896 {
7897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7898 "%s: pWdaParams received NULL", __func__);
7899 VOS_ASSERT(0) ;
7900 return ;
7901 }
7902 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307903 if (NULL == pWDA)
7904 {
7905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7906 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7908 vos_mem_free(pWdaParams->wdaMsgParam);
7909 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307910 VOS_ASSERT(0);
7911 return ;
7912 }
7913
schang86c22c42013-03-13 18:41:24 -07007914 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7915 if(NULL == pTxPowerParams)
7916 {
7917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7918 "%s: pTxPowerParams received NULL " ,__func__);
7919 VOS_ASSERT(0);
7920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7921 vos_mem_free(pWdaParams);
7922 return ;
7923 }
7924
7925 /*need to free memory for the pointers used in the
7926 WDA Process.Set Max Tx Power Req function*/
7927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7928 vos_mem_free(pWdaParams);
7929
7930 /* send response to UMAC*/
7931 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7932 return;
7933}
7934
7935/*
7936 * FUNCTION: WDA_ProcessSetTxPowerReq
7937 * Request to WDI to send set Tx Power Request
7938 */
7939 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7940 tSirSetTxPowerReq *txPowerParams)
7941{
7942 WDI_Status status = WDI_STATUS_SUCCESS;
7943 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7944 tWDA_ReqParams *pWdaParams = NULL;
7945
7946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7947 "------> %s ", __func__);
7948
7949 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7950 sizeof(WDI_SetTxPowerParamsType));
7951 if(NULL == wdiSetTxPowerParams)
7952 {
7953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7954 "%s: VOS MEM Alloc Failure", __func__);
7955 VOS_ASSERT(0);
7956 return VOS_STATUS_E_NOMEM;
7957 }
7958 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7959 if(NULL == pWdaParams)
7960 {
7961 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7962 "%s: VOS MEM Alloc Failure", __func__);
7963 vos_mem_free(wdiSetTxPowerParams);
7964 VOS_ASSERT(0);
7965 return VOS_STATUS_E_NOMEM;
7966 }
7967 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7968 txPowerParams->bssIdx;
7969 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7970 txPowerParams->mwPower;
7971 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7972 pWdaParams->pWdaContext = pWDA;
7973 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7974 /* store Params pass it to WDI */
7975 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7976 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7977 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7978 if(IS_WDI_STATUS_FAILURE(status))
7979 {
7980 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7981 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7983 vos_mem_free(pWdaParams);
7984 /* send response to UMAC*/
7985 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7986 }
7987 return CONVERT_WDI2VOS_STATUS(status);
7988}
7989
Jeff Johnson295189b2012-06-20 16:38:30 -07007990/*
7991 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7992 * Free the memory. No need to send any response to PE in this case
7993 */
7994void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7995{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7997
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007999 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008000
8001 if(NULL == pWdaParams)
8002 {
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008004 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008005 VOS_ASSERT(0) ;
8006 return ;
8007 }
8008
8009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8010 vos_mem_free(pWdaParams->wdaMsgParam) ;
8011 vos_mem_free(pWdaParams);
8012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 /*
8014 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8015 * so just free the request param here
8016 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 return ;
8018}
8019
Jeff Johnson295189b2012-06-20 16:38:30 -07008020/*
8021 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8022 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8023 */
8024VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8025 tP2pPsParams *pP2pPsConfigParams)
8026{
8027 WDI_Status status = WDI_STATUS_SUCCESS ;
8028 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8029 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8030 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008031 tWDA_ReqParams *pWdaParams = NULL;
8032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 if(NULL == wdiSetP2PGONOAReqParam)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308039 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 VOS_ASSERT(0);
8041 return VOS_STATUS_E_NOMEM;
8042 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043
8044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8045 if(NULL == pWdaParams)
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008048 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008049 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008050 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008051 VOS_ASSERT(0);
8052 return VOS_STATUS_E_NOMEM;
8053 }
8054
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8056 pP2pPsConfigParams->opp_ps;
8057 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8058 pP2pPsConfigParams->ctWindow;
8059 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8060 pP2pPsConfigParams->count;
8061 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8062 pP2pPsConfigParams->duration;
8063 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8064 pP2pPsConfigParams->interval;
8065 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8066 pP2pPsConfigParams->single_noa_duration;
8067 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8068 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008069
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8071 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008072 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8073
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008075 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8076 pWdaParams->pWdaContext = pWDA;
8077
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008079 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8080
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 if(IS_WDI_STATUS_FAILURE(status))
8082 {
8083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8084 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8086 vos_mem_free(pWdaParams->wdaMsgParam);
8087 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 return CONVERT_WDI2VOS_STATUS(status);
8090
Jeff Johnson295189b2012-06-20 16:38:30 -07008091}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308092
8093#ifdef FEATURE_WLAN_TDLS
8094/*
8095 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8096 * Free the memory. No need to send any response to PE in this case
8097 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308098void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8099 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308100{
8101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8102 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308103 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308104
8105
8106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8107 "<------ %s " ,__func__);
8108 if(NULL == pWdaParams)
8109 {
8110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8111 "%s: pWdaParams received NULL", __func__);
8112 VOS_ASSERT(0) ;
8113 return ;
8114 }
8115 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8116
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308117 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308118 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8120 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8122 vos_mem_free(pWdaParams->wdaMsgParam);
8123 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308124 VOS_ASSERT(0);
8125 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308126 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308127
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308128 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8129 if( NULL == pTdlsLinkEstablishParams )
8130 {
8131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8132 "%s: pTdlsLinkEstablishParams "
8133 "received NULL " ,__func__);
8134 VOS_ASSERT(0);
8135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8136 vos_mem_free(pWdaParams);
8137 return ;
8138 }
8139 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8140 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308142 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308143 /* send response to UMAC*/
8144 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8145
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308146 return ;
8147}
8148
8149VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8150 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8151{
8152 WDI_Status status = WDI_STATUS_SUCCESS ;
8153 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8154 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8155 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8156 tWDA_ReqParams *pWdaParams = NULL;
8157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8158 "------> %s " ,__func__);
8159 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8160 {
8161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8162 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308163 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308164 VOS_ASSERT(0);
8165 return VOS_STATUS_E_NOMEM;
8166 }
8167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8168 if(NULL == pWdaParams)
8169 {
8170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8171 "%s: VOS MEM Alloc Failure", __func__);
8172 vos_mem_free(pTdlsLinkEstablishParams);
8173 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8174 VOS_ASSERT(0);
8175 return VOS_STATUS_E_NOMEM;
8176 }
8177 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308178 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308179 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308180 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308181 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308182 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308183 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308184 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308185 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308186 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308187 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8188 pTdlsLinkEstablishParams->isOffChannelSupported;
8189
8190 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8191 pTdlsLinkEstablishParams->validChannels,
8192 pTdlsLinkEstablishParams->validChannelsLen);
8193
8194 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8195 pTdlsLinkEstablishParams->validChannelsLen;
8196
8197 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8198 pTdlsLinkEstablishParams->validOperClasses,
8199 pTdlsLinkEstablishParams->validOperClassesLen);
8200 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8201 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308202
8203 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8204 /* Store msg pointer from PE, as this will be used for response */
8205 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8206 /* store Params pass it to WDI */
8207 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8208 pWdaParams->pWdaContext = pWDA;
8209
8210 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8211 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8212 WDA_SetTDLSLinkEstablishReqParamsCallback,
8213 pWdaParams);
8214 if(IS_WDI_STATUS_FAILURE(status))
8215 {
8216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8219 vos_mem_free(pWdaParams->wdaMsgParam);
8220 vos_mem_free(pWdaParams);
8221 }
8222 return CONVERT_WDI2VOS_STATUS(status);
8223}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308224
8225// tdlsoffchan
8226void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8227 void* pUserData)
8228{
8229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8230 tWDA_CbContext *pWDA = NULL;
8231 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8232
8233
8234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8235 "<------ %s " ,__func__);
8236 if(NULL == pWdaParams)
8237 {
8238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8239 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308240 VOS_ASSERT(0) ;
8241 return ;
8242 }
8243 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8244
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308245 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308246 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8248 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8250 vos_mem_free(pWdaParams->wdaMsgParam);
8251 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308252 VOS_ASSERT(0);
8253 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308254 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308255
Atul Mittalc0f739f2014-07-31 13:47:47 +05308256 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308257 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8260 "%s: pTdlsChanSwitchParams "
8261 "received NULL " ,__func__);
8262 VOS_ASSERT(0);
8263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8264 vos_mem_free(pWdaParams);
8265 return ;
8266 }
8267 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8268 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8270 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308271 /* send response to UMAC*/
8272 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308273
8274 return ;
8275}
8276VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8277 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8278{
8279 WDI_Status status = WDI_STATUS_SUCCESS ;
8280 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8281 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8282 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8283 tWDA_ReqParams *pWdaParams = NULL;
8284
8285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8286 "Enter: %s ",__func__);
8287 if(NULL == wdiSetTDLSChanSwitchReqParam)
8288 {
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8290 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308291 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308292 VOS_ASSERT(0);
8293 return VOS_STATUS_E_NOMEM;
8294 }
8295
8296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8297 if(NULL == pWdaParams)
8298 {
8299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8300 "%s: VOS MEM Alloc Failure", __func__);
8301 vos_mem_free(pTdlsChanSwitchParams);
8302 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8303 VOS_ASSERT(0);
8304 return VOS_STATUS_E_NOMEM;
8305 }
8306 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8307 pTdlsChanSwitchParams->staIdx;
8308 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8309 pTdlsChanSwitchParams->tdlsSwMode;
8310 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8311 pTdlsChanSwitchParams->operClass;
8312 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8313 pTdlsChanSwitchParams->tdlsOffCh;
8314 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8315 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8316
8317
8318 /* Store msg pointer from PE, as this will be used for response */
8319 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8320 /* store Params pass it to WDI */
8321 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8322 pWdaParams->pWdaContext = pWDA;
8323 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8324 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8325 WDA_SetTDLSChanSwitchReqParamsCallback,
8326 pWdaParams);
8327 if(IS_WDI_STATUS_FAILURE(status))
8328 {
8329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8330 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8332 vos_mem_free(pWdaParams->wdaMsgParam);
8333 vos_mem_free(pWdaParams);
8334 }
8335 return CONVERT_WDI2VOS_STATUS(status);
8336}
8337#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308338
8339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340#ifdef WLAN_FEATURE_VOWIFI_11R
8341/*
8342 * FUNCTION: WDA_AggrAddTSReqCallback
8343 * send ADD AGGREGATED TS RSP back to PE
8344 */
8345void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8346{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308348 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008349 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008352 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008353 if(NULL == pWdaParams)
8354 {
8355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008356 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008357 VOS_ASSERT(0) ;
8358 return ;
8359 }
8360
8361 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308362 if (NULL == pWDA)
8363 {
8364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8365 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8367 vos_mem_free(pWdaParams->wdaMsgParam);
8368 vos_mem_free(pWdaParams);
8369
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308370 VOS_ASSERT(0);
8371 return ;
8372 }
8373
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008374 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375
8376 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8377 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008378 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008381
8382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8383 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 return ;
8385}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008386/*
8387 * FUNCTION: WDA_ProcessAddTSReq
8388 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8389 */
8390VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8391 tAggrAddTsParams *pAggrAddTsReqParams)
8392{
8393 WDI_Status status = WDI_STATUS_SUCCESS ;
8394 int i;
8395 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008396 tWDA_ReqParams *pWdaParams = NULL;
8397
8398
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8402 sizeof(WDI_AggrAddTSReqParamsType)) ;
8403 if(NULL == wdiAggrAddTSReqParam)
8404 {
8405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008406 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308407 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 VOS_ASSERT(0);
8409 return VOS_STATUS_E_NOMEM;
8410 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008411
8412
8413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8414 if(NULL == pWdaParams)
8415 {
8416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008417 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008418 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008419 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008420 VOS_ASSERT(0);
8421 return VOS_STATUS_E_NOMEM;
8422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8424 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8425 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8427 {
8428 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8429 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8430 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8432 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8433 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8434 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8435 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8436 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8437 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8438 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8439 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8440 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8441 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8442 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8443 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8444 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8445 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8446 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8448 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8450 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8451 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8452 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8453 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8454 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8455 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8456 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8457 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8458 pAggrAddTsReqParams->tspec[i].inactInterval;
8459 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8460 pAggrAddTsReqParams->tspec[i].suspendInterval;
8461 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8462 pAggrAddTsReqParams->tspec[i].svcStartTime;
8463 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8464 pAggrAddTsReqParams->tspec[i].minDataRate;
8465 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8466 pAggrAddTsReqParams->tspec[i].meanDataRate;
8467 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8468 pAggrAddTsReqParams->tspec[i].peakDataRate;
8469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8470 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8472 pAggrAddTsReqParams->tspec[i].delayBound;
8473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8474 pAggrAddTsReqParams->tspec[i].minPhyRate;
8475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8476 pAggrAddTsReqParams->tspec[i].surplusBw;
8477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8478 pAggrAddTsReqParams->tspec[i].mediumTime;
8479 }
8480
8481 /* TODO: tAggrAddTsParams doesn't have the following fields */
8482#if 0
8483 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8484 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8485 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8486 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8487#endif
8488 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8489
8490 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008491 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008493 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8494
8495 pWdaParams->pWdaContext = pWDA;
8496
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008498 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8499
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 if(IS_WDI_STATUS_FAILURE(status))
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8503 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8505 vos_mem_free(pWdaParams);
8506
8507 /* send the failure response back to PE*/
8508 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8509 {
8510 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8511 }
8512
8513 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8514 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 return CONVERT_WDI2VOS_STATUS(status) ;
8517}
8518#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008519/*
Mihir Shetea4306052014-03-25 00:02:54 +05308520 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 * send Enter IMPS RSP back to PE
8522 */
Mihir Shetea4306052014-03-25 00:02:54 +05308523void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008524{
Mihir Shetea4306052014-03-25 00:02:54 +05308525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308526 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308527
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308529 "<------ %s status=%d" ,__func__,status);
8530 if(NULL == pWdaParams)
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8533 "%s: pWdaParams received NULL", __func__);
8534 VOS_ASSERT(0);
8535 return;
8536 }
8537
8538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308539 if (NULL == pWDA)
8540 {
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8542 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8544 vos_mem_free(pWdaParams->wdaMsgParam);
8545 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308546 VOS_ASSERT(0);
8547 return ;
8548 }
Mihir Shetea4306052014-03-25 00:02:54 +05308549
8550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8551 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008552 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 return ;
8554}
Mihir Shetea4306052014-03-25 00:02:54 +05308555
8556
8557/*
8558 * FUNCTION: WDA_EnterImpsReqCallback
8559 * Free memory and send Enter IMPS RSP back to PE.
8560 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8561 */
8562void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8563{
8564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308565 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308566
8567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8568 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8569
8570 if(NULL == pWdaParams)
8571 {
8572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8573 "%s: pWdaParams received NULL", __func__);
8574 VOS_ASSERT(0);
8575 return;
8576 }
8577
8578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308579 if (NULL == pWDA)
8580 {
8581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8582 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8584 vos_mem_free(pWdaParams->wdaMsgParam);
8585 vos_mem_free(pWdaParams);
8586
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308587 VOS_ASSERT(0);
8588 return ;
8589 }
8590
Mihir Shetea4306052014-03-25 00:02:54 +05308591
8592 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8593 {
8594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8595 vos_mem_free(pWdaParams);
8596 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8597 CONVERT_WDI2SIR_STATUS(wdiStatus));
8598 }
8599
8600 return;
8601}
Jeff Johnson295189b2012-06-20 16:38:30 -07008602/*
8603 * FUNCTION: WDA_ProcessEnterImpsReq
8604 * Request to WDI to Enter IMPS power state.
8605 */
8606VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8607{
8608 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308609 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8610 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308611 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008613 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308614
8615
8616 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8617 if (NULL == wdiEnterImpsReqParams)
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8620 "%s: VOS MEM Alloc Failure", __func__);
8621 VOS_ASSERT(0);
8622 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8623 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8624 return VOS_STATUS_E_NOMEM;
8625 }
8626
8627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8628 if (NULL == pWdaParams)
8629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8631 "%s: VOS MEM Alloc Failure", __func__);
8632 VOS_ASSERT(0);
8633 vos_mem_free(wdiEnterImpsReqParams);
8634 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8635 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8636 return VOS_STATUS_E_NOMEM;
8637 }
8638
8639 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8640 wdiEnterImpsReqParams->pUserData = pWdaParams;
8641
8642 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8643 pWdaParams->wdaMsgParam = NULL;
8644 pWdaParams->pWdaContext = pWDA;
8645
8646 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8647 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8648 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 if(IS_WDI_STATUS_FAILURE(status))
8650 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308651 if (! (failcnt & 0xF))
8652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8653 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8654 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308655 vos_mem_free(wdiEnterImpsReqParams);
8656 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008657 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 return CONVERT_WDI2VOS_STATUS(status) ;
8660}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308661
8662/*
8663 * FUNCTION: WDA_ExitImpsRespCallback
8664 * send Exit IMPS RSP back to PE
8665 */
8666void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8667{
8668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8669 tWDA_CbContext *pWDA;
8670
8671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8672 "<------ %s " ,__func__);
8673
8674 if (NULL == pWdaParams)
8675 {
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8677 "%s: pWdaParams received NULL", __func__);
8678 VOS_ASSERT(0);
8679 return;
8680 }
8681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8682
8683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8684 vos_mem_free(pWdaParams);
8685
8686 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8687 return;
8688}
8689
Jeff Johnson295189b2012-06-20 16:38:30 -07008690/*
8691 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 */
8693void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8694{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308698 if(NULL == pWdaParams)
8699 {
8700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8701 "%s: pWdaParams received NULL", __func__);
8702 VOS_ASSERT(0);
8703 return;
8704 }
8705
8706 if (IS_WDI_STATUS_FAILURE(status))
8707 {
8708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8709 vos_mem_free(pWdaParams);
8710 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8711 {
8712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8713 FL("reload wlan driver"));
8714 wpalWlanReload();
8715 }
8716 }
8717 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308719
Jeff Johnson295189b2012-06-20 16:38:30 -07008720/*
8721 * FUNCTION: WDA_ProcessExitImpsReq
8722 * Request to WDI to Exit IMPS power state.
8723 */
8724VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8725{
8726 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308727 tWDA_ReqParams *pWdaParams;
8728 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8729
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008731 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308732 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8733 sizeof(WDI_ExitImpsReqParamsType));
8734 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8737 "%s: VOS MEM Alloc Failure", __func__);
8738 VOS_ASSERT(0);
8739 return VOS_STATUS_E_NOMEM;
8740 }
8741 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8742 if(NULL == pWdaParams)
8743 {
8744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8745 "%s: VOS MEM Alloc Failure", __func__);
8746 VOS_ASSERT(0);
8747 vos_mem_free(wdiExitImpsReqParams);
8748 return VOS_STATUS_E_NOMEM;
8749 }
8750 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8751 wdiExitImpsReqParams->pUserData = pWdaParams;
8752
8753 /* Store param pointer as passed in by caller */
8754 /* store Params pass it to WDI */
8755 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8756 pWdaParams->pWdaContext = pWDA;
8757 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8758 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8759 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8760 pWdaParams);
8761 if (IS_WDI_STATUS_FAILURE(status))
8762 {
8763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8764 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8766 vos_mem_free(pWdaParams);
8767 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 return CONVERT_WDI2VOS_STATUS(status) ;
8770}
Jeff Johnson295189b2012-06-20 16:38:30 -07008771/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008772 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 * send Enter BMPS RSP back to PE
8774 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008775void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008776{
8777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308778 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008779 tEnterBmpsParams *pEnterBmpsRspParams;
8780
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008782 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 if(NULL == pWdaParams)
8784 {
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008786 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 VOS_ASSERT(0) ;
8788 return ;
8789 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008790
8791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308792 if (NULL == pWDA)
8793 {
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8795 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308796
8797 if(pWdaParams->wdaWdiApiMsgParam)
8798 {
8799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8800 }
8801 vos_mem_free(pWdaParams);
8802
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308803 VOS_ASSERT(0);
8804 return ;
8805 }
8806
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008807 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8808
8809 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008810 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008811
8812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008813 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008814 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8815
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 return ;
8817}
Jeff Johnson295189b2012-06-20 16:38:30 -07008818/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008819 * FUNCTION: WDA_EnterBmpsReqCallback
8820 * Free memory and send Enter BMPS RSP back to PE.
8821 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8822 */
8823void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8824{
8825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308826 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008827 tEnterBmpsParams *pEnterBmpsRspParams;
8828
8829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8830 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8831
8832 if(NULL == pWdaParams)
8833 {
8834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8835 "%s: pWdaParams received NULL", __func__);
8836 VOS_ASSERT(0);
8837 return;
8838 }
8839
8840 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308841 if (NULL == pWDA)
8842 {
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8844 "%s:pWDA is NULL", __func__);
8845 VOS_ASSERT(0);
8846 return ;
8847 }
8848
Yue Ma7f44bbe2013-04-12 11:47:39 -07008849 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8850 pEnterBmpsRspParams->status = wdiStatus;
8851
8852 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8853 {
8854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8855 vos_mem_free(pWdaParams);
8856 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8857 }
8858
8859 return;
8860}
8861/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 * FUNCTION: WDA_ProcessEnterBmpsReq
8863 * Request to WDI to Enter BMPS power state.
8864 */
8865VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8866 tEnterBmpsParams *pEnterBmpsReqParams)
8867{
8868 WDI_Status status = WDI_STATUS_SUCCESS;
8869 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8870 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008872 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8874 {
8875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008876 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 VOS_ASSERT(0);
8878 return VOS_STATUS_E_FAILURE;
8879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8881 if (NULL == wdiEnterBmpsReqParams)
8882 {
8883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008886 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8887 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 return VOS_STATUS_E_NOMEM;
8889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8891 if (NULL == pWdaParams)
8892 {
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 VOS_ASSERT(0);
8896 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008897 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8898 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 return VOS_STATUS_E_NOMEM;
8900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8902 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8903 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8904 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008905 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008906 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8907 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8908 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008909 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8910 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008911
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 /* Store param pointer as passed in by caller */
8913 /* store Params pass it to WDI */
8914 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008915 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008917 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008918 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 if (IS_WDI_STATUS_FAILURE(status))
8920 {
8921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8922 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008924 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008926 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008928 return CONVERT_WDI2VOS_STATUS(status);
8929}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008930
8931
8932static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8933 WDI_Status wdiStatus,
8934 tExitBmpsParams *pExitBmpsReqParams)
8935{
8936 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8937
8938 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8939}
8940
8941
Jeff Johnson295189b2012-06-20 16:38:30 -07008942/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008943 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 * send Exit BMPS RSP back to PE
8945 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008946void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008947{
8948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308949 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008950 tExitBmpsParams *pExitBmpsRspParams;
8951
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 if(NULL == pWdaParams)
8955 {
8956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 VOS_ASSERT(0) ;
8959 return ;
8960 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008961
8962 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308963 if (NULL == pWDA)
8964 {
8965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8966 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308967
8968 if(pWdaParams->wdaWdiApiMsgParam)
8969 {
8970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8971 }
8972 vos_mem_free(pWdaParams);
8973
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308974 VOS_ASSERT(0);
8975 return ;
8976 }
8977
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008978 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8979
8980 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008981 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams) ;
8985
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008986 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008987 return ;
8988}
Jeff Johnson295189b2012-06-20 16:38:30 -07008989/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008990 * FUNCTION: WDA_ExitBmpsReqCallback
8991 * Free memory and send Exit BMPS RSP back to PE.
8992 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8993 */
8994void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8995{
8996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308997 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008998 tExitBmpsParams *pExitBmpsRspParams;
8999
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9001 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9002
9003 if(NULL == pWdaParams)
9004 {
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9006 "%s: pWdaParams received NULL", __func__);
9007 VOS_ASSERT(0);
9008 return;
9009 }
9010
9011 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309012 if (NULL == pWDA)
9013 {
9014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "%s:pWDA is NULL", __func__);
9016 VOS_ASSERT(0);
9017 return ;
9018 }
9019
Yue Ma7f44bbe2013-04-12 11:47:39 -07009020 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9021 pExitBmpsRspParams->status = wdiStatus;
9022
9023 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9024 {
9025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9026 vos_mem_free(pWdaParams);
9027 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9028 }
9029
9030 return;
9031}
9032/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 * FUNCTION: WDA_ProcessExitBmpsReq
9034 * Request to WDI to Exit BMPS power state.
9035 */
9036VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9037 tExitBmpsParams *pExitBmpsReqParams)
9038{
9039 WDI_Status status = WDI_STATUS_SUCCESS ;
9040 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9041 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9042 sizeof(WDI_ExitBmpsReqParamsType)) ;
9043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 if(NULL == wdiExitBmpsReqParams)
9047 {
9048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009051 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 return VOS_STATUS_E_NOMEM;
9053 }
9054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9055 if(NULL == pWdaParams)
9056 {
9057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 VOS_ASSERT(0);
9060 vos_mem_free(wdiExitBmpsReqParams);
9061 return VOS_STATUS_E_NOMEM;
9062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009064
9065 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9066
Yue Ma7f44bbe2013-04-12 11:47:39 -07009067 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9068 wdiExitBmpsReqParams->pUserData = pWdaParams;
9069
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 /* Store param pointer as passed in by caller */
9071 /* store Params pass it to WDI */
9072 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9073 pWdaParams->pWdaContext = pWDA;
9074 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009076 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 if(IS_WDI_STATUS_FAILURE(status))
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9080 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9082 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009083 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 return CONVERT_WDI2VOS_STATUS(status) ;
9086}
Jeff Johnson295189b2012-06-20 16:38:30 -07009087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009088 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 * send Enter UAPSD RSP back to PE
9090 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009091void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009092{
9093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309094 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009095 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 if(NULL == pWdaParams)
9099 {
9100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 VOS_ASSERT(0) ;
9103 return ;
9104 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009105
9106 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309107 if (NULL == pWDA)
9108 {
9109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9110 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309111
9112 if(pWdaParams->wdaWdiApiMsgParam)
9113 {
9114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9115 }
9116 vos_mem_free(pWdaParams);
9117
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309118 VOS_ASSERT(0);
9119 return ;
9120 }
9121
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009122 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9123
9124 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009125 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009126
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9128 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009129 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 return ;
9131}
Jeff Johnson295189b2012-06-20 16:38:30 -07009132/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009133 * FUNCTION: WDA_EnterUapsdReqCallback
9134 * Free memory and send Enter UAPSD RSP back to PE.
9135 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9136 */
9137void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9138{
9139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9140 tWDA_CbContext *pWDA;
9141 tUapsdParams *pEnterUapsdRsqParams;
9142
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9144 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9145
9146 if(NULL == pWdaParams)
9147 {
9148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9149 "%s: pWdaParams received NULL", __func__);
9150 VOS_ASSERT(0);
9151 return;
9152 }
9153
9154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309155 if (NULL == pWDA)
9156 {
9157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9158 "%s:pWDA is NULL", __func__);
9159 VOS_ASSERT(0);
9160 return ;
9161 }
9162
Yue Ma7f44bbe2013-04-12 11:47:39 -07009163 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9164 pEnterUapsdRsqParams->status = wdiStatus;
9165
9166 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9167 {
9168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9169 vos_mem_free(pWdaParams);
9170 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9171 }
9172
9173 return;
9174}
9175/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 * FUNCTION: WDA_ProcessEnterUapsdReq
9177 * Request to WDI to Enter UAPSD power state.
9178 */
9179VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9180 tUapsdParams *pEnterUapsdReqParams)
9181{
9182 WDI_Status status = WDI_STATUS_SUCCESS ;
9183 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9184 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9185 sizeof(WDI_EnterUapsdReqParamsType)) ;
9186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009188 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 if(NULL == wdiEnterUapsdReqParams)
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 VOS_ASSERT(0);
9194 return VOS_STATUS_E_NOMEM;
9195 }
9196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9197 if(NULL == pWdaParams)
9198 {
9199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 VOS_ASSERT(0);
9202 vos_mem_free(wdiEnterUapsdReqParams);
9203 return VOS_STATUS_E_NOMEM;
9204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009205 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9206 pEnterUapsdReqParams->beDeliveryEnabled;
9207 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9208 pEnterUapsdReqParams->beTriggerEnabled;
9209 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9210 pEnterUapsdReqParams->bkDeliveryEnabled;
9211 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9212 pEnterUapsdReqParams->bkTriggerEnabled;
9213 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9214 pEnterUapsdReqParams->viDeliveryEnabled;
9215 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9216 pEnterUapsdReqParams->viTriggerEnabled;
9217 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9218 pEnterUapsdReqParams->voDeliveryEnabled;
9219 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9220 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009221 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009222
Yue Ma7f44bbe2013-04-12 11:47:39 -07009223 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9224 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009225
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 /* Store param pointer as passed in by caller */
9227 /* store Params pass it to WDI */
9228 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9229 pWdaParams->pWdaContext = pWDA;
9230 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009232 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 if(IS_WDI_STATUS_FAILURE(status))
9234 {
9235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9236 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9237 vos_mem_free(pWdaParams->wdaMsgParam) ;
9238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9239 vos_mem_free(pWdaParams) ;
9240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 return CONVERT_WDI2VOS_STATUS(status) ;
9242}
Jeff Johnson295189b2012-06-20 16:38:30 -07009243/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009244 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 * send Exit UAPSD RSP back to PE
9246 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009247void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009248{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009249
9250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9251 tWDA_CbContext *pWDA;
9252 tExitUapsdParams *pExitUapsdRspParams;
9253
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009255 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009256 if(NULL == pWdaParams)
9257 {
9258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009259 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009260 VOS_ASSERT(0);
9261 return;
9262 }
9263
9264 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9265 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9266
9267 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009268 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009269
9270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9271 vos_mem_free(pWdaParams) ;
9272
9273 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 return ;
9275}
Jeff Johnson295189b2012-06-20 16:38:30 -07009276/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009277 * FUNCTION: WDA_ExitUapsdReqCallback
9278 * Free memory and send Exit UAPSD RSP back to PE.
9279 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9280 */
9281void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9282{
9283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309284 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009285 tExitUapsdParams *pExitUapsdRspParams;
9286
9287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9288 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9289
9290 if(NULL == pWdaParams)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9293 "%s: pWdaParams received NULL", __func__);
9294 VOS_ASSERT(0);
9295 return;
9296 }
9297
9298 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309299 if (NULL == pWDA)
9300 {
9301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9302 "%s:pWDA is NULL", __func__);
9303 VOS_ASSERT(0);
9304 return ;
9305 }
9306
Yue Ma7f44bbe2013-04-12 11:47:39 -07009307 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9308 pExitUapsdRspParams->status = wdiStatus;
9309
9310 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9311 {
9312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9313 vos_mem_free(pWdaParams);
9314 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9315 }
9316
9317 return;
9318}
9319/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 * FUNCTION: WDA_ProcessExitUapsdReq
9321 * Request to WDI to Exit UAPSD power state.
9322 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009323VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9324 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009325{
9326 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009327 tWDA_ReqParams *pWdaParams ;
9328 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9329 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9330 sizeof(WDI_ExitUapsdReqParamsType)) ;
9331
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009334
9335 if(NULL == wdiExitUapsdReqParams)
9336 {
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009338 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009339 VOS_ASSERT(0);
9340 return VOS_STATUS_E_NOMEM;
9341 }
9342 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9343 if(NULL == pWdaParams)
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009346 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009347 VOS_ASSERT(0);
9348 vos_mem_free(wdiExitUapsdReqParams);
9349 return VOS_STATUS_E_NOMEM;
9350 }
9351
9352 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009353 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9354 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009355
9356 /* Store param pointer as passed in by caller */
9357 /* store Params pass it to WDI */
9358 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9359 pWdaParams->pWdaContext = pWDA;
9360 pWdaParams->wdaMsgParam = pExitUapsdParams;
9361
Yue Ma7f44bbe2013-04-12 11:47:39 -07009362 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 if(IS_WDI_STATUS_FAILURE(status))
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9366 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009367 vos_mem_free(pWdaParams->wdaMsgParam) ;
9368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9369 vos_mem_free(pWdaParams) ;
9370
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 return CONVERT_WDI2VOS_STATUS(status) ;
9373}
9374
Jeff Johnson295189b2012-06-20 16:38:30 -07009375/*
9376 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9377 *
9378 */
9379void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9380{
9381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 if(NULL == pWdaParams)
9385 {
9386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009387 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 VOS_ASSERT(0) ;
9389 return ;
9390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 if( pWdaParams != NULL )
9392 {
9393 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9394 {
9395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9396 }
9397 if( pWdaParams->wdaMsgParam != NULL )
9398 {
9399 vos_mem_free(pWdaParams->wdaMsgParam) ;
9400 }
9401 vos_mem_free(pWdaParams) ;
9402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 return ;
9404}
Jeff Johnson295189b2012-06-20 16:38:30 -07009405/*
9406 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9407 * Request to WDI to set the power save params at start.
9408 */
9409VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9410 tSirPowerSaveCfg *pPowerSaveCfg)
9411{
9412 WDI_Status status = WDI_STATUS_SUCCESS ;
9413 tHalCfg *tlvStruct = NULL ;
9414 tANI_U8 *tlvStructStart = NULL ;
9415 v_PVOID_t *configParam;
9416 tANI_U32 configParamSize;
9417 tANI_U32 *configDataValue;
9418 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9419 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009421 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9423 {
9424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009425 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009427 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 return VOS_STATUS_E_FAILURE;
9429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9431 if (NULL == wdiPowerSaveCfg)
9432 {
9433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009436 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 return VOS_STATUS_E_NOMEM;
9438 }
9439 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9440 if(NULL == pWdaParams)
9441 {
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_ASSERT(0);
9445 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009446 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009447 return VOS_STATUS_E_NOMEM;
9448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9450 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 if(NULL == configParam)
9452 {
9453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009454 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009455 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 vos_mem_free(pWdaParams);
9457 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009458 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 return VOS_STATUS_E_NOMEM;
9460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 vos_mem_set(configParam, configParamSize, 0);
9462 wdiPowerSaveCfg->pConfigBuffer = configParam;
9463 tlvStruct = (tHalCfg *)configParam;
9464 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9466 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9467 tlvStruct->length = sizeof(tANI_U32);
9468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9469 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9471 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9473 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9474 tlvStruct->length = sizeof(tANI_U32);
9475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9476 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9478 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9480 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9481 tlvStruct->length = sizeof(tANI_U32);
9482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9483 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9485 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9487 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9488 tlvStruct->length = sizeof(tANI_U32);
9489 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9490 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009491 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9492 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9494 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9495 tlvStruct->length = sizeof(tANI_U32);
9496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9497 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9499 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9501 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9502 tlvStruct->length = sizeof(tANI_U32);
9503 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9504 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9506 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9508 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9509 tlvStruct->length = sizeof(tANI_U32);
9510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9511 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9513 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9515 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9516 tlvStruct->length = sizeof(tANI_U32);
9517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9518 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9519 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9520 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9522 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9523 tlvStruct->length = sizeof(tANI_U32);
9524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9525 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9526 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9527 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9529 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9530 tlvStruct->length = sizeof(tANI_U32);
9531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9532 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9534 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9536 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9537 tlvStruct->length = sizeof(tANI_U32);
9538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9539 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9541 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 /* store Params pass it to WDI */
9545 pWdaParams->wdaMsgParam = configParam;
9546 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9547 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9549 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 if(IS_WDI_STATUS_FAILURE(status))
9551 {
9552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9553 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9554 vos_mem_free(pWdaParams->wdaMsgParam);
9555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9556 vos_mem_free(pWdaParams);
9557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 return CONVERT_WDI2VOS_STATUS(status);
9560}
Jeff Johnson295189b2012-06-20 16:38:30 -07009561/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009562 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 *
9564 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009565void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009566{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9568
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009571
9572 if(NULL == pWdaParams)
9573 {
9574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9575 "%s: pWdaParams received NULL", __func__);
9576 VOS_ASSERT(0);
9577 return ;
9578 }
9579
9580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 vos_mem_free(pWdaParams);
9582
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 return ;
9584}
Jeff Johnson295189b2012-06-20 16:38:30 -07009585/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009586 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9587 * Free memory.
9588 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9589 */
9590void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9591{
9592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9593
9594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9595 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9596
9597 if(NULL == pWdaParams)
9598 {
9599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9600 "%s: pWdaParams received NULL", __func__);
9601 VOS_ASSERT(0);
9602 return;
9603 }
9604
9605 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9606 {
9607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9608 vos_mem_free(pWdaParams);
9609 }
9610
9611 return;
9612}
9613/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009614 * FUNCTION: WDA_SetUapsdAcParamsReq
9615 * Request to WDI to set the UAPSD params for an ac (sta mode).
9616 */
9617VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9618 tUapsdInfo *pUapsdInfo)
9619{
9620 WDI_Status status = WDI_STATUS_SUCCESS;
9621 tWDA_CbContext *pWDA = NULL ;
9622 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9623 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9624 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9625 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009627 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 if(NULL == wdiUapsdParams)
9629 {
9630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009632 VOS_ASSERT(0);
9633 return VOS_STATUS_E_NOMEM;
9634 }
9635 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9636 if(NULL == pWdaParams)
9637 {
9638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 VOS_ASSERT(0);
9641 vos_mem_free(wdiUapsdParams);
9642 return VOS_STATUS_E_NOMEM;
9643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9645 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9646 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9647 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9648 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9649 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009650 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9651 wdiUapsdParams->pUserData = pWdaParams;
9652
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009654 pWdaParams->pWdaContext = pWDA;
9655 /* Store param pointer as passed in by caller */
9656 pWdaParams->wdaMsgParam = pUapsdInfo;
9657 /* store Params pass it to WDI */
9658 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009660 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 if(IS_WDI_STATUS_FAILURE(status))
9663 {
9664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9665 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9667 vos_mem_free(pWdaParams);
9668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9670 return VOS_STATUS_SUCCESS;
9671 else
9672 return VOS_STATUS_E_FAILURE;
9673
Jeff Johnson295189b2012-06-20 16:38:30 -07009674}
9675/*
9676 * FUNCTION: WDA_ClearUapsdAcParamsReq
9677 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9678 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9679 * and again enter the UPASD with the modified params. Hence the disable
9680 * function was kept empty.
9681 *
9682 */
9683VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9684{
9685 /* do nothing */
9686 return VOS_STATUS_SUCCESS;
9687}
Jeff Johnson295189b2012-06-20 16:38:30 -07009688/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009689 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 *
9691 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009692void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009693{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009694 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9695
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009697 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009698
9699 if(NULL == pWdaParams)
9700 {
9701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009702 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009703 VOS_ASSERT(0) ;
9704 return ;
9705 }
9706
9707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9708 vos_mem_free(pWdaParams->wdaMsgParam);
9709 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009710
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 //print a msg, nothing else to do
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009713 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 return ;
9715}
Jeff Johnson295189b2012-06-20 16:38:30 -07009716/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009717 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9718 * Free memory.
9719 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9720 */
9721void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9722{
9723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9724
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9726 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9727
9728 if(NULL == pWdaParams)
9729 {
9730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9731 "%s: pWdaParams received NULL", __func__);
9732 VOS_ASSERT(0);
9733 return;
9734 }
9735
9736 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9737 {
9738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9739 vos_mem_free(pWdaParams->wdaMsgParam);
9740 vos_mem_free(pWdaParams);
9741 }
9742
9743 return;
9744}
9745/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 * FUNCTION: WDA_UpdateUapsdParamsReq
9747 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9748 */
9749VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9750 tUpdateUapsdParams* pUpdateUapsdInfo)
9751{
9752 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009753 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9755 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9756 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009757 tWDA_ReqParams *pWdaParams = NULL;
9758
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009761 if(NULL == wdiUpdateUapsdParams)
9762 {
9763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009765 VOS_ASSERT(0);
9766 return VOS_STATUS_E_NOMEM;
9767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9769 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9770 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009771 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9772 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009773
9774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9775 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 {
9777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009780 vos_mem_free(pUpdateUapsdInfo);
9781 vos_mem_free(wdiUpdateUapsdParams);
9782 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009785 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009787 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9788 pWdaParams->pWdaContext = pWDA;
9789
Jeff Johnson43971f52012-07-17 12:26:56 -07009790 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009791 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009792 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009793
Jeff Johnson43971f52012-07-17 12:26:56 -07009794 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 {
9796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9797 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009798 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9800 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009801 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009803 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009804}
Jeff Johnson295189b2012-06-20 16:38:30 -07009805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009806 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 *
9808 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009809void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009810{
9811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 if(WDI_STATUS_SUCCESS != wdiStatus)
9815 {
9816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009817 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009819 if(NULL == pWdaParams)
9820 {
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009822 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 VOS_ASSERT(0) ;
9824 return ;
9825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9827 vos_mem_free(pWdaParams->wdaMsgParam);
9828 vos_mem_free(pWdaParams);
9829 return ;
9830}
Jeff Johnson295189b2012-06-20 16:38:30 -07009831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009832 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9833 * Free memory.
9834 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9835 */
9836void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9837{
9838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9839
9840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9841 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9842
9843 if(NULL == pWdaParams)
9844 {
9845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9846 "%s: pWdaParams received NULL", __func__);
9847 VOS_ASSERT(0);
9848 return;
9849 }
9850
9851 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9852 {
9853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9854 vos_mem_free(pWdaParams->wdaMsgParam);
9855 vos_mem_free(pWdaParams);
9856 }
9857
9858 return;
9859}
9860/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9862 *
9863 */
9864VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9865 tSirWlanSetRxpFilters *pWlanSuspendParam)
9866{
Jeff Johnson295189b2012-06-20 16:38:30 -07009867 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009868 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309869 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309871 /* Sanity Check
9872 * This is very unlikely and add assert to collect more info next time */
9873 if(NULL == pWlanSuspendParam)
9874 {
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9876 "%s: pWlanSuspendParam received NULL", __func__);
9877 VOS_ASSERT(0) ;
9878 return VOS_STATUS_E_FAULT;
9879 }
9880 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9881 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009883 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 if(NULL == wdiRxpFilterParams)
9885 {
9886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009887 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 VOS_ASSERT(0);
9889 vos_mem_free(pWlanSuspendParam);
9890 return VOS_STATUS_E_NOMEM;
9891 }
9892 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9893 if(NULL == pWdaParams)
9894 {
9895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 VOS_ASSERT(0);
9898 vos_mem_free(wdiRxpFilterParams);
9899 vos_mem_free(pWlanSuspendParam);
9900 return VOS_STATUS_E_NOMEM;
9901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9903 pWlanSuspendParam->setMcstBcstFilter;
9904 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9905 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9906
Yue Ma7f44bbe2013-04-12 11:47:39 -07009907 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9908 wdiRxpFilterParams->pUserData = pWdaParams;
9909
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 pWdaParams->pWdaContext = pWDA;
9911 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9912 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009913 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009914 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009916 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 {
9918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9919 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009920 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9922 vos_mem_free(pWdaParams->wdaMsgParam);
9923 vos_mem_free(pWdaParams);
9924 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009925 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309927
9928/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309929 * FUNCTION: WDA_ProcessGetFrameLogReq
9930 * Request to WDI to get the Frame Log.
9931 */
9932VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9933 tAniGetFrameLogReq *pGetFrameLog)
9934{
9935 VOS_STATUS status = VOS_STATUS_SUCCESS;
9936 WDI_Status wstatus;
9937 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9938 tWDA_ReqParams *pWdaParams ;
9939
9940 /* Sanity Check*/
9941 if(NULL == pGetFrameLog)
9942 {
9943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309944 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +05309945 VOS_ASSERT(0) ;
9946 return VOS_STATUS_E_FAULT;
9947 }
9948
9949 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9950 sizeof(WDI_GetFrameLogReqInfoType));
9951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9952 "------> %s " ,__func__);
9953
9954 if(NULL == wdiGetFrameLogInfo)
9955 {
9956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9957 "%s: VOS MEM Alloc Failure", __func__);
9958 VOS_ASSERT(0);
9959 vos_mem_free(pGetFrameLog);
9960 return VOS_STATUS_E_NOMEM;
9961 }
9962
9963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9964 if(NULL == pWdaParams)
9965 {
9966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9967 "%s: VOS MEM Alloc Failure", __func__);
9968 VOS_ASSERT(0);
9969 vos_mem_free(wdiGetFrameLogInfo);
9970 vos_mem_free(pGetFrameLog);
9971 return VOS_STATUS_E_NOMEM;
9972 }
9973
9974 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9975
9976 pWdaParams->pWdaContext = pWDA;
9977 pWdaParams->wdaMsgParam = pGetFrameLog;
9978 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9979
9980 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9981 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9982 pWdaParams);
9983 if(IS_WDI_STATUS_FAILURE(wstatus))
9984 {
9985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9986 "Failure in get frame log REQ WDI API, free all the memory" );
9987 status = CONVERT_WDI2VOS_STATUS(wstatus);
9988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9989 vos_mem_free(pWdaParams->wdaMsgParam);
9990 vos_mem_free(pWdaParams);
9991 }
9992 return status;
9993}
9994
Sachin Ahuja715aafc2015-07-21 23:35:10 +05309995
9996/*
9997 * FUNCTION: WDA_FatalEventLogsRspCallback
9998 * recieves Flush Logs response from FW
9999 */
10000
10001void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10002 void* pUserData)
10003{
10004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10005
10006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10007 "<------ %s,wdiStatus:%d " ,
10008 __func__, wdiRsp->wdiStatus);
10009 if(NULL == pWdaParams)
10010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10012 "%s: pWdaParams received NULL", __func__);
10013 VOS_ASSERT(0);
10014 return ;
10015 }
10016
10017 if(NULL == pWdaParams->wdaMsgParam)
10018 {
10019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10020 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10021 VOS_ASSERT(0);
10022 vos_mem_free(pWdaParams);
10023 return ;
10024 }
10025
10026 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10027 {
10028 /*
10029 * If it is failure, it means JOb is already posted by FW
10030 * for logging, so for failure scenario also we will get the
10031 * done indication
10032 */
10033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10034 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10035 __func__, wdiRsp->wdiStatus);
10036 }
10037
10038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10039 vos_mem_free(pWdaParams->wdaMsgParam);
10040 vos_mem_free(pWdaParams);
10041
10042 return;
10043
10044}
10045
10046/*
10047 * FUNCTION: WDA_ProcessFatalEventLogsReq
10048 * Request to WDI to send the fatal Event Logs Req.
10049 */
10050
10051VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10052 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10053{
10054 VOS_STATUS status = VOS_STATUS_SUCCESS;
10055 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10056 tWDA_ReqParams *pWdaParams ;
10057 WDI_Status wstatus;
10058
10059
10060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10061 "------> %s " ,__func__);
10062 if (NULL == pFatalEventLogsReqParam)
10063 {
10064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10065 "%s: pMgmtLoggingInitParam received NULL", __func__);
10066 VOS_ASSERT(0) ;
10067 return VOS_STATUS_E_FAULT;
10068 }
10069 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10070 sizeof(WDI_FatalEventLogsReqInfoType));
10071 if(NULL == wdiFatalEventLogsReqInfo)
10072 {
10073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10074 "%s: VOS MEM Alloc Failure", __func__);
10075 VOS_ASSERT(0);
10076 vos_mem_free(pFatalEventLogsReqParam);
10077 return VOS_STATUS_E_NOMEM;
10078 }
10079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10080 if(NULL == pWdaParams)
10081 {
10082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10083 "%s: VOS MEM Alloc Failure", __func__);
10084 VOS_ASSERT(0);
10085 vos_mem_free(wdiFatalEventLogsReqInfo);
10086 vos_mem_free(pFatalEventLogsReqParam);
10087 return VOS_STATUS_E_NOMEM;
10088 }
10089 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10090 pWdaParams->pWdaContext = pWDA;
10091 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10092 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10093
10094 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10095 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10096 pWdaParams);
10097 if(IS_WDI_STATUS_FAILURE(wstatus))
10098 {
10099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10100 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10101 status = CONVERT_WDI2VOS_STATUS(wstatus);
10102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10103 vos_mem_free(pWdaParams->wdaMsgParam);
10104 vos_mem_free(pWdaParams);
10105 }
10106
10107 return status;
10108
10109}
10110
Siddharth Bhal64246172015-02-27 01:04:37 +053010111/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010112 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010113 *
10114 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010115VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10116 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010117{
10118 VOS_STATUS status = VOS_STATUS_SUCCESS;
10119 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010120 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010121 tWDA_ReqParams *pWdaParams ;
10122
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10124 "------> %s " ,__func__);
10125
10126 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010127 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010128 {
10129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010130 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010131 VOS_ASSERT(0) ;
10132 return VOS_STATUS_E_FAULT;
10133 }
10134
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010135 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10136 sizeof(WDI_FWLoggingInitReqInfoType));
10137 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010138 {
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10140 "%s: VOS MEM Alloc Failure", __func__);
10141 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010142 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010143 return VOS_STATUS_E_NOMEM;
10144 }
10145
10146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10147 if(NULL == pWdaParams)
10148 {
10149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10150 "%s: VOS MEM Alloc Failure", __func__);
10151 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010152 vos_mem_free(wdiFWLoggingInitInfo);
10153 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010154 return VOS_STATUS_E_NOMEM;
10155 }
10156
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010157 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10158 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10159 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10160 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10161 wdiFWLoggingInitInfo->continuousFrameLogging =
10162 pFWLoggingInitParam->continuousFrameLogging;
10163 wdiFWLoggingInitInfo->minLogBufferSize=
10164 pFWLoggingInitParam->minLogBufferSize;
10165 wdiFWLoggingInitInfo->maxLogBufferSize=
10166 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010167
10168 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010169 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10170 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010171
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010172 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10173 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010174 pWdaParams);
10175 if(IS_WDI_STATUS_FAILURE(wstatus))
10176 {
10177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10178 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10179 status = CONVERT_WDI2VOS_STATUS(wstatus);
10180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10181 vos_mem_free(pWdaParams->wdaMsgParam);
10182 vos_mem_free(pWdaParams);
10183 }
10184
10185 return status;
10186}
10187
Jeff Johnson295189b2012-06-20 16:38:30 -070010188/*
10189 * FUNCTION: WDA_WdiIndicationCallback
10190 *
10191 */
10192void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10193 void* pUserData)
10194{
10195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010197}
Jeff Johnson295189b2012-06-20 16:38:30 -070010198/*
10199 * FUNCTION: WDA_ProcessWlanSuspendInd
10200 *
10201 */
10202VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10203 tSirWlanSuspendParam *pWlanSuspendParam)
10204{
10205 WDI_Status wdiStatus;
10206 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10210 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10211 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10212 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10215 if(WDI_STATUS_PENDING == wdiStatus)
10216 {
10217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010218 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 }
10220 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010223 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 vos_mem_free(pWlanSuspendParam);
10226 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10227}
10228
Chet Lanctot186b5732013-03-18 10:26:30 -070010229#ifdef WLAN_FEATURE_11W
10230/*
10231 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10232 *
10233 */
10234VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10235 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10236{
10237 WDI_Status wdiStatus;
10238 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10240 "------> %s ", __func__);
10241
10242 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10243 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10244 sizeof(tSirMacAddr));
10245
10246 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10247 wdiExclUnencryptParams.pUserData = pWDA;
10248
10249 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10250 if(WDI_STATUS_PENDING == wdiStatus)
10251 {
10252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10253 "Pending received for %s:%d ", __func__, __LINE__ );
10254 }
10255 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10256 {
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10258 "Failure in %s:%d ", __func__, __LINE__ );
10259 }
10260 vos_mem_free(pExclUnencryptParam);
10261 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10262}
10263#endif
10264
Jeff Johnson295189b2012-06-20 16:38:30 -070010265/*
10266 * FUNCTION: WDA_ProcessWlanResumeCallback
10267 *
10268 */
10269void WDA_ProcessWlanResumeCallback(
10270 WDI_SuspendResumeRspParamsType *resumeRspParams,
10271 void* pUserData)
10272{
10273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 if(NULL == pWdaParams)
10277 {
10278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 VOS_ASSERT(0) ;
10281 return ;
10282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10284 {
10285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010286 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10289 vos_mem_free(pWdaParams->wdaMsgParam);
10290 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 return ;
10292}
Jeff Johnson295189b2012-06-20 16:38:30 -070010293/*
10294 * FUNCTION: WDA_ProcessWlanResumeReq
10295 *
10296 */
10297VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10298 tSirWlanResumeParam *pWlanResumeParam)
10299{
10300 WDI_Status wdiStatus;
10301 WDI_ResumeParamsType *wdiResumeParams =
10302 (WDI_ResumeParamsType *)vos_mem_malloc(
10303 sizeof(WDI_ResumeParamsType) ) ;
10304 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010306 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 if(NULL == wdiResumeParams)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 VOS_ASSERT(0);
10312 return VOS_STATUS_E_NOMEM;
10313 }
10314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10315 if(NULL == pWdaParams)
10316 {
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 VOS_ASSERT(0);
10320 vos_mem_free(wdiResumeParams);
10321 return VOS_STATUS_E_NOMEM;
10322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10324 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 wdiResumeParams->wdiReqStatusCB = NULL;
10327 pWdaParams->wdaMsgParam = pWlanResumeParam;
10328 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10329 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010330 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10331 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10332 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10336 "Failure in Host Resume REQ WDI API, free all the memory " );
10337 VOS_ASSERT(0);
10338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10339 vos_mem_free(pWdaParams->wdaMsgParam);
10340 vos_mem_free(pWdaParams);
10341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10343}
10344
Jeff Johnson295189b2012-06-20 16:38:30 -070010345/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010346 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 *
10348 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010349void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010350{
10351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010353 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 if(NULL == pWdaParams)
10355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010357 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 VOS_ASSERT(0) ;
10359 return ;
10360 }
10361
10362 vos_mem_free(pWdaParams->wdaMsgParam) ;
10363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10364 vos_mem_free(pWdaParams) ;
10365 /*
10366 * No respone required for SetBeaconFilter req so just free the request
10367 * param here
10368 */
10369
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 return ;
10371}
Jeff Johnson295189b2012-06-20 16:38:30 -070010372/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010373 * FUNCTION: WDA_SetBeaconFilterReqCallback
10374 * Free memory.
10375 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10376 */
10377void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10378{
10379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10380
10381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10382 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10383
10384 if(NULL == pWdaParams)
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10387 "%s: pWdaParams received NULL", __func__);
10388 VOS_ASSERT(0);
10389 return;
10390 }
10391
10392 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10393 {
10394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10395 vos_mem_free(pWdaParams->wdaMsgParam);
10396 vos_mem_free(pWdaParams);
10397 }
10398
10399 return;
10400}
10401/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010402 * FUNCTION: WDA_SetBeaconFilterReq
10403 * Request to WDI to send the beacon filtering related information.
10404 */
10405VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10406 tBeaconFilterMsg* pBeaconFilterInfo)
10407{
10408 WDI_Status status = WDI_STATUS_SUCCESS;
10409 tANI_U8 *dstPtr, *srcPtr;
10410 tANI_U8 filterLength;
10411 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10412 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10413 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10414 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 if(NULL == wdiBeaconFilterInfo)
10418 {
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 VOS_ASSERT(0);
10422 return VOS_STATUS_E_NOMEM;
10423 }
10424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10425 if(NULL == pWdaParams)
10426 {
10427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 VOS_ASSERT(0);
10430 vos_mem_free(wdiBeaconFilterInfo);
10431 return VOS_STATUS_E_NOMEM;
10432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10434 pBeaconFilterInfo->beaconInterval;
10435 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10436 pBeaconFilterInfo->capabilityInfo;
10437 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10438 pBeaconFilterInfo->capabilityMask;
10439 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010440
10441 //Fill the BssIdx
10442 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10443
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 //Fill structure with info contained in the beaconFilterTable
10445 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10446 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10447 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10448 if(WDI_BEACON_FILTER_LEN < filterLength)
10449 {
10450 filterLength = WDI_BEACON_FILTER_LEN;
10451 }
10452 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010453 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10454 wdiBeaconFilterInfo->pUserData = pWdaParams;
10455
Jeff Johnson295189b2012-06-20 16:38:30 -070010456 /* Store param pointer as passed in by caller */
10457 /* store Params pass it to WDI */
10458 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10459 pWdaParams->pWdaContext = pWDA;
10460 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10461
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010463 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 if(IS_WDI_STATUS_FAILURE(status))
10465 {
10466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10467 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10468 vos_mem_free(pWdaParams->wdaMsgParam) ;
10469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10470 vos_mem_free(pWdaParams) ;
10471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 return CONVERT_WDI2VOS_STATUS(status) ;
10473}
Jeff Johnson295189b2012-06-20 16:38:30 -070010474/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010475 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010476 *
10477 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010478void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010479{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10481
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010483 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010484
10485 if(NULL == pWdaParams)
10486 {
10487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010488 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010489 VOS_ASSERT(0) ;
10490 return ;
10491 }
10492
10493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10494 vos_mem_free(pWdaParams->wdaMsgParam);
10495 vos_mem_free(pWdaParams);
10496
Jeff Johnson295189b2012-06-20 16:38:30 -070010497 //print a msg, nothing else to do
10498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010499 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010500 return ;
10501}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010502/*
10503 * FUNCTION: WDA_RemBeaconFilterReqCallback
10504 * Free memory.
10505 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10506 */
10507void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10508{
10509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10510
10511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10512 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10513
10514 if(NULL == pWdaParams)
10515 {
10516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10517 "%s: pWdaParams received NULL", __func__);
10518 VOS_ASSERT(0);
10519 return;
10520 }
10521
10522 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10523 {
10524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10525 vos_mem_free(pWdaParams->wdaMsgParam);
10526 vos_mem_free(pWdaParams);
10527 }
10528
10529 return;
10530}
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 // TODO: PE does not have this feature for now implemented,
10532 // but the support for removing beacon filter exists between
10533 // HAL and FW. This function can be called whenever PE defines
10534 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010535/*
10536 * FUNCTION: WDA_RemBeaconFilterReq
10537 * Request to WDI to send the removal of beacon filtering related information.
10538 */
10539VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10540 tRemBeaconFilterMsg* pBeaconFilterInfo)
10541{
10542 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010543 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010544 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10545 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10546 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010547 tWDA_ReqParams *pWdaParams ;
10548
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 if(NULL == wdiBeaconFilterInfo)
10552 {
10553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 VOS_ASSERT(0);
10556 return VOS_STATUS_E_NOMEM;
10557 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10559 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 {
10561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010564 vos_mem_free(wdiBeaconFilterInfo);
10565 vos_mem_free(pBeaconFilterInfo);
10566 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010568
10569 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10570 pBeaconFilterInfo->ucIeCount;
10571 //Fill structure with info contained in the ucRemIeId
10572 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10573 pBeaconFilterInfo->ucRemIeId,
10574 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10575 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10576 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010577
10578 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010579 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010581 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10582
10583 pWdaParams->pWdaContext = pWDA;
10584
Jeff Johnson43971f52012-07-17 12:26:56 -070010585 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010586 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010587 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 {
10589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10590 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010591 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10593 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010594 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010597}
Jeff Johnson295189b2012-06-20 16:38:30 -070010598/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010599 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 *
10601 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010602void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010603{
10604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010606 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010607 if(NULL == pWdaParams)
10608 {
10609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010610 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 VOS_ASSERT(0) ;
10612 return ;
10613 }
10614
10615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10616 vos_mem_free(pWdaParams) ;
10617
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 return ;
10619}
Jeff Johnson295189b2012-06-20 16:38:30 -070010620/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010621 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10622 * Free memory.
10623 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10624 */
10625void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10626{
10627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10628
10629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10630 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10631
10632 if(NULL == pWdaParams)
10633 {
10634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10635 "%s: pWdaParams received NULL", __func__);
10636 VOS_ASSERT(0);
10637 return;
10638 }
10639
10640 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10641 {
10642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10643 vos_mem_free(pWdaParams);
10644 }
10645
10646 return;
10647}
10648/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 * FUNCTION: WDA_SetRSSIThresholdsReq
10650 * Request to WDI to set the RSSI thresholds (sta mode).
10651 */
10652VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10653{
10654 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010655 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 tWDA_CbContext *pWDA = NULL ;
10657 v_PVOID_t pVosContext = NULL;
10658 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10659 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10660 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10661 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010663 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 if(NULL == wdiRSSIThresholdsInfo)
10665 {
10666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 VOS_ASSERT(0);
10669 return VOS_STATUS_E_NOMEM;
10670 }
10671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10672 if(NULL == pWdaParams)
10673 {
10674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 VOS_ASSERT(0);
10677 vos_mem_free(wdiRSSIThresholdsInfo);
10678 return VOS_STATUS_E_NOMEM;
10679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10682 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10683 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10685 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10686 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010687 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10688 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10689 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010690 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10691 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010692 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10693 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10694
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 /* Store param pointer as passed in by caller */
10696 /* store Params pass it to WDI */
10697 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10698 pWdaParams->pWdaContext = pWDA;
10699 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010700 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010701 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010702 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10705 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010706 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10708 vos_mem_free(pWdaParams) ;
10709 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010710 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010711
10712}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010713/*
Yue Madb90ac12013-04-04 13:39:13 -070010714 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 *
10716 */
Yue Madb90ac12013-04-04 13:39:13 -070010717void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010718{
10719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10720
10721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 if(NULL == pWdaParams)
10724 {
10725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010726 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 VOS_ASSERT(0) ;
10728 return ;
10729 }
10730
10731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10732 vos_mem_free(pWdaParams->wdaMsgParam);
10733 vos_mem_free(pWdaParams) ;
10734
10735 //print a msg, nothing else to do
10736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010737 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 return ;
10739}
Jeff Johnson295189b2012-06-20 16:38:30 -070010740/*
Yue Madb90ac12013-04-04 13:39:13 -070010741 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010742 * Free memory.
10743 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010744 */
10745void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10746{
10747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10748
10749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10750 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10751
10752 if(NULL == pWdaParams)
10753 {
10754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10755 "%s: Invalid pWdaParams pointer", __func__);
10756 VOS_ASSERT(0);
10757 return;
10758 }
10759
10760 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10761 {
10762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10763 vos_mem_free(pWdaParams->wdaMsgParam);
10764 vos_mem_free(pWdaParams);
10765 }
10766
10767 return;
10768}
10769/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 * FUNCTION: WDA_ProcessHostOffloadReq
10771 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10772 * to broadcast traffic (sta mode).
10773 */
10774VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10775 tSirHostOffloadReq *pHostOffloadParams)
10776{
10777 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010778 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10780 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10781 sizeof(WDI_HostOffloadReqParamsType)) ;
10782 tWDA_ReqParams *pWdaParams ;
10783
10784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010785 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010786
10787 if(NULL == wdiHostOffloadInfo)
10788 {
10789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 VOS_ASSERT(0);
10792 return VOS_STATUS_E_NOMEM;
10793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10795 if(NULL == pWdaParams)
10796 {
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 VOS_ASSERT(0);
10800 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010801 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 return VOS_STATUS_E_NOMEM;
10803 }
10804
10805 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10806 pHostOffloadParams->offloadType;
10807 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10808 pHostOffloadParams->enableOrDisable;
10809
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010810 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10811 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10812
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10814 {
10815 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10816 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10817 pHostOffloadParams->params.hostIpv4Addr,
10818 4);
10819 break;
10820 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10821 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10822 pHostOffloadParams->params.hostIpv6Addr,
10823 16);
10824 break;
10825 case SIR_IPV6_NS_OFFLOAD:
10826 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10827 pHostOffloadParams->params.hostIpv6Addr,
10828 16);
10829
10830#ifdef WLAN_NS_OFFLOAD
10831 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10832 {
10833 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10834 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10835 16);
10836 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10837 }
10838 else
10839 {
10840 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10841 }
10842
10843 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10844 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10845 16);
10846 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10847 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10848 6);
10849
10850 //Only two are supported so let's go through them without a loop
10851 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10852 {
10853 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10854 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10855 16);
10856 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10857 }
10858 else
10859 {
10860 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10861 }
10862
10863 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10864 {
10865 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10866 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10867 16);
10868 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10869 }
10870 else
10871 {
10872 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10873 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010874 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10875 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 break;
10877#endif //WLAN_NS_OFFLOAD
10878 default:
10879 {
10880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10881 "No Handling for Offload Type %x in WDA "
10882 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10883 //WDA_VOS_ASSERT(0) ;
10884 }
10885 }
Yue Madb90ac12013-04-04 13:39:13 -070010886 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10887 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010888
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010890 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 /* store Params pass it to WDI */
10892 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10893 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010894
Jeff Johnson295189b2012-06-20 16:38:30 -070010895
Jeff Johnson43971f52012-07-17 12:26:56 -070010896 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010897 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010898
Jeff Johnson43971f52012-07-17 12:26:56 -070010899 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 {
10901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010902 "Failure in host offload REQ WDI API, free all the memory %d",
10903 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010904 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10906 vos_mem_free(pWdaParams->wdaMsgParam);
10907 vos_mem_free(pWdaParams) ;
10908 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010909 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910
10911}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010912/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010913 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 *
10915 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010916void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010917{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010918 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10919
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010921 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010922
10923 if(NULL == pWdaParams)
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010927 VOS_ASSERT(0) ;
10928 return ;
10929 }
10930
10931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10932 vos_mem_free(pWdaParams->wdaMsgParam);
10933 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010934
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 //print a msg, nothing else to do
10936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010937 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 return ;
10939}
Jeff Johnson295189b2012-06-20 16:38:30 -070010940/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010941 * FUNCTION: WDA_KeepAliveReqCallback
10942 * Free memory.
10943 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10944 */
10945void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10946{
10947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10948
10949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10950 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10951
10952 if(NULL == pWdaParams)
10953 {
10954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10955 "%s: pWdaParams received NULL", __func__);
10956 VOS_ASSERT(0);
10957 return;
10958 }
10959
10960 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10961 {
10962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10963 vos_mem_free(pWdaParams->wdaMsgParam);
10964 vos_mem_free(pWdaParams);
10965 }
10966
10967 return;
10968}
10969/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 * FUNCTION: WDA_ProcessKeepAliveReq
10971 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10972 * wakeup due to broadcast traffic (sta mode).
10973 */
10974VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10975 tSirKeepAliveReq *pKeepAliveParams)
10976{
10977 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010978 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10980 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10981 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010982 tWDA_ReqParams *pWdaParams;
10983
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 if(NULL == wdiKeepAliveInfo)
10987 {
10988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010991 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010992 return VOS_STATUS_E_NOMEM;
10993 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010994
10995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10996 if(NULL == pWdaParams)
10997 {
10998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010999 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011000 VOS_ASSERT(0);
11001 vos_mem_free(wdiKeepAliveInfo);
11002 vos_mem_free(pKeepAliveParams);
11003 return VOS_STATUS_E_NOMEM;
11004 }
11005
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11007 pKeepAliveParams->packetType;
11008 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11009 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011010
11011 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11012 pKeepAliveParams->bssId,
11013 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011014
11015 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11016 {
11017 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11018 pKeepAliveParams->hostIpv4Addr,
11019 SIR_IPV4_ADDR_LEN);
11020 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11021 pKeepAliveParams->destIpv4Addr,
11022 SIR_IPV4_ADDR_LEN);
11023 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11024 pKeepAliveParams->destMacAddr,
11025 SIR_MAC_ADDR_LEN);
11026 }
11027 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11028 {
11029 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11030 SIR_IPV4_ADDR_LEN,
11031 0);
11032 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11033 SIR_IPV4_ADDR_LEN,
11034 0);
11035 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11036 SIR_MAC_ADDR_LEN,
11037 0);
11038 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011039 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11040 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011041
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011043 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011045 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11046 pWdaParams->pWdaContext = pWDA;
11047
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11049 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11050 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11051 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11052 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11054 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11055 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11056 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11057 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11059 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11060 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11061 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11062 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11063 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11064 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11065 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11067 "TimePeriod %d PacketType %d",
11068 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11069 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011070 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011071 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011072
Jeff Johnson43971f52012-07-17 12:26:56 -070011073 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 {
11075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11076 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011077 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11079 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011080 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011082 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011083
11084}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011086 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 *
11088 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011089void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011090 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11091 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011092{
11093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011095 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 if(NULL == pWdaParams)
11097 {
11098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011099 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 VOS_ASSERT(0) ;
11101 return ;
11102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11104 vos_mem_free(pWdaParams->wdaMsgParam);
11105 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 return ;
11107}
Jeff Johnson295189b2012-06-20 16:38:30 -070011108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11110 * Free memory.
11111 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11112 */
11113void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11114{
11115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11116
11117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11118 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11119
11120 if(NULL == pWdaParams)
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "%s: pWdaParams received NULL", __func__);
11124 VOS_ASSERT(0);
11125 return;
11126 }
11127
11128 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11129 {
11130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11131 vos_mem_free(pWdaParams->wdaMsgParam);
11132 vos_mem_free(pWdaParams);
11133 }
11134
11135 return;
11136}
11137
11138/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11140 * Request to WDI to add WOWL Bcast pattern
11141 */
11142VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11143 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11144{
11145 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011146 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11148 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11149 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11150 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 if(NULL == wdiWowlAddBcPtrnInfo)
11154 {
11155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011157 VOS_ASSERT(0);
11158 return VOS_STATUS_E_NOMEM;
11159 }
11160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11161 if(NULL == pWdaParams)
11162 {
11163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 VOS_ASSERT(0);
11166 vos_mem_free(wdiWowlAddBcPtrnInfo);
11167 return VOS_STATUS_E_NOMEM;
11168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11170 pWowlAddBcPtrnParams->ucPatternId;
11171 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11172 pWowlAddBcPtrnParams->ucPatternByteOffset;
11173 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11174 pWowlAddBcPtrnParams->ucPatternMaskSize;
11175 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11176 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11178 {
11179 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11180 pWowlAddBcPtrnParams->ucPattern,
11181 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11182 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11183 pWowlAddBcPtrnParams->ucPatternMask,
11184 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11185 }
11186 else
11187 {
11188 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11189 pWowlAddBcPtrnParams->ucPattern,
11190 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11191 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11192 pWowlAddBcPtrnParams->ucPatternMask,
11193 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11194
11195 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11196 pWowlAddBcPtrnParams->ucPatternExt,
11197 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11198 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11199 pWowlAddBcPtrnParams->ucPatternMaskExt,
11200 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11201 }
11202
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011203 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11204 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11205
Yue Ma7f44bbe2013-04-12 11:47:39 -070011206 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11207 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 /* Store param pointer as passed in by caller */
11209 /* store Params pass it to WDI */
11210 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11211 pWdaParams->pWdaContext = pWDA;
11212 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011213 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011214 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011215 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011216 {
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11218 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011219 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 vos_mem_free(pWdaParams->wdaMsgParam) ;
11221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11222 vos_mem_free(pWdaParams) ;
11223 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011224 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011225
11226}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011227/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011228 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 *
11230 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011231void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011232 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11233 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011234{
11235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 if(NULL == pWdaParams)
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 VOS_ASSERT(0) ;
11243 return ;
11244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11246 vos_mem_free(pWdaParams->wdaMsgParam);
11247 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011248 return ;
11249}
Jeff Johnson295189b2012-06-20 16:38:30 -070011250/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011251 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11252 * Free memory.
11253 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11254 */
11255void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11256{
11257 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11258
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11260 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11261
11262 if(NULL == pWdaParams)
11263 {
11264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11265 "%s: pWdaParams received NULL", __func__);
11266 VOS_ASSERT(0);
11267 return;
11268 }
11269
11270 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11271 {
11272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11273 vos_mem_free(pWdaParams->wdaMsgParam);
11274 vos_mem_free(pWdaParams);
11275 }
11276
11277 return;
11278}
11279/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11281 * Request to WDI to delete WOWL Bcast pattern
11282 */
11283VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11284 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11285{
11286 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011287 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11289 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11290 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11291 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011293 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 if(NULL == wdiWowlDelBcPtrnInfo)
11295 {
11296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 VOS_ASSERT(0);
11299 return VOS_STATUS_E_NOMEM;
11300 }
11301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11302 if(NULL == pWdaParams)
11303 {
11304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 VOS_ASSERT(0);
11307 vos_mem_free(wdiWowlDelBcPtrnInfo);
11308 return VOS_STATUS_E_NOMEM;
11309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11311 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011312
11313 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11314 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11315
Yue Ma7f44bbe2013-04-12 11:47:39 -070011316 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11317 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 /* Store param pointer as passed in by caller */
11319 /* store Params pass it to WDI */
11320 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11321 pWdaParams->pWdaContext = pWDA;
11322 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011323 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011324 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011325 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 {
11327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11328 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011329 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 vos_mem_free(pWdaParams->wdaMsgParam) ;
11331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11332 vos_mem_free(pWdaParams) ;
11333 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011334 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011335
11336}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011337/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011338 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 *
11340 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011341void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011342{
11343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011344 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011347 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 if(NULL == pWdaParams)
11349 {
11350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011351 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 VOS_ASSERT(0) ;
11353 return ;
11354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011355 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011356 if (NULL == pWDA)
11357 {
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11359 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011360
11361 if(pWdaParams->wdaWdiApiMsgParam)
11362 {
11363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11364 }
11365 vos_mem_free(pWdaParams);
11366
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011367 VOS_ASSERT(0);
11368 return ;
11369 }
11370
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11372
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011373 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11374
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11376 vos_mem_free(pWdaParams) ;
11377
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011378 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011379 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 return ;
11382}
Jeff Johnson295189b2012-06-20 16:38:30 -070011383/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011384 * FUNCTION: WDA_WowlEnterReqCallback
11385 * Free memory and send WOWL Enter RSP back to PE.
11386 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11387 */
11388void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11389{
11390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011391 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011392 tSirHalWowlEnterParams *pWowlEnterParams;
11393
11394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11395 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11396
11397 if(NULL == pWdaParams)
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "%s: pWdaParams received NULL", __func__);
11401 VOS_ASSERT(0);
11402 return;
11403 }
11404
11405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011406 if (NULL == pWDA)
11407 {
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11409 "%s:pWDA is NULL", __func__);
11410 VOS_ASSERT(0);
11411 return ;
11412 }
11413
Yue Ma7f44bbe2013-04-12 11:47:39 -070011414 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11415 pWowlEnterParams->status = wdiStatus;
11416
11417 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11418 {
11419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11420 vos_mem_free(pWdaParams);
11421 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11422 }
11423
11424 return;
11425}
11426/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 * FUNCTION: WDA_ProcessWowlEnterReq
11428 * Request to WDI to enter WOWL
11429 */
11430VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11431 tSirHalWowlEnterParams *pWowlEnterParams)
11432{
11433 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011434 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11436 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11437 sizeof(WDI_WowlEnterReqParamsType)) ;
11438 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 if(NULL == wdiWowlEnterInfo)
11442 {
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 VOS_ASSERT(0);
11446 return VOS_STATUS_E_NOMEM;
11447 }
11448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11449 if(NULL == pWdaParams)
11450 {
11451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011453 VOS_ASSERT(0);
11454 vos_mem_free(wdiWowlEnterInfo);
11455 return VOS_STATUS_E_NOMEM;
11456 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011457
11458 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11459
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11461 pWowlEnterParams->magicPtrn,
11462 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11464 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11466 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11468 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11470 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11472 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11474 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11476 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11478 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011479#ifdef WLAN_WAKEUP_EVENTS
11480 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11481 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11482
11483 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11484 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11485
11486 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11487 pWowlEnterParams->ucWowNetScanOffloadMatch;
11488
11489 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11490 pWowlEnterParams->ucWowGTKRekeyError;
11491
11492 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11493 pWowlEnterParams->ucWoWBSSConnLoss;
11494#endif // WLAN_WAKEUP_EVENTS
11495
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011496 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11497 pWowlEnterParams->bssIdx;
11498
Yue Ma7f44bbe2013-04-12 11:47:39 -070011499 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11500 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 /* Store param pointer as passed in by caller */
11502 /* store Params pass it to WDI */
11503 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11504 pWdaParams->pWdaContext = pWDA;
11505 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011506 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011507 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011508 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 {
11510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11511 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011512 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 vos_mem_free(pWdaParams->wdaMsgParam) ;
11514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11515 vos_mem_free(pWdaParams) ;
11516 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011517 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011518
11519}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011520/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011521 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 *
11523 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011524void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011525{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011527 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011528 tSirHalWowlExitParams *pWowlExitParams;
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011530 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011531 if(NULL == pWdaParams)
11532 {
11533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011534 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011535 VOS_ASSERT(0) ;
11536 return ;
11537 }
11538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011539 if (NULL == pWDA)
11540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11542 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011543
11544 if(pWdaParams->wdaWdiApiMsgParam)
11545 {
11546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11547 }
11548 vos_mem_free(pWdaParams);
11549
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011550 VOS_ASSERT(0);
11551 return ;
11552 }
11553
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011554 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11555
11556 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011557 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011558
11559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11560 vos_mem_free(pWdaParams) ;
11561
Jeff Johnson295189b2012-06-20 16:38:30 -070011562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011563 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011564 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 return ;
11566}
Jeff Johnson295189b2012-06-20 16:38:30 -070011567/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011568 * FUNCTION: WDA_WowlExitReqCallback
11569 * Free memory and send WOWL Exit RSP back to PE.
11570 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11571 */
11572void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11573{
11574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011575 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011576 tSirHalWowlExitParams *pWowlExitParams;
11577
11578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11579 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11580
11581 if(NULL == pWdaParams)
11582 {
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11584 "%s: pWdaParams received NULL", __func__);
11585 VOS_ASSERT(0);
11586 return;
11587 }
11588
11589 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011590 if (NULL == pWDA)
11591 {
11592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11593 "%s:pWDA is NULL", __func__);
11594 VOS_ASSERT(0);
11595 return ;
11596 }
11597
Yue Ma7f44bbe2013-04-12 11:47:39 -070011598 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11599 pWowlExitParams->status = wdiStatus;
11600
11601 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11602 {
11603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11604 vos_mem_free(pWdaParams);
11605 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11606 }
11607
11608 return;
11609}
11610/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011611 * FUNCTION: WDA_ProcessWowlExitReq
11612 * Request to WDI to add WOWL Bcast pattern
11613 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011614VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11615 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011616{
11617 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011618 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011619 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11620 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11621 sizeof(WDI_WowlExitReqParamsType)) ;
11622 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011624 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011625 if(NULL == wdiWowlExitInfo)
11626 {
11627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011628 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011629 VOS_ASSERT(0);
11630 return VOS_STATUS_E_NOMEM;
11631 }
11632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11633 if(NULL == pWdaParams)
11634 {
11635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011636 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011637 VOS_ASSERT(0);
11638 vos_mem_free(wdiWowlExitInfo);
11639 return VOS_STATUS_E_NOMEM;
11640 }
11641
11642 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11643 pWowlExitParams->bssIdx;
11644
Yue Ma7f44bbe2013-04-12 11:47:39 -070011645 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11646 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011647
11648 /* Store param pointer as passed in by caller */
11649 /* store Params pass it to WDI */
11650 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11651 pWdaParams->pWdaContext = pWDA;
11652 pWdaParams->wdaMsgParam = pWowlExitParams;
11653
11654 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011655 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011656
Jeff Johnson43971f52012-07-17 12:26:56 -070011657 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 {
11659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11660 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011661 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11663 vos_mem_free(pWdaParams->wdaMsgParam);
11664 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011666 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011667}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011668/*
11669 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11670 * Request to WDI to determine whether a given station is capable of
11671 * using HW-based frame translation
11672 */
11673v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11674 tANI_U8 staIdx)
11675{
11676 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11677}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011678
11679/*
11680 * FUNCTION: WDA_IsSelfSTA
11681 * Request to WDI to determine whether a given STAID is self station
11682 * index.
11683 */
11684v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11685{
11686
11687 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11688
Girish Gowli05cf44e2014-06-12 21:53:37 +053011689 if (NULL != pWDA)
11690 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11691 else
11692 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011693}
Jeff Johnson295189b2012-06-20 16:38:30 -070011694/*
11695 * FUNCTION: WDA_NvDownloadReqCallback
11696 * send NV Download RSP back to PE
11697 */
11698void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11699 void* pUserData)
11700{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011701
11702 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011703 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011704
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011706 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011707
11708 if(NULL == pWdaParams)
11709 {
11710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011711 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011712 VOS_ASSERT(0) ;
11713 return ;
11714 }
11715
11716 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011717 if (NULL == pWDA)
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11720 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011721
11722 if(pWdaParams->wdaWdiApiMsgParam)
11723 {
11724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11725 }
11726 vos_mem_free(pWdaParams);
11727
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011728 VOS_ASSERT(0);
11729 return ;
11730 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011731
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11734 vos_mem_free(pWdaParams);
11735
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 return ;
11738}
Jeff Johnson295189b2012-06-20 16:38:30 -070011739/*
11740 * FUNCTION: WDA_ProcessNvDownloadReq
11741 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11742 */
11743VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11744{
11745 /* Initialize the local Variables*/
11746 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11747 v_VOID_t *pNvBuffer=NULL;
11748 v_SIZE_t bufferSize = 0;
11749 WDI_Status status = WDI_STATUS_E_FAILURE;
11750 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011751 tWDA_ReqParams *pWdaParams ;
11752
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011754 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011755 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 {
11757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011758 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011759 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 return VOS_STATUS_E_FAILURE;
11761 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011762
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011764 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11765
Jeff Johnson295189b2012-06-20 16:38:30 -070011766 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11767 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 if(NULL == wdiNvDownloadReqParam)
11769 {
11770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 VOS_ASSERT(0);
11773 return VOS_STATUS_E_NOMEM;
11774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 /* Copy Params to wdiNvDownloadReqParam*/
11776 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11777 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011778
11779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11780 if(NULL == pWdaParams)
11781 {
11782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011783 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011784 VOS_ASSERT(0);
11785 vos_mem_free(wdiNvDownloadReqParam);
11786 return VOS_STATUS_E_NOMEM;
11787 }
11788
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011790 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11791 pWdaParams->wdaMsgParam = NULL;
11792 pWdaParams->pWdaContext = pWDA;
11793
11794
Jeff Johnson295189b2012-06-20 16:38:30 -070011795 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011796
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011798 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11799
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 if(IS_WDI_STATUS_FAILURE(status))
11801 {
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11803 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11805 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011807 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011808}
11809/*
11810 * FUNCTION: WDA_FlushAcReqCallback
11811 * send Flush AC RSP back to TL
11812 */
11813void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11814{
11815 vos_msg_t wdaMsg = {0} ;
11816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11817 tFlushACReq *pFlushACReqParams;
11818 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 if(NULL == pWdaParams)
11822 {
11823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011824 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 VOS_ASSERT(0) ;
11826 return ;
11827 }
11828
11829 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11830 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11831 if(NULL == pFlushACRspParams)
11832 {
11833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011836 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 return ;
11838 }
11839 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11840 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11841 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11842 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11843 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011844 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 vos_mem_free(pWdaParams->wdaMsgParam) ;
11846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11847 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011848 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11849 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11850 // POST message to TL
11851 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11852
Jeff Johnson295189b2012-06-20 16:38:30 -070011853 return ;
11854}
Jeff Johnson295189b2012-06-20 16:38:30 -070011855/*
11856 * FUNCTION: WDA_ProcessFlushAcReq
11857 * Request to WDI to Update the DELBA REQ params.
11858 */
11859VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11860 tFlushACReq *pFlushAcReqParams)
11861{
11862 WDI_Status status = WDI_STATUS_SUCCESS ;
11863 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11864 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11865 sizeof(WDI_FlushAcReqParamsType)) ;
11866 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 if(NULL == wdiFlushAcReqParam)
11868 {
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011870 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011871 VOS_ASSERT(0);
11872 return VOS_STATUS_E_NOMEM;
11873 }
11874 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11875 if(NULL == pWdaParams)
11876 {
11877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011878 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 VOS_ASSERT(0);
11880 vos_mem_free(wdiFlushAcReqParam);
11881 return VOS_STATUS_E_NOMEM;
11882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011884 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11886 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11887 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11888 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011889 /* Store Flush AC pointer, as this will be used for response */
11890 /* store Params pass it to WDI */
11891 pWdaParams->pWdaContext = pWDA;
11892 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11893 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011894 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11895 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 if(IS_WDI_STATUS_FAILURE(status))
11897 {
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11899 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11900 vos_mem_free(pWdaParams->wdaMsgParam) ;
11901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11902 vos_mem_free(pWdaParams) ;
11903 //TODO: respond to TL with failure
11904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011906}
Jeff Johnson295189b2012-06-20 16:38:30 -070011907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011908 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 *
11910 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011911void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011912{
11913 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011914 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011915 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011916
11917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 if(NULL == pWdaParams)
11920 {
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 VOS_ASSERT(0) ;
11924 return ;
11925 }
11926 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011927 if (NULL == pWDA)
11928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11930 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011931 vos_mem_free(pWdaParams->wdaMsgParam) ;
11932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11933 vos_mem_free(pWdaParams) ;
11934
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011935 VOS_ASSERT(0);
11936 return ;
11937 }
11938
Jeff Johnson295189b2012-06-20 16:38:30 -070011939 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11940 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11941 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11942 {
11943 pWDA->wdaAmpSessionOn = VOS_FALSE;
11944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 vos_mem_free(pWdaParams->wdaMsgParam) ;
11946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11947 vos_mem_free(pWdaParams) ;
11948 /*
11949 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11950 * param here
11951 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 return ;
11953}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011954/*
11955 * FUNCTION: WDA_BtAmpEventReqCallback
11956 * Free memory.
11957 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11958 */
11959void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11960{
11961 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011962 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011963 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011964
Yue Ma7f44bbe2013-04-12 11:47:39 -070011965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11966 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11967
11968 if(NULL == pWdaParams)
11969 {
11970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11971 "%s: pWdaParams received NULL", __func__);
11972 VOS_ASSERT(0);
11973 return;
11974 }
11975
11976 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011977 if (NULL == pWDA)
11978 {
11979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11980 "%s:pWDA is NULL", __func__);
11981 VOS_ASSERT(0);
11982 return ;
11983 }
11984
Yue Ma7f44bbe2013-04-12 11:47:39 -070011985 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11986
11987 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11988 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11989 {
11990 pWDA->wdaAmpSessionOn = VOS_FALSE;
11991 }
11992
11993 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11994 {
11995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11996 vos_mem_free(pWdaParams->wdaMsgParam);
11997 vos_mem_free(pWdaParams);
11998 }
11999
12000 return;
12001}
Jeff Johnson295189b2012-06-20 16:38:30 -070012002/*
12003 * FUNCTION: WDA_ProcessBtAmpEventReq
12004 * Request to WDI to Update with BT AMP events.
12005 */
12006VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12007 tSmeBtAmpEvent *pBtAmpEventParams)
12008{
12009 WDI_Status status = WDI_STATUS_SUCCESS ;
12010 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12011 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12012 sizeof(WDI_BtAmpEventParamsType)) ;
12013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 if(NULL == wdiBtAmpEventParam)
12017 {
12018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012020 VOS_ASSERT(0);
12021 return VOS_STATUS_E_NOMEM;
12022 }
12023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12024 if(NULL == pWdaParams)
12025 {
12026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 VOS_ASSERT(0);
12029 vos_mem_free(wdiBtAmpEventParam);
12030 return VOS_STATUS_E_NOMEM;
12031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012032 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12033 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012034 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12035 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012036 /* Store BT AMP event pointer, as this will be used for response */
12037 /* store Params pass it to WDI */
12038 pWdaParams->pWdaContext = pWDA;
12039 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12040 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012042 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 if(IS_WDI_STATUS_FAILURE(status))
12044 {
12045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12046 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12047 vos_mem_free(pWdaParams->wdaMsgParam) ;
12048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12049 vos_mem_free(pWdaParams) ;
12050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012051 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12052 {
12053 pWDA->wdaAmpSessionOn = VOS_TRUE;
12054 }
12055 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012056}
12057
Jeff Johnson295189b2012-06-20 16:38:30 -070012058/*
12059 * FUNCTION: WDA_FTMCommandReqCallback
12060 * Handle FTM CMD response came from HAL
12061 * Route responce to HDD FTM
12062 */
12063void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12064 void *usrData)
12065{
12066 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12068 {
12069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012070 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 return;
12072 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 /* Release Current FTM Command Request */
12074 vos_mem_free(pWDA->wdaFTMCmdReq);
12075 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012076 /* Post FTM Responce to HDD FTM */
12077 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 return;
12079}
Jeff Johnson295189b2012-06-20 16:38:30 -070012080/*
12081 * FUNCTION: WDA_ProcessFTMCommand
12082 * Send FTM command to WDI
12083 */
12084VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12085 tPttMsgbuffer *pPTTFtmCmd)
12086{
12087 WDI_Status status = WDI_STATUS_SUCCESS;
12088 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 ftmCMDReq = (WDI_FTMCommandReqType *)
12090 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12091 if(NULL == ftmCMDReq)
12092 {
12093 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12094 "WDA FTM Command buffer alloc fail");
12095 return VOS_STATUS_E_NOMEM;
12096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12098 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 /* Send command to WDI */
12101 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 return status;
12103}
Jeff Johnsone7245742012-09-05 17:12:55 -070012104#ifdef FEATURE_OEM_DATA_SUPPORT
12105/*
12106 * FUNCTION: WDA_StartOemDataReqCallback
12107 *
12108 */
12109void WDA_StartOemDataReqCallback(
12110 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12111 void* pUserData)
12112{
12113 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012115 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012116 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012117
Jeff Johnsone7245742012-09-05 17:12:55 -070012118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012119 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012120
12121 if(NULL == pWdaParams)
12122 {
12123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012124 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012125 VOS_ASSERT(0) ;
12126 return ;
12127 }
12128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12129
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012130 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012131 {
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012133 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012134 VOS_ASSERT(0);
12135 return ;
12136 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012137
Jeff Johnsone7245742012-09-05 17:12:55 -070012138 /*
12139 * Allocate memory for response params sent to PE
12140 */
12141 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12142
12143 // Check if memory is allocated for OemdataMeasRsp Params.
12144 if(NULL == pOemDataRspParams)
12145 {
12146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12147 "OEM DATA WDA callback alloc fail");
12148 VOS_ASSERT(0) ;
12149 return;
12150 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012151
Jeff Johnsone7245742012-09-05 17:12:55 -070012152 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12154 vos_mem_free(pWdaParams->wdaMsgParam);
12155 vos_mem_free(pWdaParams) ;
12156
Jeff Johnsone7245742012-09-05 17:12:55 -070012157 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012158 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012159 * Also, here success always means that we have atleast one BSSID.
12160 */
12161 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12162
12163 //enable Tx
12164 status = WDA_ResumeDataTx(pWDA);
12165 if(status != VOS_STATUS_SUCCESS)
12166 {
12167 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12168 }
12169 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12170 return ;
12171}
12172/*
12173 * FUNCTION: WDA_ProcessStartOemDataReq
12174 * Send Start Oem Data Req to WDI
12175 */
12176VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12177 tStartOemDataReq *pOemDataReqParams)
12178{
12179 WDI_Status status = WDI_STATUS_SUCCESS;
12180 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012181 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012182
12183 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12184
12185 if(NULL == wdiOemDataReqParams)
12186 {
12187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012189 VOS_ASSERT(0);
12190 return VOS_STATUS_E_NOMEM;
12191 }
12192
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012193 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12194 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12195 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12196 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012197
12198 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12199
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012200 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12201 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012202 {
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012205 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012206 vos_mem_free(pOemDataReqParams);
12207 VOS_ASSERT(0);
12208 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012209 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012210
Bernald44a1ae2013-01-09 08:30:39 -080012211 pWdaParams->pWdaContext = (void*)pWDA;
12212 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12213 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012214
12215 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12216 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012217
12218 if(IS_WDI_STATUS_FAILURE(status))
12219 {
12220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12221 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12223 vos_mem_free(pWdaParams->wdaMsgParam);
12224 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012225 }
12226 return CONVERT_WDI2VOS_STATUS(status) ;
12227}
12228#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012230 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012231 *
12232 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012233void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012234{
12235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 if(NULL == pWdaParams)
12239 {
12240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 VOS_ASSERT(0) ;
12243 return ;
12244 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012245
12246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12247 vos_mem_free(pWdaParams->wdaMsgParam);
12248 vos_mem_free(pWdaParams);
12249
12250 return ;
12251}
12252/*
12253 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12254 * Free memory.
12255 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12256 */
12257void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12258{
12259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12260
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12262 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12263
12264 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12267 "%s: pWdaParams received NULL", __func__);
12268 VOS_ASSERT(0);
12269 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012270 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012271
12272 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 {
12274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012275 vos_mem_free(pWdaParams->wdaMsgParam);
12276 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012278
12279 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012280}
Jeff Johnson295189b2012-06-20 16:38:30 -070012281#ifdef WLAN_FEATURE_GTK_OFFLOAD
12282/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012283 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012284 *
12285 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012286void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012287 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012288{
12289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12290
12291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012292 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012293 if(NULL == pWdaParams)
12294 {
12295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12296 "%s: pWdaParams received NULL", __func__);
12297 VOS_ASSERT(0);
12298 return;
12299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012300
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 vos_mem_free(pWdaParams->wdaMsgParam) ;
12302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12303 vos_mem_free(pWdaParams) ;
12304
12305 //print a msg, nothing else to do
12306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012307 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012308
12309 return ;
12310}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012311/*
12312 * FUNCTION: WDA_GTKOffloadReqCallback
12313 * Free memory.
12314 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12315 */
12316void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12317{
12318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012319
Yue Ma7f44bbe2013-04-12 11:47:39 -070012320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12321 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12322
12323 if(NULL == pWdaParams)
12324 {
12325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12326 "%s: pWdaParams received NULL", __func__);
12327 VOS_ASSERT(0);
12328 return;
12329 }
12330
12331 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12332 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012333 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12334 sizeof(WDI_GtkOffloadReqMsg));
12335 vos_mem_zero(pWdaParams->wdaMsgParam,
12336 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12338 vos_mem_free(pWdaParams->wdaMsgParam);
12339 vos_mem_free(pWdaParams);
12340 }
12341
12342 return;
12343}
Jeff Johnson295189b2012-06-20 16:38:30 -070012344/*
12345 * FUNCTION: WDA_ProcessGTKOffloadReq
12346 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12347 * to broadcast traffic (sta mode).
12348 */
12349VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12350 tpSirGtkOffloadParams pGtkOffloadParams)
12351{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012352 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12354 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12355 sizeof(WDI_GtkOffloadReqMsg)) ;
12356 tWDA_ReqParams *pWdaParams ;
12357
12358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012359 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012360
12361 if(NULL == wdiGtkOffloadReqMsg)
12362 {
12363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012365 VOS_ASSERT(0);
12366 return VOS_STATUS_E_NOMEM;
12367 }
12368
12369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12370 if(NULL == pWdaParams)
12371 {
12372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012374 VOS_ASSERT(0);
12375 vos_mem_free(wdiGtkOffloadReqMsg);
12376 return VOS_STATUS_E_NOMEM;
12377 }
12378
12379 //
12380 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12381 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012382
12383 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012384 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012385
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12387 // Copy KCK
12388 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12389 // Copy KEK
12390 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12391 // Copy KeyReplayCounter
12392 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12393 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12394
Yue Ma7f44bbe2013-04-12 11:47:39 -070012395 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12396 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012397
Jeff Johnson295189b2012-06-20 16:38:30 -070012398
12399 /* Store Params pass it to WDI */
12400 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12401 pWdaParams->pWdaContext = pWDA;
12402 /* Store param pointer as passed in by caller */
12403 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12404
Yue Ma7f44bbe2013-04-12 11:47:39 -070012405 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012406
12407 if(IS_WDI_STATUS_FAILURE(status))
12408 {
12409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12410 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012411 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12412 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12414 vos_mem_free(pWdaParams->wdaMsgParam);
12415 vos_mem_free(pWdaParams);
12416 }
12417
12418 return CONVERT_WDI2VOS_STATUS(status) ;
12419}
12420
12421/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012422 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 *
12424 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012425void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012426 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012427{
12428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12429 tWDA_CbContext *pWDA;
12430 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012431 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012432 vos_msg_t vosMsg;
12433
12434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012435 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012436
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012437 if(NULL == pWdaParams)
12438 {
12439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12440 "%s: pWdaParams received NULL", __func__);
12441 VOS_ASSERT(0);
12442 return;
12443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012444
Nirav Shah374de6e2014-02-13 16:40:01 +053012445 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12446 if(NULL == pGtkOffloadGetInfoRsp)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12449 "%s: vos_mem_malloc failed ", __func__);
12450 VOS_ASSERT(0);
12451 return;
12452 }
12453
Jeff Johnson295189b2012-06-20 16:38:30 -070012454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12455 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12456
12457 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12458 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12459
12460 /* Message Header */
12461 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012462 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012463
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012464 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12465 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12466 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12467 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12468 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012469
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012470 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12471 pwdiGtkOffloadGetInfoRsparams->bssId,
12472 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 /* VOS message wrapper */
12474 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12475 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12476 vosMsg.bodyval = 0;
12477
12478 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12479 {
12480 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012481 vos_mem_zero(pGtkOffloadGetInfoRsp,
12482 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12484 }
12485
12486 vos_mem_free(pWdaParams->wdaMsgParam) ;
12487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12488 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012489
12490 return;
12491}
12492/*
12493 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12494 * Free memory and send RSP back to SME.
12495 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12496 */
12497void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12498{
12499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12500 vos_msg_t vosMsg;
12501
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12503 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12504
12505 if(NULL == pWdaParams)
12506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12508 "%s: pWdaParams received NULL", __func__);
12509 VOS_ASSERT(0);
12510 return;
12511 }
12512
12513 /* VOS message wrapper */
12514 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12515 vosMsg.bodyptr = NULL;
12516 vosMsg.bodyval = 0;
12517
12518 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12519 {
12520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12521 vos_mem_free(pWdaParams->wdaMsgParam);
12522 vos_mem_free(pWdaParams);
12523 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12524 }
12525
12526 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527}
12528#endif
12529
12530/*
12531 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12532 * Request to WDI to set Tx Per Tracking configurations
12533 */
12534VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12535{
12536 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012537 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12539 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12540 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12541 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 if(NULL == pwdiSetTxPerTrackingReqParams)
12545 {
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 vos_mem_free(pTxPerTrackingParams);
12549 VOS_ASSERT(0);
12550 return VOS_STATUS_E_NOMEM;
12551 }
12552 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12553 if(NULL == pWdaParams)
12554 {
12555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012557 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12558 vos_mem_free(pTxPerTrackingParams);
12559 VOS_ASSERT(0);
12560 return VOS_STATUS_E_NOMEM;
12561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12563 pTxPerTrackingParams->ucTxPerTrackingEnable;
12564 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12565 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12566 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12567 pTxPerTrackingParams->ucTxPerTrackingRatio;
12568 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12569 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012570 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12571 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012572 /* Store param pointer as passed in by caller */
12573 /* store Params pass it to WDI
12574 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12575 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12576 pWdaParams->pWdaContext = pWDA;
12577 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012578 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012579 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012580 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012581 {
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12583 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012584 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012585 vos_mem_free(pWdaParams->wdaMsgParam) ;
12586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12587 vos_mem_free(pWdaParams) ;
12588 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012589 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012590
12591}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012592/*
12593 * FUNCTION: WDA_HALDumpCmdCallback
12594 * Send the VOS complete .
12595 */
12596void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12597 void* pUserData)
12598{
12599 tANI_U8 *buffer = NULL;
12600 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012601 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012602 if(NULL == pWdaParams)
12603 {
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012605 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012606 VOS_ASSERT(0) ;
12607 return ;
12608 }
12609
12610 pWDA = pWdaParams->pWdaContext;
12611 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 if(wdiRspParams->usBufferLen > 0)
12613 {
12614 /*Copy the Resp data to UMAC supplied buffer*/
12615 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12616 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012617
12618 if (!pWdaParams->wdaHALDumpAsync)
12619 {/* Indicate VOSS about the start complete */
12620 vos_WDAComplete_cback(pWDA->pVosContext);
12621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12623 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012624 return ;
12625}
12626
Jeff Johnson295189b2012-06-20 16:38:30 -070012627/*
12628 * FUNCTION: WDA_ProcessHALDumpCmdReq
12629 * Send Dump command to WDI
12630 */
12631VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12632 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012633 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012634{
12635 WDI_Status status = WDI_STATUS_SUCCESS;
12636 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12637 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012638 tWDA_HalDumpReqParams *pWdaParams ;
12639
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 pVosContextType pVosContext = NULL;
12641 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12643 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012644 if(pVosContext)
12645 {
12646 if (pVosContext->isLogpInProgress)
12647 {
12648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12649 "%s:LOGP in Progress. Ignore!!!", __func__);
12650 return VOS_STATUS_E_BUSY;
12651 }
12652 }
12653 else
12654 {
12655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12656 "%s: VOS Context Null", __func__);
12657 return VOS_STATUS_E_RESOURCES;
12658 }
12659
Siddharth Bhal68115602015-01-18 20:44:55 +053012660 if (NULL == pVosContext->pWDAContext)
12661 {
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12663 "%s: WDA Context Null", __func__);
12664 return VOS_STATUS_E_RESOURCES;
12665 }
12666 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 if(NULL == pWdaParams)
12668 {
12669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 return VOS_STATUS_E_NOMEM;
12672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 /* Allocate memory WDI request structure*/
12674 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12675 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12676 if(NULL == wdiHALDumpCmdReqParam)
12677 {
12678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12679 "WDA HAL DUMP Command buffer alloc fail");
12680 vos_mem_free(pWdaParams);
12681 return WDI_STATUS_E_FAILURE;
12682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012684 /* Extract the arguments */
12685 wdiHalDumpCmdInfo->command = cmd;
12686 wdiHalDumpCmdInfo->argument1 = arg1;
12687 wdiHalDumpCmdInfo->argument2 = arg2;
12688 wdiHalDumpCmdInfo->argument3 = arg3;
12689 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012690 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012692 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012693
12694 /* Response message will be passed through the buffer */
12695 pWdaParams->wdaMsgParam = (void *)pBuffer;
12696
12697 /* store Params pass it to WDI */
12698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012699 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012700 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12701 pWdaParams);
12702 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12703 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012705 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12706 WDA_DUMPCMD_WAIT_TIMEOUT );
12707 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012708 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012709 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12710 {
12711 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12712 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12713 }
12714 else
12715 {
12716 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12717 "%s: WDA_HALDUMP reporting other error",__func__);
12718 }
12719 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012721 }
12722 return status;
12723}
Jeff Johnson295189b2012-06-20 16:38:30 -070012724#ifdef WLAN_FEATURE_GTK_OFFLOAD
12725/*
12726 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12727 * Request to WDI to get GTK Offload Information
12728 */
12729VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12730 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12731{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012732 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12734 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12735 tWDA_ReqParams *pWdaParams ;
12736
12737 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12738 {
12739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012741 VOS_ASSERT(0);
12742 return VOS_STATUS_E_NOMEM;
12743 }
12744
12745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12746 if(NULL == pWdaParams)
12747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012750 VOS_ASSERT(0);
12751 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12752 return VOS_STATUS_E_NOMEM;
12753 }
12754
Yue Ma7f44bbe2013-04-12 11:47:39 -070012755 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12756 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012757
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 /* Store Params pass it to WDI */
12759 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12760 pWdaParams->pWdaContext = pWDA;
12761 /* Store param pointer as passed in by caller */
12762 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12763
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012764 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012765 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012766
Yue Ma7f44bbe2013-04-12 11:47:39 -070012767 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012768
12769 if(IS_WDI_STATUS_FAILURE(status))
12770 {
12771 /* failure returned by WDI API */
12772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12773 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12775 vos_mem_free(pWdaParams) ;
12776 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12777 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12778 }
12779
12780 return CONVERT_WDI2VOS_STATUS(status) ;
12781}
12782#endif // WLAN_FEATURE_GTK_OFFLOAD
12783
12784/*
Yue Mab9c86f42013-08-14 15:59:08 -070012785 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12786 *
12787 */
12788VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12789 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12790{
12791 WDI_Status wdiStatus;
12792 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12793
12794 addPeriodicTxPtrnParams =
12795 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12796
12797 if (NULL == addPeriodicTxPtrnParams)
12798 {
12799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12800 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12801 __func__);
12802
12803 return VOS_STATUS_E_NOMEM;
12804 }
12805
12806 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12807 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12808
12809 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12810 addPeriodicTxPtrnParams->pUserData = pWDA;
12811
12812 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12813
12814 if (WDI_STATUS_PENDING == wdiStatus)
12815 {
12816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12817 "Pending received for %s:%d", __func__, __LINE__ );
12818 }
12819 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12820 {
12821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12822 "Failure in %s:%d", __func__, __LINE__ );
12823 }
12824
12825 vos_mem_free(addPeriodicTxPtrnParams);
12826
12827 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12828}
12829
12830/*
12831 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12832 *
12833 */
12834VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12835 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12836{
12837 WDI_Status wdiStatus;
12838 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12839
12840 delPeriodicTxPtrnParams =
12841 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12842
12843 if (NULL == delPeriodicTxPtrnParams)
12844 {
12845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12846 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12847 __func__);
12848
12849 return VOS_STATUS_E_NOMEM;
12850 }
12851
12852 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12853 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12854
12855 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12856 delPeriodicTxPtrnParams->pUserData = pWDA;
12857
12858 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12859
12860 if (WDI_STATUS_PENDING == wdiStatus)
12861 {
12862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12863 "Pending received for %s:%d", __func__, __LINE__ );
12864 }
12865 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12866 {
12867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12868 "Failure in %s:%d", __func__, __LINE__ );
12869 }
12870
12871 vos_mem_free(delPeriodicTxPtrnParams);
12872
12873 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12874}
12875
Rajeev79dbe4c2013-10-05 11:03:42 +053012876#ifdef FEATURE_WLAN_BATCH_SCAN
12877/*
12878 * FUNCTION: WDA_ProcessStopBatchScanInd
12879 *
12880 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12881 *
12882 * PARAM:
12883 * pWDA: pointer to WDA context
12884 * pReq: pointer to stop batch scan request
12885 */
12886VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12887 tSirStopBatchScanInd *pReq)
12888{
12889 WDI_Status wdiStatus;
12890 WDI_StopBatchScanIndType wdiReq;
12891
12892 wdiReq.param = pReq->param;
12893
12894 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12895
12896 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12897 {
12898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12899 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12900 }
12901
12902 vos_mem_free(pReq);
12903
12904 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12905}
12906/*==========================================================================
12907 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12908
12909 DESCRIPTION
12910 API to pull batch scan result from FW
12911
12912 PARAMETERS
12913 pWDA: Pointer to WDA context
12914 pGetBatchScanReq: Pointer to get batch scan result indication
12915
12916 RETURN VALUE
12917 NONE
12918
12919===========================================================================*/
12920VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12921 tSirTriggerBatchScanResultInd *pReq)
12922{
12923 WDI_Status wdiStatus;
12924 WDI_TriggerBatchScanResultIndType wdiReq;
12925
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12927 "------> %s " ,__func__);
12928
12929 wdiReq.param = pReq->param;
12930
12931 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12932
12933 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12934 {
12935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12936 "Trigger batch scan result ind failed %s:%d",
12937 __func__, wdiStatus);
12938 }
12939
12940 vos_mem_free(pReq);
12941
12942 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12943}
12944
12945/*==========================================================================
12946 FUNCTION WDA_SetBatchScanRespCallback
12947
12948 DESCRIPTION
12949 API to process set batch scan response from FW
12950
12951 PARAMETERS
12952 pRsp: Pointer to set batch scan response
12953 pUserData: Pointer to user data
12954
12955 RETURN VALUE
12956 NONE
12957
12958===========================================================================*/
12959void WDA_SetBatchScanRespCallback
12960(
12961 WDI_SetBatchScanRspType *pRsp,
12962 void* pUserData
12963)
12964{
12965 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12966 tpAniSirGlobal pMac;
12967 void *pCallbackContext;
12968 tWDA_CbContext *pWDA = NULL ;
12969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12970
12971
12972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12973 "<------ %s " ,__func__);
12974 if (NULL == pWdaParams)
12975 {
12976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12977 "%s: pWdaParams received NULL", __func__);
12978 VOS_ASSERT(0) ;
12979 return ;
12980 }
12981
12982 /*extract WDA context*/
12983 pWDA = pWdaParams->pWdaContext;
12984 if (NULL == pWDA)
12985 {
12986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12987 "%s:pWDA is NULL can't invole HDD callback",
12988 __func__);
12989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12990 vos_mem_free(pWdaParams->wdaMsgParam);
12991 vos_mem_free(pWdaParams);
12992 VOS_ASSERT(0);
12993 return;
12994 }
12995
12996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12997 vos_mem_free(pWdaParams->wdaMsgParam);
12998 vos_mem_free(pWdaParams);
12999
13000 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13001 if (NULL == pMac)
13002 {
13003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13004 "%s:pMac is NULL", __func__);
13005 VOS_ASSERT(0);
13006 return;
13007 }
13008
13009 pHddSetBatchScanRsp =
13010 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13011 if (NULL == pHddSetBatchScanRsp)
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13015 VOS_ASSERT(0);
13016 return;
13017 }
13018
13019 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13020
13021 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13022 /*call hdd callback with set batch scan response data*/
13023 if(pMac->pmc.setBatchScanReqCallback)
13024 {
13025 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13026 }
13027 else
13028 {
13029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13030 "%s:HDD callback is null", __func__);
13031 VOS_ASSERT(0);
13032 }
13033
13034 vos_mem_free(pHddSetBatchScanRsp);
13035 return ;
13036}
13037
13038/*==========================================================================
13039 FUNCTION WDA_ProcessSetBatchScanReq
13040
13041 DESCRIPTION
13042 API to send set batch scan request to WDI
13043
13044 PARAMETERS
13045 pWDA: Pointer to WDA context
13046 pSetBatchScanReq: Pointer to set batch scan req
13047
13048 RETURN VALUE
13049 NONE
13050
13051===========================================================================*/
13052VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13053 tSirSetBatchScanReq *pSetBatchScanReq)
13054{
13055 WDI_Status status;
13056 tWDA_ReqParams *pWdaParams ;
13057 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13058
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13060 "------> %s " ,__func__);
13061
13062 pWdiSetBatchScanReq =
13063 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13064 if (NULL == pWdiSetBatchScanReq)
13065 {
13066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13067 "%s: VOS MEM Alloc Failure", __func__);
13068 vos_mem_free(pSetBatchScanReq);
13069 VOS_ASSERT(0);
13070 return VOS_STATUS_E_NOMEM;
13071 }
13072
13073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13074 if (NULL == pWdaParams)
13075 {
13076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13077 "%s: VOS MEM Alloc Failure", __func__);
13078 VOS_ASSERT(0);
13079 vos_mem_free(pSetBatchScanReq);
13080 vos_mem_free(pWdiSetBatchScanReq);
13081 return VOS_STATUS_E_NOMEM;
13082 }
13083
13084 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13085 pWdiSetBatchScanReq->numberOfScansToBatch =
13086 pSetBatchScanReq->numberOfScansToBatch;
13087 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13088 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13089 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13090
13091 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13092 pWdaParams->pWdaContext = pWDA;
13093 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13094
13095 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13096 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13097 if (IS_WDI_STATUS_FAILURE(status))
13098 {
13099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13100 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13102 vos_mem_free(pWdaParams->wdaMsgParam);
13103 vos_mem_free(pWdaParams);
13104 }
13105 return CONVERT_WDI2VOS_STATUS(status);
13106}
13107
13108#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013109/*
13110 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13111 *
13112 * DESCRIPTION: This function sends start/update OBSS scan
13113 * inidcation message to WDI
13114 *
13115 * PARAM:
13116 * pWDA: pointer to WDA context
13117 * pReq: pointer to start OBSS scan request
13118 */
13119VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13120 tSirHT40OBSSScanInd *pReq)
13121{
13122 WDI_Status status;
13123 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13124 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013125
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13127 "------> %s " ,__func__);
13128 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13129 wdiOBSSScanParams.pUserData = pWDA;
13130
13131 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13132 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13133 pWdiOBSSScanInd->scanType = pReq->scanType;
13134 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13135 pReq->OBSSScanActiveDwellTime;
13136 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13137 pReq->OBSSScanPassiveDwellTime;
13138 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13139 pReq->BSSChannelWidthTriggerScanInterval;
13140 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13141 pReq->BSSWidthChannelTransitionDelayFactor;
13142 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13143 pReq->OBSSScanActiveTotalPerChannel;
13144 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13145 pReq->OBSSScanPassiveTotalPerChannel;
13146 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13147 pReq->OBSSScanActivityThreshold;
13148 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13149 vos_mem_copy(pWdiOBSSScanInd->channels,
13150 pReq->channels,
13151 pReq->channelCount);
13152 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13153 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13154 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13155 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13156 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13157
13158 vos_mem_copy(pWdiOBSSScanInd->ieField,
13159 pReq->ieField,
13160 pReq->ieFieldLen);
13161
13162 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13163 if (WDI_STATUS_PENDING == status)
13164 {
13165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13166 "Pending received for %s:%d ",__func__,__LINE__ );
13167 }
13168 else if (WDI_STATUS_SUCCESS_SYNC != status)
13169 {
13170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13171 "Failure in %s:%d ",__func__,__LINE__ );
13172 }
13173 return CONVERT_WDI2VOS_STATUS(status) ;
13174}
13175/*
13176 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13177 *
13178 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13179 *
13180 * PARAM:
13181 * pWDA: pointer to WDA context
13182 * pReq: pointer to stop batch scan request
13183 */
13184VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13185 tANI_U8 *bssIdx)
13186{
13187 WDI_Status status;
13188
13189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13190 "------> %s " ,__func__);
13191
13192 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13193 if (WDI_STATUS_PENDING == status)
13194 {
13195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13196 "Pending received for %s:%d ",__func__,__LINE__ );
13197 }
13198 else if (WDI_STATUS_SUCCESS_SYNC != status)
13199 {
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13201 "Failure in %s:%d ",__func__,__LINE__ );
13202 }
13203 return CONVERT_WDI2VOS_STATUS(status) ;
13204}
Yue Mab9c86f42013-08-14 15:59:08 -070013205/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013206 * FUNCTION: WDA_ProcessRateUpdateInd
13207 *
13208 */
13209VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13210 tSirRateUpdateInd *pRateUpdateParams)
13211{
13212 WDI_Status wdiStatus;
13213 WDI_RateUpdateIndParams rateUpdateParams;
13214
13215 vos_mem_copy(rateUpdateParams.bssid,
13216 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13217
13218 rateUpdateParams.ucastDataRateTxFlag =
13219 pRateUpdateParams->ucastDataRateTxFlag;
13220 rateUpdateParams.reliableMcastDataRateTxFlag =
13221 pRateUpdateParams->reliableMcastDataRateTxFlag;
13222 rateUpdateParams.mcastDataRate24GHzTxFlag =
13223 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13224 rateUpdateParams.mcastDataRate5GHzTxFlag =
13225 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13226
13227 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13228 rateUpdateParams.reliableMcastDataRate =
13229 pRateUpdateParams->reliableMcastDataRate;
13230 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13231 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13232
13233 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13234 rateUpdateParams.pUserData = pWDA;
13235
13236 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13237
13238 if (WDI_STATUS_PENDING == wdiStatus)
13239 {
13240 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13241 "Pending received for %s:%d", __func__, __LINE__ );
13242 }
13243 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13244 {
13245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13246 "Failure in %s:%d", __func__, __LINE__ );
13247 }
13248
13249 vos_mem_free(pRateUpdateParams);
13250
13251 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13252}
13253
13254/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013255 * -------------------------------------------------------------------------
13256 * DATA interface with WDI for Mgmt Frames
13257 * -------------------------------------------------------------------------
13258 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013259/*
13260 * FUNCTION: WDA_TxComplete
13261 * Callback function for the WDA_TxPacket
13262 */
13263VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13264 VOS_STATUS status )
13265{
13266
13267 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13268 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013269 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013270
Mihir Shete63341222015-03-24 15:39:18 +053013271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13272
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 if(NULL == wdaContext)
13274 {
13275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13276 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013277 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013278 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013279 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013280 return VOS_STATUS_E_FAILURE;
13281 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013282
13283 /*Check if frame was timed out or not*/
13284 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13285 (v_PVOID_t)&uUserData);
13286
13287 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13288 {
13289 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013290 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13291 "%s: MGMT Frame Tx timed out",
13292 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013293 vos_pkt_return_packet(pData);
13294 return VOS_STATUS_SUCCESS;
13295 }
13296
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13298 if( NULL!=wdaContext->pTxCbFunc)
13299 {
13300 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013301 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013302 {
13303 wdaContext->pTxCbFunc(pMac, pData);
13304 }
13305 else
13306 {
13307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013308 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013309 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 //Return from here since we reaching here because the packet already timeout
13311 return status;
13312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 }
13314
13315 /*
13316 * Trigger the event to bring the HAL TL Tx complete function to come
13317 * out of wait
13318 * Let the coe above to complete the packet first. When this event is set,
13319 * the thread waiting for the event may run and set Vospacket_freed causing the original
13320 * packet not being freed.
13321 */
13322 status = vos_event_set(&wdaContext->txFrameEvent);
13323 if(!VOS_IS_STATUS_SUCCESS(status))
13324 {
13325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013326 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 return status;
13329}
Jeff Johnson295189b2012-06-20 16:38:30 -070013330/*
13331 * FUNCTION: WDA_TxPacket
13332 * Forward TX management frame to WDI
13333 */
13334VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13335 void *pFrmBuf,
13336 tANI_U16 frmLen,
13337 eFrameType frmType,
13338 eFrameTxDir txDir,
13339 tANI_U8 tid,
13340 pWDATxRxCompFunc pCompFunc,
13341 void *pData,
13342 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013343 tANI_U32 txFlag,
13344 tANI_U32 txBdToken
13345 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013346{
13347 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13348 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13349 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13350 tANI_U8 eventIdx = 0;
13351 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13352 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013353 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013354
Jeff Johnson295189b2012-06-20 16:38:30 -070013355 if((NULL == pWDA)||(NULL == pFrmBuf))
13356 {
13357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013358 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013359 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 VOS_ASSERT(0);
13361 return VOS_STATUS_E_FAILURE;
13362 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013363
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013365 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13366 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13368 if(NULL == pMac)
13369 {
13370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013371 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 VOS_ASSERT(0);
13373 return VOS_STATUS_E_FAILURE;
13374 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013375
Jeff Johnson295189b2012-06-20 16:38:30 -070013376 /* store the call back function in WDA context */
13377 pWDA->pTxCbFunc = pCompFunc;
13378 /* store the call back for the function of ackTxComplete */
13379 if( pAckTxComp )
13380 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013381 if( NULL != pWDA->pAckTxCbFunc )
13382 {
13383 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013385 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013386 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013387 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013388
Jeff Johnsone7245742012-09-05 17:12:55 -070013389 if( VOS_STATUS_SUCCESS !=
13390 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13391 {
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13393 "Tx Complete timeout Timer Stop Failed ");
13394 }
13395 else
13396 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013398 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013399 }
13400 }
13401
13402 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13403 pWDA->pAckTxCbFunc = pAckTxComp;
13404 if( VOS_STATUS_SUCCESS !=
13405 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13406 {
13407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13408 "Tx Complete Timer Start Failed ");
13409 pWDA->pAckTxCbFunc = NULL;
13410 return eHAL_STATUS_FAILURE;
13411 }
13412 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 /* Reset the event to be not signalled */
13414 status = vos_event_reset(&pWDA->txFrameEvent);
13415 if(!VOS_IS_STATUS_SUCCESS(status))
13416 {
13417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013418 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013419 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13420 if( pAckTxComp )
13421 {
13422 pWDA->pAckTxCbFunc = NULL;
13423 if( VOS_STATUS_SUCCESS !=
13424 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13425 {
13426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13427 "Tx Complete timeout Timer Stop Failed ");
13428 }
13429 }
13430 return VOS_STATUS_E_FAILURE;
13431 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013432
13433 /* If Peer Sta mask is set don't overwrite to self sta */
13434 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013435 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013436 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013438 else
13439 {
Ganesh K08bce952012-12-13 15:04:41 -080013440 /* Get system role, use the self station if in unknown role or STA role */
13441 systemRole = wdaGetGlobalSystemRole(pMac);
13442 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13443 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013444#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013445 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013446#endif
Ganesh K08bce952012-12-13 15:04:41 -080013447 ))
13448 {
13449 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13450 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013452
Jeff Johnsone7245742012-09-05 17:12:55 -070013453 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13454 disassoc frame reaches the HW, HAL has already deleted the peer station */
13455 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013457 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013458 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 /*Send Probe request frames on self sta idx*/
13461 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 /* Since we donot want probe responses to be retried, send probe responses
13464 through the NO_ACK queues */
13465 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13466 {
13467 //probe response is sent out using self station and no retries options.
13468 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13469 }
13470 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13471 {
13472 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13473 }
13474 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053013475#ifdef FEATURE_WLAN_TDLS
13476 /* TDLS Management frames are sent using Peer Sta mask */
13477 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
13478 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
13479 {
13480 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
13481
13482 }
13483#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013484 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013485
13486 /*Set frame tag to 0
13487 We will use the WDA user data in order to tag a frame as expired*/
13488 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13489 (v_PVOID_t)0);
13490
13491
13492 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013493 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13494 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013497 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013498 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013499 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 -070013500 if( pAckTxComp )
13501 {
13502 pWDA->pAckTxCbFunc = NULL;
13503 if( VOS_STATUS_SUCCESS !=
13504 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13505 {
13506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13507 "Tx Complete timeout Timer Stop Failed ");
13508 }
13509 }
13510 return VOS_STATUS_E_FAILURE;
13511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013512 /*
13513 * Wait for the event to be set by the TL, to get the response of TX
13514 * complete, this event should be set by the Callback function called by TL
13515 */
13516 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13517 &eventIdx);
13518 if(!VOS_IS_STATUS_SUCCESS(status))
13519 {
13520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13521 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013522 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013523
Mukul Sharma5a7553f2015-06-11 19:54:43 +053013524 VOS_BUG(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013525 /*Tag Frame as timed out for later deletion*/
13526 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13527 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13529 after the packet gets completed(packet freed once)*/
13530
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013531 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013532 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013533
Jeff Johnson295189b2012-06-20 16:38:30 -070013534 /* check whether the packet was freed already,so need not free again when
13535 * TL calls the WDA_Txcomplete routine
13536 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013537 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13538 /*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 -070013539 {
13540 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013541 } */
13542
Jeff Johnson295189b2012-06-20 16:38:30 -070013543 if( pAckTxComp )
13544 {
13545 pWDA->pAckTxCbFunc = NULL;
13546 if( VOS_STATUS_SUCCESS !=
13547 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13548 {
13549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13550 "Tx Complete timeout Timer Stop Failed ");
13551 }
13552 }
13553 status = VOS_STATUS_E_FAILURE;
13554 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013555#ifdef WLAN_DUMP_MGMTFRAMES
13556 if (VOS_IS_STATUS_SUCCESS(status))
13557 {
13558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13559 "%s() TX packet : SubType %d", __func__,pFc->subType);
13560 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13561 pData, frmLen);
13562 }
13563#endif
13564
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013565 if (VOS_IS_STATUS_SUCCESS(status))
13566 {
13567 if (pMac->fEnableDebugLog & 0x1)
13568 {
13569 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13570 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13571 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13572 {
13573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13574 pFc->type, pFc->subType);
13575 }
13576 }
13577 }
13578
13579
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 return status;
13581}
Jeff Johnson295189b2012-06-20 16:38:30 -070013582/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013583 * FUNCTION: WDA_ProcessDHCPStartInd
13584 * Forward DHCP Start to WDI
13585 */
13586static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13587 tAniDHCPInd *dhcpStartInd)
13588{
13589 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013590 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013591
c_hpothu0b0cab72014-02-13 21:52:40 +053013592 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13593 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013594 sizeof(tSirMacAddr));
13595
c_hpothu0b0cab72014-02-13 21:52:40 +053013596 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013597
c_hpothu0b0cab72014-02-13 21:52:40 +053013598 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013599 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13601 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013602 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013603 else if (WDI_STATUS_SUCCESS_SYNC != status)
13604 {
13605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13606 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13607 }
13608
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013609 vos_mem_free(dhcpStartInd);
13610 return CONVERT_WDI2VOS_STATUS(status) ;
13611}
13612
13613 /*
13614 * FUNCTION: WDA_ProcessDHCPStopInd
13615 * Forward DHCP Stop to WDI
13616 */
13617 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13618 tAniDHCPInd *dhcpStopInd)
13619 {
13620 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013621 WDI_DHCPInd wdiDHCPInd;
13622
13623 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13624 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13625
13626 status = WDI_dhcpStopInd(&wdiDHCPInd);
13627
13628 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013629 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13631 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013632 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013633 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013634 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13636 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013637 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013638
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013639 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013640
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013641 return CONVERT_WDI2VOS_STATUS(status) ;
13642 }
13643
13644/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013645 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13646 *
13647 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13648 *
13649 * PARAM:
13650 * pWDA: pointer to WDA context
13651 * pReq: pointer to stop batch scan request
13652 */
13653VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13654 tpSpoofMacAddrReqParams pReq)
13655{
13656 WDI_Status wdiStatus;
13657 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13658 tWDA_ReqParams *pWdaParams;
13659
13660 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13661 sizeof(WDI_SpoofMacAddrInfoType));
13662 if(NULL == WDI_SpoofMacAddrInfoParams) {
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13664 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13665 VOS_ASSERT(0);
13666 return VOS_STATUS_E_NOMEM;
13667 }
13668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13669 if(NULL == pWdaParams) {
13670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13671 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013672 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013673 VOS_ASSERT(0);
13674 return VOS_STATUS_E_NOMEM;
13675 }
13676
13677 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13678 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13679
13680 pWdaParams->pWdaContext = pWDA;
13681 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013682 pWdaParams->wdaMsgParam = (void *)pReq;
13683
13684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13685 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13686
Siddharth Bhal171788a2014-09-29 21:02:40 +053013687 /* store Params pass it to WDI */
13688 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13689
13690 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013691 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13692 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013693
13694 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13697 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13699 vos_mem_free(pWdaParams->wdaMsgParam);
13700 vos_mem_free(pWdaParams);
13701 }
13702
13703 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13704}
13705
13706/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013707 * FUNCTION: WDA_McProcessMsg
13708 * Trigger DAL-AL to start CFG download
13709 */
13710VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13711{
13712 VOS_STATUS status = VOS_STATUS_SUCCESS;
13713 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013714 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013715 {
13716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013717 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013718 VOS_ASSERT(0);
13719 return VOS_STATUS_E_FAILURE;
13720 }
13721
13722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013723 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013724
13725 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13726 if(NULL == pWDA )
13727 {
13728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013729 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013731 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 return VOS_STATUS_E_FAILURE;
13733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013734 /* Process all the WDA messages.. */
13735 switch( pMsg->type )
13736 {
13737 case WNI_CFG_DNLD_REQ:
13738 {
13739 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 /* call WDA complete event if config download success */
13741 if( VOS_IS_STATUS_SUCCESS(status) )
13742 {
13743 vos_WDAComplete_cback(pVosContext);
13744 }
13745 else
13746 {
13747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13748 "WDA Config Download failure" );
13749 }
13750 break ;
13751 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013752 /*
13753 * Init SCAN request from PE, convert it into DAL format
13754 * and send it to DAL
13755 */
13756 case WDA_INIT_SCAN_REQ:
13757 {
13758 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13759 break ;
13760 }
13761 /* start SCAN request from PE */
13762 case WDA_START_SCAN_REQ:
13763 {
13764 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13765 break ;
13766 }
13767 /* end SCAN request from PE */
13768 case WDA_END_SCAN_REQ:
13769 {
13770 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13771 break ;
13772 }
13773 /* end SCAN request from PE */
13774 case WDA_FINISH_SCAN_REQ:
13775 {
13776 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13777 break ;
13778 }
13779 /* join request from PE */
13780 case WDA_CHNL_SWITCH_REQ:
13781 {
13782 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13783 {
13784 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13785 }
13786 else
13787 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013788 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13789 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13790 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13791 {
13792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13793 "call ProcessChannelSwitchReq_V1" );
13794 WDA_ProcessChannelSwitchReq_V1(pWDA,
13795 (tSwitchChannelParams*)pMsg->bodyptr) ;
13796 }
13797 else
13798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13800 "call ProcessChannelSwitchReq" );
13801 WDA_ProcessChannelSwitchReq(pWDA,
13802 (tSwitchChannelParams*)pMsg->bodyptr) ;
13803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013804 }
13805 break ;
13806 }
13807 /* ADD BSS request from PE */
13808 case WDA_ADD_BSS_REQ:
13809 {
13810 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13811 break ;
13812 }
13813 case WDA_ADD_STA_REQ:
13814 {
13815 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13816 break ;
13817 }
13818 case WDA_DELETE_BSS_REQ:
13819 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13821 break ;
13822 }
13823 case WDA_DELETE_STA_REQ:
13824 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013825 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13826 break ;
13827 }
13828 case WDA_CONFIG_PARAM_UPDATE_REQ:
13829 {
13830 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13831 break ;
13832 }
13833 case WDA_SET_BSSKEY_REQ:
13834 {
13835 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13836 break ;
13837 }
13838 case WDA_SET_STAKEY_REQ:
13839 {
13840 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13841 break ;
13842 }
13843 case WDA_SET_STA_BCASTKEY_REQ:
13844 {
13845 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13846 break ;
13847 }
13848 case WDA_REMOVE_BSSKEY_REQ:
13849 {
13850 WDA_ProcessRemoveBssKeyReq(pWDA,
13851 (tRemoveBssKeyParams *)pMsg->bodyptr);
13852 break ;
13853 }
13854 case WDA_REMOVE_STAKEY_REQ:
13855 {
13856 WDA_ProcessRemoveStaKeyReq(pWDA,
13857 (tRemoveStaKeyParams *)pMsg->bodyptr);
13858 break ;
13859 }
13860 case WDA_REMOVE_STA_BCASTKEY_REQ:
13861 {
13862 /* TODO: currently UMAC is not sending this request, Add the code for
13863 handling this request when UMAC supports */
13864 break;
13865 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013866#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013867 case WDA_TSM_STATS_REQ:
13868 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013869 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013870 break;
13871 }
13872#endif
13873 case WDA_UPDATE_EDCA_PROFILE_IND:
13874 {
13875 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13876 break;
13877 }
13878 case WDA_ADD_TS_REQ:
13879 {
13880 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13881 break;
13882 }
13883 case WDA_DEL_TS_REQ:
13884 {
13885 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13886 break;
13887 }
13888 case WDA_ADDBA_REQ:
13889 {
13890 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13891 break;
13892 }
13893 case WDA_DELBA_IND:
13894 {
13895 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13896 break;
13897 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013898 case WDA_UPDATE_CHAN_LIST_REQ:
13899 {
13900 WDA_ProcessUpdateChannelList(pWDA,
13901 (tSirUpdateChanList *)pMsg->bodyptr);
13902 break;
13903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 case WDA_SET_LINK_STATE:
13905 {
13906 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13907 break;
13908 }
13909 case WDA_GET_STATISTICS_REQ:
13910 {
13911 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13912 break;
13913 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013914#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013915 case WDA_GET_ROAM_RSSI_REQ:
13916 {
13917 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13918 break;
13919 }
13920#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013921 case WDA_PWR_SAVE_CFG:
13922 {
13923 if(pWDA->wdaState == WDA_READY_STATE)
13924 {
13925 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13926 }
13927 else
13928 {
13929 if(NULL != pMsg->bodyptr)
13930 {
13931 vos_mem_free(pMsg->bodyptr);
13932 }
13933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13934 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13935 }
13936 break;
13937 }
13938 case WDA_ENTER_IMPS_REQ:
13939 {
13940 if(pWDA->wdaState == WDA_READY_STATE)
13941 {
13942 WDA_ProcessEnterImpsReq(pWDA);
13943 }
13944 else
13945 {
13946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13947 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13948 }
13949 break;
13950 }
13951 case WDA_EXIT_IMPS_REQ:
13952 {
13953 if(pWDA->wdaState == WDA_READY_STATE)
13954 {
13955 WDA_ProcessExitImpsReq(pWDA);
13956 }
13957 else
13958 {
13959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13960 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13961 }
13962 break;
13963 }
13964 case WDA_ENTER_BMPS_REQ:
13965 {
13966 if(pWDA->wdaState == WDA_READY_STATE)
13967 {
13968 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13969 }
13970 else
13971 {
13972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13973 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13974 }
13975 break;
13976 }
13977 case WDA_EXIT_BMPS_REQ:
13978 {
13979 if(pWDA->wdaState == WDA_READY_STATE)
13980 {
13981 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13982 }
13983 else
13984 {
13985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13986 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13987 }
13988 break;
13989 }
13990 case WDA_ENTER_UAPSD_REQ:
13991 {
13992 if(pWDA->wdaState == WDA_READY_STATE)
13993 {
13994 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13995 }
13996 else
13997 {
13998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13999 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14000 }
14001 break;
14002 }
14003 case WDA_EXIT_UAPSD_REQ:
14004 {
14005 if(pWDA->wdaState == WDA_READY_STATE)
14006 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014007 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014008 }
14009 else
14010 {
14011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14012 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14013 }
14014 break;
14015 }
14016 case WDA_UPDATE_UAPSD_IND:
14017 {
14018 if(pWDA->wdaState == WDA_READY_STATE)
14019 {
14020 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14021 }
14022 else
14023 {
14024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14025 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14026 }
14027 break;
14028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 case WDA_REGISTER_PE_CALLBACK :
14030 {
14031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14032 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14033 /*TODO: store the PE callback */
14034 /* Do Nothing? MSG Body should be freed at here */
14035 if(NULL != pMsg->bodyptr)
14036 {
14037 vos_mem_free(pMsg->bodyptr);
14038 }
14039 break;
14040 }
14041 case WDA_SYS_READY_IND :
14042 {
14043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14044 "Handling msg type WDA_SYS_READY_IND " );
14045 pWDA->wdaState = WDA_READY_STATE;
14046 if(NULL != pMsg->bodyptr)
14047 {
14048 vos_mem_free(pMsg->bodyptr);
14049 }
14050 break;
14051 }
14052 case WDA_BEACON_FILTER_IND :
14053 {
14054 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14055 break;
14056 }
14057 case WDA_BTC_SET_CFG:
14058 {
14059 /*TODO: handle this while dealing with BTC */
14060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14061 "Handling msg type WDA_BTC_SET_CFG " );
14062 /* Do Nothing? MSG Body should be freed at here */
14063 if(NULL != pMsg->bodyptr)
14064 {
14065 vos_mem_free(pMsg->bodyptr);
14066 }
14067 break;
14068 }
14069 case WDA_SIGNAL_BT_EVENT:
14070 {
14071 /*TODO: handle this while dealing with BTC */
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14073 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14074 /* Do Nothing? MSG Body should be freed at here */
14075 if(NULL != pMsg->bodyptr)
14076 {
14077 vos_mem_free(pMsg->bodyptr);
14078 }
14079 break;
14080 }
14081 case WDA_CFG_RXP_FILTER_REQ:
14082 {
14083 WDA_ProcessConfigureRxpFilterReq(pWDA,
14084 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14085 break;
14086 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014087 case WDA_MGMT_LOGGING_INIT_REQ:
14088 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014089 WDA_ProcessFWLoggingInitReq(pWDA,
14090 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014091 break;
14092 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014093 case WDA_GET_FRAME_LOG_REQ:
14094 {
14095 WDA_ProcessGetFrameLogReq(pWDA,
14096 (tAniGetFrameLogReq *)pMsg->bodyptr);
14097 break;
14098 }
Karthick Sa35b0692015-08-21 15:57:05 +053014099 case WDA_SEND_LOG_DONE_IND:
14100 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014101 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014102 break;
14103 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014104 case WDA_FATAL_EVENT_LOGS_REQ:
14105 {
14106 WDA_ProcessFatalEventLogsReq(pWDA,
14107 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14108 break;
14109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 case WDA_SET_HOST_OFFLOAD:
14111 {
14112 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14113 break;
14114 }
14115 case WDA_SET_KEEP_ALIVE:
14116 {
14117 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14118 break;
14119 }
14120#ifdef WLAN_NS_OFFLOAD
14121 case WDA_SET_NS_OFFLOAD:
14122 {
14123 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14124 break;
14125 }
14126#endif //WLAN_NS_OFFLOAD
14127 case WDA_ADD_STA_SELF_REQ:
14128 {
14129 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14130 break;
14131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014132 case WDA_DEL_STA_SELF_REQ:
14133 {
14134 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14135 break;
14136 }
14137 case WDA_WOWL_ADD_BCAST_PTRN:
14138 {
14139 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14140 break;
14141 }
14142 case WDA_WOWL_DEL_BCAST_PTRN:
14143 {
14144 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14145 break;
14146 }
14147 case WDA_WOWL_ENTER_REQ:
14148 {
14149 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14150 break;
14151 }
14152 case WDA_WOWL_EXIT_REQ:
14153 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014154 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 break;
14156 }
14157 case WDA_TL_FLUSH_AC_REQ:
14158 {
14159 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14160 break;
14161 }
14162 case WDA_SIGNAL_BTAMP_EVENT:
14163 {
14164 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14165 break;
14166 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014167 case WDA_FW_STATS_GET_REQ:
14168 {
14169 WDA_ProcessFWStatsGetReq(pWDA,
14170 (tSirFWStatsGetReq *)pMsg->bodyptr);
14171 break;
14172 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014173#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14174 case WDA_LINK_LAYER_STATS_SET_REQ:
14175 {
14176 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14177 break;
14178 }
14179 case WDA_LINK_LAYER_STATS_GET_REQ:
14180 {
14181 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14182 break;
14183 }
14184 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14185 {
14186 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14187 break;
14188 }
14189#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014190#ifdef WLAN_FEATURE_EXTSCAN
14191 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14192 {
14193 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14194 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14195 break;
14196 }
14197 case WDA_EXTSCAN_START_REQ:
14198 {
14199 WDA_ProcessEXTScanStartReq(pWDA,
14200 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14201 break;
14202 }
14203 case WDA_EXTSCAN_STOP_REQ:
14204 {
14205 WDA_ProcessEXTScanStopReq(pWDA,
14206 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14207 break;
14208 }
14209 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14210 {
14211 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
14212 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
14213 break;
14214 }
14215 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
14216 {
14217 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
14218 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
14219 break;
14220 }
14221 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
14222 {
14223 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
14224 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
14225 break;
14226 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053014227 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
14228 {
14229 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
14230 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
14231 break;
14232 }
14233 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
14234 {
14235 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
14236 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
14237 break;
14238 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014239#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070014240#ifdef WDA_UT
14241 case WDA_WDI_EVENT_MSG:
14242 {
14243 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
14244 break ;
14245 }
14246#endif
14247 case WDA_UPDATE_BEACON_IND:
14248 {
14249 WDA_ProcessUpdateBeaconParams(pWDA,
14250 (tUpdateBeaconParams *)pMsg->bodyptr);
14251 break;
14252 }
14253 case WDA_SEND_BEACON_REQ:
14254 {
14255 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
14256 break;
14257 }
14258 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
14259 {
14260 WDA_ProcessUpdateProbeRspTemplate(pWDA,
14261 (tSendProbeRespParams *)pMsg->bodyptr);
14262 break;
14263 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014264#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070014265 case WDA_SET_MAX_TX_POWER_REQ:
14266 {
14267 WDA_ProcessSetMaxTxPowerReq(pWDA,
14268 (tMaxTxPowerParams *)pMsg->bodyptr);
14269 break;
14270 }
14271#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070014272 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
14273 {
14274 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
14275 pMsg->bodyptr);
14276 break;
14277 }
schang86c22c42013-03-13 18:41:24 -070014278 case WDA_SET_TX_POWER_REQ:
14279 {
14280 WDA_ProcessSetTxPowerReq(pWDA,
14281 (tSirSetTxPowerReq *)pMsg->bodyptr);
14282 break;
14283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014284 case WDA_SET_P2P_GO_NOA_REQ:
14285 {
14286 WDA_ProcessSetP2PGONOAReq(pWDA,
14287 (tP2pPsParams *)pMsg->bodyptr);
14288 break;
14289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014290 /* timer related messages */
14291 case WDA_TIMER_BA_ACTIVITY_REQ:
14292 {
14293 WDA_BaCheckActivity(pWDA) ;
14294 break ;
14295 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014296
14297 /* timer related messages */
14298 case WDA_TIMER_TRAFFIC_STATS_IND:
14299 {
14300 WDA_TimerTrafficStatsInd(pWDA);
14301 break;
14302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014303#ifdef WLAN_FEATURE_VOWIFI_11R
14304 case WDA_AGGR_QOS_REQ:
14305 {
14306 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
14307 break;
14308 }
14309#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070014310 case WDA_FTM_CMD_REQ:
14311 {
14312 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
14313 break ;
14314 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014315#ifdef FEATURE_OEM_DATA_SUPPORT
14316 case WDA_START_OEM_DATA_REQ:
14317 {
14318 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
14319 break;
14320 }
14321#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070014322 /* Tx Complete Time out Indication */
14323 case WDA_TX_COMPLETE_TIMEOUT_IND:
14324 {
14325 WDA_ProcessTxCompleteTimeOutInd(pWDA);
14326 break;
14327 }
14328 case WDA_WLAN_SUSPEND_IND:
14329 {
14330 WDA_ProcessWlanSuspendInd(pWDA,
14331 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
14332 break;
14333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014334 case WDA_WLAN_RESUME_REQ:
14335 {
14336 WDA_ProcessWlanResumeReq(pWDA,
14337 (tSirWlanResumeParam *)pMsg->bodyptr) ;
14338 break;
14339 }
14340
14341 case WDA_UPDATE_CF_IND:
14342 {
14343 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
14344 pMsg->bodyptr = NULL;
14345 break;
14346 }
14347#ifdef FEATURE_WLAN_SCAN_PNO
14348 case WDA_SET_PNO_REQ:
14349 {
14350 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
14351 break;
14352 }
14353 case WDA_UPDATE_SCAN_PARAMS_REQ:
14354 {
14355 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
14356 break;
14357 }
14358 case WDA_SET_RSSI_FILTER_REQ:
14359 {
14360 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
14361 break;
14362 }
14363#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014364#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014365 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014366 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014367 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014368 break;
14369 }
14370#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014371 case WDA_SET_TX_PER_TRACKING_REQ:
14372 {
14373 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
14374 break;
14375 }
14376
14377#ifdef WLAN_FEATURE_PACKET_FILTERING
14378 case WDA_8023_MULTICAST_LIST_REQ:
14379 {
14380 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
14381 break;
14382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014383 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
14384 {
14385 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
14386 break;
14387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014388 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
14389 {
14390 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
14391 break;
14392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014393 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
14394 {
14395 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
14396 break;
14397 }
14398#endif // WLAN_FEATURE_PACKET_FILTERING
14399
14400
14401 case WDA_TRANSMISSION_CONTROL_IND:
14402 {
14403 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
14404 break;
14405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014406 case WDA_SET_POWER_PARAMS_REQ:
14407 {
14408 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
14409 break;
14410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014411#ifdef WLAN_FEATURE_GTK_OFFLOAD
14412 case WDA_GTK_OFFLOAD_REQ:
14413 {
14414 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
14415 break;
14416 }
14417
14418 case WDA_GTK_OFFLOAD_GETINFO_REQ:
14419 {
14420 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14421 break;
14422 }
14423#endif //WLAN_FEATURE_GTK_OFFLOAD
14424
14425 case WDA_SET_TM_LEVEL_REQ:
14426 {
14427 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14428 break;
14429 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014430
Mohit Khanna4a70d262012-09-11 16:30:12 -070014431 case WDA_UPDATE_OP_MODE:
14432 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014433 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14434 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14435 {
14436 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14437 }
14438 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014439 {
14440 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14441 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14442 else
14443 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014444 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014445 }
14446 else
14447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014448 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014449 break;
14450 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014451#ifdef WLAN_FEATURE_11W
14452 case WDA_EXCLUDE_UNENCRYPTED_IND:
14453 {
14454 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14455 break;
14456 }
14457#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014458#ifdef FEATURE_WLAN_TDLS
14459 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14460 {
14461 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14462 break;
14463 }
14464#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014465 case WDA_DHCP_START_IND:
14466 {
14467 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14468 break;
14469 }
14470 case WDA_DHCP_STOP_IND:
14471 {
14472 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14473 break;
14474 }
Leo Chang9056f462013-08-01 19:21:11 -070014475#ifdef FEATURE_WLAN_LPHB
14476 case WDA_LPHB_CONF_REQ:
14477 {
14478 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14479 break;
14480 }
14481#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014482 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14483 {
14484 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14485 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14486 break;
14487 }
14488 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14489 {
14490 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14491 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14492 break;
14493 }
14494
Rajeev79dbe4c2013-10-05 11:03:42 +053014495#ifdef FEATURE_WLAN_BATCH_SCAN
14496 case WDA_SET_BATCH_SCAN_REQ:
14497 {
14498 WDA_ProcessSetBatchScanReq(pWDA,
14499 (tSirSetBatchScanReq *)pMsg->bodyptr);
14500 break;
14501 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014502 case WDA_RATE_UPDATE_IND:
14503 {
14504 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14505 break;
14506 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014507 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14508 {
14509 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14510 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14511 break;
14512 }
14513 case WDA_STOP_BATCH_SCAN_IND:
14514 {
14515 WDA_ProcessStopBatchScanInd(pWDA,
14516 (tSirStopBatchScanInd *)pMsg->bodyptr);
14517 break;
14518 }
c_hpothu92367912014-05-01 15:18:17 +053014519 case WDA_GET_BCN_MISS_RATE_REQ:
14520 WDA_ProcessGetBcnMissRateReq(pWDA,
14521 (tSirBcnMissRateReq *)pMsg->bodyptr);
14522 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014523#endif
14524
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014525 case WDA_HT40_OBSS_SCAN_IND:
14526 {
14527 WDA_ProcessHT40OBSSScanInd(pWDA,
14528 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14529 break;
14530 }
14531 case WDA_HT40_OBSS_STOP_SCAN_IND:
14532 {
14533 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14534 (tANI_U8*)pMsg->bodyptr);
14535 break;
14536 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014537// tdlsoffchan
14538#ifdef FEATURE_WLAN_TDLS
14539 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14540 {
14541 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14542 break;
14543 }
14544#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014545 case WDA_SPOOF_MAC_ADDR_REQ:
14546 {
14547 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14548 break;
14549 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014550 case WDA_ENCRYPT_MSG_REQ:
14551 {
14552 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14553 break;
14554 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014555
14556 case WDA_NAN_REQUEST:
14557 {
14558 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14559 break;
14560 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014561 case WDA_SET_RTS_CTS_HTVHT:
14562 {
14563 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14564 break;
14565 }
Katya Nigamf0511f62015-05-05 16:40:57 +053014566
14567 case WDA_MON_START_REQ:
14568 {
14569 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
14570 break;
14571 }
14572 case WDA_MON_STOP_REQ:
14573 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053014574 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053014575 break;
14576 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053014577 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
14578 {
14579 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
14580 break;
14581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014582 default:
14583 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 "No Handling for msg type %x in WDA "
14586 ,pMsg->type);
14587 /* Do Nothing? MSG Body should be freed at here */
14588 if(NULL != pMsg->bodyptr)
14589 {
14590 vos_mem_free(pMsg->bodyptr);
14591 }
14592 //WDA_VOS_ASSERT(0) ;
14593 }
14594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 return status ;
14596}
14597
Jeff Johnson295189b2012-06-20 16:38:30 -070014598/*
14599 * FUNCTION: WDA_LowLevelIndCallback
14600 * IND API callback from WDI, send Ind to PE
14601 */
14602void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14603 void* pUserData )
14604{
14605 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14606#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14607 tSirRSSINotification rssiNotification;
14608#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014609 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 {
14611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014612 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014613 VOS_ASSERT(0);
14614 return ;
14615 }
14616
14617 switch(wdiLowLevelInd->wdiIndicationType)
14618 {
14619 case WDI_RSSI_NOTIFICATION_IND:
14620 {
14621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14622 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014623#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14624 rssiNotification.bReserved =
14625 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14626 rssiNotification.bRssiThres1NegCross =
14627 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14628 rssiNotification.bRssiThres1PosCross =
14629 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14630 rssiNotification.bRssiThres2NegCross =
14631 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14632 rssiNotification.bRssiThres2PosCross =
14633 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14634 rssiNotification.bRssiThres3NegCross =
14635 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14636 rssiNotification.bRssiThres3PosCross =
14637 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014638 rssiNotification.avgRssi = (v_S7_t)
14639 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014640 WLANTL_BMPSRSSIRegionChangedNotification(
14641 pWDA->pVosContext,
14642 &rssiNotification);
14643#endif
14644 break ;
14645 }
14646 case WDI_MISSED_BEACON_IND:
14647 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014648 tpSirSmeMissedBeaconInd pMissBeacInd =
14649 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14651 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014652 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014653 if(NULL == pMissBeacInd)
14654 {
14655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14656 "%s: VOS MEM Alloc Failure", __func__);
14657 break;
14658 }
14659 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14660 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14661 pMissBeacInd->bssIdx =
14662 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14663 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 break ;
14665 }
14666 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14667 {
14668 /* TODO: Decode Ind and send Ind to PE */
14669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14670 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14671 break ;
14672 }
14673
14674 case WDI_MIC_FAILURE_IND:
14675 {
14676 tpSirSmeMicFailureInd pMicInd =
14677 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14678
14679 if(NULL == pMicInd)
14680 {
14681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014683 break;
14684 }
14685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14686 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014687 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14688 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14689 vos_mem_copy(pMicInd->bssId,
14690 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14691 sizeof(tSirMacAddr));
14692 vos_mem_copy(pMicInd->info.srcMacAddr,
14693 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14694 sizeof(tSirMacAddr));
14695 vos_mem_copy(pMicInd->info.taMacAddr,
14696 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14697 sizeof(tSirMacAddr));
14698 vos_mem_copy(pMicInd->info.dstMacAddr,
14699 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14700 sizeof(tSirMacAddr));
14701 vos_mem_copy(pMicInd->info.rxMacAddr,
14702 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14703 sizeof(tSirMacAddr));
14704 pMicInd->info.multicast =
14705 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14706 pMicInd->info.keyId=
14707 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14708 pMicInd->info.IV1=
14709 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14710 vos_mem_copy(pMicInd->info.TSC,
14711 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014712 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14713 (void *)pMicInd , 0) ;
14714 break ;
14715 }
14716 case WDI_FATAL_ERROR_IND:
14717 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014718 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 /* TODO: Decode Ind and send Ind to PE */
14720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14721 "Received WDI_FATAL_ERROR_IND from WDI ");
14722 break ;
14723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014724 case WDI_DEL_STA_IND:
14725 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014726 tpDeleteStaContext pDelSTACtx =
14727 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14728
14729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14730 "Received WDI_DEL_STA_IND from WDI ");
14731 if(NULL == pDelSTACtx)
14732 {
14733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014735 break;
14736 }
14737 vos_mem_copy(pDelSTACtx->addr2,
14738 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14739 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 vos_mem_copy(pDelSTACtx->bssId,
14741 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14742 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014743 pDelSTACtx->assocId =
14744 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14745 pDelSTACtx->reasonCode =
14746 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14747 pDelSTACtx->staId =
14748 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014749 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14750 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 break ;
14752 }
14753 case WDI_COEX_IND:
14754 {
14755 tANI_U32 index;
14756 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014757 tSirSmeCoexInd *pSmeCoexInd;
14758
14759 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14760 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14761 {
14762 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14763 {
14764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14765 FL("Coex state: 0x%x coex feature: 0x%x"),
14766 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14767 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14768
14769 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14770 {
14771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14772 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14773 }
14774 }
14775 break;
14776 }
14777
14778 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014779 if(NULL == pSmeCoexInd)
14780 {
14781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014782 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014783 break;
14784 }
14785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14786 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014787 /* Message Header */
14788 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14789 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 /* Info from WDI Indication */
14791 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14792 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14793 {
14794 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014796 /* VOS message wrapper */
14797 vosMsg.type = eWNI_SME_COEX_IND;
14798 vosMsg.bodyptr = (void *)pSmeCoexInd;
14799 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 /* Send message to SME */
14801 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14802 {
14803 /* free the mem and return */
14804 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14805 }
14806 else
14807 {
14808 /* DEBUG */
14809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14810 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14811 pSmeCoexInd->coexIndType,
14812 pSmeCoexInd->coexIndData[0],
14813 pSmeCoexInd->coexIndData[1],
14814 pSmeCoexInd->coexIndData[2],
14815 pSmeCoexInd->coexIndData[3]);
14816 }
14817 break;
14818 }
14819 case WDI_TX_COMPLETE_IND:
14820 {
14821 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14822 /* Calling TxCompleteAck Indication from wda context*/
14823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14824 "Complete Indication received from HAL");
14825 if( pWDA->pAckTxCbFunc )
14826 {
14827 if( VOS_STATUS_SUCCESS !=
14828 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14829 {
14830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14831 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014832 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053014833 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014834 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14835 else
14836 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 pWDA->pAckTxCbFunc = NULL;
14838 }
14839 else
14840 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053014841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 "Tx Complete Indication is received after timeout ");
14843 }
14844 break;
14845 }
Viral Modid86bde22012-12-10 13:09:21 -080014846 case WDI_P2P_NOA_START_IND :
14847 {
14848 tSirP2PNoaStart *pP2pNoaStart =
14849 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14850
14851 if (NULL == pP2pNoaStart)
14852 {
14853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14854 "Memory allocation failure, "
14855 "WDI_P2P_NOA_START_IND not forwarded");
14856 break;
14857 }
14858 pP2pNoaStart->status =
14859 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14860 pP2pNoaStart->bssIdx =
14861 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14862 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14863 (void *)pP2pNoaStart , 0) ;
14864 break;
14865 }
14866
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014867#ifdef FEATURE_WLAN_TDLS
14868 case WDI_TDLS_IND :
14869 {
14870 tSirTdlsInd *pTdlsInd =
14871 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14872
14873 if (NULL == pTdlsInd)
14874 {
14875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14876 "Memory allocation failure, "
14877 "WDI_TDLS_IND not forwarded");
14878 break;
14879 }
14880 pTdlsInd->status =
14881 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14882 pTdlsInd->assocId =
14883 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14884 pTdlsInd->staIdx =
14885 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14886 pTdlsInd->reasonCode =
14887 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14888 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14889 (void *)pTdlsInd , 0) ;
14890 break;
14891 }
14892#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014893 case WDI_P2P_NOA_ATTR_IND :
14894 {
14895 tSirP2PNoaAttr *pP2pNoaAttr =
14896 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14898 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 if (NULL == pP2pNoaAttr)
14900 {
14901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14902 "Memory allocation failure, "
14903 "WDI_P2P_NOA_ATTR_IND not forwarded");
14904 break;
14905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 pP2pNoaAttr->index =
14907 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14908 pP2pNoaAttr->oppPsFlag =
14909 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14910 pP2pNoaAttr->ctWin =
14911 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14912
14913 pP2pNoaAttr->uNoa1IntervalCnt =
14914 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14915 pP2pNoaAttr->uNoa1Duration =
14916 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14917 pP2pNoaAttr->uNoa1Interval =
14918 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14919 pP2pNoaAttr->uNoa1StartTime =
14920 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014921 pP2pNoaAttr->uNoa2IntervalCnt =
14922 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14923 pP2pNoaAttr->uNoa2Duration =
14924 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14925 pP2pNoaAttr->uNoa2Interval =
14926 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14927 pP2pNoaAttr->uNoa2StartTime =
14928 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014929 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14930 (void *)pP2pNoaAttr , 0) ;
14931 break;
14932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014933#ifdef FEATURE_WLAN_SCAN_PNO
14934 case WDI_PREF_NETWORK_FOUND_IND:
14935 {
14936 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014937 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14938 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14939 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14940 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14941
Jeff Johnson295189b2012-06-20 16:38:30 -070014942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14943 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014944 if (NULL == pPrefNetworkFoundInd)
14945 {
14946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14947 "Memory allocation failure, "
14948 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014949 if (NULL !=
14950 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14951 {
14952 wpalMemoryFree(
14953 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14954 );
14955 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014957 break;
14958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014959 /* Message Header */
14960 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014961 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014962
14963 /* Info from WDI Indication */
14964 pPrefNetworkFoundInd->ssId.length =
14965 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014966 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014967 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14968 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14969 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014970 if (NULL !=
14971 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14972 {
14973 pPrefNetworkFoundInd->frameLength =
14974 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14975 vos_mem_copy( pPrefNetworkFoundInd->data,
14976 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14977 pPrefNetworkFoundInd->frameLength);
14978 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14979 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14980 }
14981 else
14982 {
14983 pPrefNetworkFoundInd->frameLength = 0;
14984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014985 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014986 /* VOS message wrapper */
14987 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14988 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14989 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014990 /* Send message to SME */
14991 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14992 {
14993 /* free the mem and return */
14994 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014996 break;
14997 }
14998#endif // FEATURE_WLAN_SCAN_PNO
14999
15000#ifdef WLAN_WAKEUP_EVENTS
15001 case WDI_WAKE_REASON_IND:
15002 {
15003 vos_msg_t vosMsg;
15004 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15005 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15006 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15007
15008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015009 "[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 -070015010 wdiLowLevelInd->wdiIndicationType,
15011 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15012 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15013 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15014
15015 if (NULL == pWakeReasonInd)
15016 {
15017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15018 "Memory allocation failure, "
15019 "WDI_WAKE_REASON_IND not forwarded");
15020 break;
15021 }
15022
15023 vos_mem_zero(pWakeReasonInd, allocSize);
15024
15025 /* Message Header */
15026 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15027 pWakeReasonInd->mesgLen = allocSize;
15028
15029 /* Info from WDI Indication */
15030 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15031 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15032 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15033 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15034 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15035 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15036 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15037 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15038
15039 /* VOS message wrapper */
15040 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15041 vosMsg.bodyptr = (void *) pWakeReasonInd;
15042 vosMsg.bodyval = 0;
15043
15044 /* Send message to SME */
15045 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15046 {
15047 /* free the mem and return */
15048 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15049 }
15050
15051 break;
15052 }
15053#endif // WLAN_WAKEUP_EVENTS
15054
15055 case WDI_TX_PER_HIT_IND:
15056 {
15057 vos_msg_t vosMsg;
15058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15059 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15060 /* VOS message wrapper */
15061 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15062 vosMsg.bodyptr = NULL;
15063 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 /* Send message to SME */
15065 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15066 {
15067 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15068 }
15069 break;
15070 }
15071
Leo Chang9056f462013-08-01 19:21:11 -070015072#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015073 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015074 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015075 vos_msg_t vosMsg;
15076 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015077
Leo Changd9df8aa2013-09-26 13:32:26 -070015078 lphbInd =
15079 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15080 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015081 {
15082 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15083 "%s: LPHB IND buffer alloc Fail", __func__);
15084 return ;
15085 }
15086
Leo Changd9df8aa2013-09-26 13:32:26 -070015087 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015088 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015089 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015090 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015091 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015092 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15093
15094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015095 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015096 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15097
Leo Changd9df8aa2013-09-26 13:32:26 -070015098 vosMsg.type = eWNI_SME_LPHB_IND;
15099 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015100 vosMsg.bodyval = 0;
15101 /* Send message to SME */
15102 if (VOS_STATUS_SUCCESS !=
15103 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15104 {
15105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15106 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015107 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015108 }
15109 break;
15110 }
15111#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015112 case WDI_PERIODIC_TX_PTRN_FW_IND:
15113 {
15114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15115 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15116 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15117 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15118 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15119 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15120 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15121
15122 break;
15123 }
Leo Chang9056f462013-08-01 19:21:11 -070015124
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015125 case WDI_IBSS_PEER_INACTIVITY_IND:
15126 {
15127 tSirIbssPeerInactivityInd *pIbssInd =
15128 (tSirIbssPeerInactivityInd *)
15129 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15130
15131 if (NULL == pIbssInd)
15132 {
15133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15134 "Memory allocation failure, "
15135 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15136 break;
15137 }
15138
15139 pIbssInd->bssIdx =
15140 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15141 pIbssInd->staIdx =
15142 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15143 vos_mem_copy(pIbssInd->peerAddr,
15144 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15145 sizeof(tSirMacAddr));
15146 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15147 break;
15148 }
15149
Rajeev79dbe4c2013-10-05 11:03:42 +053015150#ifdef FEATURE_WLAN_BATCH_SCAN
15151 case WDI_BATCH_SCAN_RESULT_IND:
15152 {
15153 void *pBatchScanResult;
15154 void *pCallbackContext;
15155 tpAniSirGlobal pMac;
15156
15157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15158 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15159
15160 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015161 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15164 "%s:pWDA is NULL", __func__);
15165 VOS_ASSERT(0);
15166 return;
15167 }
15168
15169 pBatchScanResult =
15170 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15171 if (NULL == pBatchScanResult)
15172 {
15173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15174 "%s:Batch scan result from FW is null can't invoke HDD callback",
15175 __func__);
15176 VOS_ASSERT(0);
15177 return;
15178 }
15179
15180 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15181 if (NULL == pMac)
15182 {
15183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15184 "%s:pMac is NULL", __func__);
15185 VOS_ASSERT(0);
15186 return;
15187 }
15188
15189 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
15190 /*call hdd callback with set batch scan response data*/
15191 if(pMac->pmc.batchScanResultCallback)
15192 {
15193 pMac->pmc.batchScanResultCallback(pCallbackContext,
15194 pBatchScanResult);
15195 }
15196 else
15197 {
15198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15199 "%s:HDD callback is null", __func__);
15200 VOS_ASSERT(0);
15201 }
15202 break;
15203 }
15204#endif
15205
Leo Chang0b0e45a2013-12-15 15:18:55 -080015206#ifdef FEATURE_WLAN_CH_AVOID
15207 case WDI_CH_AVOID_IND:
15208 {
15209 vos_msg_t vosMsg;
15210 tSirChAvoidIndType *chAvoidInd;
15211
15212 chAvoidInd =
15213 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
15214 if (NULL == chAvoidInd)
15215 {
15216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15217 "%s: CH_AVOID IND buffer alloc Fail", __func__);
15218 return ;
15219 }
15220
15221 chAvoidInd->avoidRangeCount =
15222 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
15223 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
15224 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
15225 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
15226
15227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15228 "%s : WDA CH avoid notification", __func__);
15229
15230 vosMsg.type = eWNI_SME_CH_AVOID_IND;
15231 vosMsg.bodyptr = chAvoidInd;
15232 vosMsg.bodyval = 0;
15233 /* Send message to SME */
15234 if (VOS_STATUS_SUCCESS !=
15235 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15236 {
15237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15238 "post eWNI_SME_CH_AVOID_IND to SME Failed");
15239 vos_mem_free(chAvoidInd);
15240 }
15241 break;
15242 }
15243#endif /* FEATURE_WLAN_CH_AVOID */
15244
Sunil Duttbd736ed2014-05-26 21:19:41 +053015245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15246 case WDI_LL_STATS_RESULTS_IND:
15247 {
15248 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053015249 tpAniSirGlobal pMac;
15250
15251 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15252 "Received WDI_LL_STATS_RESULTS_IND from FW");
15253
15254 /*sanity check*/
15255 if (NULL == pWDA)
15256 {
15257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15258 "%s:pWDA is NULL", __func__);
15259 VOS_ASSERT(0);
15260 return;
15261 }
15262
15263 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053015264 (void *)wdiLowLevelInd->
15265 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053015266 if (NULL == pLinkLayerStatsInd)
15267 {
15268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15269 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
15270 __func__);
15271 VOS_ASSERT(0);
15272 return;
15273 }
15274
15275 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15276 if (NULL == pMac)
15277 {
15278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15279 "%s:pMac is NULL", __func__);
15280 VOS_ASSERT(0);
15281 return;
15282 }
15283
Dino Mycled3d50022014-07-07 12:58:25 +053015284 /* call hdd callback with Link Layer Statistics.
15285 * vdev_id/ifacId in link_stats_results will be
15286 * used to retrieve the correct HDD context
15287 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053015288 if (pMac->sme.pLinkLayerStatsIndCallback)
15289 {
Dino Mycled3d50022014-07-07 12:58:25 +053015290 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053015291 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053015292 pLinkLayerStatsInd,
15293 wdiLowLevelInd->
15294 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053015295 }
15296 else
15297 {
15298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15299 "%s:HDD callback is null", __func__);
15300 }
15301 break;
15302 }
15303#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
15304
Dino Mycle41bdc942014-06-10 11:30:24 +053015305#ifdef WLAN_FEATURE_EXTSCAN
15306 case WDI_EXTSCAN_PROGRESS_IND:
15307 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
15308 case WDI_EXTSCAN_SCAN_RESULT_IND:
15309 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015310 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053015311 {
15312 void *pEXTScanData;
15313 void *pCallbackContext;
15314 tpAniSirGlobal pMac;
15315 tANI_U16 indType;
15316
15317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15318 "Received WDI_EXTSCAN Indications from FW");
15319 /*sanity check*/
15320 if (NULL == pWDA)
15321 {
15322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15323 "%s:pWDA is NULL", __func__);
15324 VOS_ASSERT(0);
15325 return;
15326 }
15327 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
15328 {
15329 indType = WDA_EXTSCAN_PROGRESS_IND;
15330
15331 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15332 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
15333 }
15334 if (wdiLowLevelInd->wdiIndicationType ==
15335 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
15336 {
15337 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
15338
15339 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15340 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
15341 }
15342 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
15343 {
15344 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
15345
15346 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15347 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
15348 }
15349 if (wdiLowLevelInd->wdiIndicationType ==
15350 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
15351 {
15352 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
15353
15354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15355 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
15356 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015357 if (wdiLowLevelInd->wdiIndicationType ==
15358 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
15359 {
15360 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
15361
15362 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15363 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
15364 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015365
15366 pEXTScanData =
15367 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
15368 if (NULL == pEXTScanData)
15369 {
15370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15371 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
15372 __func__);
15373 VOS_ASSERT(0);
15374 return;
15375 }
15376
15377 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15378 if (NULL == pMac)
15379 {
15380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15381 "%s:pMac is NULL", __func__);
15382 VOS_ASSERT(0);
15383 return;
15384 }
15385
15386 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
15387
15388 if(pMac->sme.pEXTScanIndCb)
15389 {
15390 pMac->sme.pEXTScanIndCb(pCallbackContext,
15391 indType,
15392 pEXTScanData);
15393 }
15394 else
15395 {
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15397 "%s:HDD callback is null", __func__);
15398 }
15399 break;
15400 }
15401#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053015402 case WDI_DEL_BA_IND:
15403 {
15404 tpBADeleteParams pDelBAInd =
15405 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
15406
15407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15408 "Received WDI_DEL_BA_IND from WDI ");
15409 if(NULL == pDelBAInd)
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15412 "%s: VOS MEM Alloc Failure", __func__);
15413 break;
15414 }
15415 vos_mem_copy(pDelBAInd->peerMacAddr,
15416 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
15417 sizeof(tSirMacAddr));
15418 vos_mem_copy(pDelBAInd->bssId,
15419 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
15420 sizeof(tSirMacAddr));
15421 pDelBAInd->staIdx =
15422 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
15423 pDelBAInd->baTID =
15424 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
15425 pDelBAInd->baDirection =
15426 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
15427 pDelBAInd->reasonCode =
15428 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
15429
15430 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
15431 (void *)pDelBAInd , 0) ;
15432 break;
15433 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015434 case WDI_NAN_EVENT_IND:
15435 {
15436 vos_msg_t vosMsg;
15437 tpSirNanEvent pSirNanEvent = NULL;
15438
15439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15440 "Received WDI_NAN_EVENT");
15441
15442 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15443 - sizeof( pSirNanEvent->event_data)
15444 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15445
15446 if (NULL == pSirNanEvent)
15447 {
15448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15449 "%s: VOS MEM Alloc Failure", __func__);
15450 VOS_ASSERT(0) ;
15451 break;
15452 }
15453
15454 pSirNanEvent->event_data_len =
15455 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15456
15457 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15458 {
15459 vos_mem_copy( pSirNanEvent->event_data,
15460 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15461 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15462 }
15463
15464 /* VOS message wrapper */
15465 vosMsg.type = eWNI_SME_NAN_EVENT;
15466 vosMsg.bodyptr = pSirNanEvent;
15467 vosMsg.bodyval = 0;
15468
15469 /* Send message to SME */
15470 if (VOS_STATUS_SUCCESS
15471 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15472 {
15473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15474 "post eWNI_SME_NAN_EVENT to SME Failed");
15475 vos_mem_free(pSirNanEvent);
15476 }
15477 break;
15478 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053015479 case WDI_LOST_LINK_PARAMS_IND:
15480 {
15481 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
15482 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053015483
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053015484 if (NULL == pLostLinkParamInd)
15485 {
15486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15487 "%s: VOS MEM Alloc Failure", __func__);
15488 break;
15489 }
15490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15491 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
15492
15493 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
15494 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
15495 pLostLinkParamInd->info.bssIdx =
15496 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
15497 pLostLinkParamInd->info.rssi =
15498 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
15499 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
15500 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
15501 sizeof(tSirMacAddr));
15502 pLostLinkParamInd->info.linkFlCnt =
15503 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
15504 pLostLinkParamInd->info.linkFlTx =
15505 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
15506 pLostLinkParamInd->info.lastDataRate =
15507 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
15508 pLostLinkParamInd->info.rsvd1 =
15509 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
15510 pLostLinkParamInd->info.rsvd2 =
15511 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
15512 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
15513 (void *)pLostLinkParamInd , 0) ;
15514 break;
15515 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015516 default:
15517 {
15518 /* TODO error */
15519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15520 "Received UNKNOWN Indication from WDI ");
15521 }
15522 }
15523 return ;
15524}
15525
Jeff Johnson295189b2012-06-20 16:38:30 -070015526/*
15527 * BA related processing in WDA.
15528 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015529void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15530 void* pUserData)
15531{
15532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15533 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015534 if(NULL == pWdaParams)
15535 {
15536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015537 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 VOS_ASSERT(0) ;
15539 return ;
15540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015541 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015542 vos_mem_free(pWdaParams->wdaMsgParam) ;
15543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015546 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015547 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15548 {
15549 tANI_U8 i = 0 ;
15550 tBaActivityInd *baActivityInd = NULL ;
15551 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15552 tANI_U8 allocSize = sizeof(tBaActivityInd)
15553 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15554 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15555 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015556 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015557 if(NULL == baActivityInd)
15558 {
15559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 VOS_ASSERT(0) ;
15562 return;
15563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015564 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15565 sizeof(tSirMacAddr)) ;
15566 baActivityInd->baCandidateCnt = baCandidateCount ;
15567
15568 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15569 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15570
15571 for(i = 0 ; i < baCandidateCount ; i++)
15572 {
15573 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015574 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15575 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015576 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15577 {
15578 baCandidate->baInfo[tid].fBaEnable =
15579 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15580 baCandidate->baInfo[tid].startingSeqNum =
15581 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15582 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015583 wdiBaCandidate++ ;
15584 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015586 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15587 }
15588 else
15589 {
15590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15591 "BA Trigger RSP with Failure received ");
15592 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015593 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015594}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015595
15596
15597/*
15598 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15599 * during MCC
15600 */
15601void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15602{
15603 wpt_uint32 enabled;
15604 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15605 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15606 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15607
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015608 if (NULL == pMac )
15609 {
15610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15611 "%s: Invoked with invalid MAC context ", __func__ );
15612 VOS_ASSERT(0);
15613 return;
15614 }
15615
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015616 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15617 != eSIR_SUCCESS)
15618 {
15619 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15620 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15621 return;
15622 }
15623
15624 if(!enabled)
15625 {
15626 return;
15627 }
15628
15629 if(NULL == pWDA)
15630 {
15631 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15632 "%s:WDA context is NULL", __func__);
15633 VOS_ASSERT(0);
15634 return;
15635 }
15636
15637 if(activate)
15638 {
15639 if( VOS_STATUS_SUCCESS !=
15640 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15641 {
15642 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15643 "Traffic Stats Timer Start Failed ");
15644 return;
15645 }
15646 WDI_DS_ActivateTrafficStats();
15647 }
15648 else
15649 {
15650 WDI_DS_DeactivateTrafficStats();
15651 WDI_DS_ClearTrafficStats();
15652
15653 if( VOS_STATUS_SUCCESS !=
15654 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15655 {
15656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15657 "Traffic Stats Timer Stop Failed ");
15658 return;
15659 }
15660 }
15661}
15662
15663/*
15664 * Traffic Stats Timer handler
15665 */
15666void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15667{
15668 WDI_Status wdiStatus;
15669 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15670 WDI_TrafficStatsIndType trafficStatsIndParams;
15671 wpt_uint32 length, enabled;
15672 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15673
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015674 if (NULL == pMac )
15675 {
15676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15677 "%s: Invoked with invalid MAC context ", __func__ );
15678 VOS_ASSERT(0);
15679 return;
15680 }
15681
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015682 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15683 != eSIR_SUCCESS)
15684 {
15685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15686 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15687 return;
15688 }
15689
15690 if(!enabled)
15691 {
15692 WDI_DS_DeactivateTrafficStats();
15693 return;
15694 }
15695
15696 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15697
15698 if(pWdiTrafficStats != NULL)
15699 {
15700 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15701 trafficStatsIndParams.length = length;
15702 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015703 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015704 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15705 trafficStatsIndParams.pUserData = pWDA;
15706
15707 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15708
15709 if(WDI_STATUS_PENDING == wdiStatus)
15710 {
15711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15712 "Pending received for %s:%d ",__func__,__LINE__ );
15713 }
15714 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15715 {
15716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15717 "Failure in %s:%d ",__func__,__LINE__ );
15718 }
15719
15720 WDI_DS_ClearTrafficStats();
15721 }
15722 else
15723 {
15724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15725 "pWdiTrafficStats is Null");
15726 }
15727
15728 if( VOS_STATUS_SUCCESS !=
15729 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15730 {
15731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15732 "Traffic Stats Timer Start Failed ");
15733 return;
15734 }
15735}
15736
Jeff Johnson295189b2012-06-20 16:38:30 -070015737/*
15738 * BA Activity check timer handler
15739 */
15740void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15741{
15742 tANI_U8 curSta = 0 ;
15743 tANI_U8 tid = 0 ;
15744 tANI_U8 size = 0 ;
15745 tANI_U8 baCandidateCount = 0 ;
15746 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015747 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015748 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015749 tpAniSirGlobal pMac;
15750
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015751 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015752 {
15753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015754 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015755 VOS_ASSERT(0);
15756 return ;
15757 }
15758 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15759 {
15760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15761 "Inconsistent STA entries in WDA");
15762 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015763 }
15764 if(NULL == pWDA->pVosContext)
15765 {
15766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15767 "%s: pVosContext is NULL",__func__);
15768 VOS_ASSERT(0);
15769 return ;
15770 }
15771 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015772 if(NULL == pMac)
15773 {
15774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15775 "%s: pMac is NULL",__func__);
15776 VOS_ASSERT(0);
15777 return ;
15778 }
15779
Abhishek Singh0644e482014-10-06 18:38:23 +053015780 if (wlan_cfgGetInt(pMac,
15781 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15782 eSIR_SUCCESS)
15783 {
15784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15785 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15786 val = 0;
15787 }
15788
Jeff Johnson295189b2012-06-20 16:38:30 -070015789 /* walk through all STA entries and find out TX packet count */
15790 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15791 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015792 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015793#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015794 // We can only do BA on "hard" STAs.
15795 if (!(IS_HWSTA_IDX(curSta)))
15796 {
15797 continue;
15798 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015799#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015800 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15801 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015802 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015803 tANI_U32 txPktCount = 0 ;
15804 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015805 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015806 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15807 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015808 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15809 curSta, tid, &txPktCount)))
15810 {
15811#if 0
15812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15813 "************* %d:%d, %d ",curSta, txPktCount,
15814 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15815#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015816 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15817 (currentOperChan <= SIR_11B_CHANNEL_END)))
15818 {
15819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15820 "%s: BTC disabled aggregation - dont start "
15821 "TX ADDBA req",__func__);
15822 }
15823 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015824 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015825 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15826 pWDA->wdaGlobalSystemRole) && txPktCount )
15827 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15828 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 {
15830 /* get prepare for sending message to HAL */
15831 //baCandidate[baCandidateCount].staIdx = curSta ;
15832 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15833 newBaCandidate = WDA_ENABLE_BA ;
15834 }
15835 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15836 }
15837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015838 /* fill the entry for all the sta with given TID's */
15839 if(WDA_ENABLE_BA == newBaCandidate)
15840 {
15841 /* move to next BA candidate */
15842 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15843 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15844 baCandidateCount++ ;
15845 newBaCandidate = WDA_DISABLE_BA ;
15846 }
15847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015848 /* prepare and send message to hal */
15849 if( 0 < baCandidateCount)
15850 {
15851 WDI_Status status = WDI_STATUS_SUCCESS ;
15852 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15853 tWDA_ReqParams *pWdaParams =
15854 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015855 if(NULL == pWdaParams)
15856 {
15857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015859 VOS_ASSERT(0) ;
15860 return;
15861 }
15862 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15863 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15864 if(NULL == wdiTriggerBaReq)
15865 {
15866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015868 VOS_ASSERT(0) ;
15869 vos_mem_free(pWdaParams);
15870 return;
15871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015872 do
15873 {
15874 WDI_TriggerBAReqinfoType *triggerBaInfo =
15875 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15876 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15877 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15878 * for each request */
15879 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15880 triggerBaInfo->ucBASessionID = 0;
15881 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15882 } while(0) ;
15883 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015885 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015886 pWdaParams->pWdaContext = pWDA;
15887 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15888 pWdaParams->wdaMsgParam = NULL;
15889 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15890 WDA_TriggerBaReqCallback, pWdaParams) ;
15891 if(IS_WDI_STATUS_FAILURE(status))
15892 {
15893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15894 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15895 vos_mem_free(pWdaParams->wdaMsgParam) ;
15896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15897 vos_mem_free(pWdaParams) ;
15898 }
15899 }
15900 else
15901 {
15902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15903 "There is no TID for initiating BA");
15904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015905 if( VOS_STATUS_SUCCESS !=
15906 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15907 {
15908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15909 "BA Activity Timer Stop Failed ");
15910 return ;
15911 }
15912 if( VOS_STATUS_SUCCESS !=
15913 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15914 {
15915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15916 "BA Activity Timer Start Failed ");
15917 return;
15918 }
15919 return ;
15920}
Jeff Johnson295189b2012-06-20 16:38:30 -070015921/*
15922 * WDA common routine to create timer used by WDA.
15923 */
15924static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15925{
Jeff Johnson295189b2012-06-20 16:38:30 -070015926 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15927 tANI_U32 val = 0 ;
15928 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15929
15930 if(NULL == pMac)
15931 {
15932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015933 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015934 VOS_ASSERT(0);
15935 return VOS_STATUS_E_FAILURE;
15936 }
15937 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15938 != eSIR_SUCCESS)
15939 {
15940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15941 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15942 return VOS_STATUS_E_FAILURE;
15943 }
15944 val = SYS_MS_TO_TICKS(val) ;
15945
15946 /* BA activity check timer */
15947 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15948 "BA Activity Check timer", WDA_TimerHandler,
15949 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15950 if(status != TX_SUCCESS)
15951 {
15952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15953 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015954 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015956 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015957 /* Tx Complete Timeout timer */
15958 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15959 "Tx Complete Check timer", WDA_TimerHandler,
15960 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015961 if(status != TX_SUCCESS)
15962 {
15963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15964 "Unable to create Tx Complete Timeout timer");
15965 /* Destroy timer of BA activity check timer */
15966 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15967 if(status != TX_SUCCESS)
15968 {
15969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15970 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015971 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015972 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015973 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015974 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015975
15976 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15977
15978 /* Traffic Stats timer */
15979 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15980 "Traffic Stats timer", WDA_TimerHandler,
15981 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15982 if(status != TX_SUCCESS)
15983 {
15984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15985 "Unable to create traffic stats timer");
15986 /* Destroy timer of BA activity check timer */
15987 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15988 if(status != TX_SUCCESS)
15989 {
15990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15991 "Unable to Destroy BA activity timer");
15992 }
15993 /* Destroy timer of tx complete timer */
15994 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15995 if(status != TX_SUCCESS)
15996 {
15997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15998 "Unable to Tx complete timer");
15999 }
16000 return VOS_STATUS_E_FAILURE ;
16001 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016002 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016003}
Jeff Johnson295189b2012-06-20 16:38:30 -070016004/*
16005 * WDA common routine to destroy timer used by WDA.
16006 */
16007static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16008{
16009 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016010 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16011 if(status != TX_SUCCESS)
16012 {
16013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16014 "Unable to Destroy Tx Complete Timeout timer");
16015 return eSIR_FAILURE ;
16016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016017 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16018 if(status != TX_SUCCESS)
16019 {
16020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16021 "Unable to Destroy BA activity timer");
16022 return eSIR_FAILURE ;
16023 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016024 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16025 if(status != TX_SUCCESS)
16026 {
16027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16028 "Unable to Destroy traffic stats timer");
16029 return eSIR_FAILURE ;
16030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016031 return eSIR_SUCCESS ;
16032}
Jeff Johnson295189b2012-06-20 16:38:30 -070016033/*
16034 * WDA timer handler.
16035 */
16036void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16037{
16038 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16039 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016040 /*
16041 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16042 */
16043 wdaMsg.type = timerInfo ;
16044 wdaMsg.bodyptr = NULL;
16045 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016046 /* post the message.. */
16047 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16048 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16049 {
16050 vosStatus = VOS_STATUS_E_BADMSG;
16051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016052}
Jeff Johnson295189b2012-06-20 16:38:30 -070016053/*
16054 * WDA Tx Complete timeout Indication.
16055 */
16056void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
16057{
16058 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016059 tpSirTxBdStatus txBdStatus = {0};
16060
Jeff Johnson295189b2012-06-20 16:38:30 -070016061 if( pWDA->pAckTxCbFunc )
16062 {
16063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016064 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016065 /*Indicate failure*/
16066 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016067 pWDA->pAckTxCbFunc = NULL;
16068 }
16069 else
16070 {
16071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016072 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070016073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016074}
Jeff Johnson295189b2012-06-20 16:38:30 -070016075/*
16076 * WDA Set REG Domain to VOS NV
16077 */
Abhishek Singha306a442013-11-07 18:39:01 +053016078eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
16079 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070016080{
Abhishek Singha306a442013-11-07 18:39:01 +053016081 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070016082 {
16083 return eHAL_STATUS_INVALID_PARAMETER;
16084 }
16085 return eHAL_STATUS_SUCCESS;
16086}
Jeff Johnson295189b2012-06-20 16:38:30 -070016087
Jeff Johnson295189b2012-06-20 16:38:30 -070016088#ifdef FEATURE_WLAN_SCAN_PNO
16089/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016090 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016091 *
16092 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016093void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016094{
16095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016096 tSirPNOScanReq *pPNOScanReqParams;
16097
Jeff Johnson295189b2012-06-20 16:38:30 -070016098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016099 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016100 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070016101 {
16102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016103 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 VOS_ASSERT(0) ;
16105 return ;
16106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016107
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016108 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
16109 if(pPNOScanReqParams->statusCallback)
16110 {
16111 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16112 (status == WDI_STATUS_SUCCESS) ?
16113 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
16114 }
16115
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053016116 if (pPNOScanReqParams->enable == 1)
16117 {
16118 if (pPNOScanReqParams->aNetworks)
16119 vos_mem_free(pPNOScanReqParams->aNetworks);
16120 if (pPNOScanReqParams->p24GProbeTemplate)
16121 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16122 if (pPNOScanReqParams->p5GProbeTemplate)
16123 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16124 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16126 vos_mem_free(pWdaParams->wdaMsgParam);
16127 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016128
16129 return ;
16130}
Jeff Johnson295189b2012-06-20 16:38:30 -070016131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016132 * FUNCTION: WDA_PNOScanReqCallback
16133 * Free memory.
16134 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
16135 */
16136void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016137{
Yue Ma7f44bbe2013-04-12 11:47:39 -070016138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016139 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016140
16141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16143
16144 if(NULL == pWdaParams)
16145 {
16146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16147 "%s: pWdaParams received NULL", __func__);
16148 VOS_ASSERT(0);
16149 return;
16150 }
16151
16152 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16153 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016154 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
16155 if(pPNOScanReqParams->statusCallback)
16156 {
16157 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16158 VOS_STATUS_E_FAILURE);
16159 }
16160
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053016161 if (pPNOScanReqParams->enable == 1)
16162 {
16163 if (pPNOScanReqParams->aNetworks)
16164 vos_mem_free(pPNOScanReqParams->aNetworks);
16165 if (pPNOScanReqParams->p24GProbeTemplate)
16166 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16167 if (pPNOScanReqParams->p5GProbeTemplate)
16168 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16169 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16171 vos_mem_free(pWdaParams->wdaMsgParam);
16172 vos_mem_free(pWdaParams);
16173 }
16174
16175 return;
16176}
16177/*
16178 * FUNCTION: WDA_UpdateScanParamsRespCallback
16179 *
16180 */
16181void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
16182{
16183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016185 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016186 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 {
16188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016189 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016190 VOS_ASSERT(0) ;
16191 return ;
16192 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016193
16194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16195 vos_mem_free(pWdaParams->wdaMsgParam);
16196 vos_mem_free(pWdaParams);
16197
Jeff Johnson295189b2012-06-20 16:38:30 -070016198 return ;
16199}
Jeff Johnson295189b2012-06-20 16:38:30 -070016200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016201 * FUNCTION: WDA_UpdateScanParamsReqCallback
16202 * Free memory.
16203 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
16204 */
16205void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16206{
16207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16208
16209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16210 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16211
16212 if(NULL == pWdaParams)
16213 {
16214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16215 "%s: pWdaParams received NULL", __func__);
16216 VOS_ASSERT(0);
16217 return;
16218 }
16219
16220 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16221 {
16222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16223 vos_mem_free(pWdaParams->wdaMsgParam);
16224 vos_mem_free(pWdaParams);
16225 }
16226
16227 return;
16228}
16229/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016230 * FUNCTION: WDA_ProcessSetPreferredNetworkList
16231 * Request to WDI to set Preferred Network List.Offload
16232 */
16233VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
16234 tSirPNOScanReq *pPNOScanReqParams)
16235{
Jeff Johnson43971f52012-07-17 12:26:56 -070016236 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
16238 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
16239 tWDA_ReqParams *pWdaParams ;
16240 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016243 if(NULL == pwdiPNOScanReqInfo)
16244 {
16245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016247 VOS_ASSERT(0);
16248 return VOS_STATUS_E_NOMEM;
16249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16251 if(NULL == pWdaParams)
16252 {
16253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016255 VOS_ASSERT(0);
16256 vos_mem_free(pwdiPNOScanReqInfo);
16257 return VOS_STATUS_E_NOMEM;
16258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016259 //
16260 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
16261 //
16262 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
16263 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
16265 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
16266 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016267 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
16268 {
16269 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
16270 &pPNOScanReqParams->aNetworks[i],
16271 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
16272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016273 /*Scan timer intervals*/
16274 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
16275 &pPNOScanReqParams->scanTimers,
16276 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070016277 /*Probe template for 2.4GHz band*/
16278 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
16279 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16280 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
16282 pPNOScanReqParams->p24GProbeTemplate,
16283 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070016284 /*Probe template for 5GHz band*/
16285 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
16286 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16287 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016288 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
16289 pPNOScanReqParams->p5GProbeTemplate,
16290 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016291 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
16292 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016293
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 /* Store Params pass it to WDI */
16295 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
16296 pWdaParams->pWdaContext = pWDA;
16297 /* Store param pointer as passed in by caller */
16298 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016299 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016300 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 if(IS_WDI_STATUS_FAILURE(status))
16302 {
16303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16304 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016305 if(pPNOScanReqParams->statusCallback)
16306 {
16307 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16308 VOS_STATUS_E_FAILURE);
16309 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053016310 if (pPNOScanReqParams->enable == 1)
16311 {
16312 if (pPNOScanReqParams->aNetworks)
16313 vos_mem_free(pPNOScanReqParams->aNetworks);
16314 if (pPNOScanReqParams->p24GProbeTemplate)
16315 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16316 if (pPNOScanReqParams->p5GProbeTemplate)
16317 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16318 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16320 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053016321
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 pWdaParams->wdaWdiApiMsgParam = NULL;
16323 pWdaParams->wdaMsgParam = NULL;
16324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 return CONVERT_WDI2VOS_STATUS(status) ;
16326}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016327
16328#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16329
16330void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
16331{
16332 /*Convert the CSR Auth types to WDI Auth types */
16333 switch (csrAuthType)
16334 {
16335 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
16336 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
16337 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016338#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016339 case eCSR_AUTH_TYPE_CCKM_WPA:
16340 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
16341 break;
16342#endif
16343 case eCSR_AUTH_TYPE_WPA:
16344 *AuthType = eWDA_AUTH_TYPE_WPA;
16345 break;
16346 case eCSR_AUTH_TYPE_WPA_PSK:
16347 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
16348 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016349#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016350 case eCSR_AUTH_TYPE_CCKM_RSN:
16351 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
16352 break;
16353#endif
16354 case eCSR_AUTH_TYPE_RSN:
16355 *AuthType = eWDA_AUTH_TYPE_RSN;
16356 break;
16357 case eCSR_AUTH_TYPE_RSN_PSK:
16358 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
16359 break;
16360#if defined WLAN_FEATURE_VOWIFI_11R
16361 case eCSR_AUTH_TYPE_FT_RSN:
16362 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
16363 break;
16364 case eCSR_AUTH_TYPE_FT_RSN_PSK:
16365 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
16366 break;
16367#endif
16368#ifdef FEATURE_WLAN_WAPI
16369 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
16370 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
16371 break;
16372 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
16373 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
16374 break;
16375#endif /* FEATURE_WLAN_WAPI */
16376 case eCSR_AUTH_TYPE_SHARED_KEY:
16377 case eCSR_AUTH_TYPE_AUTOSWITCH:
16378 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
16379 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053016380#ifdef WLAN_FEATURE_11W
16381 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
16382 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016383 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053016384 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
16385 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
16386 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016387#endif
16388 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053016389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016390 "%s: Unknown Auth Type", __func__);
16391 break;
16392 }
16393}
16394void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
16395{
16396 switch (csrEncrType)
16397 {
16398 case eCSR_ENCRYPT_TYPE_NONE:
16399 *EncrType = WDI_ED_NONE;
16400 break;
16401 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
16402 case eCSR_ENCRYPT_TYPE_WEP40:
16403 *EncrType = WDI_ED_WEP40;
16404 break;
16405 case eCSR_ENCRYPT_TYPE_WEP104:
16406 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
16407 *EncrType = WDI_ED_WEP104;
16408 break;
16409 case eCSR_ENCRYPT_TYPE_TKIP:
16410 *EncrType = WDI_ED_TKIP;
16411 break;
16412 case eCSR_ENCRYPT_TYPE_AES:
16413 *EncrType = WDI_ED_CCMP;
16414 break;
16415#ifdef WLAN_FEATURE_11W
16416 case eCSR_ENCRYPT_TYPE_AES_CMAC:
16417 *EncrType = WDI_ED_AES_128_CMAC;
16418 break;
16419#endif
16420#ifdef FEATURE_WLAN_WAPI
16421 case eCSR_ENCRYPT_TYPE_WPI:
16422 *EncrType = WDI_ED_WPI;
16423 break;
16424#endif
16425 case eCSR_ENCRYPT_TYPE_ANY:
16426 *EncrType = WDI_ED_ANY;
16427 break;
16428
16429 default:
16430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16431 "%s: Unknown Encryption Type", __func__);
16432 break;
16433 }
16434}
16435
16436/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016437 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016438 * Request to WDI to set Roam Offload Scan
16439 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016440VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016441 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
16442{
16443 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016444 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
16445 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016446 tWDA_ReqParams *pWdaParams ;
16447 v_U8_t csrAuthType;
16448 WDI_RoamNetworkType *pwdiRoamNetworkType;
16449 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
16450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16451 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016452 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016453 {
16454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16455 "%s: VOS MEM Alloc Failure", __func__);
16456 VOS_ASSERT(0);
16457 return VOS_STATUS_E_NOMEM;
16458 }
16459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16460 if (NULL == pWdaParams)
16461 {
16462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16463 "%s: VOS MEM Alloc Failure", __func__);
16464 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016465 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016466 return VOS_STATUS_E_NOMEM;
16467 }
16468
16469 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016470 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016471 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016472 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
16473 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016474 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
16475 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16476 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16477 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16478 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16479 sizeof(pwdiRoamNetworkType->currAPbssid));
16480 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16481 csrAuthType);
16482 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16483 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16484 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16485 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16486 pwdiRoamOffloadScanInfo->LookupThreshold =
16487 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016488 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16489 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016490 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16491 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016492 pwdiRoamOffloadScanInfo->MAWCEnabled =
16493 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016494 pwdiRoamOffloadScanInfo->Command =
16495 pRoamOffloadScanReqParams->Command ;
16496 pwdiRoamOffloadScanInfo->StartScanReason =
16497 pRoamOffloadScanReqParams->StartScanReason ;
16498 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16499 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16500 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16501 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16502 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16503 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16504 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16505 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16506 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16507 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016508 pwdiRoamOffloadScanInfo->IsESEEnabled =
16509 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016510 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16511 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16512 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16513 pwdiRoamNetworkType->ssId.ucLength =
16514 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16515 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16516 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16517 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16518 pwdiRoamNetworkType->ChannelCount =
16519 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16520 pwdiRoamOffloadScanInfo->ChannelCacheType =
16521 pRoamOffloadScanReqParams->ChannelCacheType;
16522 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16523 pRoamOffloadScanReqParams->ValidChannelList,
16524 pRoamOffloadScanReqParams->ValidChannelCount);
16525 pwdiRoamOffloadScanInfo->ValidChannelCount =
16526 pRoamOffloadScanReqParams->ValidChannelCount;
16527 pwdiRoamOffloadScanInfo->us24GProbeSize =
16528 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16529 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16530 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16531 pRoamOffloadScanReqParams->p24GProbeTemplate,
16532 pwdiRoamOffloadScanInfo->us24GProbeSize);
16533 pwdiRoamOffloadScanInfo->us5GProbeSize =
16534 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16535 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16536 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16537 pRoamOffloadScanReqParams->p5GProbeTemplate,
16538 pwdiRoamOffloadScanInfo->us5GProbeSize);
16539 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16540 pRoamOffloadScanReqParams->MDID.mdiePresent;
16541 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16542 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016543 pwdiRoamOffloadScanInfo->nProbes =
16544 pRoamOffloadScanReqParams->nProbes;
16545 pwdiRoamOffloadScanInfo->HomeAwayTime =
16546 pRoamOffloadScanReqParams->HomeAwayTime;
16547 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016548 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016549 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016550 pWdaParams->pWdaContext = pWDA;
16551 /* Store param pointer as passed in by caller */
16552 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016553 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016554 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16555 if(IS_WDI_STATUS_FAILURE(status))
16556 {
16557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16558 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16560 vos_mem_free(pWdaParams->wdaMsgParam);
16561 pWdaParams->wdaWdiApiMsgParam = NULL;
16562 pWdaParams->wdaMsgParam = NULL;
16563 }
16564 return CONVERT_WDI2VOS_STATUS(status) ;
16565}
16566#endif
16567
Jeff Johnson295189b2012-06-20 16:38:30 -070016568/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016569 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016570 *
16571 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016572void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016573{
16574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16575
16576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016577 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016578
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016579 if(NULL == pWdaParams)
16580 {
16581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016582 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016583 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016584 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016585 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016586
Jeff Johnson295189b2012-06-20 16:38:30 -070016587 vos_mem_free(pWdaParams->wdaMsgParam) ;
16588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16589 vos_mem_free(pWdaParams) ;
16590
16591 return ;
16592}
16593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016594 * FUNCTION: WDA_RssiFilterReqCallback
16595 * Free memory.
16596 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16597 */
16598void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16599{
16600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16601
16602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16603 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16604
16605 if(NULL == pWdaParams)
16606 {
16607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16608 "%s: pWdaParams received NULL", __func__);
16609 VOS_ASSERT(0);
16610 return;
16611 }
16612
16613 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16614 {
16615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16616 vos_mem_free(pWdaParams->wdaMsgParam);
16617 vos_mem_free(pWdaParams);
16618 }
16619
16620 return;
16621}
16622/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016623 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016624 * Request to WDI to set Preferred Network List.Offload
16625 */
16626VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16627 tSirSetRSSIFilterReq* pRssiFilterParams)
16628{
Jeff Johnson43971f52012-07-17 12:26:56 -070016629 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016630 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16631 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16632 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016634 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016635 if(NULL == pwdiSetRssiFilterReqInfo)
16636 {
16637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016638 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016639 VOS_ASSERT(0);
16640 return VOS_STATUS_E_NOMEM;
16641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16643 if(NULL == pWdaParams)
16644 {
16645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016646 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016647 VOS_ASSERT(0);
16648 vos_mem_free(pwdiSetRssiFilterReqInfo);
16649 return VOS_STATUS_E_NOMEM;
16650 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016651 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016652 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16653 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016654
Jeff Johnson295189b2012-06-20 16:38:30 -070016655 /* Store Params pass it to WDI */
16656 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16657 pWdaParams->pWdaContext = pWDA;
16658 /* Store param pointer as passed in by caller */
16659 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016660 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016661 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016662 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016663 if(IS_WDI_STATUS_FAILURE(status))
16664 {
16665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16666 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16668 vos_mem_free(pWdaParams->wdaMsgParam);
16669 pWdaParams->wdaWdiApiMsgParam = NULL;
16670 pWdaParams->wdaMsgParam = NULL;
16671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016672 return CONVERT_WDI2VOS_STATUS(status) ;
16673}
16674
Jeff Johnson295189b2012-06-20 16:38:30 -070016675/*
16676 * FUNCTION: WDA_ProcessUpdateScanParams
16677 * Request to WDI to update Scan Parameters
16678 */
16679VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16680 tSirUpdateScanParams *pUpdateScanParams)
16681{
Jeff Johnson43971f52012-07-17 12:26:56 -070016682 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16684 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16685 sizeof(WDI_UpdateScanParamsInfoType)) ;
16686 tWDA_ReqParams *pWdaParams ;
16687 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016689 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016690 if(NULL == wdiUpdateScanParamsInfoType)
16691 {
16692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016694 VOS_ASSERT(0);
16695 return VOS_STATUS_E_NOMEM;
16696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16698 if ( NULL == pWdaParams )
16699 {
16700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016702 VOS_ASSERT(0);
16703 vos_mem_free(wdiUpdateScanParamsInfoType);
16704 return VOS_STATUS_E_NOMEM;
16705 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016706 //
16707 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16708 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16710 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16711 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16712 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016713 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016714 pUpdateScanParams->b11dEnabled,
16715 pUpdateScanParams->b11dResolved,
16716 pUpdateScanParams->ucChannelCount,
16717 pUpdateScanParams->usPassiveMinChTime,
16718 pUpdateScanParams->usPassiveMaxChTime,
16719 pUpdateScanParams->usActiveMinChTime,
16720 pUpdateScanParams->usActiveMaxChTime,
16721 sizeof(tSirUpdateScanParams),
16722 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16723
Jeff Johnson295189b2012-06-20 16:38:30 -070016724 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16725 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016726 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16727 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016728 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16729 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016730 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16731 pUpdateScanParams->usActiveMaxChTime;
16732 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16733 pUpdateScanParams->usActiveMinChTime;
16734 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16735 pUpdateScanParams->usPassiveMaxChTime;
16736 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16737 pUpdateScanParams->usPassiveMinChTime;
16738
Jeff Johnson295189b2012-06-20 16:38:30 -070016739 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016740 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16741 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016742
Jeff Johnson295189b2012-06-20 16:38:30 -070016743 for ( i = 0; i <
16744 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16745 i++)
16746 {
16747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16748 "Update Scan Parameters channel: %d",
16749 pUpdateScanParams->aChannels[i]);
16750
16751 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16752 pUpdateScanParams->aChannels[i];
16753 }
16754
Yue Ma7f44bbe2013-04-12 11:47:39 -070016755 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16756 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016757
Jeff Johnson295189b2012-06-20 16:38:30 -070016758 /* Store Params pass it to WDI */
16759 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16760 pWdaParams->pWdaContext = pWDA;
16761 /* Store param pointer as passed in by caller */
16762 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016763
Jeff Johnson295189b2012-06-20 16:38:30 -070016764
16765
16766 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016767 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016768 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016769 if(IS_WDI_STATUS_FAILURE(status))
16770 {
16771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16772 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16774 vos_mem_free(pWdaParams->wdaMsgParam);
16775 vos_mem_free(pWdaParams);
16776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016777 return CONVERT_WDI2VOS_STATUS(status) ;
16778}
16779#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016780
16781#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16782/*
16783 * FUNCTION: WDA_RoamOffloadScanReqCallback
16784 *
16785 */
16786void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16787{
16788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016789 vos_msg_t vosMsg;
16790 wpt_uint8 reason = 0;
16791
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016793 "<------ %s " ,__func__);
16794 if (NULL == pWdaParams)
16795 {
16796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16797 "%s: pWdaParams received NULL", __func__);
16798 VOS_ASSERT(0) ;
16799 return ;
16800 }
16801 if ( pWdaParams != NULL )
16802 {
16803 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16804 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016805 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16807 }
16808 if ( pWdaParams->wdaMsgParam != NULL)
16809 {
16810 vos_mem_free(pWdaParams->wdaMsgParam);
16811 }
16812
16813 vos_mem_free(pWdaParams) ;
16814 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016815 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16816 vosMsg.bodyptr = NULL;
16817 if (WDI_STATUS_SUCCESS != status)
16818 {
16819 reason = 0;
16820 }
16821 vosMsg.bodyval = reason;
16822 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16823 {
16824 /* free the mem and return */
16825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016826 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016827 }
16828
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016829 return ;
16830}
16831#endif
16832
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016833/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016834 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016835 *
16836 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016837void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016838{
16839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16840
16841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16842 "<------ %s " ,__func__);
16843
16844 if(NULL == pWdaParams)
16845 {
16846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16847 "%s: pWdaParams received NULL", __func__);
16848 VOS_ASSERT(0);
16849 return;
16850 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016851
16852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16853 vos_mem_free(pWdaParams->wdaMsgParam);
16854 vos_mem_free(pWdaParams);
16855
16856 return;
16857}
16858/*
16859 * FUNCTION: WDA_SetPowerParamsReqCallback
16860 * Free memory.
16861 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16862 */
16863void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16864{
16865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16866
16867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16868 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16869
16870 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016871 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16873 "%s: pWdaParams received NULL", __func__);
16874 VOS_ASSERT(0);
16875 return;
16876 }
16877
16878 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16879 {
16880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16881 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016882 vos_mem_free(pWdaParams);
16883 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016884
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016885 return;
16886}
16887
Jeff Johnson295189b2012-06-20 16:38:30 -070016888#ifdef WLAN_FEATURE_PACKET_FILTERING
16889/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016890 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016891 *
16892 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016893void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016894 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16895 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016896{
16897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016899 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016900 if(NULL == pWdaParams)
16901 {
16902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016903 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016904 VOS_ASSERT(0) ;
16905 return ;
16906 }
16907
16908 vos_mem_free(pWdaParams->wdaMsgParam) ;
16909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16910 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016911 //print a msg, nothing else to do
16912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016913 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016914 return ;
16915}
Jeff Johnson295189b2012-06-20 16:38:30 -070016916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016917 * FUNCTION: WDA_8023MulticastListReqCallback
16918 * Free memory.
16919 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16920 */
16921void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16922{
16923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16924
16925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16926 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16927
16928 if(NULL == pWdaParams)
16929 {
16930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16931 "%s: pWdaParams received NULL", __func__);
16932 VOS_ASSERT(0);
16933 return;
16934 }
16935
16936 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16937 {
16938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16939 vos_mem_free(pWdaParams->wdaMsgParam);
16940 vos_mem_free(pWdaParams);
16941 }
16942
16943 return;
16944}
16945/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016946 * FUNCTION: WDA_Process8023MulticastListReq
16947 * Request to WDI to add 8023 Multicast List
16948 */
16949VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16950 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16951{
Jeff Johnson43971f52012-07-17 12:26:56 -070016952 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016953 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16954 tWDA_ReqParams *pWdaParams ;
16955 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016957 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016958 pwdiFltPktSetMcListReqParamsType =
16959 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16960 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16961 ) ;
16962 if(NULL == pwdiFltPktSetMcListReqParamsType)
16963 {
16964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016966 return VOS_STATUS_E_NOMEM;
16967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16969 if(NULL == pWdaParams)
16970 {
16971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016973 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16974 return VOS_STATUS_E_NOMEM;
16975 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016976
Jeff Johnson295189b2012-06-20 16:38:30 -070016977 //
16978 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16979 //
16980 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016981 pRcvFltMcAddrList->ulMulticastAddrCnt;
16982
16983 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16984 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16985 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16986 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16987
Jeff Johnson295189b2012-06-20 16:38:30 -070016988 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16989 {
16990 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16991 &(pRcvFltMcAddrList->multicastAddr[i]),
16992 sizeof(tSirMacAddr));
16993 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016994 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16995 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016996
Jeff Johnson295189b2012-06-20 16:38:30 -070016997 /* Store Params pass it to WDI */
16998 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16999 pWdaParams->pWdaContext = pWDA;
17000 /* Store param pointer as passed in by caller */
17001 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017002 status = WDI_8023MulticastListReq(
17003 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017004 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017005 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017006 if(IS_WDI_STATUS_FAILURE(status))
17007 {
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17009 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17011 vos_mem_free(pWdaParams->wdaMsgParam);
17012 vos_mem_free(pWdaParams);
17013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017014 return CONVERT_WDI2VOS_STATUS(status) ;
17015}
Jeff Johnson295189b2012-06-20 16:38:30 -070017016/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017017 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017018 *
17019 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017020void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017021 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17022 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017023{
17024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017026 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017027 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017028 if(NULL == pWdaParams)
17029 {
17030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017031 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017032 VOS_ASSERT(0) ;
17033 return ;
17034 }
17035
17036 vos_mem_free(pWdaParams->wdaMsgParam) ;
17037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17038 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017039 //print a msg, nothing else to do
17040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017041 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017042 return ;
17043}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017044
17045/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017046 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17047 * Free memory.
17048 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017049 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017050void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017051 void* pUserData)
17052{
17053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17054
17055 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17056 "<------ %s, wdiStatus: %d",
17057 __func__, wdiStatus);
17058
17059 if (NULL == pWdaParams)
17060 {
17061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17062 "%s: Invalid pWdaParams pointer", __func__);
17063 VOS_ASSERT(0);
17064 return;
17065 }
17066
17067 if (IS_WDI_STATUS_FAILURE(wdiStatus))
17068 {
17069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17070 vos_mem_free(pWdaParams->wdaMsgParam);
17071 vos_mem_free(pWdaParams);
17072 }
17073
17074 return;
17075}
17076
Jeff Johnson295189b2012-06-20 16:38:30 -070017077/*
17078 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
17079 * Request to WDI to set Receive Filters
17080 */
17081VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
17082 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
17083{
Jeff Johnson43971f52012-07-17 12:26:56 -070017084 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017085 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
17086 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
17087 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
17088 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
17089 tWDA_ReqParams *pWdaParams ;
17090 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017093 if(NULL == pwdiSetRcvPktFilterReqParamsType)
17094 {
17095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017097 VOS_ASSERT(0);
17098 return VOS_STATUS_E_NOMEM;
17099 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17101 if(NULL == pWdaParams)
17102 {
17103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017105 VOS_ASSERT(0);
17106 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
17107 return VOS_STATUS_E_NOMEM;
17108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
17110 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
17111 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
17112 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070017113 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
17114 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
17115
17116 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
17117 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017118
17119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17120 "FID %d FT %d NParams %d CT %d",
17121 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
17122 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
17123 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
17124 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070017125 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
17126 {
17127 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
17128 &pRcvPktFilterCfg->paramsData[i],
17129 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070017130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017131 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017132 pwdiSetRcvPktFilterReqParamsType->
17133 wdiPktFilterCfg.paramsData[i].protocolLayer,
17134 pwdiSetRcvPktFilterReqParamsType->
17135 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070017136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017137 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017138 pwdiSetRcvPktFilterReqParamsType->
17139 wdiPktFilterCfg.paramsData[i].dataOffset,
17140 pwdiSetRcvPktFilterReqParamsType->
17141 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070017142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017143 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017144 pwdiSetRcvPktFilterReqParamsType->
17145 wdiPktFilterCfg.paramsData[i].compareData[0],
17146 pwdiSetRcvPktFilterReqParamsType->
17147 wdiPktFilterCfg.paramsData[i].compareData[1],
17148 pwdiSetRcvPktFilterReqParamsType->
17149 wdiPktFilterCfg.paramsData[i].compareData[2],
17150 pwdiSetRcvPktFilterReqParamsType->
17151 wdiPktFilterCfg.paramsData[i].compareData[3],
17152 pwdiSetRcvPktFilterReqParamsType->
17153 wdiPktFilterCfg.paramsData[i].compareData[4],
17154 pwdiSetRcvPktFilterReqParamsType->
17155 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070017156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017157 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017158 pwdiSetRcvPktFilterReqParamsType->
17159 wdiPktFilterCfg.paramsData[i].dataMask[0],
17160 pwdiSetRcvPktFilterReqParamsType->
17161 wdiPktFilterCfg.paramsData[i].dataMask[1],
17162 pwdiSetRcvPktFilterReqParamsType->
17163 wdiPktFilterCfg.paramsData[i].dataMask[2],
17164 pwdiSetRcvPktFilterReqParamsType->
17165 wdiPktFilterCfg.paramsData[i].dataMask[3],
17166 pwdiSetRcvPktFilterReqParamsType->
17167 wdiPktFilterCfg.paramsData[i].dataMask[4],
17168 pwdiSetRcvPktFilterReqParamsType->
17169 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070017170 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017171 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017172 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017173 /* Store Params pass it to WDI */
17174 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
17175 pWdaParams->pWdaContext = pWDA;
17176 /* Store param pointer as passed in by caller */
17177 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070017178 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017179 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017180 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017181 if(IS_WDI_STATUS_FAILURE(status))
17182 {
17183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17184 "Failure in SetFilter(),free all the memory,status %d ",status);
17185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17186 vos_mem_free(pWdaParams->wdaMsgParam);
17187 vos_mem_free(pWdaParams);
17188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017189 return CONVERT_WDI2VOS_STATUS(status) ;
17190}
Jeff Johnson295189b2012-06-20 16:38:30 -070017191/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017192 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017193 *
17194 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017195void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017196 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
17197 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017198{
17199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17200 tWDA_CbContext *pWDA;
17201 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
17202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
17203 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
17204 tANI_U8 i;
17205 vos_msg_t vosMsg;
17206
17207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017209 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
17210
Jeff Johnsone7245742012-09-05 17:12:55 -070017211 if(NULL == pRcvFltPktMatchCntRsp)
17212 {
17213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017214 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070017215 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017216 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070017217 return ;
17218 }
17219
Jeff Johnson295189b2012-06-20 16:38:30 -070017220 if(NULL == pWdaParams)
17221 {
17222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017223 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017224 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017225 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070017226 return ;
17227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017228 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
17229 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070017230 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
17231 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
17232
17233 /* Message Header */
17234 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
17235 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
17236
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017237 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070017238
17239 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
17240 {
17241 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
17242 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
17243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017244 /* VOS message wrapper */
17245 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
17246 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
17247 vosMsg.bodyval = 0;
17248 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17249 {
17250 /* free the mem and return */
17251 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
17252 }
17253
17254 vos_mem_free(pWdaParams->wdaMsgParam) ;
17255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17256 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017257
17258 return;
17259}
17260/*
17261 * FUNCTION: WDA_FilterMatchCountReqCallback
17262 * Free memory and send RSP back to SME.
17263 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
17264 */
17265void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
17266{
17267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17268 vos_msg_t vosMsg;
17269
17270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17271 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17272
17273 if(NULL == pWdaParams)
17274 {
17275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17276 "%s: pWdaParams received NULL", __func__);
17277 VOS_ASSERT(0);
17278 return;
17279 }
17280
17281 /* VOS message wrapper */
17282 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
17283 vosMsg.bodyptr = NULL;
17284 vosMsg.bodyval = 0;
17285
17286 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17287 {
17288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17289 vos_mem_free(pWdaParams->wdaMsgParam);
17290 vos_mem_free(pWdaParams);
17291 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
17292 }
17293
17294 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070017295}
Jeff Johnson295189b2012-06-20 16:38:30 -070017296/*
17297 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
17298 * Request to WDI to get PC Filter Match Count
17299 */
17300VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
17301{
Jeff Johnson43971f52012-07-17 12:26:56 -070017302 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017303 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
17304 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
17305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017308 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
17309 {
17310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017312 VOS_ASSERT(0);
17313 return VOS_STATUS_E_NOMEM;
17314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17316 if(NULL == pWdaParams)
17317 {
17318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017320 VOS_ASSERT(0);
17321 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
17322 return VOS_STATUS_E_NOMEM;
17323 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017324
Yue Ma7f44bbe2013-04-12 11:47:39 -070017325 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
17326 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017327
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017328 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
17329 pRcvFltPktMatchRsp->bssId,
17330 sizeof(wpt_macAddr));
17331
Jeff Johnson295189b2012-06-20 16:38:30 -070017332 /* Store Params pass it to WDI */
17333 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
17334 pWdaParams->pWdaContext = pWDA;
17335 /* Store param pointer as passed in by caller */
17336 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070017337 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017338 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017339 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017340 if(IS_WDI_STATUS_FAILURE(status))
17341 {
17342 /* failure returned by WDI API */
17343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17344 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
17345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17346 vos_mem_free(pWdaParams) ;
17347 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
17348 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
17349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017350 return CONVERT_WDI2VOS_STATUS(status) ;
17351}
Jeff Johnson295189b2012-06-20 16:38:30 -070017352/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017353 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017354 *
17355 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017356void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017357 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
17358 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017359{
17360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017362 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017363/* WDA_VOS_ASSERT(NULL != pWdaParams); */
17364 if(NULL == pWdaParams)
17365 {
17366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017367 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017368 VOS_ASSERT(0) ;
17369 return ;
17370 }
17371
17372 vos_mem_free(pWdaParams->wdaMsgParam) ;
17373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17374 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017375 //print a msg, nothing else to do
17376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017377 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017378 return ;
17379}
Jeff Johnson295189b2012-06-20 16:38:30 -070017380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017381 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
17382 * Free memory.
17383 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
17384 */
17385void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17386{
17387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17388
17389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17390 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17391
17392 if(NULL == pWdaParams)
17393 {
17394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17395 "%s: Invalid pWdaParams pointer", __func__);
17396 VOS_ASSERT(0);
17397 return;
17398 }
17399
17400 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17401 {
17402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17403 vos_mem_free(pWdaParams->wdaMsgParam);
17404 vos_mem_free(pWdaParams);
17405 }
17406
17407 return;
17408}
17409/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017410 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
17411 * Request to WDI to clear Receive Filters
17412 */
17413VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
17414 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
17415{
Jeff Johnson43971f52012-07-17 12:26:56 -070017416 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017417 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
17418 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
17419 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017421 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017422 if(NULL == pwdiRcvFltPktClearReqParamsType)
17423 {
17424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017426 VOS_ASSERT(0);
17427 return VOS_STATUS_E_NOMEM;
17428 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17430 if(NULL == pWdaParams)
17431 {
17432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017433 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017434 VOS_ASSERT(0);
17435 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
17436 return VOS_STATUS_E_NOMEM;
17437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017438 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
17439 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070017440 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
17441 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
17442 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
17443 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017444
Yue Ma7f44bbe2013-04-12 11:47:39 -070017445 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017446 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017447 /* Store Params pass it to WDI */
17448 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
17449 pWdaParams->pWdaContext = pWDA;
17450 /* Store param pointer as passed in by caller */
17451 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070017452 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017453 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017454 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017455 if(IS_WDI_STATUS_FAILURE(status))
17456 {
17457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17458 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
17459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080017460 vos_mem_free(pWdaParams->wdaMsgParam);
17461 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017463 return CONVERT_WDI2VOS_STATUS(status) ;
17464}
17465#endif // WLAN_FEATURE_PACKET_FILTERING
17466
Jeff Johnson295189b2012-06-20 16:38:30 -070017467/*
17468 * FUNCTION: WDA_ProcessSetPowerParamsReq
17469 * Request to WDI to set power params
17470 */
17471VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
17472 tSirSetPowerParamsReq *pPowerParams)
17473{
Jeff Johnson43971f52012-07-17 12:26:56 -070017474 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017475 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17476 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017477 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017479 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017480 if(NULL == pwdiSetPowerParamsReqInfo)
17481 {
17482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017483 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017484 VOS_ASSERT(0);
17485 return VOS_STATUS_E_NOMEM;
17486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17488 if(NULL == pWdaParams)
17489 {
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017492 VOS_ASSERT(0);
17493 vos_mem_free(pwdiSetPowerParamsReqInfo);
17494 return VOS_STATUS_E_NOMEM;
17495 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017496
Jeff Johnson295189b2012-06-20 16:38:30 -070017497
17498 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17499 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017500 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17501 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017502 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17503 pPowerParams->uListenInterval;
17504 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17505 pPowerParams->uBcastMcastFilter;
17506 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17507 pPowerParams->uEnableBET;
17508 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17509 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017510 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17511 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017512 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17513 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017514
Jeff Johnson295189b2012-06-20 16:38:30 -070017515 /* Store Params pass it to WDI */
17516 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17517 pWdaParams->pWdaContext = pWDA;
17518 /* Store param pointer as passed in by caller */
17519 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017520 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017521 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017522 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017523 if(IS_WDI_STATUS_FAILURE(status))
17524 {
17525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17526 "Failure in Set power params REQ WDI API, free all the memory " );
17527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17528 vos_mem_free(pWdaParams->wdaMsgParam);
17529 pWdaParams->wdaWdiApiMsgParam = NULL;
17530 pWdaParams->wdaMsgParam = NULL;
17531 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017532 return CONVERT_WDI2VOS_STATUS(status) ;
17533}
17534
17535/*
17536 * FUNCTION: WDA_SetTmLevelRspCallback
17537 * Set TM Level response
17538 */
17539void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17540{
17541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17542
17543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017544 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017545
17546 if(NULL == pWdaParams)
17547 {
17548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017550 VOS_ASSERT(0) ;
17551 return ;
17552 }
17553
17554 /* Dose not need to send notification to upper layer
17555 * Just free allocated resources */
17556 if( pWdaParams != NULL )
17557 {
17558 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17559 {
17560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17561 }
17562 vos_mem_free(pWdaParams->wdaMsgParam) ;
17563 vos_mem_free(pWdaParams) ;
17564 }
17565}
17566
17567/*
17568 * FUNCTION: WDA_ProcessSetTmLevelReq
17569 * Set TM Level request
17570 */
17571VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17572 tAniSetTmLevelReq *setTmLevelReq)
17573{
17574 WDI_Status status = WDI_STATUS_SUCCESS ;
17575 tWDA_ReqParams *pWdaParams ;
17576 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17577 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17578 sizeof(WDI_SetTmLevelReqType)) ;
17579 if(NULL == wdiSetTmLevelReq)
17580 {
17581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017583 VOS_ASSERT(0);
17584 return VOS_STATUS_E_NOMEM;
17585 }
17586
17587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17588 if(NULL == pWdaParams)
17589 {
17590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017592 VOS_ASSERT(0);
17593 vos_mem_free(wdiSetTmLevelReq);
17594 return VOS_STATUS_E_NOMEM;
17595 }
17596
17597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017598 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017599
17600 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17601 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17602
17603 pWdaParams->pWdaContext = pWDA;
17604 pWdaParams->wdaMsgParam = setTmLevelReq;
17605 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17606
17607 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17608 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17609
17610 if(IS_WDI_STATUS_FAILURE(status))
17611 {
17612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017613 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017614 vos_mem_free(pWdaParams->wdaMsgParam) ;
17615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17616 vos_mem_free(pWdaParams) ;
17617 }
17618
17619 return CONVERT_WDI2VOS_STATUS(status) ;
17620}
17621
17622VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17623 tpTxControlParams pTxCtrlParam)
17624{
17625 VOS_STATUS wdaStatus;
17626
17627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017628 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017629 if( pTxCtrlParam == NULL )
17630 {
17631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017632 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017633 return VOS_STATUS_E_FAILURE;
17634 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017635 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17636 {
17637 wdaStatus = WDA_SuspendDataTx(pWDA);
17638 }
17639 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17640 {
17641 wdaStatus = WDA_ResumeDataTx(pWDA);
17642 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017643 return wdaStatus;
17644}
17645
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053017646void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053017647{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053017648 WDI_Status status;
17649 status = WDI_FWLoggingDXEdoneInd(logType);
17650
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053017651 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053017652 {
17653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17654 FL("Failure status %d"), status);
17655 }
Mihir Shete5affadc2015-05-29 20:54:57 +053017656}
17657
Jeff Johnson295189b2012-06-20 16:38:30 -070017658 /* FUNCTION WDA_featureCapsExchange
17659 * WDA API to invoke capability exchange between host and FW.
17660 */
17661void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17662{
17663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017664 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017665 WDI_featureCapsExchangeReq( NULL, pVosContext);
17666}
17667
Yathish9f22e662012-12-10 14:21:35 -080017668/* FUNCTION WDA_disableCapablityFeature
17669 * WDA API to diable Active mode offload in host.
17670 */
17671void WDA_disableCapablityFeature(tANI_U8 feature_index)
17672{
17673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17674 "%s:enter", __func__ );
17675 WDI_disableCapablityFeature(feature_index);
17676}
17677
Jeff Johnson295189b2012-06-20 16:38:30 -070017678 /* FUNCTION WDA_getHostWlanFeatCaps
17679 * Wrapper for WDI API, that will return if the feature (enum value).passed
17680 * to this API is supported or not in Host
17681 * return value
17682 * 0 - implies feature is NOT Supported
17683 * any non zero value - implies feature is SUPPORTED
17684 */
17685tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17686{
17687 return WDI_getHostWlanFeatCaps(featEnumValue);
17688}
17689
17690 /* FUNCTION WDA_getFwWlanFeatCaps
17691 * Wrapper for WDI API, that will return if the feature (enum value).passed
17692 * to this API is supported or not in FW
17693 * return value
17694 * 0 - implies feature is NOT Supported
17695 * any non zero value - implies feature is SUPPORTED
17696 */
17697tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17698{
17699 return WDI_getFwWlanFeatCaps(featEnumValue);
17700}
17701
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017702
Jeff Johnson295189b2012-06-20 16:38:30 -070017703/*
17704 * FUNCTION: WDA_shutdown
17705 * Shutdown WDA/WDI without handshaking with Riva.
17706 * Synchronous function.
17707 */
17708VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17709{
17710 WDI_Status wdiStatus;
17711 //tANI_U8 eventIdx = 0;
17712 VOS_STATUS status = VOS_STATUS_SUCCESS;
17713 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017714 if (NULL == pWDA)
17715 {
17716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017717 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017718 VOS_ASSERT(0);
17719 return VOS_STATUS_E_FAILURE;
17720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017721 /* FTM mode stay START_STATE */
17722 if( (WDA_READY_STATE != pWDA->wdaState) &&
17723 (WDA_INIT_STATE != pWDA->wdaState) &&
17724 (WDA_START_STATE != pWDA->wdaState) )
17725 {
17726 VOS_ASSERT(0);
17727 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017728
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017729 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070017730 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017731 if(VOS_TRUE == pWDA->wdaTimersCreated)
17732 {
17733 wdaDestroyTimers(pWDA);
17734 pWDA->wdaTimersCreated = VOS_FALSE;
17735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017736 }
Leo Chang9d76f622013-08-23 16:34:52 -070017737 else
17738 {
17739 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053017740 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017741
Jeff Johnson295189b2012-06-20 16:38:30 -070017742 /* call WDI shutdown */
17743 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017744 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17745 {
17746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17747 "error in WDA Stop" );
17748 status = VOS_STATUS_E_FAILURE;
17749 }
17750 /* WDI stop is synchrnous, shutdown is complete when it returns */
17751 pWDA->wdaState = WDA_STOP_STATE;
17752
Jeff Johnson295189b2012-06-20 16:38:30 -070017753 /* shutdown should perform the stop & close actions. */
17754 /* Destroy the event */
17755 status = vos_event_destroy(&pWDA->txFrameEvent);
17756 if(!VOS_IS_STATUS_SUCCESS(status))
17757 {
17758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017759 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017760 status = VOS_STATUS_E_FAILURE;
17761 }
17762 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17763 if(!VOS_IS_STATUS_SUCCESS(status))
17764 {
17765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017766 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017767 status = VOS_STATUS_E_FAILURE;
17768 }
17769 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17770 if(!VOS_IS_STATUS_SUCCESS(status))
17771 {
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017773 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017774 status = VOS_STATUS_E_FAILURE;
17775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017776 /* free WDA context */
17777 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17778 if ( !VOS_IS_STATUS_SUCCESS(status) )
17779 {
17780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17781 "error in WDA close " );
17782 status = VOS_STATUS_E_FAILURE;
17783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017784 return status;
17785}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017786
Jeff Johnsone7245742012-09-05 17:12:55 -070017787/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017788 * FUNCTION: WDA_setNeedShutdown
17789 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017790 */
17791
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017792void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017793{
17794 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017795 if(pWDA == NULL)
17796 {
17797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17798 "Could not get the WDA Context pointer" );
17799 return;
17800 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017801 pWDA->needShutdown = TRUE;
17802}
17803/*
17804 * FUNCTION: WDA_needShutdown
17805 * WDA needs a shutdown
17806 */
17807
17808v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17809{
17810 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017811 if(pWDA == NULL)
17812 {
17813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17814 "Could not get the WDA Context pointer" );
17815 return 0;
17816 }
17817 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017818}
17819
Mohit Khanna4a70d262012-09-11 16:30:12 -070017820#ifdef WLAN_FEATURE_11AC
17821/*
17822 * FUNCTION: WDA_SetBeaconFilterReqCallback
17823 *
17824 */
17825void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17826{
17827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017829 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017830 if(NULL == pWdaParams)
17831 {
17832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017833 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017834 VOS_ASSERT(0) ;
17835 return ;
17836 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017837
Mohit Khanna4a70d262012-09-11 16:30:12 -070017838 vos_mem_free(pWdaParams->wdaMsgParam) ;
17839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17840 vos_mem_free(pWdaParams) ;
17841 /*
17842 * No respone required for SetBeaconFilter req so just free the request
17843 * param here
17844 */
17845
17846 return ;
17847}
17848
17849VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17850 tUpdateVHTOpMode *pData)
17851{
17852 WDI_Status status = WDI_STATUS_SUCCESS ;
17853 tWDA_ReqParams *pWdaParams ;
17854 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17855 sizeof(WDI_UpdateVHTOpMode)) ;
17856 if(NULL == wdiTemp)
17857 {
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017859 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017860 VOS_ASSERT(0);
17861 return VOS_STATUS_E_NOMEM;
17862 }
17863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17864 if(NULL == pWdaParams)
17865 {
17866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017867 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017868 VOS_ASSERT(0);
17869 vos_mem_free(wdiTemp);
17870 return VOS_STATUS_E_NOMEM;
17871 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17873 "------> %s Opmode = %d and staid = %d" ,
17874 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017875 wdiTemp->opMode = pData->opMode;
17876 wdiTemp->staId = pData->staId;
17877
17878 pWdaParams->pWdaContext = pWDA;
17879 /* Store Req pointer, as this will be used for response */
17880 pWdaParams->wdaMsgParam = (void *)pData;
17881 /* store Params pass it to WDI */
17882 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17883
17884 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17885
17886 if(IS_WDI_STATUS_FAILURE(status))
17887 {
17888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17889 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17891 vos_mem_free(pWdaParams->wdaMsgParam);
17892 vos_mem_free(pWdaParams);
17893 }
17894 return CONVERT_WDI2VOS_STATUS(status) ;
17895}
17896#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017897
17898/*==========================================================================
17899 FUNCTION WDA_TransportChannelDebug
17900
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017901 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017902 Display Transport Channel debugging information
17903 User may request to display DXE channel snapshot
17904 Or if host driver detects any abnormal stcuk may display
17905
17906 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017907 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017908 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017909 debugFlags : Enable stall detect features
17910 defined by WPAL_DeviceDebugFlags
17911 These features may effect
17912 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017913
17914 RETURN VALUE
17915 NONE
17916
17917===========================================================================*/
17918void WDA_TransportChannelDebug
17919(
schang6295e542013-03-12 15:31:23 -070017920 tpAniSirGlobal pMac,
17921 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017922 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017923)
17924{
Mihir Shete40a55652014-03-02 14:14:47 +053017925 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017926 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017927}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017928
17929/*==========================================================================
17930 FUNCTION WDA_SetEnableSSR
17931
17932 DESCRIPTION
17933 API to enable/disable SSR on WDI timeout
17934
17935 PARAMETERS
17936 enableSSR : enable/disable SSR
17937
17938 RETURN VALUE
17939 NONE
17940
17941===========================================================================*/
17942void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17943{
17944 WDI_SetEnableSSR(enableSSR);
17945}
Leo Chang9056f462013-08-01 19:21:11 -070017946
17947#ifdef FEATURE_WLAN_LPHB
17948/*
17949 * FUNCTION: WDA_LPHBconfRspCallback
17950 *
17951 */
17952void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17953{
17954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17955
17956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17957 "<------ %s " ,__func__);
17958 if (NULL == pWdaParams)
17959 {
17960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17961 "%s: pWdaParams received NULL", __func__);
17962 VOS_ASSERT(0) ;
17963 return ;
17964 }
17965
17966 /* Do not need to send notification to upper layer
17967 * Just free allocated resources */
17968 if (pWdaParams != NULL)
17969 {
17970 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17971 {
17972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17973 }
17974 vos_mem_free(pWdaParams->wdaMsgParam) ;
17975 vos_mem_free(pWdaParams) ;
17976 }
17977
17978 return;
17979}
17980
17981/*
17982 * FUNCTION: WDA_ProcessLPHBConfReq
17983 *
17984 */
17985VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17986 tSirLPHBReq *pData)
17987{
17988 WDI_Status wdiStatus;
17989 tWDA_ReqParams *pWdaParams ;
17990
17991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17992 "------> %s " , __func__);
17993
17994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17995 if (NULL == pWdaParams)
17996 {
17997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17998 "%s: VOS MEM Alloc Failure", __func__);
17999 VOS_ASSERT(0);
18000 vos_mem_free(pData);
18001 return VOS_STATUS_E_NOMEM;
18002 }
18003
18004 pWdaParams->pWdaContext = pWDA;
18005 pWdaParams->wdaMsgParam = (void *)pData;
18006 pWdaParams->wdaWdiApiMsgParam = NULL;
18007
18008 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18009 if (WDI_STATUS_PENDING == wdiStatus)
18010 {
18011 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18012 "Pending received for %s:%d ", __func__, __LINE__);
18013 }
18014 else if (WDI_STATUS_SUCCESS != wdiStatus)
18015 {
18016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18017 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18018 vos_mem_free(pWdaParams->wdaMsgParam);
18019 vos_mem_free(pWdaParams);
18020 }
18021
18022 return CONVERT_WDI2VOS_STATUS(wdiStatus);
18023}
18024#endif /* FEATURE_WLAN_LPHB */
18025
c_hpothu92367912014-05-01 15:18:17 +053018026void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
18027 void* pUserData)
18028{
18029 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
18030
18031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18032 "<------ %s " ,__func__);
18033 if (NULL == pBcnMissRateInfo)
18034 {
18035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18036 "%s: pWdaParams received NULL", __func__);
18037 VOS_ASSERT(0) ;
18038 return ;
18039 }
18040 if (pBcnMissRateInfo->callback)
18041 {
18042 pBcnMissRateInfo->callback(status, bcnMissRate,
18043 pBcnMissRateInfo->data);
18044 }
18045 vos_mem_free(pUserData);
18046
18047 return;
18048}
18049
18050v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
18051 tSirBcnMissRateReq *pData)
18052{
18053 WDI_Status wdiStatus;
18054 tSirBcnMissRateInfo *pBcnMissRateInfo;
18055
18056 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18057 "------> %s " , __func__);
18058
18059 pBcnMissRateInfo =
18060 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
18061 if (NULL == pBcnMissRateInfo)
18062 {
18063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18064 "%s: VOS MEM Alloc Failure", __func__);
18065 VOS_ASSERT(0);
18066 vos_mem_free(pData);
18067 return;
18068 }
18069
18070 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
18071 pBcnMissRateInfo->data = pData->data;
18072
18073 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
18074 WDA_GetBcnMissRateCallback,
18075 pData->bssid);
18076 if (WDI_STATUS_PENDING == wdiStatus)
18077 {
18078 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18079 "Pending received for %s:%d ", __func__, __LINE__);
18080 }
18081 else if (WDI_STATUS_SUCCESS != wdiStatus)
18082 {
18083 if (pBcnMissRateInfo->callback)
18084 {
18085 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
18086 -1, pBcnMissRateInfo->data);
18087 }
18088 }
18089 vos_mem_free(pData);
18090}
Dino Mycle41bdc942014-06-10 11:30:24 +053018091
18092#ifdef WLAN_FEATURE_EXTSCAN
18093
18094/*==========================================================================
18095 FUNCTION WDA_EXTScanStartRspCallback
18096
18097 DESCRIPTION
18098 API to send EXTScan Start Response to HDD
18099
18100 PARAMETERS
18101 pEventData: Response from FW
18102 pUserData:
18103===========================================================================*/
18104void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
18105{
18106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18107 tWDA_CbContext *pWDA = NULL;
18108 void *pCallbackContext;
18109 tpAniSirGlobal pMac;
18110
18111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18112 "%s:", __func__);
18113 if (NULL == pWdaParams)
18114 {
18115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18116 "%s: pWdaParams received NULL", __func__);
18117 VOS_ASSERT(0);
18118 return;
18119 }
18120
18121 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18122
18123 if (NULL == pWDA)
18124 {
18125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18126 "%s: pWDA received NULL", __func__);
18127 VOS_ASSERT(0);
18128 goto error;
18129 }
18130
18131 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18132 if (NULL == pMac)
18133 {
18134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18135 "%s:pMac is NULL", __func__);
18136 VOS_ASSERT(0);
18137 goto error;
18138 }
18139
18140 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18141
18142 if (pMac->sme.pEXTScanIndCb)
18143 {
18144 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
18145 pEventData);
18146 }
18147 else
18148 {
18149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18150 "%s:HDD callback is null", __func__);
18151 VOS_ASSERT(0);
18152 }
18153
18154error:
18155
18156 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18157 {
18158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18159 }
18160 if (pWdaParams->wdaMsgParam != NULL)
18161 {
18162 vos_mem_free(pWdaParams->wdaMsgParam);
18163 }
18164 vos_mem_free(pWdaParams) ;
18165
18166 return;
18167}
18168
18169/*==========================================================================
18170 FUNCTION WDA_EXTScanStopRspCallback
18171
18172 DESCRIPTION
18173 API to send EXTScan Stop Response to HDD
18174
18175 PARAMETERS
18176 pEventData: Response from FW
18177 pUserData:
18178===========================================================================*/
18179void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
18180{
18181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18182 tWDA_CbContext *pWDA = NULL;
18183 void *pCallbackContext;
18184 tpAniSirGlobal pMac;
18185
18186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18187 "%s:", __func__);
18188 if (NULL == pWdaParams)
18189 {
18190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18191 "%s: pWdaParams received NULL", __func__);
18192 VOS_ASSERT(0);
18193 return;
18194 }
18195
18196 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18197
18198 if (NULL == pWDA)
18199 {
18200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18201 "%s: pWDA received NULL", __func__);
18202 VOS_ASSERT(0);
18203 goto error;
18204 }
18205
18206 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18207 if (NULL == pMac)
18208 {
18209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18210 "%s:pMac is NULL", __func__);
18211 VOS_ASSERT(0);
18212 goto error;
18213 }
18214 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18215
18216 if (pMac->sme.pEXTScanIndCb)
18217 {
18218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18219 "%s:HDD call back function called", __func__);
18220 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
18221 pEventData);
18222 }
18223 else
18224 {
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18226 "%s:HDD callback is null", __func__);
18227 VOS_ASSERT(0);
18228 }
18229
18230error:
18231
18232 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18233 {
18234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18235 }
18236 if (pWdaParams->wdaMsgParam != NULL)
18237 {
18238 vos_mem_free(pWdaParams->wdaMsgParam);
18239 }
18240 vos_mem_free(pWdaParams) ;
18241
18242
18243 return;
18244}
18245
18246/*==========================================================================
18247 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
18248
18249 DESCRIPTION
18250 API to send EXTScan Get Cached Results Response to HDD
18251
18252 PARAMETERS
18253 pEventData: Response from FW
18254 pUserData:
18255===========================================================================*/
18256void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
18257{
18258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18259 tWDA_CbContext *pWDA = NULL;
18260 void *pCallbackContext;
18261 tpAniSirGlobal pMac;
18262
18263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18264 "%s: ", __func__);
18265 if (NULL == pWdaParams)
18266 {
18267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18268 "%s: pWdaParams received NULL", __func__);
18269 VOS_ASSERT(0);
18270 return;
18271 }
18272
18273 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18274
18275 if (NULL == pWDA)
18276 {
18277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18278 "%s: pWDA received NULL", __func__);
18279 VOS_ASSERT(0);
18280 goto error;
18281 }
18282
18283 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18284 if (NULL == pMac)
18285 {
18286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18287 "%s:pMac is NULL", __func__);
18288 VOS_ASSERT(0);
18289 goto error;
18290 }
18291
18292 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18293
18294 if (pMac->sme.pEXTScanIndCb)
18295 {
18296 pMac->sme.pEXTScanIndCb(pCallbackContext,
18297 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
18298 pEventData);
18299 }
18300 else
18301 {
18302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18303 "%s:HDD callback is null", __func__);
18304 VOS_ASSERT(0);
18305 }
18306
18307
18308error:
18309
18310 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18311 {
18312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18313 }
18314 if (pWdaParams->wdaMsgParam != NULL)
18315 {
18316 vos_mem_free(pWdaParams->wdaMsgParam);
18317 }
18318 vos_mem_free(pWdaParams) ;
18319
18320 return;
18321}
18322
18323/*==========================================================================
18324 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
18325
18326 DESCRIPTION
18327 API to send EXTScan Get Capabilities Response to HDD
18328
18329 PARAMETERS
18330 pEventData: Response from FW
18331 pUserData:
18332===========================================================================*/
18333void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
18334{
18335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18336 tWDA_CbContext *pWDA = NULL;
18337 void *pCallbackContext;
18338 tpAniSirGlobal pMac;
18339
18340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18341 "%s:", __func__);
18342 if (NULL == pWdaParams)
18343 {
18344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18345 "%s: pWdaParams received NULL", __func__);
18346 VOS_ASSERT(0);
18347 return;
18348 }
18349
18350 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18351
18352 if (NULL == pWDA)
18353 {
18354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18355 "%s: pWDA received NULL", __func__);
18356 VOS_ASSERT(0);
18357 goto error;
18358 }
18359
18360 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18361 if (NULL == pMac)
18362 {
18363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18364 "%s:pMac is NULL", __func__);
18365 VOS_ASSERT(0);
18366 goto error;
18367 }
18368
18369 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18370
18371 if (pMac->sme.pEXTScanIndCb)
18372 {
18373 pMac->sme.pEXTScanIndCb(pCallbackContext,
18374 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
18375 pEventData);
18376 }
18377 else
18378 {
18379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18380 "%s:HDD callback is null", __func__);
18381 VOS_ASSERT(0);
18382 }
18383
18384
18385error:
18386
18387 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18388 {
18389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18390 }
18391 if (pWdaParams->wdaMsgParam != NULL)
18392 {
18393 vos_mem_free(pWdaParams->wdaMsgParam);
18394 }
18395 vos_mem_free(pWdaParams) ;
18396
18397 return;
18398}
18399
18400/*==========================================================================
18401 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
18402
18403 DESCRIPTION
18404 API to send EXTScan Set BSSID Hotlist Response to HDD
18405
18406 PARAMETERS
18407 pEventData: Response from FW
18408 pUserData:
18409===========================================================================*/
18410void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18411{
18412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18413 tWDA_CbContext *pWDA = NULL;
18414 void *pCallbackContext;
18415 tpAniSirGlobal pMac;
18416
18417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18418 "%s: ", __func__);
18419 if (NULL == pWdaParams)
18420 {
18421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18422 "%s: pWdaParams received NULL", __func__);
18423 VOS_ASSERT(0) ;
18424 return;
18425 }
18426
18427 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18428
18429 if (NULL == pWDA)
18430 {
18431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18432 "%s: pWDA received NULL", __func__);
18433 VOS_ASSERT(0);
18434 goto error;
18435 }
18436
18437 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18438 if (NULL == pMac)
18439 {
18440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18441 "%s:pMac is NULL", __func__);
18442 VOS_ASSERT(0);
18443 goto error;
18444 }
18445
18446 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18447
18448 if (pMac->sme.pEXTScanIndCb)
18449 {
18450 pMac->sme.pEXTScanIndCb(pCallbackContext,
18451 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
18452 pEventData);
18453 }
18454 else
18455 {
18456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18457 "%s:HDD callback is null", __func__);
18458 VOS_ASSERT(0);
18459 }
18460
18461
18462error:
18463
18464 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18465 {
18466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18467 }
18468 if (pWdaParams->wdaMsgParam != NULL)
18469 {
18470 vos_mem_free(pWdaParams->wdaMsgParam);
18471 }
18472 vos_mem_free(pWdaParams) ;
18473
18474 return;
18475}
18476
18477/*==========================================================================
18478 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
18479
18480 DESCRIPTION
18481 API to send EXTScan ReSet BSSID Hotlist Response to HDD
18482
18483 PARAMETERS
18484 pEventData: Response from FW
18485 pUserData:
18486===========================================================================*/
18487void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18488{
18489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18490 tWDA_CbContext *pWDA = NULL;
18491 void *pCallbackContext;
18492 tpAniSirGlobal pMac;
18493
18494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18495 "%s:", __func__);
18496 if (NULL == pWdaParams)
18497 {
18498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18499 "%s: pWdaParams received NULL", __func__);
18500 VOS_ASSERT(0) ;
18501 return;
18502 }
18503
18504 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18505
18506 if (NULL == pWDA)
18507 {
18508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18509 "%s: pWDA received NULL", __func__);
18510 VOS_ASSERT(0);
18511 goto error;
18512 }
18513
18514 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18515 if (NULL == pMac)
18516 {
18517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18518 "%s:pMac is NULL", __func__);
18519 VOS_ASSERT(0);
18520 goto error;
18521 }
18522
18523 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18524
18525 if (pMac->sme.pEXTScanIndCb)
18526 {
18527 pMac->sme.pEXTScanIndCb(pCallbackContext,
18528 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18529 pEventData);
18530 }
18531 else
18532 {
18533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18534 "%s:HDD callback is null", __func__);
18535 VOS_ASSERT(0);
18536 }
18537
18538
18539error:
18540
18541 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18542 {
18543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18544 }
18545 if (pWdaParams->wdaMsgParam != NULL)
18546 {
18547 vos_mem_free(pWdaParams->wdaMsgParam);
18548 }
18549 vos_mem_free(pWdaParams) ;
18550
18551 return;
18552}
18553
18554/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018555 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
18556
18557 DESCRIPTION
18558 API to send EXTScan Set SSID Hotlist Response to HDD
18559
18560 PARAMETERS
18561 pEventData: Response from FW
18562 pUserData:
18563===========================================================================*/
18564void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18565{
18566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18567 tWDA_CbContext *pWDA = NULL;
18568 void *pCallbackContext;
18569 tpAniSirGlobal pMac;
18570
18571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18572 "%s: ", __func__);
18573 if (NULL == pWdaParams)
18574 {
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18576 "%s: pWdaParams received NULL", __func__);
18577 VOS_ASSERT(0) ;
18578 return;
18579 }
18580
18581 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18582
18583 if (NULL == pWDA)
18584 {
18585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18586 "%s: pWDA received NULL", __func__);
18587 VOS_ASSERT(0);
18588 goto error;
18589 }
18590
18591 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18592 if (NULL == pMac)
18593 {
18594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18595 "%s:pMac is NULL", __func__);
18596 VOS_ASSERT(0);
18597 goto error;
18598 }
18599
18600 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18601
18602 if (pMac->sme.pEXTScanIndCb)
18603 {
18604 pMac->sme.pEXTScanIndCb(pCallbackContext,
18605 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
18606 pEventData);
18607 }
18608 else
18609 {
18610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18611 "%s:HDD callback is null", __func__);
18612 VOS_ASSERT(0);
18613 }
18614
18615
18616error:
18617
18618 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18619 {
18620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18621 }
18622 if (pWdaParams->wdaMsgParam != NULL)
18623 {
18624 vos_mem_free(pWdaParams->wdaMsgParam);
18625 }
18626 vos_mem_free(pWdaParams) ;
18627
18628 return;
18629}
18630
18631/*==========================================================================
18632 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
18633
18634 DESCRIPTION
18635 API to send EXTScan ReSet SSID Hotlist Response to HDD
18636
18637 PARAMETERS
18638 pEventData: Response from FW
18639 pUserData:
18640===========================================================================*/
18641void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18642{
18643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18644 tWDA_CbContext *pWDA = NULL;
18645 void *pCallbackContext;
18646 tpAniSirGlobal pMac;
18647
18648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18649 "%s:", __func__);
18650 if (NULL == pWdaParams)
18651 {
18652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18653 "%s: pWdaParams received NULL", __func__);
18654 VOS_ASSERT(0) ;
18655 return;
18656 }
18657
18658 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18659
18660 if (NULL == pWDA)
18661 {
18662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18663 "%s: pWDA received NULL", __func__);
18664 VOS_ASSERT(0);
18665 goto error;
18666 }
18667
18668 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18669 if (NULL == pMac)
18670 {
18671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18672 "%s:pMac is NULL", __func__);
18673 VOS_ASSERT(0);
18674 goto error;
18675 }
18676
18677 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18678
18679 if (pMac->sme.pEXTScanIndCb)
18680 {
18681 pMac->sme.pEXTScanIndCb(pCallbackContext,
18682 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
18683 pEventData);
18684 }
18685 else
18686 {
18687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18688 "%s:HDD callback is null", __func__);
18689 VOS_ASSERT(0);
18690 }
18691
18692
18693error:
18694
18695 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18696 {
18697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18698 }
18699 if (pWdaParams->wdaMsgParam != NULL)
18700 {
18701 vos_mem_free(pWdaParams->wdaMsgParam);
18702 }
18703 vos_mem_free(pWdaParams) ;
18704
18705 return;
18706}
18707
18708
18709
18710/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053018711 FUNCTION WDA_ProcessEXTScanStartReq
18712
18713 DESCRIPTION
18714 API to send EXTScan Start Request to WDI
18715
18716 PARAMETERS
18717 pWDA: Pointer to WDA context
18718 wdaRequest: Pointer to EXTScan req parameters
18719===========================================================================*/
18720VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18721 tSirEXTScanStartReqParams *wdaRequest)
18722{
18723 WDI_Status status = WDI_STATUS_SUCCESS;
18724 tWDA_ReqParams *pWdaParams;
18725
18726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18727 "%s: ", __func__);
18728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18729 if (NULL == pWdaParams)
18730 {
18731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18732 "%s: VOS MEM Alloc Failure", __func__);
18733 VOS_ASSERT(0);
18734 return VOS_STATUS_E_NOMEM;
18735 }
18736 pWdaParams->pWdaContext = pWDA;
18737 pWdaParams->wdaMsgParam = wdaRequest;
18738 pWdaParams->wdaWdiApiMsgParam = NULL;
18739
18740 status = WDI_EXTScanStartReq((void *)wdaRequest,
18741 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18742 (void *)pWdaParams);
18743 if (IS_WDI_STATUS_FAILURE(status))
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 "Failure to request. Free all the memory " );
18747 vos_mem_free(pWdaParams->wdaMsgParam);
18748 vos_mem_free(pWdaParams);
18749 }
18750 return CONVERT_WDI2VOS_STATUS(status);
18751}
18752
18753/*==========================================================================
18754 FUNCTION WDA_ProcessEXTScanStopReq
18755
18756 DESCRIPTION
18757 API to send EXTScan Start Request to WDI
18758
18759 PARAMETERS
18760 pWDA: Pointer to WDA context
18761 wdaRequest: Pointer to EXTScan req parameters
18762===========================================================================*/
18763VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18764 tSirEXTScanStopReqParams *wdaRequest)
18765{
18766 WDI_Status status = WDI_STATUS_SUCCESS;
18767 tWDA_ReqParams *pWdaParams;
18768
18769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18770 "%s:", __func__);
18771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18772 if (NULL == pWdaParams)
18773 {
18774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18775 "%s: VOS MEM Alloc Failure", __func__);
18776 VOS_ASSERT(0);
18777 return VOS_STATUS_E_NOMEM;
18778 }
18779 pWdaParams->pWdaContext = pWDA;
18780 pWdaParams->wdaMsgParam = wdaRequest;
18781 pWdaParams->wdaWdiApiMsgParam = NULL;
18782
18783 status = WDI_EXTScanStopReq((void *)wdaRequest,
18784 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18785 (void *)pWdaParams);
18786 if (IS_WDI_STATUS_FAILURE(status))
18787 {
18788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18789 "Failure to request. Free all the memory " );
18790 vos_mem_free(pWdaParams->wdaMsgParam);
18791 vos_mem_free(pWdaParams);
18792 }
18793 return CONVERT_WDI2VOS_STATUS(status);
18794}
18795
18796/*==========================================================================
18797 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18798
18799 DESCRIPTION
18800 API to send EXTScan Get Cached Results Request to WDI
18801
18802 PARAMETERS
18803 pWDA: Pointer to WDA context
18804 wdaRequest: Pointer to EXTScan req parameters
18805===========================================================================*/
18806VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18807 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18808{
18809 WDI_Status status = WDI_STATUS_SUCCESS;
18810 tWDA_ReqParams *pWdaParams;
18811
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18813 "%s: ", __func__);
18814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18815 if (NULL == pWdaParams)
18816 {
18817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18818 "%s: VOS MEM Alloc Failure", __func__);
18819 VOS_ASSERT(0);
18820 return VOS_STATUS_E_NOMEM;
18821 }
18822 pWdaParams->pWdaContext = pWDA;
18823 pWdaParams->wdaMsgParam = wdaRequest;
18824 pWdaParams->wdaWdiApiMsgParam = NULL;
18825
18826 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18827 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18828 (void *)pWdaParams);
18829 if (IS_WDI_STATUS_FAILURE(status))
18830 {
18831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18832 "Failure to request. Free all the memory " );
18833 vos_mem_free(pWdaParams->wdaMsgParam);
18834 vos_mem_free(pWdaParams);
18835 }
18836 return CONVERT_WDI2VOS_STATUS(status);
18837}
18838
18839/*==========================================================================
18840 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18841
18842 DESCRIPTION
18843 API to send EXTScan Get Capabilities Request to WDI
18844
18845 PARAMETERS
18846 pWDA: Pointer to WDA context
18847 wdaRequest: Pointer to EXTScan req parameters
18848===========================================================================*/
18849VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18850 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18851{
18852 WDI_Status status = WDI_STATUS_SUCCESS;
18853 tWDA_ReqParams *pWdaParams;
18854
18855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18856 "%s:", __func__);
18857 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18858 if (NULL == pWdaParams)
18859 {
18860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18861 "%s: VOS MEM Alloc Failure", __func__);
18862 VOS_ASSERT(0);
18863 return VOS_STATUS_E_NOMEM;
18864 }
18865 pWdaParams->pWdaContext = pWDA;
18866 pWdaParams->wdaMsgParam = wdaRequest;
18867 pWdaParams->wdaWdiApiMsgParam = NULL;
18868
18869 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18870 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18871 (void *)pWdaParams);
18872 if (IS_WDI_STATUS_FAILURE(status))
18873 {
18874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18875 "Failure to request. Free all the memory " );
18876 vos_mem_free(pWdaParams->wdaMsgParam);
18877 vos_mem_free(pWdaParams);
18878 }
18879 return CONVERT_WDI2VOS_STATUS(status);
18880}
18881
18882/*==========================================================================
18883 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18884
18885 DESCRIPTION
18886 API to send Set BSSID Hotlist Request to WDI
18887
18888 PARAMETERS
18889 pWDA: Pointer to WDA context
18890 wdaRequest: Pointer to EXTScan req parameters
18891===========================================================================*/
18892VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18893 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18894{
18895 WDI_Status status = WDI_STATUS_SUCCESS;
18896 tWDA_ReqParams *pWdaParams;
18897
18898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18899 "%s: ", __func__);
18900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18901 if (NULL == pWdaParams)
18902 {
18903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18904 "%s: VOS MEM Alloc Failure", __func__);
18905 VOS_ASSERT(0);
18906 return VOS_STATUS_E_NOMEM;
18907 }
18908 pWdaParams->pWdaContext = pWDA;
18909 pWdaParams->wdaMsgParam = wdaRequest;
18910 pWdaParams->wdaWdiApiMsgParam = NULL;
18911
18912 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18913 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18914 (void *)pWdaParams);
18915 if (IS_WDI_STATUS_FAILURE(status))
18916 {
18917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18918 "Failure to request. Free all the memory " );
18919 vos_mem_free(pWdaParams->wdaMsgParam);
18920 vos_mem_free(pWdaParams);
18921 }
18922 return CONVERT_WDI2VOS_STATUS(status);
18923}
18924
18925/*==========================================================================
18926 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18927
18928 DESCRIPTION
18929 API to send Reset BSSID Hotlist Request to WDI
18930
18931 PARAMETERS
18932 pWDA: Pointer to WDA context
18933 wdaRequest: Pointer to EXTScan req parameters
18934===========================================================================*/
18935VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18936 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18937{
18938 WDI_Status status = WDI_STATUS_SUCCESS;
18939 tWDA_ReqParams *pWdaParams;
18940
18941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18942 "%s:", __func__);
18943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18944 if (NULL == pWdaParams)
18945 {
18946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18947 "%s: VOS MEM Alloc Failure", __func__);
18948 VOS_ASSERT(0);
18949 return VOS_STATUS_E_NOMEM;
18950 }
18951 pWdaParams->pWdaContext = pWDA;
18952 pWdaParams->wdaMsgParam = wdaRequest;
18953 pWdaParams->wdaWdiApiMsgParam = NULL;
18954
18955 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18956 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18957 (void *)pWdaParams);
18958 if (IS_WDI_STATUS_FAILURE(status))
18959 {
18960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18961 "Failure to request. Free all the memory " );
18962 vos_mem_free(pWdaParams->wdaMsgParam);
18963 vos_mem_free(pWdaParams);
18964 }
18965 return CONVERT_WDI2VOS_STATUS(status);
18966}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018967
18968/*==========================================================================
18969 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
18970
18971 DESCRIPTION
18972 API to send Set SSID Hotlist Request to WDI
18973
18974 PARAMETERS
18975 pWDA: Pointer to WDA context
18976 wdaRequest: Pointer to EXTScan req parameters
18977===========================================================================*/
18978VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
18979 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
18980{
18981 WDI_Status status = WDI_STATUS_SUCCESS;
18982 tWDA_ReqParams *pWdaParams;
18983
18984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18985 "%s: ", __func__);
18986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18987 if (NULL == pWdaParams)
18988 {
18989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18990 "%s: VOS MEM Alloc Failure", __func__);
18991 VOS_ASSERT(0);
18992 return VOS_STATUS_E_NOMEM;
18993 }
18994 pWdaParams->pWdaContext = pWDA;
18995 pWdaParams->wdaMsgParam = wdaRequest;
18996 pWdaParams->wdaWdiApiMsgParam = NULL;
18997
18998 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
18999 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19000 (void *)pWdaParams);
19001 if (IS_WDI_STATUS_FAILURE(status))
19002 {
19003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19004 "Failure to request. Free all the memory " );
19005 vos_mem_free(pWdaParams->wdaMsgParam);
19006 vos_mem_free(pWdaParams);
19007 }
19008 return CONVERT_WDI2VOS_STATUS(status);
19009}
19010
19011/*==========================================================================
19012 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19013
19014 DESCRIPTION
19015 API to send Reset SSID Hotlist Request to WDI
19016
19017 PARAMETERS
19018 pWDA: Pointer to WDA context
19019 wdaRequest: Pointer to EXTScan req parameters
19020===========================================================================*/
19021VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
19022 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
19023{
19024 WDI_Status status = WDI_STATUS_SUCCESS;
19025 tWDA_ReqParams *pWdaParams;
19026
19027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19028 "%s:", __func__);
19029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19030 if (NULL == pWdaParams)
19031 {
19032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19033 "%s: VOS MEM Alloc Failure", __func__);
19034 VOS_ASSERT(0);
19035 return VOS_STATUS_E_NOMEM;
19036 }
19037 pWdaParams->pWdaContext = pWDA;
19038 pWdaParams->wdaMsgParam = wdaRequest;
19039 pWdaParams->wdaWdiApiMsgParam = NULL;
19040
19041 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
19042 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
19043 (void *)pWdaParams);
19044 if (IS_WDI_STATUS_FAILURE(status))
19045 {
19046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19047 "Failure to request. Free all the memory " );
19048 vos_mem_free(pWdaParams->wdaMsgParam);
19049 vos_mem_free(pWdaParams);
19050 }
19051 return CONVERT_WDI2VOS_STATUS(status);
19052}
19053
19054
Dino Mycle41bdc942014-06-10 11:30:24 +053019055#endif /* WLAN_FEATURE_EXTSCAN */
19056
Sunil Duttbd736ed2014-05-26 21:19:41 +053019057#ifdef WLAN_FEATURE_LINK_LAYER_STATS
19058
19059/*==========================================================================
19060 FUNCTION WDA_LLStatsSetRspCallback
19061
19062 DESCRIPTION
19063 API to process set link layer statistics response from FW
19064
19065 PARAMETERS
19066 pRsp: Pointer to set link layer statistics response
19067 pUserData: Pointer to user data
19068
19069 RETURN VALUE
19070 NONE
19071
19072===========================================================================*/
19073void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
19074{
19075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19076
19077
19078 if (NULL == pWdaParams)
19079 {
19080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19081 "%s: pWdaParams received NULL", __func__);
19082 VOS_ASSERT(0) ;
19083 return ;
19084 }
19085
19086 /* Do not need to send notification to upper layer
19087 * Just free allocated resources */
19088 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19089 {
19090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19091 }
19092 if (pWdaParams->wdaMsgParam != NULL)
19093 {
19094 vos_mem_free(pWdaParams->wdaMsgParam);
19095 }
19096 vos_mem_free(pWdaParams) ;
19097
19098 return;
19099}
19100
19101/*==========================================================================
19102 FUNCTION WDA_ProcessLLStatsSetReq
19103
19104 DESCRIPTION
19105 API to send Set Link Layer Stats request to WDI
19106
19107 PARAMETERS
19108 pWDA: Pointer to WDA context
19109 wdaRequest: Pointer to set Link Layer Stats req parameters
19110===========================================================================*/
19111VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
19112 tSirLLStatsSetReq *wdaRequest)
19113{
19114 WDI_Status status = WDI_STATUS_SUCCESS;
19115 tWDA_ReqParams *pWdaParams;
19116
19117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19118 if (NULL == pWdaParams)
19119 {
19120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19121 "%s: VOS MEM Alloc Failure", __func__);
19122 VOS_ASSERT(0);
19123 return VOS_STATUS_E_NOMEM;
19124 }
19125 pWdaParams->pWdaContext = pWDA;
19126 pWdaParams->wdaMsgParam = wdaRequest;
19127 pWdaParams->wdaWdiApiMsgParam = NULL;
19128
19129 status = WDI_LLStatsSetReq((void *)wdaRequest,
19130 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
19131 (void *)pWdaParams);
19132 if (IS_WDI_STATUS_FAILURE(status))
19133 {
19134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19135 "Failure to request. Free all the memory " );
19136 vos_mem_free(pWdaParams->wdaMsgParam);
19137 vos_mem_free(pWdaParams);
19138 }
19139 return CONVERT_WDI2VOS_STATUS(status);
19140}
19141
19142/*==========================================================================
19143 FUNCTION WDA_LLStatsGetRspCallback
19144
19145 DESCRIPTION
19146 API to process get link layer statistics response from FW
19147
19148 PARAMETERS
19149 pRsp: Pointer to get link layer statistics response
19150 pUserData: Pointer to user data
19151
19152 RETURN VALUE
19153 NONE
19154
19155===========================================================================*/
19156void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
19157{
19158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19159
19160 if (NULL == pWdaParams)
19161 {
19162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19163 "%s: pWdaParams received NULL", __func__);
19164 VOS_ASSERT(0) ;
19165 return ;
19166 }
19167
19168 /* Do not need to send notification to upper layer
19169 * Just free allocated resources */
19170 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19171 {
19172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19173 }
19174 if (pWdaParams->wdaMsgParam != NULL)
19175 {
19176 vos_mem_free(pWdaParams->wdaMsgParam);
19177 }
19178 vos_mem_free(pWdaParams) ;
19179
19180 return;
19181}
19182
19183/*==========================================================================
19184 FUNCTION WDA_ProcessLLStatsGetReq
19185
19186 DESCRIPTION
19187 API to send Get Link Layer Stats request to WDI
19188
19189 PARAMETERS
19190 pWDA: Pointer to WDA context
19191 wdaRequest: Pointer to get Link Layer Stats req parameters
19192===========================================================================*/
19193VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
19194 tSirLLStatsGetReq *wdaRequest)
19195{
19196 WDI_Status status = WDI_STATUS_SUCCESS;
19197 tWDA_ReqParams *pWdaParams;
19198
19199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19200 if (NULL == pWdaParams)
19201 {
19202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19203 "%s: VOS MEM Alloc Failure", __func__);
19204 VOS_ASSERT(0);
19205 return VOS_STATUS_E_NOMEM;
19206 }
19207 pWdaParams->pWdaContext = pWDA;
19208 pWdaParams->wdaMsgParam = wdaRequest;
19209 pWdaParams->wdaWdiApiMsgParam = NULL;
19210
19211 status = WDI_LLStatsGetReq((void *) wdaRequest,
19212 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
19213 (void *)pWdaParams);
19214 if (IS_WDI_STATUS_FAILURE(status))
19215 {
19216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19217 "Failure to request. Free all the memory " );
19218 vos_mem_free(pWdaParams->wdaMsgParam);
19219 vos_mem_free(pWdaParams);
19220 }
19221 return CONVERT_WDI2VOS_STATUS(status);
19222}
19223
19224/*==========================================================================
19225 FUNCTION WDA_LLStatsClearRspCallback
19226
19227 DESCRIPTION
19228 API to process clear link layer statistics response from FW
19229
19230 PARAMETERS
19231 pRsp: Pointer to clear link layer statistics response
19232 pUserData: Pointer to user data
19233
19234 RETURN VALUE
19235 NONE
19236
19237===========================================================================*/
19238void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
19239{
19240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19241
19242
19243 if (NULL == pWdaParams)
19244 {
19245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19246 "%s: pWdaParams received NULL", __func__);
19247 VOS_ASSERT(0) ;
19248 return ;
19249 }
19250 /* Do not need to send notification to upper layer
19251 * Just free allocated resources */
19252 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19253 {
19254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19255 }
19256 if (pWdaParams->wdaMsgParam != NULL)
19257 {
19258 vos_mem_free(pWdaParams->wdaMsgParam);
19259 }
19260 vos_mem_free(pWdaParams) ;
19261 return;
19262}
19263
19264/*==========================================================================
19265 FUNCTION WDA_ProcessLLStatsClearReq
19266
19267 DESCRIPTION
19268 API to send Clear Link Layer Stats request to WDI
19269
19270 PARAMETERS
19271 pWDA: Pointer to WDA context
19272 wdaRequest: Pointer to earLink Layer Stats req
19273===========================================================================*/
19274VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
19275 tSirLLStatsClearReq *wdaRequest)
19276{
19277 WDI_Status status = WDI_STATUS_SUCCESS;
19278 tWDA_ReqParams *pWdaParams;
19279
19280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19281 if (NULL == pWdaParams)
19282 {
19283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19284 "%s: VOS MEM Alloc Failure", __func__);
19285 VOS_ASSERT(0);
19286 return VOS_STATUS_E_NOMEM;
19287 }
19288 pWdaParams->pWdaContext = pWDA;
19289 pWdaParams->wdaMsgParam = wdaRequest;
19290 pWdaParams->wdaWdiApiMsgParam = NULL;
19291
19292 status = WDI_LLStatsClearReq((void *) wdaRequest,
19293 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
19294 (void *)pWdaParams);
19295 if (IS_WDI_STATUS_FAILURE(status))
19296 {
19297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19298 "Failure to request. Free all the memory " );
19299 vos_mem_free(pWdaParams->wdaMsgParam);
19300 vos_mem_free(pWdaParams);
19301 }
19302 return CONVERT_WDI2VOS_STATUS(status);
19303}
19304
19305#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053019306
Abhishek Singh85b74712014-10-08 11:38:19 +053019307void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
19308{
19309 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
19310
19311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19312 "<------ %s " ,__func__);
19313 if (NULL == fwStatsinfo)
19314 {
19315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19316 "%s: pWdaParams received NULL", __func__);
19317 VOS_ASSERT(0);
19318 return;
19319 }
19320
19321 if(fwStatsinfo->callback)
19322 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
19323
19324 vos_mem_free(pUserData);
19325 return;
19326}
19327
19328
19329v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
19330 tSirFWStatsGetReq *pData)
19331{
19332
19333 WDI_Status wdiStatus;
19334 tSirFWStatsInfo *fwStatsinfo;
19335
19336 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19337 "------> %s" , __func__);
19338
19339 fwStatsinfo =
19340 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
19341 if (NULL == fwStatsinfo)
19342 {
19343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19344 "%s: VOS MEM Alloc Failure", __func__);
19345 VOS_ASSERT(0);
19346 vos_mem_free(pData);
19347 return;
19348 }
19349
19350 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
19351 fwStatsinfo->data = pData->data;
19352
19353 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
19354 WDA_FWStatsGetRspCallback,
19355 pData->stats);
19356 if (WDI_STATUS_PENDING == wdiStatus)
19357 {
19358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19359 "Pending received for %s:%d ", __func__, __LINE__);
19360 }
19361 else if (WDI_STATUS_SUCCESS != wdiStatus)
19362 {
19363 if (fwStatsinfo->callback)
19364 {
19365 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
19366 }
19367 vos_mem_free(fwStatsinfo);
19368 }
19369 vos_mem_free(pData);
19370}
19371
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053019372/*==========================================================================
19373 FUNCTION WDA_EncryptMsgRspCallback
19374
19375 DESCRIPTION
19376 API to send Encrypt message response to HDD
19377
19378 PARAMETERS
19379 pEventData: Response from FW
19380 pUserData: Data sent to firmware as part of request
19381===========================================================================*/
19382void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
19383 void* pUserData)
19384{
19385 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19386 tWDA_CbContext *pWDA = NULL;
19387 tpAniSirGlobal pMac;
19388 vos_msg_t vosMsg;
19389 tpSirEncryptedDataRspParams pEncRspParams;
19390 tpSetEncryptedDataRspParams pEncryptedDataRsp;
19391
19392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19393 FL("%s:"), __func__);
19394 if (NULL == pWdaParams)
19395 {
19396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19397 FL("%s: pWdaParams received NULL"), __func__);
19398 VOS_ASSERT(0);
19399 return;
19400 }
19401
19402 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19403
19404 if (NULL == pWDA)
19405 {
19406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19407 FL("%s: pWDA received NULL"), __func__);
19408 VOS_ASSERT(0);
19409 goto error;
19410 }
19411
19412 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19413 if (NULL == pMac)
19414 {
19415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19416 FL("%s:pMac is NULL"), __func__);
19417 VOS_ASSERT(0);
19418 goto error;
19419 }
19420
19421 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
19422
19423 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
19424 if (NULL == pEncRspParams)
19425 {
19426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19427 FL("%s: VOS MEM Alloc Failure"), __func__);
19428 VOS_ASSERT(0);
19429 goto error;
19430 }
19431
19432 /* Message Header */
19433 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
19434 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
19435 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
19436 pEncryptedDataRsp->encryptedPayload.length;
19437 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
19438 pEncryptedDataRsp->encryptedPayload.data,
19439 pEncryptedDataRsp->encryptedPayload.length);
19440
19441 /* VOS message wrapper */
19442 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
19443 vosMsg.bodyptr = (void *)pEncRspParams;
19444 vosMsg.bodyval = 0;
19445
19446 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19447 {
19448 /* free the mem */
19449 vos_mem_free((v_VOID_t *) pEncRspParams);
19450 }
19451
19452error:
19453
19454 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19455 {
19456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19457 }
19458 if (pWdaParams->wdaMsgParam != NULL)
19459 {
19460 vos_mem_free(pWdaParams->wdaMsgParam);
19461 }
19462 vos_mem_free(pWdaParams) ;
19463
19464 return;
19465}
19466/*==========================================================================
19467 FUNCTION WDA_ProcessEncryptMsgReq
19468
19469 DESCRIPTION
19470 API to send Encrypt message Request to WDI
19471
19472 PARAMETERS
19473 pWDA: Pointer to WDA context
19474 wdaRequest: Pointer to Encrypt_msg req parameters
19475===========================================================================*/
19476VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
19477 u8 *wdaRequest)
19478{
19479 WDI_Status status = WDI_STATUS_SUCCESS;
19480 tWDA_ReqParams *pWdaParams;
19481
19482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19483 FL("%s: "), __func__);
19484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19485 if (NULL == pWdaParams)
19486 {
19487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19488 FL("%s: VOS MEM Alloc Failure"), __func__);
19489 VOS_ASSERT(0);
19490 return VOS_STATUS_E_NOMEM;
19491 }
19492 pWdaParams->pWdaContext = pWDA;
19493 pWdaParams->wdaMsgParam = wdaRequest;
19494 pWdaParams->wdaWdiApiMsgParam = NULL;
19495
19496 status = WDI_EncryptMsgReq((void *)wdaRequest,
19497 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19498 (void *)pWdaParams);
19499 if (IS_WDI_STATUS_FAILURE(status))
19500 {
19501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19502 FL("Failure to request. Free all the memory " ));
19503 vos_mem_free(pWdaParams->wdaMsgParam);
19504 vos_mem_free(pWdaParams);
19505 }
19506 return CONVERT_WDI2VOS_STATUS(status);
19507}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019508/*==========================================================================
19509 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19510
19511 DESCRIPTION
19512 API to enable/disable RTS/CTS for different modes.
19513
19514 PARAMETERS
19515 pWDA: Pointer to WDA context
19516 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19517===========================================================================*/
19518
19519VOS_STATUS
19520WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19521 tANI_U32 rtsCtsVal)
19522{
19523 WDI_Status status;
19524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19525 FL("---> %s"), __func__);
19526 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19527 if (WDI_STATUS_PENDING == status)
19528 {
19529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19530 FL("pending status received "));
19531 }
19532 else if (WDI_STATUS_SUCCESS_SYNC != status)
19533 {
19534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19535 FL("Failure status %d"), status);
19536 }
19537 return CONVERT_WDI2VOS_STATUS(status) ;
19538}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019539
19540void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053019541{
19542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019543 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053019544
19545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19546 "<------ %s " ,__func__);
19547 if (NULL == pWdaParams)
19548 {
19549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19550 "%s: pWdaParams received NULL", __func__);
19551 VOS_ASSERT(0) ;
19552 return ;
19553 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019554 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
19555 if (pData != NULL) {
19556 pData->callback(pData->magic, pData->cmpVar);
19557 vos_mem_free(pWdaParams->wdaMsgParam);
19558 }
Katya Nigamf0511f62015-05-05 16:40:57 +053019559 vos_mem_free(pWdaParams) ;
19560
19561 return;
19562}
19563
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019564VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053019565{
19566
19567 WDI_Status status = WDI_STATUS_SUCCESS;
19568 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019569 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053019570
19571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19572 FL("%s: "), __func__);
19573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19574 if (NULL == pWdaParams)
19575 {
19576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19577 FL("%s: VOS MEM Alloc Failure"), __func__);
19578 VOS_ASSERT(0);
19579 return VOS_STATUS_E_NOMEM;
19580 }
19581 pWdaParams->pWdaContext = pWDA;
19582 pWdaParams->wdaMsgParam = wdaRequest;
19583 pWdaParams->wdaWdiApiMsgParam = NULL;
19584
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019585 status = WDI_MonStartReq(pMonModeData->data,
19586 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053019587 (void *)pWdaParams);
19588 if (IS_WDI_STATUS_FAILURE(status))
19589 {
19590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19591 "Failure to request. Free all the memory " );
19592 vos_mem_free(pWdaParams->wdaMsgParam);
19593 vos_mem_free(pWdaParams);
19594 }
19595 return CONVERT_WDI2VOS_STATUS(status);
19596}
19597
Katya Nigamf0511f62015-05-05 16:40:57 +053019598VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
19599{
19600
19601 WDI_Status status = WDI_STATUS_SUCCESS;
19602 tWDA_ReqParams *pWdaParams;
19603
19604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19605 FL("%s: "), __func__);
19606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19607 if (NULL == pWdaParams)
19608 {
19609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19610 FL("%s: VOS MEM Alloc Failure"), __func__);
19611 VOS_ASSERT(0);
19612 return VOS_STATUS_E_NOMEM;
19613 }
19614 pWdaParams->pWdaContext = pWDA;
19615 pWdaParams->wdaMsgParam = wdaRequest;
19616 pWdaParams->wdaWdiApiMsgParam = NULL;
19617
Bhargav Shah1ae5de02015-07-20 13:32:31 +053019618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19619 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053019620 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053019621 (void *)pWdaParams);
19622
19623 if (IS_WDI_STATUS_FAILURE(status))
19624 {
19625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19626 "Failure to request. Free all the memory " );
19627 vos_mem_free(pWdaParams->wdaMsgParam);
19628 vos_mem_free(pWdaParams);
19629 }
19630 return CONVERT_WDI2VOS_STATUS(status);
19631}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053019632
19633VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
19634{
19635 WDI_Status status;
19636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19637 FL("---> %s"), __func__);
19638 status = WDI_EnableDisableCAEventInd(val);
19639 if (WDI_STATUS_PENDING == status)
19640 {
19641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19642 FL("pending status received "));
19643 }
19644 else if (WDI_STATUS_SUCCESS_SYNC != status)
19645 {
19646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19647 FL("Failure status %d"), status);
19648 }
19649 return CONVERT_WDI2VOS_STATUS(status) ;
19650}